diff --git a/WebContent/META-INF/MANIFEST.MF b/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/src/main/java/gtpa/brs/openapi/dao/MemberCiReqVO.java b/src/main/java/gtpa/brs/openapi/dao/MemberCiReqVO.java new file mode 100644 index 0000000..ac2f8e7 --- /dev/null +++ b/src/main/java/gtpa/brs/openapi/dao/MemberCiReqVO.java @@ -0,0 +1,85 @@ +/** + * Class Name : MemberCiReqVO.java + * Description : 사전등록결제 회원 전화번호 요청 객체 + * Version : 1.0 + * Since : 2025. 04.07 + * Author : 서울시 녹색교통 사전등록결제 개발팀 + * +
+ 	수정일	수정자	수정내용
+ 
+ */ +package gtpa.brs.openapi.dao; + +/** + * Class Name : MemberCiReqVO Class + * Description : 사전등록결제 회원 전화번호 요청 객체 + * Version : 1.0 + * Since : 2025. 04.07 + * Author : 서울시 녹색교통 사전등록결제 개발팀 + * +
+ 	수정일	수정자	수정내용
+ 
+ */ +public class MemberCiReqVO { + + private String insttNo; //기관 번호 + private String insttCntcJobSe; //기관 업무 구분 + private String mberCi; //회원CI + private String vhcleNo; //차량번호 + + public MemberCiReqVO() { + super(); + // TODO Auto-generated constructor stub + } + + public MemberCiReqVO(String insttNo, String insttCntcJobSe, String mberCi, String vhcleNo) { + super(); + this.insttNo = insttNo; + this.insttCntcJobSe = insttCntcJobSe; + this.mberCi = mberCi; + this.vhcleNo = vhcleNo; + } + + public String getInsttNo() { + return insttNo; + } + + public void setInsttNo(String insttNo) { + this.insttNo = insttNo; + } + + public String getInsttCntcJobSe() { + return insttCntcJobSe; + } + + public void setInsttCntcJobSe(String insttCntcJobSe) { + this.insttCntcJobSe = insttCntcJobSe; + } + + public String getMberCi() { + return mberCi; + } + + public void setMberCi(String mberCi) { + this.mberCi = mberCi; + } + + public String getVhcleNo() { + return vhcleNo; + } + + public void setVhcleNo(String vhcleNo) { + this.vhcleNo = vhcleNo; + } + + @Override + public String toString() { + return "{\"insttNo\":\"" + insttNo + + "\", \"insttCntcJobSe\":\"" + insttCntcJobSe + + "\", \"vhcleNo\":\"" + vhcleNo + + "\", \"mberCi\":\"" + mberCi + "\"}"; + } + +} diff --git a/src/main/java/gtpa/brs/openapi/dao/MemberCiResVO.java b/src/main/java/gtpa/brs/openapi/dao/MemberCiResVO.java new file mode 100644 index 0000000..dd43a8a --- /dev/null +++ b/src/main/java/gtpa/brs/openapi/dao/MemberCiResVO.java @@ -0,0 +1,52 @@ +/** + * Class Name : MemberCiResVO.java + * Description : 사전등록결제 회원 전화번호 응답 객체 + * Version : 1.0 + * Since : 2025. 04.07 + * Author : 서울시 녹색교통 사전등록결제 개발팀 + * +
+ 	수정일	수정자	수정내용
+ 
+ */ +package gtpa.brs.openapi.dao; + +/** + * Class Name : MemberCiResVO Class + * Description : 사전등록결제 회원 전화번호 응답 객체 + * Version : 1.0 + * Since : 2025. 04.07 + * Author : 서울시 녹색교통 사전등록결제 개발팀 + * +
+ 	수정일	수정자	수정내용
+ 
+ */ +public class MemberCiResVO { + private String mobileNo; //회원_전화번호 + + public MemberCiResVO() { + super(); + // TODO Auto-generated constructor stub + } + + public MemberCiResVO(String mobileNo) { + super(); + this.mobileNo = mobileNo; + + } + + public String getMobileNo() { + return mobileNo; + } + + public void setMobileNo(String mobileNo) { + this.mobileNo = mobileNo; + } + + @Override + public String toString() { + return "{\"mobileNo\":\"" + mobileNo+ "\"}"; + } + +} diff --git a/src/main/java/gtpa/brs/openapi/service/GtpaBrsOpenapiService.java b/src/main/java/gtpa/brs/openapi/service/GtpaBrsOpenapiService.java index 61e9322..1cff53a 100644 --- a/src/main/java/gtpa/brs/openapi/service/GtpaBrsOpenapiService.java +++ b/src/main/java/gtpa/brs/openapi/service/GtpaBrsOpenapiService.java @@ -473,5 +473,13 @@ public interface GtpaBrsOpenapiService { * @throws UnsupportedEncodingException */ String instVhcleSttusHist(Map phm) throws SQLException, Exception; + + /** + * 회원 휴대전화번호 조회 + * @param param + * @return + * @throws UnsupportedEncodingException + */ + Map selectMemberMobileInfo(Map param) throws SQLException, Exception; } diff --git a/src/main/java/gtpa/brs/openapi/service/impl/GtpaBrsOpenapiServiceImpl.java b/src/main/java/gtpa/brs/openapi/service/impl/GtpaBrsOpenapiServiceImpl.java index a93483e..0cb2580 100644 --- a/src/main/java/gtpa/brs/openapi/service/impl/GtpaBrsOpenapiServiceImpl.java +++ b/src/main/java/gtpa/brs/openapi/service/impl/GtpaBrsOpenapiServiceImpl.java @@ -1,4 +1,4 @@ -/** + /** * Class Name : GtpaBrsOpenapiServiceImpl.java * Description : 사전등록결제 데이터리소스 서비스(Mybatis) * Version : 1.0 @@ -1121,4 +1121,16 @@ public class GtpaBrsOpenapiServiceImpl extends EgovAbstractServiceImpl implement // 1 is Success, 0 is fail return res; } + + /** + * 회원 휴대전화번호 조회 + * @param param + * @return + * @throws UnsupportedEncodingException + */ + @Override + public Map selectMemberMobileInfo(Map param) throws SQLException, Exception { + LOGGER.debug(param.toString()); + return openapiDAO.selectMemberMobileInfo(param); + } } diff --git a/src/main/java/gtpa/brs/openapi/service/impl/OpenapiMapper.java b/src/main/java/gtpa/brs/openapi/service/impl/OpenapiMapper.java index d9ccb5e..8cda19b 100644 --- a/src/main/java/gtpa/brs/openapi/service/impl/OpenapiMapper.java +++ b/src/main/java/gtpa/brs/openapi/service/impl/OpenapiMapper.java @@ -287,4 +287,7 @@ public interface OpenapiMapper { // 회원 번호 조회 HashMap selectTbBrsMberConfirm(HashMap param) throws SQLException, Exception; + + //회원 휴대전화번호 조회 + Map selectMemberMobileInfo(Map param) throws SQLException, Exception; } diff --git a/src/main/java/gtpa/brs/openapi/web/BrsMemberCiMobileController.java b/src/main/java/gtpa/brs/openapi/web/BrsMemberCiMobileController.java new file mode 100644 index 0000000..6fc3f6c --- /dev/null +++ b/src/main/java/gtpa/brs/openapi/web/BrsMemberCiMobileController.java @@ -0,0 +1,268 @@ +/** + * Class Name : BrsMemberCiMobileController.java + * Description : 사전등록 회원 휴대전화번호 요청 수신 + * Version : 1.0 + * Since : 2025. 04.03 + * Author : 서울시 녹색교통 사전등록결제 개발팀 + * +
+ 	수정일	수정자	수정내용
+ 
+ */ +package gtpa.brs.openapi.web; + +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.ArrayList; + +import egovframework.rte.fdl.property.EgovPropertyService; +//import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +import gtpa.brs.openapi.service.GtpaBrsOpenapiService; +import gtpa.brs.openapi.common.BrsCommonMessage; +import gtpa.brs.openapi.dao.MemberCiReqVO; +import gtpa.brs.openapi.dao.MemberCiResVO; +import gtpa.brs.openapi.dao.MemberOneResVO; +import gtpa.brs.openapi.dao.ResponseJsonArrayVO; +import gtpa.brs.openapi.dao.ResponseJsonVO; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springmodules.validation.commons.DefaultBeanValidator; + +/** + * Class Name : BrsMemberCiMobileController Class + * Description : 사전등록 회원 휴대전화번호 요청 수신 + * Version : 1.0 + * Since : 2019. 04.16 + * Author : 서울시 녹색교통 사전등록결제 개발팀 + * +
+ 	수정일	수정자	수정내용
+ 
+ */ +@RestController +public class BrsMemberCiMobileController { + + private static final Logger LOGGER = LoggerFactory.getLogger(BrsMemberCiMobileController.class); + + /** GtpaBrsOpenapiService */ + @Resource(name = "openapiService") + private GtpaBrsOpenapiService openapiService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** Validator */ + @Resource(name = "beanValidator") + protected DefaultBeanValidator beanValidator; + + private final static int SEQ_START = 0; + private final static int SEQ_END = 99999999; + protected static int iSequence = 0; + protected static Object objSequence = new Object(); + + /** + * ITF_BRS_I 사전등록 회원 휴대전화번호 요청 수신 + */ + //ITF_BRS_I 사전등록 회원 휴대전화번호 요청 수신 + @PostMapping("/member/ciMobile") + public ResponseJsonVO jsonMemberManychild(@ModelAttribute MemberCiReqVO param) { //클라이언트에서 JSON반식으로 데이터 요청 + + //SimpleDateFormat debugFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS "); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + //String appr_dtm = debugFormat.format(new Date()); + + BrsCommonMessage cmmMsg = new BrsCommonMessage(); + MemberCiResVO resData = new MemberCiResVO(); + ResponseJsonVO resJson = new ResponseJsonVO(); + + final String sIFNo = "026"; //인터페이스 번호 eq.연계구분 + LOGGER.info("[IF_BRS_"+sIFNo+"] /member/ciMobile > Param "+param.toString()); + + //TODO 변수 선언 + final String sInsttNo = param.getInsttNo(); //기관 번호 + final String sInsttCntcJobSe = param.getInsttCntcJobSe(); //기관 업무 구분 + String sLogMno = sIFNo+"_"+dateFormat.format(new Date()).substring(0, 8); //세션 로그 관리번호 + iSequence = 0; //초기값 + + //String resInsert = ""; + String resUpdate = ""; + String sqlException = ""; + + try + { + //TODO 로그 기록 IN + sLogMno = sLogMno+String.format("%08d", Integer.parseInt(openapiService.seqBrsBrsLog())); //세션 로그 관리번호 + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"RequestJson : /member/ciMobile?"+param.toString()); + + //TODO 기본 파라미터 검증 + if(param.getInsttNo() == null || "".equals(param.getInsttNo()) || "null".equals(param.getInsttNo()) || param.getInsttNo().length() > 12 || + param.getInsttCntcJobSe() == null || "".equals(param.getInsttCntcJobSe()) || "null".equals(param.getInsttCntcJobSe()) || param.getInsttCntcJobSe().length() > 3 || + param.getMberCi() == null || "".equals(param.getMberCi()) || "null".equals(param.getMberCi()) || param.getMberCi().length() > 90 || + param.getVhcleNo() == null || "".equals(param.getVhcleNo()) || "null".equals(param.getVhcleNo()) || param.getVhcleNo().length() > 9 ){ + + //응답 오류메세지 전달 + resJson.setResult("FAIL"); + resJson.setResultCode("EC0001"); + resJson.setResultMessage(cmmMsg.resultMessage(resJson.getResultCode())); + resJson.setData(null); + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"ResponseJson:"+resJson.toErrString()); + LOGGER.info("[IF_BRS_"+sIFNo+"] "+resJson.getResult()+" > "+resJson.getResultCode()+"/"+resJson.getResultMessage()); + return resJson; + } + + //TODO 등록요청에 필요한 DB Select + //TODO DB Select 기관검증 + HashMap mInsttInfo = new HashMap(); + mInsttInfo.put("instt_no",sInsttNo); //기관번호 + mInsttInfo = openapiService.selectTbBrsInsttInfo(mInsttInfo); + if(mInsttInfo == null || mInsttInfo.get("INSTT_NO").equals(sInsttNo) != true) + { + ///응답 오류메세지 전달 + resJson.setResult("FAIL"); + resJson.setResultCode("ES0001"); + resJson.setResultMessage(cmmMsg.resultMessage(resJson.getResultCode())); + resJson.setData(null); + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"ResponseJson:"+resJson.toErrString()); + LOGGER.info("[IF_BRS_"+sIFNo+"] "+resJson.getResult()+" > "+resJson.getResultCode()+"/"+resJson.getResultMessage()); + return resJson; + } + LOGGER.debug("[IF_BRS_"+sIFNo+"] openapiService.selectTbBrsInsttInfo : "+mInsttInfo.get("INSTT_NO")+"/"+ + mInsttInfo.get("INSTT_NM")+"/"+ + mInsttInfo.get("INSTT_CHRGE_SE")+"/"+ + mInsttInfo.get("INSTT_CHRGE_DETAIL")+"/"+ + mInsttInfo.get("HMPG")+"/"+ + mInsttInfo.get("MNGR_NM")+"/"+ + mInsttInfo.get("MNGR_CTTPC")+"/"+ + mInsttInfo.get("REGIST_DT")+"/"+ + mInsttInfo.get("REGISTER_ID")+"/"+ + mInsttInfo.get("UPDT_DT")+"/"+ + mInsttInfo.get("UPDUSR_ID") ); + + //TODO DB Select 기관운영검증 + HashMap mInsttOper = new HashMap(); + mInsttOper.put("instt_no",sInsttNo); //기관번호 + mInsttOper.put("instt_cntc_job_se",sInsttCntcJobSe); //기관 연계 업무구분 + mInsttOper.put("use_at","Y"); + mInsttOper = openapiService.selectTbBrsInsttOperInfo(mInsttOper); + if(mInsttOper == null || sIFNo.equals(sInsttCntcJobSe) != true) + { + ///응답 오류메세지 전달 + resJson.setResult("FAIL"); + resJson.setResultCode("ES0002"); + resJson.setResultMessage(cmmMsg.resultMessage(resJson.getResultCode())); + resJson.setData(null); + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"ResponseJson:"+resJson.toErrString()); + LOGGER.info("[IF_BRS_"+sIFNo+"] "+resJson.getResult()+" > "+resJson.getResultCode()+"/"+resJson.getResultMessage()); + return resJson; + } + LOGGER.debug("[IF_BRS_"+sIFNo+"] openapiService.selectTbBrsInsttOperInfo : "+mInsttOper.get("INSTT_NO")+"/"+ + mInsttOper.get("INSTT_CNTC_JOB_SE")+"/"+ + mInsttOper.get("USE_AT")+"/"+ + mInsttOper.get("REQUST_URL")+"/"+ + mInsttOper.get("RSPNS_URL") ); + + //TODO 회원 전화번호 가져오기 + HashMap mMberCi = new HashMap(); + mMberCi.put("mber_ci",param.getMberCi()); //회원 필터 조건 + mMberCi.put("vhcle_no",param.getVhcleNo()); //회원 필터 조건 + + Map mMberMobileInfo = openapiService.selectMemberMobileInfo(mMberCi); + if(mMberMobileInfo == null) + { + ///응답 오류메세지 전달 + resJson.setResult("FAIL"); + resJson.setResultCode("ES9999"); + resJson.setResultMessage("휴대전화번호가 없는 회원입니다."); + resJson.setData(null); + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"ResponseJson:"+resJson.toErrString()); + LOGGER.info("[IF_BRS_"+sIFNo+"] "+resJson.getResult()+" > "+resJson.getResultCode()+"/"+resJson.getResultMessage()); + return resJson; + } + + resData.setMobileNo((String) mMberMobileInfo.get("MOBILE_NO")); + + resJson.setResult("SUCCESS"); + resJson.setResultCode("E0000"); + resJson.setResultMessage("정상"); + resJson.setData((Object)resData); + + //TODO 로그 기록 OUT + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"ResponseJson:"+resJson.toString()); + + } catch(RuntimeException e) { + resJson.setResult("EXCEPTION"); + resJson.setResultCode("EE9000"); + resJson.setResultMessage(cmmMsg.resultMessage(resJson.getResultCode())); + resJson.setData(null); + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"RuntimeException:"+resJson.getResultCode()+"/"+resJson.getResultMessage()+"/"+e.getClass().getName()); + + LOGGER.error("[IF_BRS_"+sIFNo+"] "+resJson.getResult()+" > "+resJson.getResultCode()+"/"+resJson.getResultMessage()+"/"+e.getClass().getName()); + LOGGER.error("[IF_BRS_"+sIFNo+"] /member/ciMobile RuntimeException : " + e); + return resJson; + + } catch(Exception e) { + resJson.setResult("EXCEPTION"); + resJson.setResultCode("EE9000"); + resJson.setResultMessage(cmmMsg.resultMessage(resJson.getResultCode())); + resJson.setData(null); + serviceBrsLogInsert(sLogMno,sInsttCntcJobSe,sInsttNo,"Exception:"+resJson.getResultCode()+"/"+resJson.getResultMessage()+"/"+e.getClass().getName()); + + LOGGER.error("[IF_BRS_"+sIFNo+"] "+resJson.getResult()+" > "+resJson.getResultCode()+"/"+resJson.getResultMessage()+"/"+e.getClass().getName()); + LOGGER.error("[IF_BRS_"+sIFNo+"] /member/ciMobile Exception : " + e); + return resJson; + } + + LOGGER.info("[IF_BRS_"+sIFNo+"] /member/ciMobile > Response "+resJson); + return resJson; + } + + /** + * 로그정보를 저장한다. + */ + public String serviceBrsLogInsert(String sLogMno, String sInsttCntcJobSe, String sInsttNo, String requstMsssage) + { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + HashMap mLog = new HashMap(); //리턴 응답값 + mLog.put("brs_log_mno", sLogMno); //발행번호 채번 + mLog.put("seq_no",getSeqNumber()); + mLog.put("instt_cntc_job_se", sInsttCntcJobSe); + mLog.put("instt_no", sInsttNo); + mLog.put("request_dt", dateFormat.format(new Date())); + mLog.put("requst_msssage",requstMsssage); + //DB insert + String res = openapiService.insertTbBrsLog(mLog); + mLog.clear(); + if("1".equals(res) != true) + { + LOGGER.debug("[IF_BRS_"+sInsttCntcJobSe+"] openapiService.insertTbBrsLog("+res+") >"+sLogMno+"/"+sInsttNo+"/"+sInsttCntcJobSe+"/"+requstMsssage); + } + return res; + } + + /** + * 로그 시퀀스번호를 생성한다. (로그번호+1) + */ + public static String getSeqNumber() { + + synchronized (objSequence) { + if (iSequence == SEQ_END) + iSequence = SEQ_START; + + iSequence++; + return Integer.toString(iSequence); + } + } + +} diff --git a/src/main/resources/egovframework/sqlmap/gtpabrs/mappers/Gtpa_Brs_Openapi_SQL.xml b/src/main/resources/egovframework/sqlmap/gtpabrs/mappers/Gtpa_Brs_Openapi_SQL.xml index f4f5750..86de0e8 100644 --- a/src/main/resources/egovframework/sqlmap/gtpabrs/mappers/Gtpa_Brs_Openapi_SQL.xml +++ b/src/main/resources/egovframework/sqlmap/gtpabrs/mappers/Gtpa_Brs_Openapi_SQL.xml @@ -1603,8 +1603,8 @@ , TRIM(DGUARD.DECRYPT('ENC','COL',B.MBER_MOBLPHON_NO)) AS MBER_MOBLPHON_NO , TRIM(NVL(C.SU_PBLMNG_PRKPLCE,'Y')) AS SU_PBLMNG_PRKPLCE - , TRIM(NVL(C.NAMSAN_PASMNY,'Y')) AS NAMSAN_PASMNY - , TRIM(NVL(C.NAMSAN_FFNLG,'Y')) AS NAMSAN_FFNLG + , TRIM(NVL(C.NAMSAN_PASMNY,'N')) AS NAMSAN_PASMNY + , TRIM(NVL(C.NAMSAN_FFNLG,'N')) AS NAMSAN_FFNLG , TRIM(NVL(C.GREEN_TRNSPORT_FFNLG,'Y')) AS GREEN_TRNSPORT_FFNLG , TRIM(NVL(C.JMP_SETLE_AGRE_TY,'N')) AS JMP_SETLE_AGRE_TY @@ -2423,4 +2423,15 @@ AND VHCLE_OWNER_CI = TRIM(#{vhcle_owner_ci}) AND VHCLE_STTUS_TY = '02' + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index ef17c29..491a7f5 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -1,7 +1,12 @@ - - + gtpa.brs.openapi + encodingFilter org.springframework.web.filter.CharacterEncodingFilter diff --git a/target/.gitignore b/target/.gitignore new file mode 100644 index 0000000..840e7d3 --- /dev/null +++ b/target/.gitignore @@ -0,0 +1 @@ +/classes/ diff --git a/target/m2e-wtp/web-resources/.gitignore b/target/m2e-wtp/web-resources/.gitignore new file mode 100644 index 0000000..3385916 --- /dev/null +++ b/target/m2e-wtp/web-resources/.gitignore @@ -0,0 +1 @@ +/META-INF/