From 0722887eb28efeb18a2c929ded45686d9e9c9e19 Mon Sep 17 00:00:00 2001 From: leebj Date: Mon, 20 Jan 2025 17:28:22 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B5=9C=EC=B4=88=EC=BB=A4=EB=B0=8B(=EC=9D=BC?= =?UTF-8?q?=EB=B6=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../cmm/AltibaseClobStringTypeHandler.java | 111 + .../com/cmm/ComDefaultCodeVO.java | 189 ++ .../egovframework/com/cmm/ComDefaultVO.java | 167 + .../com/cmm/EgovComCrossSiteHndlr.java | 408 +++ .../com/cmm/EgovComExcepHndlr.java | 34 + .../com/cmm/EgovComOthersExcepHndlr.java | 16 + .../com/cmm/EgovComTraceHandler.java | 34 + .../com/cmm/EgovComponentChecker.java | 63 + .../com/cmm/EgovMessageSource.java | 55 + .../com/cmm/ImagePaginationRenderer.java | 48 + .../com/cmm/IncludedCompInfoVO.java | 50 + .../java/egovframework/com/cmm/LoginVO.java | 270 ++ .../java/egovframework/com/cmm/SessionVO.java | 120 + .../com/cmm/annotation/IncludedInfo.java | 33 + .../com/cmm/filter/HTMLTagFilter.java | 46 + .../filter/HTMLTagFilterRequestWrapper.java | 109 + .../cmm/interceptor/AuthenticInterceptor.java | 57 + .../com/cmm/service/CmmnDetailCode.java | 194 ++ .../com/cmm/service/EgovCmmUseService.java | 64 + .../com/cmm/service/EgovFileMngService.java | 115 + .../com/cmm/service/EgovProperties.java | 244 ++ .../cmm/service/EgovUserDetailsService.java | 26 + .../egovframework/com/cmm/service/FileVO.java | 243 ++ .../com/cmm/service/Globals.java | 30 + .../com/cmm/service/impl/CmmUseDAO.java | 63 + .../service/impl/EgovCmmUseServiceImpl.java | 95 + .../cmm/service/impl/EgovComAbstractDAO.java | 34 + .../service/impl/EgovFileMngServiceImpl.java | 167 + .../impl/EgovTestUserDetailsServiceImpl.java | 87 + .../EgovUserDetailsSessionServiceImpl.java | 67 + .../com/cmm/service/impl/FileManageDAO.java | 182 + .../com/cmm/util/EgovUserDetailsHelper.java | 72 + .../com/cmm/web/EgovBindingInitializer.java | 22 + .../com/cmm/web/EgovComUtlController.java | 80 + .../cmm/web/EgovFileDownloadController.java | 202 ++ .../com/cmm/web/EgovFileMngController.java | 157 + .../cmm/web/EgovImageProcessController.java | 145 + .../com/cmm/web/EgovMultipartResolver.java | 134 + .../brs/bbsfro/service/BbsFroService.java | 65 + .../brs/bbsfro/service/impl/BbsFroMapper.java | 154 + .../service/impl/BbsFroServiceImpl.java | 212 ++ .../gtpa/brs/bbsfro/web/BbsFroController.java | 331 ++ .../brs/common/service/CommonService.java | 28 + .../brs/common/service/impl/CommonMapper.java | 44 + .../service/impl/CommonServiceImpl.java | 53 + .../gtpa/brs/common/web/BaseController.java | 30 + .../gtpa/brs/common/web/CommonController.java | 333 ++ .../java/gtpa/brs/fee/service/FeeService.java | 204 ++ .../gtpa/brs/fee/service/impl/FeeMapper.java | 131 + .../brs/fee/service/impl/FeeServiceImpl.java | 2956 +++++++++++++++++ .../java/gtpa/brs/fee/web/FeeController.java | 1309 ++++++++ .../gtpa/brs/handler/ClobTypeHandler.java | 45 + .../gtpa/brs/handler/StringTypeHandler.java | 58 + .../gtpa/brs/home/web/InitController.java | 221 ++ .../interceptor/AccessStaticInterceptor.java | 141 + .../brs/interceptor/AuthenticInterceptor.java | 81 + .../gtpa/brs/interceptor/MessageAdvice.java | 267 ++ .../interceptor/SessionCheckInterceptor.java | 123 + .../gtpa/brs/join/service/CACheckService.java | 943 ++++++ .../gtpa/brs/join/service/JoinService.java | 107 + .../brs/join/service/impl/JoinMapper.java | 78 + .../join/service/impl/JoinServiceImpl.java | 681 ++++ .../brs/join/service/impl/NewGpkiUtil.java | 390 +++ .../service/impl/PublicFacilityReqXml.java | 151 + .../join/service/impl/PublicFacilitySend.java | 149 + .../gtpa/brs/join/service/impl/ShareGpki.java | 81 + .../gtpa/brs/join/web/CACheckController.java | 453 +++ .../gtpa/brs/join/web/JoinController.java | 1184 +++++++ .../gtpa/brs/login/service/LoginService.java | 98 + .../brs/login/service/impl/LoginMapper.java | 106 + .../login/service/impl/LoginServiceImpl.java | 277 ++ .../gtpa/brs/login/web/LoginController.java | 1180 +++++++ .../brs/mypage/service/MypageService.java | 131 + .../brs/mypage/service/impl/MypageMapper.java | 212 ++ .../service/impl/MypageServiceImpl.java | 2575 ++++++++++++++ .../gtpa/brs/mypage/web/MypageController.java | 1884 +++++++++++ .../service/PreRegistPaymentService.java | 1084 ++++++ .../service/impl/PreRegistPaymentMapper.java | 85 + .../brs/penalty/service/PenaltyService.java | 49 + .../penalty/service/impl/PenaltyMapper.java | 20 + .../service/impl/PenaltyServiceImpl.java | 2030 +++++++++++ .../brs/penalty/web/PenaltyController.java | 1016 ++++++ .../brs/scheduler/HelthCheckScheduler.java | 60 + .../scheduler/service/HealthCheckService.java | 7 + .../service/impl/HealthCheckMapper.java | 15 + .../service/impl/HealthCheckServiceImpl.java | 21 + src/main/java/gtpa/brs/security/CACHECK.java | 700 ++++ .../java/gtpa/brs/security/KISA_SEED.java | 329 ++ .../java/gtpa/brs/security/KISA_SEED_CBC.java | 970 ++++++ .../java/gtpa/brs/security/KISA_SEED_CCM.java | 343 ++ .../java/gtpa/brs/security/KISA_SEED_CTR.java | 762 +++++ .../java/gtpa/brs/security/KISA_SEED_ECB.java | 903 +++++ .../java/gtpa/brs/security/KISA_SEED_GCM.java | 460 +++ .../gtpa/brs/security/~VNOINTEROP.java_bak | 740 +++++ .../java/gtpa/brs/user/dto/TempBankInfo.java | 73 + .../java/gtpa/brs/user/dto/TempCarInfo.java | 123 + .../gtpa/brs/user/dto/TempCreditInfo.java | 73 + .../java/gtpa/brs/user/dto/TempPayInfo.java | 73 + .../brs/user/dto/TempUserSessionInfoDTO.java | 515 +++ src/main/java/gtpa/brs/user/dto/UserInfo.java | 302 ++ .../gtpa/brs/user/service/UserService.java | 142 + .../brs/user/service/impl/UserMapper.java | 43 + .../user/service/impl/UserServiceImpl.java | 1596 +++++++++ .../gtpa/brs/user/web/UserController.java | 598 ++++ src/main/java/gtpa/brs/util/BrsIdGnrUtil.java | 69 + src/main/java/gtpa/brs/util/CommonUtil.java | 59 + .../brs/util/EgovMultiLoginPreventor.java | 35 + .../gtpa/brs/util/FileUploadDefinerImpl.java | 71 + src/main/java/gtpa/brs/util/Http.java | 205 ++ .../java/gtpa/brs/util/HttpSessionRenew.java | 64 + src/main/java/gtpa/brs/util/MessageType.java | 6 + src/main/java/gtpa/brs/util/MessageUtils.java | 33 + src/main/java/gtpa/brs/util/PageURIUtil.java | 60 + src/main/java/gtpa/brs/util/Result.java | 190 ++ src/main/java/gtpa/brs/util/SHA256Util.java | 31 + .../brs/vehicle/service/VehicleService.java | 218 ++ .../vehicle/service/impl/VehicleMapper.java | 46 + 118 files changed, 35919 insertions(+), 3 deletions(-) create mode 100644 src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java create mode 100644 src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java create mode 100644 src/main/java/egovframework/com/cmm/ComDefaultVO.java create mode 100644 src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java create mode 100644 src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java create mode 100644 src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java create mode 100644 src/main/java/egovframework/com/cmm/EgovComTraceHandler.java create mode 100644 src/main/java/egovframework/com/cmm/EgovComponentChecker.java create mode 100644 src/main/java/egovframework/com/cmm/EgovMessageSource.java create mode 100644 src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java create mode 100644 src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java create mode 100644 src/main/java/egovframework/com/cmm/LoginVO.java create mode 100644 src/main/java/egovframework/com/cmm/SessionVO.java create mode 100644 src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java create mode 100644 src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java create mode 100644 src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java create mode 100644 src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java create mode 100644 src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java create mode 100644 src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java create mode 100644 src/main/java/egovframework/com/cmm/service/EgovFileMngService.java create mode 100644 src/main/java/egovframework/com/cmm/service/EgovProperties.java create mode 100644 src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java create mode 100644 src/main/java/egovframework/com/cmm/service/FileVO.java create mode 100644 src/main/java/egovframework/com/cmm/service/Globals.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java create mode 100644 src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java create mode 100644 src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java create mode 100644 src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java create mode 100644 src/main/java/egovframework/com/cmm/web/EgovComUtlController.java create mode 100644 src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java create mode 100644 src/main/java/egovframework/com/cmm/web/EgovFileMngController.java create mode 100644 src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java create mode 100644 src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java create mode 100644 src/main/java/gtpa/brs/bbsfro/service/BbsFroService.java create mode 100644 src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroMapper.java create mode 100644 src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroServiceImpl.java create mode 100644 src/main/java/gtpa/brs/bbsfro/web/BbsFroController.java create mode 100644 src/main/java/gtpa/brs/common/service/CommonService.java create mode 100644 src/main/java/gtpa/brs/common/service/impl/CommonMapper.java create mode 100644 src/main/java/gtpa/brs/common/service/impl/CommonServiceImpl.java create mode 100644 src/main/java/gtpa/brs/common/web/BaseController.java create mode 100644 src/main/java/gtpa/brs/common/web/CommonController.java create mode 100644 src/main/java/gtpa/brs/fee/service/FeeService.java create mode 100644 src/main/java/gtpa/brs/fee/service/impl/FeeMapper.java create mode 100644 src/main/java/gtpa/brs/fee/service/impl/FeeServiceImpl.java create mode 100644 src/main/java/gtpa/brs/fee/web/FeeController.java create mode 100644 src/main/java/gtpa/brs/handler/ClobTypeHandler.java create mode 100644 src/main/java/gtpa/brs/handler/StringTypeHandler.java create mode 100644 src/main/java/gtpa/brs/home/web/InitController.java create mode 100644 src/main/java/gtpa/brs/interceptor/AccessStaticInterceptor.java create mode 100644 src/main/java/gtpa/brs/interceptor/AuthenticInterceptor.java create mode 100644 src/main/java/gtpa/brs/interceptor/MessageAdvice.java create mode 100644 src/main/java/gtpa/brs/interceptor/SessionCheckInterceptor.java create mode 100644 src/main/java/gtpa/brs/join/service/CACheckService.java create mode 100644 src/main/java/gtpa/brs/join/service/JoinService.java create mode 100644 src/main/java/gtpa/brs/join/service/impl/JoinMapper.java create mode 100644 src/main/java/gtpa/brs/join/service/impl/JoinServiceImpl.java create mode 100644 src/main/java/gtpa/brs/join/service/impl/NewGpkiUtil.java create mode 100644 src/main/java/gtpa/brs/join/service/impl/PublicFacilityReqXml.java create mode 100644 src/main/java/gtpa/brs/join/service/impl/PublicFacilitySend.java create mode 100644 src/main/java/gtpa/brs/join/service/impl/ShareGpki.java create mode 100644 src/main/java/gtpa/brs/join/web/CACheckController.java create mode 100644 src/main/java/gtpa/brs/join/web/JoinController.java create mode 100644 src/main/java/gtpa/brs/login/service/LoginService.java create mode 100644 src/main/java/gtpa/brs/login/service/impl/LoginMapper.java create mode 100644 src/main/java/gtpa/brs/login/service/impl/LoginServiceImpl.java create mode 100644 src/main/java/gtpa/brs/login/web/LoginController.java create mode 100644 src/main/java/gtpa/brs/mypage/service/MypageService.java create mode 100644 src/main/java/gtpa/brs/mypage/service/impl/MypageMapper.java create mode 100644 src/main/java/gtpa/brs/mypage/service/impl/MypageServiceImpl.java create mode 100644 src/main/java/gtpa/brs/mypage/web/MypageController.java create mode 100644 src/main/java/gtpa/brs/payment/service/PreRegistPaymentService.java create mode 100644 src/main/java/gtpa/brs/payment/service/impl/PreRegistPaymentMapper.java create mode 100644 src/main/java/gtpa/brs/penalty/service/PenaltyService.java create mode 100644 src/main/java/gtpa/brs/penalty/service/impl/PenaltyMapper.java create mode 100644 src/main/java/gtpa/brs/penalty/service/impl/PenaltyServiceImpl.java create mode 100644 src/main/java/gtpa/brs/penalty/web/PenaltyController.java create mode 100644 src/main/java/gtpa/brs/scheduler/HelthCheckScheduler.java create mode 100644 src/main/java/gtpa/brs/scheduler/service/HealthCheckService.java create mode 100644 src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckMapper.java create mode 100644 src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckServiceImpl.java create mode 100644 src/main/java/gtpa/brs/security/CACHECK.java create mode 100644 src/main/java/gtpa/brs/security/KISA_SEED.java create mode 100644 src/main/java/gtpa/brs/security/KISA_SEED_CBC.java create mode 100644 src/main/java/gtpa/brs/security/KISA_SEED_CCM.java create mode 100644 src/main/java/gtpa/brs/security/KISA_SEED_CTR.java create mode 100644 src/main/java/gtpa/brs/security/KISA_SEED_ECB.java create mode 100644 src/main/java/gtpa/brs/security/KISA_SEED_GCM.java create mode 100644 src/main/java/gtpa/brs/security/~VNOINTEROP.java_bak create mode 100644 src/main/java/gtpa/brs/user/dto/TempBankInfo.java create mode 100644 src/main/java/gtpa/brs/user/dto/TempCarInfo.java create mode 100644 src/main/java/gtpa/brs/user/dto/TempCreditInfo.java create mode 100644 src/main/java/gtpa/brs/user/dto/TempPayInfo.java create mode 100644 src/main/java/gtpa/brs/user/dto/TempUserSessionInfoDTO.java create mode 100644 src/main/java/gtpa/brs/user/dto/UserInfo.java create mode 100644 src/main/java/gtpa/brs/user/service/UserService.java create mode 100644 src/main/java/gtpa/brs/user/service/impl/UserMapper.java create mode 100644 src/main/java/gtpa/brs/user/service/impl/UserServiceImpl.java create mode 100644 src/main/java/gtpa/brs/user/web/UserController.java create mode 100644 src/main/java/gtpa/brs/util/BrsIdGnrUtil.java create mode 100644 src/main/java/gtpa/brs/util/CommonUtil.java create mode 100644 src/main/java/gtpa/brs/util/EgovMultiLoginPreventor.java create mode 100644 src/main/java/gtpa/brs/util/FileUploadDefinerImpl.java create mode 100644 src/main/java/gtpa/brs/util/Http.java create mode 100644 src/main/java/gtpa/brs/util/HttpSessionRenew.java create mode 100644 src/main/java/gtpa/brs/util/MessageType.java create mode 100644 src/main/java/gtpa/brs/util/MessageUtils.java create mode 100644 src/main/java/gtpa/brs/util/PageURIUtil.java create mode 100644 src/main/java/gtpa/brs/util/Result.java create mode 100644 src/main/java/gtpa/brs/util/SHA256Util.java create mode 100644 src/main/java/gtpa/brs/vehicle/service/VehicleService.java create mode 100644 src/main/java/gtpa/brs/vehicle/service/impl/VehicleMapper.java diff --git a/README.md b/README.md index 990b9cc..fde9f78 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ -# greencar-brspw - -녹색교통 바로녹색결제 PC웹 \ No newline at end of file +서울시 바로녹색결제 PC웹 \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java b/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java new file mode 100644 index 0000000..d995626 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/AltibaseClobStringTypeHandler.java @@ -0,0 +1,111 @@ +package egovframework.com.cmm; +/* + * Copyright 2002-2005 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.Reader; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jdbc.support.lob.LobCreator; +import org.springframework.jdbc.support.lob.LobHandler; +import egovframework.rte.psl.orm.ibatis.support.AbstractLobTypeHandler; + +/** + * iBATIS TypeHandler implementation for Strings that get mapped to CLOBs. + * Retrieves the LobHandler to use from SqlMapClientFactoryBean at config time. + * + *

Particularly useful for storing Strings with more than 4000 characters in an + * Oracle database (only possible via CLOBs), in combination with OracleLobHandler. + * + *

Can also be defined in generic iBATIS mappings, as DefaultLobCreator will + * work with most JDBC-compliant database drivers. In this case, the field type + * does not have to be BLOB: For databases like MySQL and MS SQL Server, any + * large enough binary type will work. + * + * @author Juergen Hoeller + * @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#setLobHandler + * @since 1.1.5 + */ +@SuppressWarnings("deprecation") +public class AltibaseClobStringTypeHandler extends AbstractLobTypeHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(AltibaseClobStringTypeHandler.class); + + /** + * Constructor used by iBATIS: fetches config-time LobHandler from + * SqlMapClientFactoryBean. + * + * @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#getConfigTimeLobHandler + */ + public AltibaseClobStringTypeHandler() { + super(); + } + + /** + * Constructor used for testing: takes an explicit LobHandler. + */ + protected AltibaseClobStringTypeHandler(LobHandler lobHandler) { + super(lobHandler); + } + + protected void setParameterInternal( + PreparedStatement ps, int index, Object value, String jdbcType, LobCreator lobCreator) + throws SQLException { + lobCreator.setClobAsString(ps, index, (String) value); + } + + + protected Object getResultInternal(ResultSet rs, int index, LobHandler lobHandler) + throws SQLException { + + StringBuffer read_data = new StringBuffer(""); + int read_length; + + char[] buf = new char[1024]; + + Reader rd = lobHandler.getClobAsCharacterStream(rs, index); + try { + while ((read_length = rd.read(buf)) != -1) { + read_data.append(buf, 0, read_length); + } + } catch (IOException ie) { + LOGGER.debug("ie: {}", ie);//SQLException sqle = new SQLException(ie.getMessage()); + //throw sqle; + // 2011.10.10 보안점검 후속조치 + } finally { + if (rd != null) { + try { + rd.close(); + } catch (IOException ignore) { + LOGGER.debug("IGNORE: {}", ignore); + } + } + } + + return read_data.toString(); + + //return lobHandler.getClobAsString(rs, index); + } + + public Object valueOf(String s) { + return s; + } + +} diff --git a/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java b/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java new file mode 100644 index 0000000..4c38c76 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/ComDefaultCodeVO.java @@ -0,0 +1,189 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *

+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------       --------    ---------------------------
+ *   2009.3.11   이삼섭          최초 생성
+ *
+ * 
+ */ +public class ComDefaultCodeVO implements Serializable { + /** + * serialVersion UID + */ + private static final long serialVersionUID = -2020648489890016404L; + + /** 코드 ID */ + private String codeId = ""; + + /** 상세코드 */ + private String code = ""; + + /** 코드명 */ + private String codeNm = ""; + + /** 코드설명 */ + private String codeDc = ""; + + /** 특정테이블명 */ + private String tableNm = ""; //특정테이블에서 코드정보를추출시 사용 + + /** 상세 조건 여부 */ + private String haveDetailCondition = "N"; + + /** 상세 조건 */ + private String detailCondition = ""; + + /** + * codeId attribute를 리턴한다. + * + * @return the codeId + */ + public String getCodeId() { + return codeId; + } + + /** + * codeId attribute 값을 설정한다. + * + * @param codeId + * the codeId to set + */ + public void setCodeId(String codeId) { + this.codeId = codeId; + } + + /** + * code attribute를 리턴한다. + * + * @return the code + */ + public String getCode() { + return code; + } + + /** + * code attribute 값을 설정한다. + * + * @param code + * the code to set + */ + public void setCode(String code) { + this.code = code; + } + + /** + * codeNm attribute를 리턴한다. + * + * @return the codeNm + */ + public String getCodeNm() { + return codeNm; + } + + /** + * codeNm attribute 값을 설정한다. + * + * @param codeNm + * the codeNm to set + */ + public void setCodeNm(String codeNm) { + this.codeNm = codeNm; + } + + /** + * codeDc attribute를 리턴한다. + * + * @return the codeDc + */ + public String getCodeDc() { + return codeDc; + } + + /** + * codeDc attribute 값을 설정한다. + * + * @param codeDc + * the codeDc to set + */ + public void setCodeDc(String codeDc) { + this.codeDc = codeDc; + } + + /** + * tableNm attribute를 리턴한다. + * + * @return the tableNm + */ + public String getTableNm() { + return tableNm; + } + + /** + * tableNm attribute 값을 설정한다. + * + * @param tableNm + * the tableNm to set + */ + public void setTableNm(String tableNm) { + this.tableNm = tableNm; + } + + /** + * haveDetailCondition attribute를 리턴한다. + * + * @return the haveDetailCondition + */ + public String getHaveDetailCondition() { + return haveDetailCondition; + } + + /** + * haveDetailCondition attribute 값을 설정한다. + * + * @param haveDetailCondition + * the haveDetailCondition to set + */ + public void setHaveDetailCondition(String haveDetailCondition) { + this.haveDetailCondition = haveDetailCondition; + } + + /** + * detailCondition attribute를 리턴한다. + * + * @return the detailCondition + */ + public String getDetailCondition() { + return detailCondition; + } + + /** + * detailCondition attribute 값을 설정한다. + * + * @param detailCondition + * the detailCondition to set + */ + public void setDetailCondition(String detailCondition) { + this.detailCondition = detailCondition; + } + + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/src/main/java/egovframework/com/cmm/ComDefaultVO.java b/src/main/java/egovframework/com/cmm/ComDefaultVO.java new file mode 100644 index 0000000..b4c5e5f --- /dev/null +++ b/src/main/java/egovframework/com/cmm/ComDefaultVO.java @@ -0,0 +1,167 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @Class Name : ComDefaultVO.java + * @Description : ComDefaultVO class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ ------- -------- --------------------------- + * @ 2009.02.01 조재영 최초 생성 + * + * @author 공통서비스 개발팀 조재영 + * @since 2009.02.01 + * @version 1.0 + * @see + * + */ +public class ComDefaultVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 검색조건 */ + private String searchCondition = ""; + + /** 검색Keyword */ + private String searchKeyword = ""; + + /** 검색사용여부 */ + private String searchUseYn = ""; + + /** 현재페이지 */ + private int pageIndex = 1; + + /** 페이지갯수 */ + private int pageUnit = 10; + + /** 페이지사이즈 */ + private int pageSize = 10; + + /** firstIndex */ + private int firstIndex = 1; + + /** lastIndex */ + private int lastIndex = 1; + + /** recordCountPerPage */ + private int recordCountPerPage = 10; + + /** 검색KeywordFrom */ + private String searchKeywordFrom = ""; + + /** 검색KeywordTo */ + private String searchKeywordTo = ""; + + public int getFirstIndex() { + return firstIndex; + } + + public void setFirstIndex(int firstIndex) { + this.firstIndex = firstIndex; + } + + public int getLastIndex() { + return lastIndex; + } + + public void setLastIndex(int lastIndex) { + this.lastIndex = lastIndex; + } + + public int getRecordCountPerPage() { + return recordCountPerPage; + } + + public void setRecordCountPerPage(int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + + public String getSearchCondition() { + return searchCondition; + } + + public void setSearchCondition(String searchCondition) { + this.searchCondition = searchCondition; + } + + public String getSearchKeyword() { + return searchKeyword; + } + + public void setSearchKeyword(String searchKeyword) { + this.searchKeyword = searchKeyword; + } + + public String getSearchUseYn() { + return searchUseYn; + } + + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + public int getPageIndex() { + return pageIndex; + } + + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + public int getPageUnit() { + return pageUnit; + } + + public void setPageUnit(int pageUnit) { + this.pageUnit = pageUnit; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + + /** + * searchKeywordFrom attribute를 리턴한다. + * @return String + */ + public String getSearchKeywordFrom() { + return searchKeywordFrom; + } + + /** + * searchKeywordFrom attribute 값을 설정한다. + * @param searchKeywordFrom String + */ + public void setSearchKeywordFrom(String searchKeywordFrom) { + this.searchKeywordFrom = searchKeywordFrom; + } + + /** + * searchKeywordTo attribute를 리턴한다. + * @return String + */ + public String getSearchKeywordTo() { + return searchKeywordTo; + } + + /** + * searchKeywordTo attribute 값을 설정한다. + * @param searchKeywordTo String + */ + public void setSearchKeywordTo(String searchKeywordTo) { + this.searchKeywordTo = searchKeywordTo; + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java b/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java new file mode 100644 index 0000000..71de8bf --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComCrossSiteHndlr.java @@ -0,0 +1,408 @@ +package egovframework.com.cmm; + +import java.io.IOException; +import java.io.Reader; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.tagext.BodyTagSupport; + +import org.apache.taglibs.standard.tag.common.core.Util; + +/** + * Cross-Site Scripting 체크하여 값을 되돌려 받는 핸들러 JSP TLD, 자바에서 사용가능 + * + * @author 공통서비스 장동한 + * @since 2010.11.09 + * @version 1.0 + * @see
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2010.11.09  장동한          최초 생성
+ *
+ * 
+ */ +public class EgovComCrossSiteHndlr extends BodyTagSupport { + + /* + * (One almost wishes XML and JSP could support "anonymous tags," given the + * amount of trouble we had naming this one!) :-) - sb + */ + + // ********************************************************************* + // Internal state + + private static final long serialVersionUID = -6750233818675360686L; + protected Object value; // tag attribute + protected String def; // tag attribute + protected boolean escapeXml; // tag attribute + private boolean needBody; // non-space body needed? + + // ********************************************************************* + // Construction and initialization + + private String m_sDiffChar ="()[]{}\"',:;= \t\r\n%!+-"; + //private String m_sDiffChar ="()[]{}\"',:;=%!+-"; + private String m_sArrDiffChar [] = { + "(",")", + "[","]", + "{","}", + ""","'", + ",",":", + ";","=", + " ","\t", //" ","\t", + "\r","\n", //"\r","\n", + "%","!", + "+","-" + }; + + /** + * Constructs a new handler. As with TagSupport, subclasses should not + * provide other constructors and are expected to call the superclass + * constructor. + */ + public EgovComCrossSiteHndlr() { + super(); + init(); + } + + // resets local state + private void init() { + value = def = null; + escapeXml = true; + needBody = false; + } + + // Releases any resources we may have (or inherit) + @Override + public void release() { + super.release(); + init(); + } + + // ********************************************************************* + // Tag logic + + // evaluates 'value' and determines if the body should be evaluted + @Override + public int doStartTag() throws JspException { + + needBody = false; // reset state related to 'default' + this.bodyContent = null; // clean-up body (just in case container is + // pooling tag handlers) + + JspWriter out = pageContext.getOut(); + //System.out.println("EgovComCrossSiteFilter> ============================"); + try { + // print value if available; otherwise, try 'default' + if (value != null) { + //System.out.println("EgovComCrossSiteFilter> =value"); + String sWriteEscapedXml = getWriteEscapedXml(); + //System.out.println("EgovComCrossSiteFilter sWriteEscapedXml>" + sWriteEscapedXml); + out.print(sWriteEscapedXml); + return SKIP_BODY; + } else { + // if we don't have a 'default' attribute, just go to the body + if (def == null) { + needBody = true; + return EVAL_BODY_BUFFERED; + } + + //System.out.println("EgovComCrossSiteFilter def> ="+def); + + // if we do have 'default', print it + if (def != null) { + // good 'default' + out(pageContext, escapeXml, def); + //System.out.println("EgovComCrossSiteFilter> ="+def); + } + return SKIP_BODY; + } + } catch (IOException ex) { + throw new JspException(ex.toString(), ex); + } + } + + // prints the body if necessary; reports errors + @Override + public int doEndTag() throws JspException { + try { + //System.out.println("EgovComCrossSiteFilter ==== doEndTag"); + if (!needBody){ + return EVAL_PAGE; // nothing more to do + } + + // trim and print out the body + if (bodyContent != null && bodyContent.getString() != null){ + //String sWriteEscapedXml = getWriteEscapedXml(); + //out2(pageContext, escapeXml, sWriteEscapedXml.toString()); + //System.out.println("EgovComCrossSiteFilter> end"); + //System.out.println("EgovComCrossSiteFilter sWriteEscapedXml > sWriteEscapedXml"); + out(pageContext, escapeXml, bodyContent.getString().trim()); + + } + return EVAL_PAGE; + } catch (IOException ex) { + throw new JspException(ex.toString(), ex); + } + } + + // ********************************************************************* + // Public utility methods + + /** + * Outputs text to pageContext's current JspWriter. If + * escapeXml is true, performs the following substring replacements + * (to facilitate output to XML/HTML pages): + * + * & -> & < -> < > -> > " -> " ' -> ' + * + * See also Util.escapeXml(). + */ + public static void out(PageContext pageContext, boolean escapeXml, + Object obj) throws IOException { + JspWriter w = pageContext.getOut(); + + if (!escapeXml) { + // write chars as is + if (obj instanceof Reader) { + Reader reader = (Reader) obj; + char[] buf = new char[4096]; + int count; + while ((count = reader.read(buf, 0, 4096)) != -1) { + w.write(buf, 0, count); + } + } else { + w.write(obj.toString()); + } + } else { + // escape XML chars + if (obj instanceof Reader) { + Reader reader = (Reader) obj; + char[] buf = new char[4096]; + int count; + while ((count = reader.read(buf, 0, 4096)) != -1) { + writeEscapedXml(buf, count, w); + } + } else { + String text = obj.toString(); + writeEscapedXml(text.toCharArray(), text.length(), w); + } + } + + } + public static void out2(PageContext pageContext, boolean escapeXml, + Object obj) throws IOException { + JspWriter w = pageContext.getOut(); + + w.write(obj.toString()); + + } + + /** + * + * Optimized to create no extra objects and write directly to the JspWriter + * using blocks of escaped and unescaped characters + * + */ + private static void writeEscapedXml(char[] buffer, int length, JspWriter w) + throws IOException { + int start = 0; + + for (int i = 0; i < length; i++) { + char c = buffer[i]; + if (c <= Util.HIGHEST_SPECIAL) { + char[] escaped = Util.specialCharactersRepresentation[c]; + if (escaped != null) { + // add unescaped portion + if (start < i) { + w.write(buffer, start, i - start); + } + // add escaped xml + w.write(escaped); + start = i + 1; + } + } + } + // add rest of unescaped portion + if (start < length) { + w.write(buffer, start, length - start); + } + } + + /** + * + * Optimized to create no extra objects and write directly to the JspWriter + * using blocks of escaped and unescaped characters + * + */ + @SuppressWarnings("unused") + private String getWriteEscapedXml() throws IOException { + String sRtn = ""; + + Object obj = this.value; + + int start = 0; + String text = obj.toString(); + + int length = text.length(); + char[] buffer = text.toCharArray(); + boolean booleanDiff = false; + //String sDiffChar + //String sArrDiffChar + char[] cDiffChar = this.m_sDiffChar.toCharArray(); + + for(int i = 0; i < length; i++) { + char c = buffer[i]; + + booleanDiff = false; + + for(int k = 0; k < cDiffChar.length; k++){ + if(c == cDiffChar[k]){ + sRtn = sRtn + m_sArrDiffChar[k]; + booleanDiff = true; + continue; + } + } + + if(booleanDiff) continue; + + if (c <= Util.HIGHEST_SPECIAL) { + char[] escaped = Util.specialCharactersRepresentation[c]; + if (escaped != null) { + // add unescaped portion + //if (start < i) { + // sRtn = sRtn + text.substring(start, i - start); + //} + // add escaped xml + //sRtn = sRtn + escaped; + //System.out.println(buffer[i]+" :: " + escaped); + for (int j = 0; j < escaped.length; j++) { + //System.out.println(buffer[i]+" :>: " + escaped[j]); + sRtn = sRtn + escaped[j]; + } + //sRtn = sRtn+ escaped.toString(); + //sRtn = sRtn + String.valueOf(buffer[i]); + start = i + 1; + }else{ + sRtn = sRtn + c; + } + }else{ + sRtn = sRtn + c; + } + } + + return sRtn; + } + + /** + * + * Optimized to create no extra objects and write directly to the JspWriter + * using blocks of escaped and unescaped characters + * + */ + @SuppressWarnings("unused") + private String getWriteEscapedXml(String sWriteString) throws IOException { + + String sRtn = ""; + + Object obj = sWriteString; + + int start = 0; + String text = obj.toString(); + + int length = text.length(); + char[] buffer = text.toCharArray(); + boolean booleanDiff = false; + //String sDiffChar + //String sArrDiffChar + char[] cDiffChar = this.m_sDiffChar.toCharArray(); + + for(int i = 0; i < length; i++) { + char c = buffer[i]; + + booleanDiff = false; + + for(int k = 0; k < cDiffChar.length; k++){ + if(c == cDiffChar[k]){ + sRtn = sRtn + m_sArrDiffChar[k]; + booleanDiff = true; + continue; + } + } + + if(booleanDiff) continue; + + if (c <= Util.HIGHEST_SPECIAL) { + char[] escaped = Util.specialCharactersRepresentation[c]; + if (escaped != null) { + // add unescaped portion + //if (start < i) { + // sRtn = sRtn + text.substring(start, i - start); + //} + // add escaped xml + //sRtn = sRtn + escaped; + //System.out.println(buffer[i]+" :: " + escaped); + for (int j = 0; j < escaped.length; j++) { + //System.out.println(buffer[i]+" :>: " + escaped[j]); + sRtn = sRtn + escaped[j]; + } + //sRtn = sRtn+ escaped.toString(); + //sRtn = sRtn + String.valueOf(buffer[i]); + start = i + 1; + }else{ + sRtn = sRtn + c; + } + }else{ + sRtn = sRtn + c; + } + } + + return sRtn; + } + + // for tag attribute + public void setValue(Object value) { + this.value = value; + } + + // for tag attribute + public void setDefault(String def) { + this.def = def; + } + + // for tag attribute + public void setEscapeXml(boolean escapeXml) { + this.escapeXml = escapeXml; + } + /* + public static void main(String[] args) throws IOException + { + + EgovComCrossSiteHndlr egovComCrossSiteHndlr = new EgovComCrossSiteHndlr(); + + egovComCrossSiteHndlr.value = "TRNSMIT"; + + String sCrossSiteHndlr = egovComCrossSiteHndlr.getWriteEscapedXml(); + //System.out.println("writeEscapedXml " + egovComCrossSiteHndlr.getWriteEscapedXml()); + + System.out.println("sCrossSiteHndlr|"+ sCrossSiteHndlr + "|"); + + try{ + System.out.println("TRY TEST 1"); + throw new Exception(); + }catch(Exception e){ + System.out.println("TRY TEST 2"); + }finally{ + System.out.println("TRY TEST 3"); + + } + + } + */ + } + + diff --git a/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java b/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java new file mode 100644 index 0000000..089833d --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComExcepHndlr.java @@ -0,0 +1,34 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Class Name : EgovComExcepHndlr.java + * @Description : 공통서비스의 exception 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 13. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 13. + * @version + * @see + * + */ +public class EgovComExcepHndlr implements ExceptionHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComExcepHndlr.class); + + /** + * 발생된 Exception을 처리한다. + */ + public void occur(Exception ex, String packageName) { + LOGGER.debug("[HANDLER][PACKAGE]::: {}", packageName); + LOGGER.debug("[HANDLER][Exception]:::", ex); + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java b/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java new file mode 100644 index 0000000..cc7b2f1 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComOthersExcepHndlr.java @@ -0,0 +1,16 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class EgovComOthersExcepHndlr implements ExceptionHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComOthersExcepHndlr.class); + + public void occur(Exception exception, String packageName) { + //log.debug(" EgovServiceExceptionHandler run..............."); + LOGGER.error(packageName, exception); + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComTraceHandler.java b/src/main/java/egovframework/com/cmm/EgovComTraceHandler.java new file mode 100644 index 0000000..e2c7c22 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComTraceHandler.java @@ -0,0 +1,34 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.trace.handler.TraceHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Class Name : EgovComTraceHandler.java + * @Description : 공통서비스의 trace 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2011. 09. 30. JJY + * + * @author JJY + * @since 2011. 9. 30. + * + */ +public class EgovComTraceHandler implements TraceHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComTraceHandler.class); + + /** + * 발생된 메시지를 출력한다. + */ + public void todo(Class clazz, String message) { + //System.out.println("log ==> DefaultTraceHandler run..............."); + LOGGER.debug("[TRACE]CLASS::: {}", clazz.getName()); + LOGGER.debug("[TRACE]MESSAGE::: {}", message); + //이곳에서 후속처리로 필요한 액션을 취할 수 있다. + } +} diff --git a/src/main/java/egovframework/com/cmm/EgovComponentChecker.java b/src/main/java/egovframework/com/cmm/EgovComponentChecker.java new file mode 100644 index 0000000..357cdd8 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovComponentChecker.java @@ -0,0 +1,63 @@ +package egovframework.com.cmm; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + + +/** + * EgovComUtil 클래스 + * + * @author 서준식 + * @since 2011.09.15 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    -------------    ----------------------
+ *   2011.09.15  서준식        최초 생성
+ * 
+ */ + +@Service("egovUtil") +public class EgovComponentChecker extends EgovAbstractServiceImpl implements ApplicationContextAware{ + + + public static ApplicationContext context; + + @Override + @SuppressWarnings("static-access") + public void setApplicationContext(ApplicationContext context) + throws BeansException { + + this.context = context; + } + + /** + * Spring MVC에서 설정한 빈이 아닌 서비스 빈(컴포넌트)만을 검색할 수 있음 + * + */ + public static boolean hasComponent(String componentName){ + + try{ + Object component = context.getBean(componentName); + + if(component == null){ + return false; + }else{ + return true; + } + + }catch(NoSuchBeanDefinitionException ex){// 해당 컴포넌트를 찾을 수없을 경우 false반환 + return false; + } + } + +} diff --git a/src/main/java/egovframework/com/cmm/EgovMessageSource.java b/src/main/java/egovframework/com/cmm/EgovMessageSource.java new file mode 100644 index 0000000..63a1d5b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovMessageSource.java @@ -0,0 +1,55 @@ +package egovframework.com.cmm; + +import java.util.Locale; + +import org.springframework.context.MessageSource; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; + +/** + * 메시지 리소스 사용을 위한 MessageSource 인터페이스 및 ReloadableResourceBundleMessageSource 클래스의 구현체 + * @author 공통서비스 개발팀 이문준 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2009.03.11  이문준          최초 생성
+ *
+ * 
+ */ + +public class EgovMessageSource extends ReloadableResourceBundleMessageSource implements MessageSource { + + private ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource; + + /** + * getReloadableResourceBundleMessageSource() + * @param reloadableResourceBundleMessageSource - resource MessageSource + * @return ReloadableResourceBundleMessageSource + */ + public void setReloadableResourceBundleMessageSource(ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource) { + this.reloadableResourceBundleMessageSource = reloadableResourceBundleMessageSource; + } + + /** + * getReloadableResourceBundleMessageSource() + * @return ReloadableResourceBundleMessageSource + */ + public ReloadableResourceBundleMessageSource getReloadableResourceBundleMessageSource() { + return reloadableResourceBundleMessageSource; + } + + /** + * 정의된 메세지 조회 + * @param code - 메세지 코드 + * @return String + */ + public String getMessage(String code) { + return getReloadableResourceBundleMessageSource().getMessage(code, null, Locale.getDefault()); + } + +} diff --git a/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java b/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java new file mode 100644 index 0000000..ce1e152 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/ImagePaginationRenderer.java @@ -0,0 +1,48 @@ +package egovframework.com.cmm; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer; + +import javax.servlet.ServletContext; + +import org.springframework.web.context.ServletContextAware; +/** + * ImagePaginationRenderer.java 클래스 + * + * @author 서준식 + * @since 2011. 9. 16. + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *   
+ *   수정일      수정자           수정내용
+ *  -------    -------------    ----------------------
+ *   2011. 9. 16.   서준식       이미지 경로에 ContextPath추가
+ * 
+ */ +public class ImagePaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{ + + private ServletContext servletContext; + + public ImagePaginationRenderer() { + + } + + public void initVariables(){ + firstPageLabel = "
  •  
  • \"처음\"
  • "; + previousPageLabel = "
  • \"이전\"
  • "; + currentPageLabel = "
  • {0}
  • "; + otherPageLabel = "
  • {2}
  • "; + nextPageLabel = "
  •  \"다음\"
  • "; + lastPageLabel = "
  • \"마지막\"
  • "; + } + + + + public void setServletContext(ServletContext servletContext) { + this.servletContext = servletContext; + initVariables(); + } + +} diff --git a/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java b/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java new file mode 100644 index 0000000..c4cfdbd --- /dev/null +++ b/src/main/java/egovframework/com/cmm/IncludedCompInfoVO.java @@ -0,0 +1,50 @@ +package egovframework.com.cmm; + +/** + * IncludedInfo annotation을 바탕으로 화면에 표시할 정보를 구성하기 위한 VO 클래스 + * @author 공통컴포넌트 정진오 + * @since 2011.08.26 + * @version 2.0.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *  수정일		수정자		수정내용
    + *  -------    	--------    ---------------------------
    + *  2011.08.26	정진오 		최초 생성
    + *
    + * 
    + */ +public class IncludedCompInfoVO { + + private String name; + private String listUrl; + private int order; + private int gid; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getListUrl() { + return listUrl; + } + public void setListUrl(String listUrl) { + this.listUrl = listUrl; + } + public int getOrder() { + return order; + } + public void setOrder(int order) { + this.order = order; + } + public int getGid() { + return gid; + } + public void setGid(int gid) { + this.gid = gid; + } +} diff --git a/src/main/java/egovframework/com/cmm/LoginVO.java b/src/main/java/egovframework/com/cmm/LoginVO.java new file mode 100644 index 0000000..7df8fcc --- /dev/null +++ b/src/main/java/egovframework/com/cmm/LoginVO.java @@ -0,0 +1,270 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +/** + * @Class Name : LoginVO.java + * @Description : Login VO class + * @Modification Information + * @ + * @ 수정일 수정자 수정내용 + * @ ------- -------- --------------------------- + * @ 2009.03.03 박지욱 최초 생성 + * + * @author 공통서비스 개발팀 박지욱 + * @since 2009.03.03 + * @version 1.0 + * @see + * + */ +public class LoginVO implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -8274004534207618049L; + + /** 아이디 */ + private String id; + /** 이름 */ + private String name; + /** 주민등록번호 */ + private String ihidNum; + /** 이메일주소 */ + private String email; + /** 비밀번호 */ + private String password; + /** 비밀번호 힌트 */ + private String passwordHint; + /** 비밀번호 정답 */ + private String passwordCnsr; + /** 사용자구분 */ + private String userSe; + /** 조직(부서)ID */ + private String orgnztId; + /** 조직(부서)명 */ + private String orgnztNm; + /** 고유아이디 */ + private String uniqId; + /** 로그인 후 이동할 페이지 */ + private String url; + /** 사용자 IP정보 */ + private String ip; + /** GPKI인증 DN */ + private String dn; + /** + * id attribute 를 리턴한다. + * @return String + */ + public String getId() { + return id; + } + /** + * id attribute 값을 설정한다. + * @param id String + */ + public void setId(String id) { + this.id = id; + } + /** + * name attribute 를 리턴한다. + * @return String + */ + public String getName() { + return name; + } + /** + * name attribute 값을 설정한다. + * @param name String + */ + public void setName(String name) { + this.name = name; + } + /** + * ihidNum attribute 를 리턴한다. + * @return String + */ + public String getIhidNum() { + return ihidNum; + } + /** + * ihidNum attribute 값을 설정한다. + * @param ihidNum String + */ + public void setIhidNum(String ihidNum) { + this.ihidNum = ihidNum; + } + /** + * email attribute 를 리턴한다. + * @return String + */ + public String getEmail() { + return email; + } + /** + * email attribute 값을 설정한다. + * @param email String + */ + public void setEmail(String email) { + this.email = email; + } + /** + * p attribute 를 리턴한다. + * @return String + */ + public String getPassword() { + return password; + } + /** + * p attribute 값을 설정한다. + * @param p String + */ + public void setPassword(String password) { + this.password = password; + } + /** + * passwordHint attribute 를 리턴한다. + * @return String + */ + public String getPasswordHint() { + return passwordHint; + } + /** + * passwordHint attribute 값을 설정한다. + * @param passwordHint String + */ + public void setPasswordHint(String passwordHint) { + this.passwordHint = passwordHint; + } + /** + * passwordCnsr attribute 를 리턴한다. + * @return String + */ + public String getPasswordCnsr() { + return passwordCnsr; + } + /** + * passwordCnsr attribute 값을 설정한다. + * @param passwordCnsr String + */ + public void setPasswordCnsr(String passwordCnsr) { + this.passwordCnsr = passwordCnsr; + } + /** + * userSe attribute 를 리턴한다. + * @return String + */ + public String getUserSe() { + return userSe; + } + /** + * userSe attribute 값을 설정한다. + * @param userSe String + */ + public void setUserSe(String userSe) { + this.userSe = userSe; + } + /** + * orgnztId attribute 를 리턴한다. + * @return String + */ + public String getOrgnztId() { + return orgnztId; + } + /** + * orgnztId attribute 값을 설정한다. + * @param orgnztId String + */ + public void setOrgnztId(String orgnztId) { + this.orgnztId = orgnztId; + } + /** + * uniqId attribute 를 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + /** + * url attribute 를 리턴한다. + * @return String + */ + public String getUrl() { + return url; + } + /** + * url attribute 값을 설정한다. + * @param url String + */ + public void setUrl(String url) { + this.url = url; + } + /** + * ip attribute 를 리턴한다. + * @return String + */ + public String getIp() { + return ip; + } + /** + * ip attribute 값을 설정한다. + * @param ip String + */ + public void setIp(String ip) { + this.ip = ip; + } + /** + * dn attribute 를 리턴한다. + * @return String + */ + public String getDn() { + return dn; + } + /** + * dn attribute 값을 설정한다. + * @param dn String + */ + public void setDn(String dn) { + this.dn = dn; + } + /** + * @return the orgnztNm + */ + public String getOrgnztNm() { + return orgnztNm; + } + /** + * @param orgnztNm the orgnztNm to set + */ + public void setOrgnztNm(String orgnztNm) { + this.orgnztNm = orgnztNm; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("LoginVO{"); + sb.append("id='").append(id).append('\''); + sb.append(", name='").append(name).append('\''); + sb.append(", ihidNum='").append(ihidNum).append('\''); + sb.append(", email='").append(email).append('\''); + sb.append(", password='").append(password).append('\''); + sb.append(", passwordHint='").append(passwordHint).append('\''); + sb.append(", passwordCnsr='").append(passwordCnsr).append('\''); + sb.append(", userSe='").append(userSe).append('\''); + sb.append(", orgnztId='").append(orgnztId).append('\''); + sb.append(", orgnztNm='").append(orgnztNm).append('\''); + sb.append(", uniqId='").append(uniqId).append('\''); + sb.append(", url='").append(url).append('\''); + sb.append(", ip='").append(ip).append('\''); + sb.append(", dn='").append(dn).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/egovframework/com/cmm/SessionVO.java b/src/main/java/egovframework/com/cmm/SessionVO.java new file mode 100644 index 0000000..125bc2d --- /dev/null +++ b/src/main/java/egovframework/com/cmm/SessionVO.java @@ -0,0 +1,120 @@ +package egovframework.com.cmm; + +import java.io.Serializable; + +/** + * 세션 VO 클래스 + * @author 공통서비스 개발팀 박지욱 + * @since 2009.03.06 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2009.03.06  박지욱          최초 생성
    + *
    + *  
    + */ +public class SessionVO implements Serializable { + + private static final long serialVersionUID = -2848741427493626376L; + /** 아이디 */ + private String sUserId; + /** 이름 */ + private String sUserNm; + /** 이메일 */ + private String sEmail; + /** 사용자구분 */ + private String sUserSe; + /** 조직(부서)ID */ + private String orgnztId; + /** 고유아이디 */ + private String uniqId; + /** + * sUserId attribute 를 리턴한다. + * @return String + */ + public String getSUserId() { + return sUserId; + } + /** + * sUserId attribute 값을 설정한다. + * @param sUserId String + */ + public void setSUserId(String userId) { + sUserId = userId; + } + /** + * sUserNm attribute 를 리턴한다. + * @return String + */ + public String getSUserNm() { + return sUserNm; + } + /** + * sUserNm attribute 값을 설정한다. + * @param sUserNm String + */ + public void setSUserNm(String userNm) { + sUserNm = userNm; + } + /** + * sEmail attribute 를 리턴한다. + * @return String + */ + public String getSEmail() { + return sEmail; + } + /** + * sEmail attribute 값을 설정한다. + * @param sEmail String + */ + public void setSEmail(String email) { + sEmail = email; + } + /** + * sUserSe attribute 를 리턴한다. + * @return String + */ + public String getSUserSe() { + return sUserSe; + } + /** + * sUserSe attribute 값을 설정한다. + * @param sUserSe String + */ + public void setSUserSe(String userSe) { + sUserSe = userSe; + } + /** + * orgnztId attribute 를 리턴한다. + * @return String + */ + public String getOrgnztId() { + return orgnztId; + } + /** + * orgnztId attribute 값을 설정한다. + * @param orgnztId String + */ + public void setOrgnztId(String orgnztId) { + this.orgnztId = orgnztId; + } + /** + * uniqId attribute 를 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } +} diff --git a/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java b/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java new file mode 100644 index 0000000..a88f458 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/annotation/IncludedInfo.java @@ -0,0 +1,33 @@ +package egovframework.com.cmm.annotation; + +/** + * 컴포넌트의 포함 정보 표현을 위한 annotation 클래스 + * 기본적으로 Controller 클래스에 annotation을 부여하되, + * 하나의 Controller에 여러 개의 목록성 url mapping이 제공되는 경우에는 + * 메소드에 annotation을 부여한다. + * @author 공통컴포넌트 정진오 + * @since 2011.08.26 + * @version 2.0.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *  수정일		수정자		수정내용
    + *  -------    	--------    ---------------------------
    + *  2011.08.26	정진오 		최초 생성
    + *
    + * 
    + */ + + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface IncludedInfo { + String name() default ""; // 컴포넌트의 한글 이름 + String listUrl() default ""; // 컴포넌트의 목록정보조회를 위한 URL + int order() default 0; // 자동 생성되는 메뉴 목록에 표시되는 순서 + int gid() default 0; // 컴포넌트의 Group ID(대분류 구분) +} diff --git a/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java new file mode 100644 index 0000000..9be2b92 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilter.java @@ -0,0 +1,46 @@ +/* + * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.com.cmm.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +public class HTMLTagFilter implements Filter{ + + @SuppressWarnings("unused") + private FilterConfig config; + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + + chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response); + } + + public void init(FilterConfig config) throws ServletException { + this.config = config; + } + + public void destroy() { + + } +} diff --git a/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java new file mode 100644 index 0000000..ece38a4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/filter/HTMLTagFilterRequestWrapper.java @@ -0,0 +1,109 @@ +/* + * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package egovframework.com.cmm.filter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper { + + public HTMLTagFilterRequestWrapper(HttpServletRequest request) { + super(request); + } + + public String[] getParameterValues(String parameter) { + + String[] values = super.getParameterValues(parameter); + + if(values==null){ + return null; + } + + for (int i = 0; i < values.length; i++) { + if (values[i] != null) { + StringBuffer strBuff = new StringBuffer(); + for (int j = 0; j < values[i].length(); j++) { + char c = values[i].charAt(j); + switch (c) { + case '<': + strBuff.append("<"); + break; + case '>': + strBuff.append(">"); + break; + //case '&': + //strBuff.append("&"); + //break; + case '"': + strBuff.append("""); + break; + case '\'': + strBuff.append("'"); + break; + default: + strBuff.append(c); + break; + } + } + values[i] = strBuff.toString(); + } else { + values[i] = null; + } + } + + return values; + } + + public String getParameter(String parameter) { + + String value = super.getParameter(parameter); + + if(value==null){ + return null; + } + + StringBuffer strBuff = new StringBuffer(); + + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + switch (c) { + case '<': + strBuff.append("<"); + break; + case '>': + strBuff.append(">"); + break; + case '&': + strBuff.append("&"); + break; + case '"': + strBuff.append("""); + break; + case '\'': + strBuff.append("'"); + break; + default: + strBuff.append(c); + break; + } + } + + value = strBuff.toString(); + + return value; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java b/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java new file mode 100644 index 0000000..06912cf --- /dev/null +++ b/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java @@ -0,0 +1,57 @@ +package egovframework.com.cmm.interceptor; + +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.ModelAndViewDefiningException; +import org.springframework.web.servlet.mvc.WebContentInterceptor; + +import java.io.IOException; + +/** + * 인증여부 체크 인터셉터 + * @author 공통서비스 개발팀 서준식 + * @since 2011.07.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2011.07.01  서준식          최초 생성
    + *  2011.09.07  서준식          인증이 필요없는 URL을 패스하는 로직 추가
    + *  2014.06.11  이기하          인증이 필요없는 URL을 패스하는 로직 삭제(xml로 대체)
    + *  
    + */ + +public class AuthenticInterceptor extends WebContentInterceptor { + + /** + * 세션에 계정정보(LoginVO)가 있는지 여부로 인증 여부를 체크한다. + * 계정정보(LoginVO)가 없다면, 로그인 페이지로 이동한다. + */ + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { + LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + boolean isBool = EgovUserDetailsHelper.isAuthenticated(); + Object loginSession = request.getSession().getAttribute("LoginVO"); + String reqUrl = request.getRequestURI(); + String w2xPath = request.getParameter("w2xPath"); + + if (loginSession != null) { + return true; + } else { + ModelAndView modelAndView = new ModelAndView("redirect:/login/loginUsr.do"); + throw new ModelAndViewDefiningException(modelAndView); + } + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java b/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java new file mode 100644 index 0000000..620289b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java @@ -0,0 +1,194 @@ +package egovframework.com.cmm.service; + +import java.io.Serializable; + +/** + * 공통상세코드 모델 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.04.01  이중호          최초 생성
    + *
    + * 
    + */ +public class CmmnDetailCode implements Serializable { + + private static final long serialVersionUID = -6508801327314181679L; + + /* + * 코드ID + */ + private String codeId = ""; + + /* + * 코드ID명 + */ + private String codeIdNm = ""; + + /* + * 코드 + */ + private String code = ""; + + /* + * 코드명 + */ + private String codeNm = ""; + + /* + * 코드설명 + */ + private String codeDc = ""; + + /* + * 사용여부 + */ + private String useAt = ""; + + /* + * 최초등록자ID + */ + private String frstRegisterId = ""; + + /* + * 최종수정자ID + */ + private String lastUpdusrId = ""; + + /** + * codeId attribute 를 리턴한다. + * @return String + */ + public String getCodeId() { + return codeId; + } + + /** + * codeId attribute 값을 설정한다. + * @param codeId String + */ + public void setCodeId(String codeId) { + this.codeId = codeId; + } + + /** + * codeIdNm attribute 를 리턴한다. + * @return String + */ + public String getCodeIdNm() { + return codeIdNm; + } + + /** + * codeIdNm attribute 값을 설정한다. + * @param codeIdNm String + */ + public void setCodeIdNm(String codeIdNm) { + this.codeIdNm = codeIdNm; + } + + /** + * code attribute 를 리턴한다. + * @return String + */ + public String getCode() { + return code; + } + + /** + * code attribute 값을 설정한다. + * @param code String + */ + public void setCode(String code) { + this.code = code; + } + + /** + * codeNm attribute 를 리턴한다. + * @return String + */ + public String getCodeNm() { + return codeNm; + } + + /** + * codeNm attribute 값을 설정한다. + * @param codeNm String + */ + public void setCodeNm(String codeNm) { + this.codeNm = codeNm; + } + + /** + * codeDc attribute 를 리턴한다. + * @return String + */ + public String getCodeDc() { + return codeDc; + } + + /** + * codeDc attribute 값을 설정한다. + * @param codeDc String + */ + public void setCodeDc(String codeDc) { + this.codeDc = codeDc; + } + + /** + * useAt attribute 를 리턴한다. + * @return String + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * @param useAt String + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @param frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @param lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java b/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java new file mode 100644 index 0000000..54a0d03 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovCmmUseService.java @@ -0,0 +1,64 @@ +package egovframework.com.cmm.service; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; + + + +/** + * + * 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기 위한 서비스 인터페이스 + * @author 공통서비스 개발팀 이삼섭 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.11  이삼섭          최초 생성
    + *
    + * 
    + */ +public interface EgovCmmUseService { + + /** + * 공통코드를 조회한다. + * + * @param vo + * @return List(코드) + * @throws Exception + */ + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception; + + /** + * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다. + * + * @param voList + * @return Map(코드) + * @throws Exception + */ + public Map> selectCmmCodeDetails(List voList) throws Exception; + + /** + * 조직정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 조직정보 List + * @throws Exception + */ + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception; + + /** + * 그룹정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 그룹정보 List + * @throws Exception + */ + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception; +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java b/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java new file mode 100644 index 0000000..677c16b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java @@ -0,0 +1,115 @@ +package egovframework.com.cmm.service; + +import java.util.List; +import java.util.Map; + +/** + * @Class Name : EgovFileMngService.java + * @Description : 파일정보의 관리를 위한 서비스 인터페이스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 최초생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +public interface EgovFileMngService { + + /** + * 파일에 대한 목록을 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public List selectFileInfs(FileVO fvo) throws Exception; + + /** + * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param fvo + * @throws Exception + */ + public String insertFileInf(FileVO fvo) throws Exception; + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param fvoList + * @throws Exception + */ + public String insertFileInfs(List fvoList) throws Exception; + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다. + * + * @param fvoList + * @throws Exception + */ + public void updateFileInfs(List fvoList) throws Exception; + + /** + * 여러 개의 파일을 삭제한다. + * + * @param fvoList + * @throws Exception + */ + public void deleteFileInfs(List fvoList) throws Exception; + + /** + * 하나의 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteFileInf(FileVO fvo) throws Exception; + + /** + * 파일에 대한 상세정보를 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public FileVO selectFileInf(FileVO fvo) throws Exception; + + /** + * 파일 구분자에 대한 최대값을 구한다. + * + * @param fvo + * @return + * @throws Exception + */ + public int getMaxFileSN(FileVO fvo) throws Exception; + + /** + * 전체 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteAllFileInf(FileVO fvo) throws Exception; + + /** + * 파일명 검색에 대한 목록을 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public Map selectFileListByFileNm(FileVO fvo) throws Exception; + + /** + * 이미지 파일에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + public List selectImageFileList(FileVO vo) throws Exception; +} diff --git a/src/main/java/egovframework/com/cmm/service/EgovProperties.java b/src/main/java/egovframework/com/cmm/service/EgovProperties.java new file mode 100644 index 0000000..f1236da --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovProperties.java @@ -0,0 +1,244 @@ +package egovframework.com.cmm.service; + +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +//import java.io.FileNotFoundException; +//import java.io.IOException; +//import java.util.Properties; +/** + * Class Name : EgovProperties.java + * Description : properties값들을 파일로부터 읽어와 Globals클래스의 정적변수로 로드시켜주는 클래스로 + * 문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 한다. + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.19 박지욱 최초 생성 + * 2011.07.20 서준식 Globals파일의 상대경로를 읽은 메서드 추가 + * 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성 + * + * @author 공통 서비스 개발팀 박지욱 + * @since 2009. 01. 19 + * @version 1.0 + * @see + * + */ + +public class EgovProperties{ + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovProperties.class); + + //프로퍼티값 로드시 에러발생하면 반환되는 에러문자열 + public static final String ERR_CODE =" EXCEPTION OCCURRED"; + public static final String ERR_CODE_FNFE =" EXCEPTION(FNFE) OCCURRED"; + public static final String ERR_CODE_IOE =" EXCEPTION(IOE) OCCURRED"; + + //파일구분자 + static final char FILE_SEPARATOR = File.separatorChar; + + //프로퍼티 파일의 물리적 위치 + /*public static final String GLOBALS_PROPERTIES_FILE + = System.getProperty("user.home") + System.getProperty("file.separator") + "egovProps" + + System.getProperty("file.separator") + "globals.properties";*/ + + public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath() + + System.getProperty("file.separator") + ".." + System.getProperty("file.separator") + + ".." + System.getProperty("file.separator") + ".." + System.getProperty("file.separator"); + + public static final String GLOBALS_PROPERTIES_FILE + = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + "globals.properties"; + + + + /** + * 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용) + * @param keyName String + * @return String + + public static String getPathProperty(String keyName){ + String value = ERR_CODE; + value="99"; + debug(GLOBALS_PROPERTIES_FILE + " : " + keyName); + FileInputStream fis = null; + try{ + Properties props = new Properties(); + fis = new FileInputStream(GLOBALS_PROPERTIES_FILE); + props.load(new java.io.BufferedInputStream(fis)); + value = props.getProperty(keyName).trim(); + value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; + }catch(FileNotFoundException fne){ + debug(fne); + }catch(IOException ioe){ + debug(ioe); + }catch(Exception e){ + debug(e); + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + + } + return value; + } +*/ + + /** + * 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용) + * @param keyName String + * @return String + + public static String getProperty(String keyName){ + String value = ERR_CODE; + value="99"; + debug(GLOBALS_PROPERTIES_FILE + " : " + keyName); + FileInputStream fis = null; + try{ + Properties props = new Properties(); + fis = new FileInputStream(GLOBALS_PROPERTIES_FILE); + props.load(new java.io.BufferedInputStream(fis)); + value = props.getProperty(keyName).trim(); + }catch(FileNotFoundException fne){ + debug(fne); + }catch(IOException ioe){ + debug(ioe); + }catch(Exception e){ + debug(e); + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + + } + return value; + } + */ + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다 + * @param fileName String + * @param key String + * @return String + + public static String getPathProperty(String fileName, String key){ + FileInputStream fis = null; + try{ + java.util.Properties props = new java.util.Properties(); + fis = new FileInputStream(fileName); + props.load(new java.io.BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; + return value; + }catch(java.io.FileNotFoundException fne){ + return ERR_CODE_FNFE; + }catch(java.io.IOException ioe){ + return ERR_CODE_IOE; + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + */ + + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다 + * @param fileName String + * @param key String + * @return String + + public static String getProperty(String fileName, String key){ + FileInputStream fis = null; + try{ + java.util.Properties props = new java.util.Properties(); + fis = new FileInputStream(fileName); + props.load(new java.io.BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + return value; + }catch(java.io.FileNotFoundException fne){ + return ERR_CODE_FNFE; + }catch(java.io.IOException ioe){ + return ERR_CODE_IOE; + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + */ + /** + * 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다. + * @param property String + * @return ArrayList + */ + @SuppressWarnings("unused") + public static ArrayList> loadPropertyFile(String property){ + + // key - value 형태로 된 배열 결과 + ArrayList> keyList = new ArrayList>(); + + String src = property.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + FileInputStream fis = null; + try + { + + File srcFile = new File(src); + if (srcFile.exists()) { + + java.util.Properties props = new java.util.Properties(); + fis = new FileInputStream(src); + props.load(new java.io.BufferedInputStream(fis)); + fis.close(); + + int i = 0; + Enumeration plist = props.propertyNames(); + if (plist != null) { + while (plist.hasMoreElements()) { + Map map = new HashMap(); + String key = (String)plist.nextElement(); + map.put(key, props.getProperty(key)); + keyList.add(map); + } + } + } + } catch (Exception ex){ + debug("EX:"+ex); + } finally { + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + debug("EX:"+ex); + } + } + + return keyList; + } + + /** + * 시스템 로그를 출력한다. + * @param obj Object + */ + private static void debug(Object obj) { + if (obj instanceof java.lang.Exception) { + LOGGER.debug("IGNORED: {}", ((Exception)obj).getMessage()); + } + } +} + diff --git a/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java b/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java new file mode 100644 index 0000000..796f5ef --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java @@ -0,0 +1,26 @@ +package egovframework.com.cmm.service; + +import java.util.List; + +public interface EgovUserDetailsService { + + /** + * 인증된 사용자객체를 VO형식으로 가져온다. + * @return Object - 사용자 ValueObject + */ + public Object getAuthenticatedUser(); + + /** + * 인증된 사용자의 권한 정보를 가져온다. + * 예) [ROLE_ADMIN, ROLE_USER, ROLE_A, ROLE_B, ROLE_RESTRICTED, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_ANONYMOUSLY] + * @return List - 사용자 권한정보 목록 + */ + public List getAuthorities(); + + /** + * 인증된 사용자 여부를 체크한다. + * @return Boolean - 인증된 사용자 여부(TRUE / FALSE) + */ + public Boolean isAuthenticated(); + +} diff --git a/src/main/java/egovframework/com/cmm/service/FileVO.java b/src/main/java/egovframework/com/cmm/service/FileVO.java new file mode 100644 index 0000000..fc11853 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/FileVO.java @@ -0,0 +1,243 @@ +package egovframework.com.cmm.service; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @Class Name : FileVO.java + * @Description : 파일정보 처리를 위한 VO 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +public class FileVO implements Serializable { + + /** + * serialVersion UID + */ + private static final long serialVersionUID = -287950405903719128L; + /** + * 첨부파일 아이디 + */ + public String atchFileId = ""; + /** + * 생성일자 + */ + public String creatDt = ""; + /** + * 파일내용 + */ + public String fileCn = ""; + /** + * 파일확장자 + */ + public String fileExtsn = ""; + /** + * 파일크기 + */ + public String fileMg = ""; + /** + * 파일연번 + */ + public String fileSn = ""; + /** + * 파일저장경로 + */ + public String fileStreCours = ""; + /** + * 원파일명 + */ + public String orignlFileNm = ""; + /** + * 저장파일명 + */ + public String streFileNm = ""; + + /** + * atchFileId attribute를 리턴한다. + * + * @return the atchFileId + */ + public String getAtchFileId() { + return atchFileId; + } + + /** + * atchFileId attribute 값을 설정한다. + * + * @param atchFileId + * the atchFileId to set + */ + public void setAtchFileId(String atchFileId) { + this.atchFileId = atchFileId; + } + + /** + * creatDt attribute를 리턴한다. + * + * @return the creatDt + */ + public String getCreatDt() { + return creatDt; + } + + /** + * creatDt attribute 값을 설정한다. + * + * @param creatDt + * the creatDt to set + */ + public void setCreatDt(String creatDt) { + this.creatDt = creatDt; + } + + /** + * fileCn attribute를 리턴한다. + * + * @return the fileCn + */ + public String getFileCn() { + return fileCn; + } + + /** + * fileCn attribute 값을 설정한다. + * + * @param fileCn + * the fileCn to set + */ + public void setFileCn(String fileCn) { + this.fileCn = fileCn; + } + + /** + * fileExtsn attribute를 리턴한다. + * + * @return the fileExtsn + */ + public String getFileExtsn() { + return fileExtsn; + } + + /** + * fileExtsn attribute 값을 설정한다. + * + * @param fileExtsn + * the fileExtsn to set + */ + public void setFileExtsn(String fileExtsn) { + this.fileExtsn = fileExtsn; + } + + /** + * fileMg attribute를 리턴한다. + * + * @return the fileMg + */ + public String getFileMg() { + return fileMg; + } + + /** + * fileMg attribute 값을 설정한다. + * + * @param fileMg + * the fileMg to set + */ + public void setFileMg(String fileMg) { + this.fileMg = fileMg; + } + + /** + * fileSn attribute를 리턴한다. + * + * @return the fileSn + */ + public String getFileSn() { + return fileSn; + } + + /** + * fileSn attribute 값을 설정한다. + * + * @param fileSn + * the fileSn to set + */ + public void setFileSn(String fileSn) { + this.fileSn = fileSn; + } + + /** + * fileStreCours attribute를 리턴한다. + * + * @return the fileStreCours + */ + public String getFileStreCours() { + return fileStreCours; + } + + /** + * fileStreCours attribute 값을 설정한다. + * + * @param fileStreCours + * the fileStreCours to set + */ + public void setFileStreCours(String fileStreCours) { + this.fileStreCours = fileStreCours; + } + + /** + * orignlFileNm attribute를 리턴한다. + * + * @return the orignlFileNm + */ + public String getOrignlFileNm() { + return orignlFileNm; + } + + /** + * orignlFileNm attribute 값을 설정한다. + * + * @param orignlFileNm + * the orignlFileNm to set + */ + public void setOrignlFileNm(String orignlFileNm) { + this.orignlFileNm = orignlFileNm; + } + + /** + * streFileNm attribute를 리턴한다. + * + * @return the streFileNm + */ + public String getStreFileNm() { + return streFileNm; + } + + /** + * streFileNm attribute 값을 설정한다. + * + * @param streFileNm + * the streFileNm to set + */ + public void setStreFileNm(String streFileNm) { + this.streFileNm = streFileNm; + } + + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/Globals.java b/src/main/java/egovframework/com/cmm/service/Globals.java new file mode 100644 index 0000000..75b758a --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/Globals.java @@ -0,0 +1,30 @@ +package egovframework.com.cmm.service; + +/** + * Class Name : Globals.java + * Description : 시스템 구동 시 프로퍼티를 통해 사용될 전역변수를 정의한다. + * Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.19 박지욱 최초 생성 + * + * @author 공통 서비스 개발팀 박지욱 + * @since 2009. 01. 19 + * @version 1.0 + * @see + * + */ + +public class Globals { + //파일 업로드 원 파일명 + public static final String ORIGIN_FILE_NM = "originalFileName"; + //파일 확장자 + public static final String FILE_EXT = "fileExtension"; + //파일크기 + public static final String FILE_SIZE = "fileSize"; + //업로드된 파일명 + public static final String UPLOAD_FILE_NM = "uploadFileName"; + //파일경로 + public static final String FILE_PATH = "filePath"; +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java b/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java new file mode 100644 index 0000000..0b744a4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java @@ -0,0 +1,63 @@ +package egovframework.com.cmm.service.impl; + +import java.util.List; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.service.CmmnDetailCode; + +import org.springframework.stereotype.Repository; + +/** + * @Class Name : CmmUseDAO.java + * @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 데이터 접근 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 11. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 11. + * @version + * @see + * + */ +@Repository("cmmUseDAO") +public class CmmUseDAO extends EgovComAbstractDAO { + + /** + * 주어진 조건에 따른 공통코드를 불러온다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception { + return (List) list("CmmUseDAO.selectCmmCodeDetail", vo); + } + + /** + * 공통코드로 사용할 조직정보를 를 불러온다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception { + return (List) list("CmmUseDAO.selectOgrnztIdDetail", vo); + } + + /** + * 공통코드로 사용할그룹정보를 를 불러온다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception { + return (List) list("CmmUseDAO.selectGroupIdDetail", vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java new file mode 100644 index 0000000..e344e8b --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java @@ -0,0 +1,95 @@ +package egovframework.com.cmm.service.impl; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.service.CmmnDetailCode; +import egovframework.com.cmm.service.EgovCmmUseService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +/** + * @Class Name : EgovCmmUseServiceImpl.java + * @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 서비스 구현 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 11. 이삼섭 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 11. + * @version + * @see + * + */ +@Service("EgovCmmUseService") +public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements EgovCmmUseService { + + @Resource(name = "cmmUseDAO") + private CmmUseDAO cmmUseDAO; + + /** + * 공통코드를 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @Override + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectCmmCodeDetail(vo); + } + + /** + * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다. + * + * @param voList + * @return + * @throws Exception + */ + @Override + public Map> selectCmmCodeDetails(List voList) throws Exception { + ComDefaultCodeVO vo; + Map> map = new HashMap>(); + + Iterator iter = voList.iterator(); + while (iter.hasNext()) { + vo = (ComDefaultCodeVO) iter.next(); + map.put(vo.getCodeId(), cmmUseDAO.selectCmmCodeDetail(vo)); + } + + return map; + } + + /** + * 조직정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 조직정보 List + * @throws Exception + */ + @Override + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectOgrnztIdDetail(vo); + } + + /** + * 그룹정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 그룹정보 List + * @throws Exception + */ + @Override + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectGroupIdDetail(vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java b/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java new file mode 100644 index 0000000..4719bdd --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovComAbstractDAO.java @@ -0,0 +1,34 @@ +package egovframework.com.cmm.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractDAO; + +import javax.annotation.Resource; + +import com.ibatis.sqlmap.client.SqlMapClient; + +/** + * EgovComAbstractDAO.java 클래스 + * + * @author 서준식 + * @since 2011. 9. 23. + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   2011. 9. 23.   서준식        최초 생성
    + * 
    + */ +public abstract class EgovComAbstractDAO extends EgovAbstractDAO{ + + + @Resource(name="egov.sqlMapClient") + public void setSuperSqlMapClient(SqlMapClient sqlMapClient) { + super.setSuperSqlMapClient(sqlMapClient); + } + + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java new file mode 100644 index 0000000..d22b9b6 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java @@ -0,0 +1,167 @@ +package egovframework.com.cmm.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +/** + * @Class Name : EgovFileMngServiceImpl.java + * @Description : 파일정보의 관리를 위한 구현 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 최초생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +@Service("EgovFileMngService") +public class EgovFileMngServiceImpl extends EgovAbstractServiceImpl implements EgovFileMngService { + + @Resource(name = "FileManageDAO") + private FileManageDAO fileMngDAO; + + /** + * 여러 개의 파일을 삭제한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInfs(java.util.List) + */ + @Override + public void deleteFileInfs(List fvoList) throws Exception { + fileMngDAO.deleteFileInfs(fvoList); + } + + /** + * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#insertFileInf(egovframework.com.cmm.service.FileVO) + */ + @Override + public String insertFileInf(FileVO fvo) throws Exception { + String atchFileId = fvo.getAtchFileId(); + + fileMngDAO.insertFileInf(fvo); + + return atchFileId; + } + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#insertFileInfs(java.util.List) + */ + @Override + public String insertFileInfs(List fvoList) throws Exception { + String atchFileId = ""; + + if (fvoList.size() != 0) { + atchFileId = fileMngDAO.insertFileInfs(fvoList); + } + if(atchFileId == ""){ + atchFileId = null; + } + return atchFileId; + } + + /** + * 파일에 대한 목록을 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectFileInfs(egovframework.com.cmm.service.FileVO) + */ + @Override + public List selectFileInfs(FileVO fvo) throws Exception { + return fileMngDAO.selectFileInfs(fvo); + } + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#updateFileInfs(java.util.List) + */ + @Override + public void updateFileInfs(List fvoList) throws Exception { + //Delete & Insert + fileMngDAO.updateFileInfs(fvoList); + } + + /** + * 하나의 파일을 삭제한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInf(egovframework.com.cmm.service.FileVO) + */ + @Override + public void deleteFileInf(FileVO fvo) throws Exception { + fileMngDAO.deleteFileInf(fvo); + } + + /** + * 파일에 대한 상세정보를 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectFileInf(egovframework.com.cmm.service.FileVO) + */ + @Override + public FileVO selectFileInf(FileVO fvo) throws Exception { + return fileMngDAO.selectFileInf(fvo); + } + + /** + * 파일 구분자에 대한 최대값을 구한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#getMaxFileSN(egovframework.com.cmm.service.FileVO) + */ + @Override + public int getMaxFileSN(FileVO fvo) throws Exception { + return fileMngDAO.getMaxFileSN(fvo); + } + + /** + * 전체 파일을 삭제한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#deleteAllFileInf(egovframework.com.cmm.service.FileVO) + */ + @Override + public void deleteAllFileInf(FileVO fvo) throws Exception { + fileMngDAO.deleteAllFileInf(fvo); + } + + /** + * 파일명 검색에 대한 목록을 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectFileListByFileNm(egovframework.com.cmm.service.FileVO) + */ + @Override + public Map selectFileListByFileNm(FileVO fvo) throws Exception { + List result = fileMngDAO.selectFileListByFileNm(fvo); + int cnt = fileMngDAO.selectFileListCntByFileNm(fvo); + + Map map = new HashMap(); + + map.put("resultList", result); + map.put("resultCnt", Integer.toString(cnt)); + + return map; + } + + /** + * 이미지 파일에 대한 목록을 조회한다. + * + * @see egovframework.com.cmm.service.EgovFileMngService#selectImageFileList(egovframework.com.cmm.service.FileVO) + */ + @Override + public List selectImageFileList(FileVO vo) throws Exception { + return fileMngDAO.selectImageFileList(vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java new file mode 100644 index 0000000..f64190a --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovTestUserDetailsServiceImpl.java @@ -0,0 +1,87 @@ +package egovframework.com.cmm.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.com.cmm.LoginVO; +import egovframework.com.cmm.service.EgovUserDetailsService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +/** + * + * @author 공통서비스 개발팀 서준식 + * @since 2011. 8. 12. + * @version 1.0 + * @see + * + *
    + * 개정이력(Modification Information)
    + *
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2011. 8. 12.    서준식        최초생성
    + *
    + *  
    + */ + +public class EgovTestUserDetailsServiceImpl extends EgovAbstractServiceImpl implements + EgovUserDetailsService { + + @Override + public Object getAuthenticatedUser() { + + LoginVO loginVO = new LoginVO(); + loginVO.setId("TEST1"); + loginVO.setPassword("raHLBnHFcunwNzcDcfad4PhD11hHgXSUr7fc1Jk9uoQ="); + loginVO.setUserSe("USR"); + loginVO.setEmail("egovframe@nia.or.kr"); + loginVO.setIhidNum(""); + loginVO.setName("더미사용자"); + loginVO.setOrgnztId("ORGNZT_0000000000000"); + loginVO.setUniqId("USRCNFRM_00000000000"); + return loginVO; + + // return + // RequestContextHolder.getRequestAttributes().getAttribute("loginVO", + // RequestAttributes.SCOPE_SESSION); + + } + + @Override + public List getAuthorities() { + + // 권한 설정을 리턴한다. + + List listAuth = new ArrayList(); + listAuth.add("IS_AUTHENTICATED_ANONYMOUSLY"); + listAuth.add("IS_AUTHENTICATED_FULLY"); + listAuth.add("IS_AUTHENTICATED_REMEMBERED"); + listAuth.add("ROLE_ADMIN"); + listAuth.add("ROLE_ANONYMOUS"); + listAuth.add("ROLE_RESTRICTED"); + listAuth.add("ROLE_USER"); + + return listAuth; + } + + @Override + public Boolean isAuthenticated() { + // 인증된 유저인지 확인한다. + + /*if (RequestContextHolder.getRequestAttributes() == null) { + return false; + } else { + + if (RequestContextHolder.getRequestAttributes().getAttribute( + "loginVO", RequestAttributes.SCOPE_SESSION) == null) { + return false; + } else { + return true; + } + }*/ + + return true; + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java b/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java new file mode 100644 index 0000000..011ecf6 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java @@ -0,0 +1,67 @@ +package egovframework.com.cmm.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.com.cmm.service.EgovUserDetailsService; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * + * @author 공통서비스 개발팀 서준식 + * @since 2011. 6. 25. + * @version 1.0 + * @see + * + *
    + * 개정이력(Modification Information) 
    + * 
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2011. 8. 12.    서준식        최초생성
    + *  
    + *  
    + */ + +public class EgovUserDetailsSessionServiceImpl extends EgovAbstractServiceImpl implements + EgovUserDetailsService { + + public Object getAuthenticatedUser() { + + + + return RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION); + + } + + public List getAuthorities() { + + // 권한 설정을 리턴한다. + List listAuth = new ArrayList(); + + return listAuth; + } + + public Boolean isAuthenticated() { + // 인증된 유저인지 확인한다. + + if (RequestContextHolder.getRequestAttributes() == null) { + return false; + } else { + + if (RequestContextHolder.getRequestAttributes().getAttribute( + "loginVO", RequestAttributes.SCOPE_SESSION) == null) { + return false; + } else { + return true; + } + } + + + } + +} diff --git a/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java b/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java new file mode 100644 index 0000000..fd088ad --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/FileManageDAO.java @@ -0,0 +1,182 @@ +package egovframework.com.cmm.service.impl; + +import java.util.Iterator; +import java.util.List; + +import egovframework.com.cmm.service.FileVO; + +import org.springframework.stereotype.Repository; + +/** + * @Class Name : EgovFileMngDAO.java + * @Description : 파일정보 관리를 위한 데이터 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 3. 25. 이삼섭 최초생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 3. 25. + * @version + * @see + * + */ +@Repository("FileManageDAO") +public class FileManageDAO extends EgovComAbstractDAO { + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param fileList + * @return + * @throws Exception + */ + public String insertFileInfs(List fileList) throws Exception { + FileVO vo = (FileVO) fileList.get(0); + String atchFileId = vo.getAtchFileId(); + + insert("FileManageDAO.insertFileMaster", vo); + + Iterator iter = fileList.iterator(); + while (iter.hasNext()) { + vo = (FileVO) iter.next(); + + insert("FileManageDAO.insertFileDetail", vo); + } + + return atchFileId; + } + + /** + * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다. + * + * @param vo + * @throws Exception + */ + public void insertFileInf(FileVO vo) throws Exception { + insert("FileManageDAO.insertFileMaster", vo); + insert("FileManageDAO.insertFileDetail", vo); + } + + /** + * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다. + * + * @param fileList + * @throws Exception + */ + public void updateFileInfs(List fileList) throws Exception { + FileVO vo; + Iterator iter = fileList.iterator(); + while (iter.hasNext()) { + vo = (FileVO) iter.next(); + + insert("FileManageDAO.insertFileDetail", vo); + } + } + + /** + * 여러 개의 파일을 삭제한다. + * + * @param fileList + * @throws Exception + */ + public void deleteFileInfs(List fileList) throws Exception { + Iterator iter = fileList.iterator(); + FileVO vo; + while (iter.hasNext()) { + vo = (FileVO) iter.next(); + + delete("FileManageDAO.deleteFileDetail", vo); + } + } + + /** + * 하나의 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteFileInf(FileVO fvo) throws Exception { + delete("FileManageDAO.deleteFileDetail", fvo); + } + + /** + * 파일에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectFileInfs(FileVO vo) throws Exception { + return (List) list("FileManageDAO.selectFileList", vo); + } + + /** + * 파일 구분자에 대한 최대값을 구한다. + * + * @param fvo + * @return + * @throws Exception + */ + public int getMaxFileSN(FileVO fvo) throws Exception { + return (Integer) select("FileManageDAO.getMaxFileSN", fvo); + } + + /** + * 파일에 대한 상세정보를 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public FileVO selectFileInf(FileVO fvo) throws Exception { + return (FileVO) select("FileManageDAO.selectFileInf", fvo); + } + + /** + * 전체 파일을 삭제한다. + * + * @param fvo + * @throws Exception + */ + public void deleteAllFileInf(FileVO fvo) throws Exception { + update("FileManageDAO.deleteCOMTNFILE", fvo); + } + + /** + * 파일명 검색에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectFileListByFileNm(FileVO fvo) throws Exception { + return (List) list("FileManageDAO.selectFileListByFileNm", fvo); + } + + /** + * 파일명 검색에 대한 목록 전체 건수를 조회한다. + * + * @param fvo + * @return + * @throws Exception + */ + public int selectFileListCntByFileNm(FileVO fvo) throws Exception { + return (Integer) select("FileManageDAO.selectFileListCntByFileNm", fvo); + } + + /** + * 이미지 파일에 대한 목록을 조회한다. + * + * @param vo + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + public List selectImageFileList(FileVO vo) throws Exception { + return (List) list("FileManageDAO.selectImageFileList", vo); + } +} diff --git a/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java b/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java new file mode 100644 index 0000000..1999a19 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java @@ -0,0 +1,72 @@ +package egovframework.com.cmm.util; + +import java.util.ArrayList; +import java.util.List; + +import egovframework.com.cmm.LoginVO; + +import egovframework.rte.fdl.string.EgovObjectUtil; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * EgovUserDetails Helper 클래스 + * + * @author sjyoon + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *   
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   2009.03.10  sjyoon    최초 생성
    + *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
    + *
    + * 
    + */ + +public class EgovUserDetailsHelper { + + /** + * 인증된 사용자객체를 VO형식으로 가져온다. + * @return Object - 사용자 ValueObject + */ + public static Object getAuthenticatedUser() { + return (LoginVO)RequestContextHolder.getRequestAttributes().getAttribute("LoginVO", RequestAttributes.SCOPE_SESSION)==null ? + new LoginVO() : (LoginVO) RequestContextHolder.getRequestAttributes().getAttribute("LoginVO", RequestAttributes.SCOPE_SESSION); + + } + + /** + * 인증된 사용자의 권한 정보를 가져온다. + * 예) [ROLE_ADMIN, ROLE_USER, ROLE_A, ROLE_B, ROLE_RESTRICTED, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_ANONYMOUSLY] + * @return List - 사용자 권한정보 목록 + */ + public static List getAuthorities() { + List listAuth = new ArrayList(); + + if (EgovObjectUtil.isNull((LoginVO) RequestContextHolder.getRequestAttributes().getAttribute("LoginVO", RequestAttributes.SCOPE_SESSION))) { + // log.debug("## authentication object is null!!"); + return null; + } + + return listAuth; + } + + /** + * 인증된 사용자 여부를 체크한다. + * @return Boolean - 인증된 사용자 여부(TRUE / FALSE) + */ + public static Boolean isAuthenticated() { + + if (EgovObjectUtil.isNull((LoginVO) RequestContextHolder.getRequestAttributes().getAttribute("LoginVO", RequestAttributes.SCOPE_SESSION))) { + // log.debug("## authentication object is null!!"); + return Boolean.FALSE; + } + return Boolean.TRUE; + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java b/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java new file mode 100644 index 0000000..33a1ab4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovBindingInitializer.java @@ -0,0 +1,22 @@ +package egovframework.com.cmm.web; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.beans.propertyeditors.StringTrimmerEditor; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.support.WebBindingInitializer; +import org.springframework.web.context.request.WebRequest; + +public class EgovBindingInitializer implements WebBindingInitializer { + + + public void initBinder(WebDataBinder binder, WebRequest request) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + dateFormat.setLenient(false); + binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); + binder.registerCustomEditor(String.class, new StringTrimmerEditor(false)); + } + +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java b/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java new file mode 100644 index 0000000..021a8df --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovComUtlController.java @@ -0,0 +1,80 @@ +package egovframework.com.cmm.web; + +import egovframework.rte.fdl.property.EgovPropertyService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpSession; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 공통유틸리티성 작업을 위한 Controller 클래스 + * @author 공통 서비스 개발팀 JJY + * @since 2009.03.02 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + * 
    + *   수정일      수정자          수정내용
    + *  -------    --------    ---------------------------
    + *  2009.03.02  JJY            최초 생성
    + *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
    + *  
    + *  
    + */ +@Controller +public class EgovComUtlController { + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** + * JSP 호출작업만 처리하는 공통 함수 + */ + @RequestMapping(value="/EgovPageLink.do") + public String moveToPage(@RequestParam("link") String linkPage, + HttpSession session, + @RequestParam(value="menuNo", required=false) String menuNo){ + String link = linkPage; + // service 사용하여 리턴할 결과값 처리하는 부분은 생략하고 단순 페이지 링크만 처리함 + if (linkPage==null || linkPage.equals("")){ + link="cmm/egovError"; + }else{ + if(link.indexOf(",")>-1){ + link=link.substring(0,link.indexOf(",")); + } + } + // 선택된 메뉴정보를 세션으로 등록한다. + if (menuNo!=null && !menuNo.equals("")){ + session.setAttribute("menuNo",menuNo); + } + return link; + } + + /** + * JSP 호출작업만 처리하는 공통 함수 + */ + @RequestMapping(value="/EgovPageLink.action") + public String moveToPage_action(@RequestParam("link") String linkPage){ + String link = linkPage; + // service 사용하여 리턴할 결과값 처리하는 부분은 생략하고 단순 페이지 링크만 처리함 + if (linkPage==null || linkPage.equals("")){ + link="cmm/egovError"; + } + return link; + } + + /** + * validation rule dynamic java script + */ + @RequestMapping("/validator.do") + public String validate(){ + return "cmm/validator"; + } + +} \ No newline at end of file diff --git a/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java b/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java new file mode 100644 index 0000000..d553a46 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java @@ -0,0 +1,202 @@ +package egovframework.com.cmm.web; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.util.Map; + +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 파일 다운로드를 위한 컨트롤러 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.3.25  이삼섭          최초 생성
    + *
    + * Copyright (C) 2009 by MOPAS  All right reserved.
    + * 
    + */ +@Controller +public class EgovFileDownloadController { + + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileService; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileDownloadController.class); + + /** + * 브라우저 구분 얻기. + * + * @param request + * @return + */ + private String getBrowser(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1) { + return "MSIE"; + } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 + return "Trident"; + } else if (header.indexOf("Chrome") > -1) { + return "Chrome"; + } else if (header.indexOf("Opera") > -1) { + return "Opera"; + } + return "Firefox"; + } + + /** + * Disposition 지정하기. + * + * @param filename + * @param request + * @param response + * @throws Exception + */ + private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception { + String browser = getBrowser(request); + + String dispositionPrefix = "attachment; filename="; + String encodedFilename = null; + + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < filename.length(); i++) { + char c = filename.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } else { + //throw new RuntimeException("Not supported browser"); + throw new IOException("Not supported browser"); + } + + response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); + + if ("Opera".equals(browser)) { + response.setContentType("application/octet-stream;charset=UTF-8"); + } + } + + /** + * 첨부파일로 등록된 파일에 대하여 다운로드를 제공한다. + * + * @param commandMap + * @param response + * @throws Exception + */ + @RequestMapping(value = "/cmm/fms/FileDown.do",method = RequestMethod.POST) + public void cvplFileDownload(@RequestParam Map commandMap, HttpServletRequest request, HttpServletResponse response) throws Exception { + + String atchFileId = (String) commandMap.get("atchFileId"); + String fileSn = (String) commandMap.get("fileSn"); + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + if (isAuthenticated) { + + FileVO fileVO = new FileVO(); + fileVO.setAtchFileId(atchFileId); + fileVO.setFileSn(fileSn); + FileVO fvo = fileService.selectFileInf(fileVO); + + File uFile = new File(fvo.getFileStreCours(), fvo.getStreFileNm()); + long fSize = uFile.length(); + + if (fSize > 0) { + String mimetype = "application/x-msdownload"; + + //response.setBufferSize(fSize); // OutOfMemeory 발생 + response.setContentType(mimetype); + //response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fvo.getOrignlFileNm(), "utf-8") + "\""); + setDisposition(fvo.getOrignlFileNm(), request, response); + //response.setContentLength(fSize); + + /* + * FileCopyUtils.copy(in, response.getOutputStream()); + * in.close(); + * response.getOutputStream().flush(); + * response.getOutputStream().close(); + */ + BufferedInputStream in = null; + BufferedOutputStream out = null; + + try { + in = new BufferedInputStream(new FileInputStream(uFile)); + out = new BufferedOutputStream(response.getOutputStream()); + + FileCopyUtils.copy(in, out); + out.flush(); + } catch (Exception ex) { + // 다음 Exception 무시 처리 + // Connection reset by peer: socket write error + LOGGER.debug("IGNORED: {}", ex.getMessage()); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + if (out != null) { + try { + out.close(); + } catch (Exception ignore) { + LOGGER.debug("IGNORED: {}", ignore.getMessage()); + } + } + } + + } else { + response.setContentType("application/x-msdownload"); + + PrintWriter printwriter = response.getWriter(); + printwriter.println(""); + printwriter.println("


    Could not get file name:
    " + fvo.getOrignlFileNm() + "

    "); + printwriter.println("


    Back

    "); + printwriter.println("


    © webAccess"); + printwriter.println(""); + printwriter.flush(); + printwriter.close(); + } + } + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java b/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java new file mode 100644 index 0000000..0105ef5 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java @@ -0,0 +1,157 @@ +package egovframework.com.cmm.web; + +import java.util.List; +import java.util.Map; + +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; +import egovframework.com.cmm.util.EgovUserDetailsHelper; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +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.bind.annotation.RequestParam; + +/** + * 파일 조회, 삭제, 다운로드 처리를 위한 컨트롤러 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.03.25  이삼섭          최초 생성
    + *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
    + *
    + * 
    + */ +@Controller +public class EgovFileMngController { + + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileService; + + /** + * 첨부파일에 대한 목록을 조회한다. + * + * @param fileVO + * @param atchFileId + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/selectFileInfs.do") + public String selectFileInfs(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map commandMap, ModelMap model) throws Exception { + String atchFileId = (String)commandMap.get("param_atchFileId"); + + fileVO.setAtchFileId(atchFileId); + List result = fileService.selectFileInfs(fileVO); + + model.addAttribute("fileList", result); + model.addAttribute("updateFlag", "N"); + model.addAttribute("fileListCnt", result.size()); + model.addAttribute("atchFileId", atchFileId); + + return "cmm/fms/EgovFileList"; + } + + /** + * 첨부파일 변경을 위한 수정페이지로 이동한다. + * + * @param fileVO + * @param atchFileId + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/selectFileInfsForUpdate.do") + public String selectFileInfsForUpdate(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map commandMap, + ModelMap model) throws Exception { + + String atchFileId = (String)commandMap.get("param_atchFileId"); + + fileVO.setAtchFileId(atchFileId); + + List result = fileService.selectFileInfs(fileVO); + + model.addAttribute("fileList", result); + model.addAttribute("updateFlag", "Y"); + model.addAttribute("fileListCnt", result.size()); + model.addAttribute("atchFileId", atchFileId); + + return "cmm/fms/EgovFileList"; + } + + /** + * 첨부파일에 대한 삭제를 처리한다. + * + * @param fileVO + * @param returnUrl + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/deleteFileInfs.do") + public String deleteFileInf(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam("returnUrl") String returnUrl, + HttpServletRequest request, + ModelMap model) throws Exception { + + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + if (isAuthenticated) { + fileService.deleteFileInf(fileVO); + } + + //-------------------------------------------- + // contextRoot가 있는 경우 제외 시켜야 함 + //-------------------------------------------- + ////return "forward:/cmm/fms/selectFileInfs.do"; + //return "forward:" + returnUrl; + + if ("".equals(request.getContextPath()) || "/".equals(request.getContextPath())) { + return "forward:" + returnUrl; + } + + if (returnUrl.startsWith(request.getContextPath())) { + return "forward:" + returnUrl.substring(returnUrl.indexOf("/", 1)); + } else { + return "forward:" + returnUrl; + } + ////------------------------------------------ + } + + /** + * 이미지 첨부파일에 대한 목록을 조회한다. + * + * @param fileVO + * @param atchFileId + * @param sessionVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping("/cmm/fms/selectImageFileInfs.do") + public String selectImageFileInfs(@ModelAttribute("searchVO") FileVO fileVO, @RequestParam Map commandMap, + ModelMap model) throws Exception { + + String atchFileId = (String)commandMap.get("atchFileId"); + + fileVO.setAtchFileId(atchFileId); + List result = fileService.selectImageFileList(fileVO); + + model.addAttribute("fileList", result); + + return "cmm/fms/EgovImgFileList"; + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java b/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java new file mode 100644 index 0000000..e114cc4 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java @@ -0,0 +1,145 @@ +package egovframework.com.cmm.web; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.Map; + +import egovframework.com.cmm.SessionVO; +import egovframework.com.cmm.service.EgovFileMngService; +import egovframework.com.cmm.service.FileVO; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + + +/** + * @Class Name : EgovImageProcessController.java + * @Description : + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2009. 4. 2. 이삼섭 + * 2011.08.31. JJY 경량환경 템플릿 커스터마이징버전 생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 4. 2. + * @version + * @see + * + */ +@Controller +public class EgovImageProcessController extends HttpServlet { + + /** + * serialVersion UID + */ + private static final long serialVersionUID = -6339945210971171173L; + + @Resource(name = "EgovFileMngService") + private EgovFileMngService fileService; + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovImageProcessController.class); + + /** + * 첨부된 이미지에 대한 미리보기 기능을 제공한다. + * + * @param atchFileId + * @param fileSn + * @param sessionVO + * @param model + * @param response + * @throws Exception + */ + @SuppressWarnings("resource") + @RequestMapping("/cmm/fms/getImage.do") + public void getImageInf(SessionVO sessionVO, ModelMap model, @RequestParam Map commandMap, HttpServletResponse response) throws Exception { + + //@RequestParam("atchFileId") String atchFileId, + //@RequestParam("fileSn") String fileSn, + String atchFileId = (String)commandMap.get("atchFileId"); + String fileSn = (String)commandMap.get("fileSn"); + + FileVO vo = new FileVO(); + + vo.setAtchFileId(atchFileId); + vo.setFileSn(fileSn); + + FileVO fvo = fileService.selectFileInf(vo); + + //String fileLoaction = fvo.getFileStreCours() + fvo.getStreFileNm(); + + File file = new File(fvo.getFileStreCours(), fvo.getStreFileNm()); + FileInputStream fis = null; new FileInputStream(file); + + BufferedInputStream in = null; + ByteArrayOutputStream bStream = null; + try{ + fis = new FileInputStream(file); + in = new BufferedInputStream(fis); + bStream = new ByteArrayOutputStream(); + int imgByte; + while ((imgByte = in.read()) != -1) { + bStream.write(imgByte); + } + + String type = ""; + + if (fvo.getFileExtsn() != null && !"".equals(fvo.getFileExtsn())) { + if ("jpg".equals(fvo.getFileExtsn().toLowerCase())) { + type = "image/jpeg"; + } else { + type = "image/" + fvo.getFileExtsn().toLowerCase(); + } + type = "image/" + fvo.getFileExtsn().toLowerCase(); + + } else { + LOGGER.debug("Image fileType is null."); + } + + response.setHeader("Content-Type", type); + response.setContentLength(bStream.size()); + + bStream.writeTo(response.getOutputStream()); + + response.getOutputStream().flush(); + response.getOutputStream().close(); + + + }catch(Exception e){ + LOGGER.debug("{}", e); + }finally{ + if (bStream != null) { + try { + bStream.close(); + } catch (Exception est) { + LOGGER.debug("IGNORED: {}", est.getMessage()); + } + } + if (in != null) { + try { + in.close(); + } catch (Exception ei) { + LOGGER.debug("IGNORED: {}", ei.getMessage()); + } + } + if (fis != null) { + try { + fis.close(); + } catch (Exception efis) { + LOGGER.debug("IGNORED: {}", efis.getMessage()); + } + } + } + } +} diff --git a/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java b/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java new file mode 100644 index 0000000..9e17331 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/web/EgovMultipartResolver.java @@ -0,0 +1,134 @@ +package egovframework.com.cmm.web; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the ";License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS"; BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import org.apache.commons.fileupload.FileItem; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartException; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + +/** + * 실행환경의 파일업로드 처리를 위한 기능 클래스 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
    + * << 개정이력(Modification Information) >>
    + *
    + *   수정일      수정자           수정내용
    + *  -------    --------    ---------------------------
    + *   2009.3.25  이삼섭          최초 생성
    + *   2011.06.11 서준식          스프링 3.0 업그레이드 API변경으로인한 수정
    + *
    + * 
    + */ +public class EgovMultipartResolver extends CommonsMultipartResolver { + public EgovMultipartResolver() { + } + + + /** + * 첨부파일 처리를 위한 multipart resolver를 생성한다. + * + * @param servletContext + */ + public EgovMultipartResolver(ServletContext servletContext) { + super(servletContext); + } + + /** + * multipart에 대한 parsing을 처리한다. + */ + @SuppressWarnings("rawtypes") + @Override + protected MultipartParsingResult parseFileItems(List fileItems, String encoding) { + + //스프링 3.0변경으로 수정한 부분 + MultiValueMap multipartFiles = new LinkedMultiValueMap(); + Map multipartParameters = new HashMap(); + + // Extract multipart files and multipart parameters. + for (Iterator it = fileItems.iterator(); it.hasNext();) { + FileItem fileItem = (FileItem)it.next(); + + if (fileItem.isFormField()) { + + String value = null; + if (encoding != null) { + try { + value = fileItem.getString(encoding); + } catch (UnsupportedEncodingException ex) { + if (logger.isWarnEnabled()) { + logger.warn("Could not decode multipart item '" + fileItem.getFieldName() + "' with encoding '" + encoding + + "': using platform default"); + } + value = fileItem.getString(); + } + } else { + value = fileItem.getString(); + } + String[] curParam = multipartParameters.get(fileItem.getFieldName()); + if (curParam == null) { + // simple form field + multipartParameters.put(fileItem.getFieldName(), new String[] { value }); + } else { + // array of simple form fields + String[] newParam = StringUtils.addStringToArray(curParam, value); + multipartParameters.put(fileItem.getFieldName(), newParam); + } + } else { + + if (fileItem.getSize() > 0) { + // multipart file field + CommonsMultipartFile file = new CommonsMultipartFile(fileItem); + + + //스프링 3.0 업그레이드 API변경으로인한 수정 + List fileList = new ArrayList(); + fileList.add(file); + + + if (multipartFiles.put(fileItem.getName(), fileList) != null) { // CHANGED!! + throw new MultipartException("Multiple files for field name [" + file.getName() + + "] found - not supported by MultipartResolver"); + } + if (logger.isDebugEnabled()) { + logger.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize() + " bytes with original filename [" + + file.getOriginalFilename() + "], stored " + file.getStorageDescription()); + } + } + + } + } + + return new MultipartParsingResult(multipartFiles, multipartParameters, null); + } +} diff --git a/src/main/java/gtpa/brs/bbsfro/service/BbsFroService.java b/src/main/java/gtpa/brs/bbsfro/service/BbsFroService.java new file mode 100644 index 0000000..ca07f71 --- /dev/null +++ b/src/main/java/gtpa/brs/bbsfro/service/BbsFroService.java @@ -0,0 +1,65 @@ +package gtpa.brs.bbsfro.service; + +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : jackt + * Date : 27/05/2019 + * TIME : 9:34 AM + * Project : brspw + * Class : BbsFroService + * Desc : + * ///////////////////////////////////////////////////// + */ +public interface BbsFroService { + //알려드립니다 + public List getNoticeList(Map param); + + public Map getNoticeCnt(Map param); + + public Map getNoticeDetail(Map param); + + public Map noticeInsert(Map param); + + public Map noticeUpdate(Map param); + + public Map noticeDelete(Map param); + + //자주찾는 질문 + public List getQsearchList(Map param); + + public Map getQsearchCnt(Map param); + + public Map getQsearchDetail(Map param); + + public Map qsearchInsert(Map param); + + public Map qsearchUpdate(Map param); + + public Map qsearchDelete(Map param); + + //자료실 + public List getFileRegistList(Map param); + + public Map getFileRegistCnt(Map param); + + public Map getFileRegistDetail(Map param); + + public Map fileRegistInsert(Map param); + + public Map fileRegistUpdate(Map param); + + public Map fileRegistDelete(Map param); + + //파일정보 -> 공통 + public List getFileDetailInfo(Map param); + + public Map fileDownload(Map param); +} + + + + diff --git a/src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroMapper.java b/src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroMapper.java new file mode 100644 index 0000000..10a8c3b --- /dev/null +++ b/src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroMapper.java @@ -0,0 +1,154 @@ +package gtpa.brs.bbsfro.service.impl; + +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : jackt + *

    + * Date : 27/05/2019 + * TIME : 9:34 AM + * Project : brspw + * Class : BbsFroMapper + * Desc : + * ///////////////////////////////////////////////////// + */ +@Repository("bbsFroDao") +public class BbsFroMapper extends EgovAbstractMapper { + private String NAMESPACE = "BbsFroDao"; + + //알려드립니다 + public List getNoticeList(Map param) { + return selectList(NAMESPACE + ".getNoticeList", param); + } + + ; + + public Map getNoticeCnt(Map param) { + return selectOne(NAMESPACE + ".getNoticeCnt", param); + } + + ; + + public Map getNoticeDetail(Map param) { + return selectOne(NAMESPACE + ".getNoticeDetail", param); + } + + ; + + public int noticeInsert(Map param) { + return insert(NAMESPACE + ".noticeInsert", param); + } + + ; + + public int noticeUpdate(Map param) { + return update(NAMESPACE + ".noticeUpdate", param); + } + + ; + + public int noticeDelete(Map param) { + return update(NAMESPACE + ".noticeDelete", param); + } + + ; + + //자주찾는 질문 + public List getQsearchList(Map param) { + return selectList(NAMESPACE + ".getQsearchList", param); + } + + ; + + public Map getQsearchCnt(Map param) { + return selectOne(NAMESPACE + ".getQsearchCnt", param); + } + + ; + + public Map getQsearchDetail(Map param) { + return selectOne(NAMESPACE + ".getQsearchDetail", param); + } + + ; + + public int qsearchInsert(Map param) { + return insert(NAMESPACE + ".qsearchInsert", param); + } + + ; + + public int qsearchUpdate(Map param) { + return update(NAMESPACE + ".qsearchUpdate", param); + } + + ; + + public int qsearchDelete(Map param) { + return update(NAMESPACE + ".qsearchDelete", param); + } + + ; + + //자료실 + public List getFileRegistList(Map param) { + return selectList(NAMESPACE + ".getFileRegistList", param); + } + + ; + + public Map getFileRegistCnt(Map param) { + return selectOne(NAMESPACE + ".getFileRegistCnt", param); + } + + ; + + public Map getFileRegistDetail(Map param) { + return selectOne(NAMESPACE + ".getFileRegistDetail", param); + } + + ; + + public int fileRegistInsert(Map param) { + return insert(NAMESPACE + ".fileRegistInsert", param); + } + + ; + + public int fileRegistUpdate(Map param) { + return update(NAMESPACE + ".fileRegistUpdate", param); + } + + ; + + public int fileRegistDelete(Map param) { + return update(NAMESPACE + ".fileRegistDelete", param); + } + + ; + + //파일정보 -> 공통 + public List getFileDetailInfo(Map param) { + return selectList(NAMESPACE + ".getFileDetailInfo", param); + } + + ; + + public Map fileDownload(Map param) { + return selectOne(NAMESPACE + ".fileDownload", param); + } + + ; + +} + + + + diff --git a/src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroServiceImpl.java b/src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroServiceImpl.java new file mode 100644 index 0000000..d56312d --- /dev/null +++ b/src/main/java/gtpa/brs/bbsfro/service/impl/BbsFroServiceImpl.java @@ -0,0 +1,212 @@ +package gtpa.brs.bbsfro.service.impl; + +import java.util.List; +import java.util.Map; +import java.util.HashMap; + +import javax.annotation.Resource; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.springframework.stereotype.Service; + +import gtpa.brs.bbsfro.service.BbsFroService; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : jackt + * Date : 27/05/2019 + * TIME : 9:34 AM + * Project : brspw + * Class : BbsFroServiceImpl + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service +public class BbsFroServiceImpl implements BbsFroService { + + @Resource(name = "bbsFroDao") + private BbsFroMapper bbsFroMapper; + + //알려드립니다 + @Override + public List getNoticeList(Map param) { + List rs = null; + rs = bbsFroMapper.getNoticeList(param); + return rs; + } + + @Override + public Map getNoticeCnt(Map param) { + Map rs = null; + rs = bbsFroMapper.getNoticeCnt(param); + return rs; + } + + @Override + public Map getNoticeDetail(Map param) { + Map rs = null; + rs = bbsFroMapper.getNoticeDetail(param); + return rs; + } + + @Override + public Map noticeInsert(Map param) { + int iCnt = 0; + iCnt = bbsFroMapper.noticeInsert(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(iCnt)); + return result; + } + + @Override + public Map noticeUpdate(Map param) { + int uCnt = 0; + uCnt = bbsFroMapper.noticeUpdate(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("UCNT", String.valueOf(uCnt)); + return result; + } + + @Override + public Map noticeDelete(Map param) { + int dCnt = 0; + dCnt = bbsFroMapper.noticeDelete(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("DCNT", String.valueOf(dCnt)); + return result; + } + + //자주찾는 질문 + @Override + public List getQsearchList(Map param) { + List rs = null; + rs = bbsFroMapper.getQsearchList(param); + return rs; + } + + @Override + public Map getQsearchCnt(Map param) { + Map rs = null; + rs = bbsFroMapper.getQsearchCnt(param); + return rs; + } + + @Override + public Map getQsearchDetail(Map param) { + Map rs = null; + rs = bbsFroMapper.getQsearchDetail(param); + return rs; + } + + @Override + public Map qsearchInsert(Map param) { + int iCnt = 0; + iCnt = bbsFroMapper.qsearchInsert(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(iCnt)); + return result; + } + + @Override + public Map qsearchUpdate(Map param) { + int uCnt = 0; + uCnt = bbsFroMapper.qsearchUpdate(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("UCNT", String.valueOf(uCnt)); + return result; + } + + @Override + public Map qsearchDelete(Map param) { + int dCnt = 0; + dCnt = bbsFroMapper.qsearchDelete(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("DCNT", String.valueOf(dCnt)); + return result; + } + + + //자료실 + @Override + public List getFileRegistList(Map param) { + List rs = null; + rs = bbsFroMapper.getFileRegistList(param); + return rs; + } + + @Override + public Map getFileRegistCnt(Map param) { + Map rs = null; + rs = bbsFroMapper.getFileRegistCnt(param); + return rs; + } + + @Override + public Map getFileRegistDetail(Map param) { + Map rs = null; + rs = bbsFroMapper.getFileRegistDetail(param); + return rs; + } + + @Override + public Map fileRegistInsert(Map param) { + int iCnt = 0; + iCnt = bbsFroMapper.fileRegistInsert(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(iCnt)); + return result; + } + + @Override + public Map fileRegistUpdate(Map param) { + int uCnt = 0; + uCnt = bbsFroMapper.fileRegistUpdate(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("UCNT", String.valueOf(uCnt)); + return result; + } + + @Override + public Map fileRegistDelete(Map param) { + int dCnt = 0; + dCnt = bbsFroMapper.fileRegistDelete(param); + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("DCNT", String.valueOf(dCnt)); + return result; + } + + //파일정보 -> 공통 + @Override + public List getFileDetailInfo(Map param) { + List rs = null; + rs = bbsFroMapper.getFileDetailInfo(param); + return rs; + } + + @Override + public Map fileDownload(Map param) { + Map rs = null; + rs = bbsFroMapper.fileDownload(param); + return rs; + } +} diff --git a/src/main/java/gtpa/brs/bbsfro/web/BbsFroController.java b/src/main/java/gtpa/brs/bbsfro/web/BbsFroController.java new file mode 100644 index 0000000..6ec6a73 --- /dev/null +++ b/src/main/java/gtpa/brs/bbsfro/web/BbsFroController.java @@ -0,0 +1,331 @@ +package gtpa.brs.bbsfro.web; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.util.IOUtils; + +import gtpa.brs.bbsfro.service.BbsFroService; +import gtpa.brs.common.web.BaseController; +import gtpa.brs.util.Result; + + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : jackt + * Date : 27/05/2019 + * TIME : 11:30 AM + * Project : brspw + * Class : BbsFroController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class BbsFroController extends BaseController{ + private Logger logger = LoggerFactory.getLogger(BbsFroController.class); + + @Autowired + BbsFroService bbsFroService; + + @Resource(name = "globalsProperties") + private Properties env; + + // 알려드립니다 목록 + @RequestMapping(value = "/bbsfro/getNoticeList.do",method = RequestMethod.POST) + public @ResponseBody Map getNoticeList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_searchParm"); + + result.setData("TOTAL_CNT", bbsFroService.getNoticeCnt(dbParam)); + result.setData("dlt_resultList", bbsFroService.getNoticeList(dbParam)); + + logger.info("Result Data List: " + result.getResult()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + // 알려드립니다 상세 + @RequestMapping(value = "/bbsfro/getNoticeDetail.do",method = RequestMethod.POST) + public @ResponseBody Map getNoticeDetail(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_param"); + result.setData("dma_result", bbsFroService.getNoticeDetail(dbParam)); + + logger.info("Result Data Detail: " + result.getResult()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + // 자주찾는질문 목록 + @RequestMapping(value = "/bbsfro/getQsearchList.do",method = RequestMethod.POST) + public @ResponseBody Map getQsearchList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_searchParm"); + + result.setData("TOTAL_CNT", bbsFroService.getQsearchCnt(dbParam)); + result.setData("dlt_resultList", bbsFroService.getQsearchList(dbParam)); + + logger.info("Result Data List: " + result.getResult()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + // 자주찾는질문 상세 + @RequestMapping(value = "/bbsfro/getQsearchDetail.do",method = RequestMethod.POST) + public @ResponseBody Map getQsearchDetail(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_param"); + result.setData("dma_result", bbsFroService.getQsearchDetail(dbParam)); + + logger.info("Result Data Detail: " + result.getResult()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + // 자료실 목록 + @RequestMapping(value = "/bbsfro/getFileRegistList.do",method = RequestMethod.POST) + public @ResponseBody Map getFileRegistList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_searchParm"); + + result.setData("TOTAL_CNT", bbsFroService.getFileRegistCnt(dbParam)); + result.setData("dlt_resultList", bbsFroService.getFileRegistList(dbParam)); + + logger.info("Result Data List: " + result.getResult()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + // 자료실 상세 + @RequestMapping(value = "/bbsfro/getFileRegistDetail.do",method = RequestMethod.POST) + public @ResponseBody Map getFileRegistDetail(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_param"); + Map fileRegDetail = bbsFroService.getFileRegistDetail(dbParam); + result.setData("dma_result", fileRegDetail); + + String fileType = StringUtils.defaultIfBlank((String)fileRegDetail.get("ATCH_FILE_TY"), ""); + if(!"".equals(fileType)) { + dbParam.put("ATCH_FILE_ID",fileRegDetail.get("ATCH_FILE_ID")); + if("01".equals(fileType)) { + dbParam.put("ATCH_FILE_TY","SY"); + }else { + dbParam.put("ATCH_FILE_TY","SN"); + } + //dbParam.put("ATCH_FILE_TY",fileRegDetail.get("ATCH_FILE_TY")); + List fileList = bbsFroService.getFileDetailInfo(dbParam); + result.setData("dlt_orgFileList", fileList); + } + + logger.info("Result Data Detail: " + result.getResult()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + // 게시판용 파일다운로드 + @RequestMapping(value = "/bbs/fileDownload.do",method = RequestMethod.GET) + public void getFileDownload(HttpServletRequest request, HttpServletResponse response) { + try { + logger.info("====#####== POST fileDownload ======="); + // fileId를 이용해서 DB에서 serverFileName, localFileName과 fileDir를 가져와야 한다. + String fileId = request.getParameter("fileId"); + String atchFileTy = request.getParameter("atchFileTy"); + String fileSeq = request.getParameter("fileSeq"); + Map param = new HashMap(); + param.put("ATCH_FILE_ID", fileId); + param.put("ATCH_FILE_TY", atchFileTy); + if (fileSeq == null) fileSeq = "0"; + param.put("FILE_SEQ_NO", fileSeq); + Map fileInfo = bbsFroService.fileDownload(param); + logger.info("fileInfo::" + fileInfo); + + String browser = getBrowser(request); + logger.info("browser::" + browser); + if (fileInfo != null) { + String serverFileName = (String) fileInfo.get("STRE_FILE_NM"); + String localFileName = (String) fileInfo.get("ORGINL_FILE_NM"); + String fileDir = (String) fileInfo.get("FILE_STRE_PATH_NM"); + String encodedFilename = null; + + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(localFileName, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 + encodedFilename = URLEncoder.encode(localFileName, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + new String(localFileName.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + new String(localFileName.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < localFileName.length(); i++) { + char c = localFileName.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } + + Path file = Paths.get(fileDir, serverFileName); + + if (Files.exists(file)) { + response.setContentType("application/octet-stream;"); + response.addHeader("Content-Disposition", "attachment; filename=" + encodedFilename); + try { + logger.info("file::" + file); + Files.copy(file, response.getOutputStream()); + response.getOutputStream().flush(); + } catch (IOException ex) { + logger.error("[process error::"+"ex.getMessage()" + "]",ex); + } + } else { + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + } else { + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::"+ "" + "]",e); + } + } + + + /** + * 브라우저 구분 얻기. + * + * @param request + * @return + */ + private String getBrowser(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1) { + return "MSIE"; + } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 + return "Trident"; + } else if (header.indexOf("Chrome") > -1) { + return "Chrome"; + } else if (header.indexOf("Opera") > -1) { + return "Opera"; + } + return "Firefox"; + } + +} diff --git a/src/main/java/gtpa/brs/common/service/CommonService.java b/src/main/java/gtpa/brs/common/service/CommonService.java new file mode 100644 index 0000000..5fb30d6 --- /dev/null +++ b/src/main/java/gtpa/brs/common/service/CommonService.java @@ -0,0 +1,28 @@ +package gtpa.brs.common.service; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 23/04/2019 + * TIME : 1:30 PM + * Project : BRSPW + * Class : CommonService + * Desc : + * ///////////////////////////////////////////////////// + */ +public interface CommonService { + List getCommonCode(); + + List getCommonCode(Map param); + + Map fileDownload(Map param); + + List exsistNoticePopups() throws SQLException; + + Map exsistNoticePopup(Map param) throws SQLException; +} diff --git a/src/main/java/gtpa/brs/common/service/impl/CommonMapper.java b/src/main/java/gtpa/brs/common/service/impl/CommonMapper.java new file mode 100644 index 0000000..bfa9183 --- /dev/null +++ b/src/main/java/gtpa/brs/common/service/impl/CommonMapper.java @@ -0,0 +1,44 @@ +package gtpa.brs.common.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 23/04/2019 + * TIME : 1:33 PM + * Project : BRSPW + * Class : CommonMapper + * Desc : + * ///////////////////////////////////////////////////// + */ +@Repository("commonDao") +public class CommonMapper extends EgovAbstractMapper { + private String NAMESPACE = "CommonDAO"; + + public List getCommonCode() { + return selectList(NAMESPACE + ".getAllCommonCode"); + } + + public List getCommonCode(Map param) { + return selectList(NAMESPACE + ".getCommonCode", param); + } + + public Map fileDownload(Map param) { + return selectOne(NAMESPACE + ".fileDownload", param); + } + + public List exsistNoticePopups() throws SQLException { + return selectList(NAMESPACE + ".exsistNoticePopups"); + } + + public Map exsistNoticePopup(Map param) throws SQLException { + return selectOne(NAMESPACE + ".exsistNoticePopup", param); + } +} diff --git a/src/main/java/gtpa/brs/common/service/impl/CommonServiceImpl.java b/src/main/java/gtpa/brs/common/service/impl/CommonServiceImpl.java new file mode 100644 index 0000000..8f64fd9 --- /dev/null +++ b/src/main/java/gtpa/brs/common/service/impl/CommonServiceImpl.java @@ -0,0 +1,53 @@ +package gtpa.brs.common.service.impl; + +import gtpa.brs.common.service.CommonService; +import gtpa.brs.common.service.impl.CommonMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 23/04/2019 + * TIME : 1:32 PM + * Project : BRSPW + * Class : CommonServiceImpl + * Desc : + * ///////////////////////////////////////////////////// + */ +@Service("commonService") +public class CommonServiceImpl implements CommonService { + + @Resource(name = "commonDao") + CommonMapper commonMapper; + + @Override + public List getCommonCode() { + return commonMapper.getCommonCode(); + } + + @Override + public List getCommonCode(Map param) { + return commonMapper.getCommonCode(param); + } + + @Override + public Map fileDownload(Map param) { + return commonMapper.fileDownload(param); + } + + @Override + public List exsistNoticePopups() throws SQLException { + return commonMapper.exsistNoticePopups(); + } + + @Override + public Map exsistNoticePopup(Map param) throws SQLException{ + return commonMapper.exsistNoticePopup(param); + } +} diff --git a/src/main/java/gtpa/brs/common/web/BaseController.java b/src/main/java/gtpa/brs/common/web/BaseController.java new file mode 100644 index 0000000..872804d --- /dev/null +++ b/src/main/java/gtpa/brs/common/web/BaseController.java @@ -0,0 +1,30 @@ +package gtpa.brs.common.web; + +import java.util.Enumeration; +import javax.servlet.http.HttpServletRequest; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; + +@SuppressFBWarnings +public class BaseController { + + private Logger logger = LoggerFactory.getLogger(BaseController.class); + + @Autowired + protected MessageSource messageSource; + + public void printRequest(HttpServletRequest pReq) { + + Enumeration eParam = pReq.getParameterNames(); + while (eParam.hasMoreElements()) { + String pName = (String) eParam.nextElement(); + String pValue = pReq.getParameter(pName); + + logger.info("#### RequestParamMap = " + pName + " : " + pValue); + } + } +} diff --git a/src/main/java/gtpa/brs/common/web/CommonController.java b/src/main/java/gtpa/brs/common/web/CommonController.java new file mode 100644 index 0000000..8a86b0f --- /dev/null +++ b/src/main/java/gtpa/brs/common/web/CommonController.java @@ -0,0 +1,333 @@ +package gtpa.brs.common.web; + +import gtpa.brs.common.service.CommonService; +import gtpa.brs.util.Result; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; + +import javax.activation.MimetypesFileTypeMap; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 23/04/2019 + * TIME : 1:30 PM + * Project : BRSPW + * Class : CommonController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class CommonController { + + private Logger logger = LoggerFactory.getLogger(CommonController.class); + /** + * The Common service. + */ + @Autowired + CommonService commonService; + + @Resource(name = "globalsProperties") + private Properties env; + + /** + * Get common code result. + * + * @return the result + */ + @RequestMapping(value = "/common/getCommonCode.do", method = RequestMethod.GET) + public @ResponseBody + Result getCommonCode() { + Result result = new Result(); + List codeList = new ArrayList<>(); + try { + codeList = commonService.getCommonCode(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } finally { + result.setData("code", codeList); + } + return result; + } + + /** + * Get common code result. + * + * @param param the param + * @return the result + */ + @RequestMapping(value = "/common/getCommonCode.do", method = RequestMethod.POST) + public @ResponseBody + Result getCommonCode(@RequestBody Map param) { + Result result = new Result(); + List codeList = new ArrayList<>(); + Map params = (Map) param.get("param"); + try { + codeList = commonService.getCommonCode(params); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } finally { + result.setData("code", codeList); + } + return result; + } + + @RequestMapping(value = "/fileDownload.do", method = RequestMethod.GET) + public void getFileDownload(HttpServletRequest request, HttpServletResponse response) throws IOException { + try { + // fileId를 이용해서 DB에서 serverFileName, localFileName과 fileDir를 가져와야 한다. + String fileId = request.getParameter("fileId"); + String atchFileTy = request.getParameter("atchFileTy"); + String fileSeq = request.getParameter("fileSeq"); + Map param = new HashMap(); + param.put("ATCH_FILE_ID", fileId); + param.put("ATCH_FILE_TY", atchFileTy); + if (fileSeq == null) fileSeq = "0"; + param.put("FILE_SEQ_NO", fileSeq); + Map fileInfo = commonService.fileDownload(param); + + String browser = getBrowser(request); + logger.info("browser::" + browser); + if (fileInfo != null) { + String serverFileName = (String) fileInfo.get("STRE_FILE_NM"); + String localFileName = (String) fileInfo.get("ORGINL_FILE_NM"); + String fileDir = (String) fileInfo.get("FILE_STRE_PATH_NM"); + String encodedFilename = null; + + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(localFileName, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 + encodedFilename = URLEncoder.encode(localFileName, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + new String(localFileName.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + new String(localFileName.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < localFileName.length(); i++) { + char c = localFileName.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } + + Path file = Paths.get(fileDir, serverFileName); + + if (Files.exists(file)) { + response.setContentType("application/octet-stream;"); + response.addHeader("Content-Disposition", "attachment; filename=" + encodedFilename); + try { + Files.copy(file, response.getOutputStream()); + response.getOutputStream().flush(); + } catch (IOException ex) { + logger.error("[process error::" + "ex.getMessage()" + "]", ex); + } + } else { + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + } else { + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/fileDownloadTmp.do", method = RequestMethod.GET) + public void getFileDownloadTmp(HttpServletRequest request, HttpServletResponse response) throws IOException { + try { + // fileId를 이용해서 DB에서 serverFileName, localFileName과 fileDir를 가져와야 한다. + String fileId = request.getParameter("fileId"); + String atchFileTy = request.getParameter("atchFileTy"); + String fileSeq = request.getParameter("fileSeq"); + Map param = new HashMap(); + param.put("ATCH_FILE_ID", fileId); + param.put("ATCH_FILE_TY", atchFileTy); + if (fileSeq == null) fileSeq = "0"; + param.put("FILE_SEQ_NO", fileSeq); + Map fileInfo = commonService.fileDownload(param); + if (fileInfo != null) { + String serverFileName = (String) fileInfo.get("STRE_FILE_NM"); + String localFileName = (String) fileInfo.get("ORGINL_FILE_NM"); + String fileDir = (String) fileInfo.get("FILE_STRE_PATH_NM"); + + Path file = Paths.get(fileDir, serverFileName); + + if (Files.exists(file)) { + response.setContentType("application/octet-stream;"); + response.addHeader("Content-Disposition", "attachment; filename=" + localFileName); + try { + Files.copy(file, response.getOutputStream()); + response.getOutputStream().flush(); + } catch (IOException ex) { + logger.error("[process error::" + "ex.getMessage()" + "]", ex); + } + } else { + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + } else { + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/common/imageView.do", method = RequestMethod.GET, produces = {MediaType.IMAGE_PNG_VALUE, MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_JPEG_VALUE}) + public @ResponseBody + ResponseEntity getImage(@RequestParam("fileName") String fileName) throws IOException { + InputStream inputStream = null; + HttpHeaders responseHeaders = new HttpHeaders(); + byte[] out = new byte[0]; + try { + if (fileName == null || "".equals(fileName)) { + logger.error("fileName null ::" + fileName); + return ResponseEntity.badRequest().contentLength(0).build(); + } else { + fileName = fileName.replaceAll("\\\\", ""); + fileName = fileName.replaceAll("\\.\\.", ""); + } + String extension = FilenameUtils.getExtension(fileName); + String path = FilenameUtils.getPrefix(fileName) + FilenameUtils.getPath(fileName); + String name = FilenameUtils.getBaseName(fileName); + + File file = new File(path, name + "." + extension); + //File file = new File("/"+FilenameUtils.getPath(fileName),FilenameUtils.getName(fileName)); //Fix + //File file = new File(env.getProperty("Globals.FilePath"),FilenameUtils.getName(fileName)); //Fix + if (file.exists()) { + inputStream = new FileInputStream(path + name + "." + extension); + MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap(); + String type = mimeTypesMap.getContentType(file); + out = IOUtils.toByteArray(inputStream); + responseHeaders.add("Content-Type", type); + + } else { + logger.error("file not exsist ::" + fileName); + return ResponseEntity.ok().contentLength(0).build(); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + return ResponseEntity.notFound().build(); + } catch (Exception e) { + logger.error("Exception ::" + fileName); + return ResponseEntity.notFound().build(); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException io) { + logger.warn("inputStream close error"); + } + return new ResponseEntity(out, responseHeaders, HttpStatus.OK); + } + } + + /** + * 브라우저 구분 얻기. + * + * @param request + * @return + */ + private String getBrowser(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1) { + return "MSIE"; + } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 + return "Trident"; + } else if (header.indexOf("Chrome") > -1) { + return "Chrome"; + } else if (header.indexOf("Opera") > -1) { + return "Opera"; + } + return "Firefox"; + } + + @RequestMapping(value = "/common/exsistNoticePopup.do", method = RequestMethod.POST) + public @ResponseBody + Map exsistNoticePopup(@RequestBody Map param) { + Result result = new Result(); + Map params = (Map) param.get("param"); + try { + if (params != null && params.get("NOTICE_SEQ_NO") != null) { + Map popup = commonService.exsistNoticePopup(params); + if (popup != null) { + result.setData("popup", popup); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + } else { + List popupList = commonService.exsistNoticePopups(); + if (popupList.size() > 0) { + result.setData("popup", popupList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return result.getResult(); + } + + @GetMapping(value = "/common/moviePopup.do") + public ModelAndView moviePopup (HttpServletRequest request, HttpServletResponse response) { + String movieUrl = request.getParameter("movieUrl"); + if(movieUrl == null || movieUrl.equals("")){ + movieUrl = "none"; + } + ModelAndView mv = new ModelAndView(); + mv.setViewName("popup/moviePopup"); + mv.addObject("movieUrl", movieUrl); + return mv; + } +} diff --git a/src/main/java/gtpa/brs/fee/service/FeeService.java b/src/main/java/gtpa/brs/fee/service/FeeService.java new file mode 100644 index 0000000..3daa90b --- /dev/null +++ b/src/main/java/gtpa/brs/fee/service/FeeService.java @@ -0,0 +1,204 @@ +package gtpa.brs.fee.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * The interface Fee service. + */ +public interface FeeService { + /** + * Gets fee list. + * + * @param param the param + * @return the fee list + */ + Map getFeeList(Map param); + + /** + * Gets park fee list. + * + * @param param the param + * @return the park fee list + */ + Map getParkFeeList(Map param); + + /** + * Gets fees info. + * + * @param param the param + * @return the fees info + */ + Map getFeesInfo(Map param); + + /** + * Gets complaints list. + * + * @param param the param + * @return the complaints list + */ + Map getComplaintsList(Map param); + + /** + * Gets complaint info. + * + * @param param the param + * @return the complaint info + */ + Map getComplaintInfo(Map param); + + /** + * Gets complaint file info. + * + * @param param the param + * @return the complaint file info + */ + List getComplaintFileInfo(Map param); + + /** + * Is exsist complaint info map. + * + * @param param the param + * @return the map + */ + Map isExsistComplaintInfo(Map param); + + /** + * Submit a complaint map. + * + * @param complaintInfo the complaint info + * @param files the files + * @return the map + */ + Map submitAComplaint(Map complaintInfo, List files); + + /** + * Cancle a complaint map. + * + * @param param the param + * @return the map + */ + Map cancleAComplaint(Map param); + + /** + * Submit a complaint reply map. + * + * @param param the param + * @return the map + */ + Map submitAComplaintReply(Map param); + + /** + * Pay a fee map. + * + * @param param the param + * @return the map + */ + Map payAFee(Map param); + + /** + * Modify a complaint map. + * + * @param complaintInfo the complaint info + * @param files the files + * @return the map + */ + Map modifyAComplaint(Map complaintInfo, List files); + + /** + * Modify a complaint file delete map. + * + * @param param the param + * @return the map + */ + Map modifyAComplaintFileDelete(Map param); + + /** + * Modify a complaint file insert map. + * + * @param files the files + * @param param the param + * @return the map + */ + Map modifyAComplaintFileInsert(List files, Map param); + + /** + * Gets refnd list. + * + * @param param the param + * @return the refnd list + */ + Map getRefndList(Map param); + + /** + * Gets refnd cnt. + * + * @param param the param + * @return the refnd cnt + */ + public Map getRefndCnt(Map param); + + /** + * Gets refnd detail. + * + * @param param the param + * @return the refnd detail + */ + public Map getRefndDetail(Map param); + + /** + * Refnd insert map. + * + * @param param1 the param 1 + * @param param2 the param 2 + * @return the map + */ + public Map refndInsert(Map param1, Map param2); + + /** + * Refnd update map. + * + * @param param the param + * @return the map + */ + public Map refndUpdate(Map param); + + /** + * Privach check api map. + * + * @param param the param + * @param files the files + * @return the map + */ + public Map privachCheckApi(Map param, List files); + + /** + * Refund privach check api map. + * + * @param param the param + * @return the map + */ + public Map refundPrivachCheckApi(Map param); + + + /** + * Gets recipt list. + * + * @param param the param + * @return the recipt list + */ + Map getReciptList(Map param); + + Map getJmpTunnelFees(Map params); + + Map getYdpParkFees(Map params); + + Map getJgParkFees(Map params); + + Map getSbgRoadFees(Map params); + + Map getScgParkFees(Map params); + + List getFeeData(Map dbParam); +} diff --git a/src/main/java/gtpa/brs/fee/service/impl/FeeMapper.java b/src/main/java/gtpa/brs/fee/service/impl/FeeMapper.java new file mode 100644 index 0000000..07c6122 --- /dev/null +++ b/src/main/java/gtpa/brs/fee/service/impl/FeeMapper.java @@ -0,0 +1,131 @@ +package gtpa.brs.fee.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 20/05/2019 + * TIME : 5:49 PM + * Project : BRSPW + * Class : FeeMapper + * Desc : + * ///////////////////////////////////////////////////// + */ +@Repository("feeDao") +public class FeeMapper extends EgovAbstractMapper { + private String NAMESPACE = "FeeDAO"; + + + public List getComplaintsList(Map param) { + return selectList(NAMESPACE + ".getComplaintsList", param); + } + + public Map getComplaintInfo(Map param) { + return selectOne(NAMESPACE + ".getComplaintInfo", param); + } + + public List getComplaintFileInfo(Map param) { + return selectList(NAMESPACE + ".getComplaintFileInfo", param); + } + + + public Map isExsistComplaintInfo(Map param) { + return selectOne(NAMESPACE + ".isExsistComplaintInfo", param); + } + + public void submitAComplaintInfo(Map param) { + insert(NAMESPACE + ".submitAComplaintInfo", param); + } + + public void submitAComplaintDetail(Map param) { + insert(NAMESPACE + ".submitAComplaintDetail", param); + } + + public void submitAComplaintFile(List files) { + insert(NAMESPACE + ".submitAComplaintFile", files.get(0)); + } + + public void submitAComplaintFileMap(Map param) { + insert(NAMESPACE + ".submitAComplaintFile", param); + } + + public void submitAComplaintFileDetail(List files) { + insert(NAMESPACE + ".submitAComplaintFileDetail", files); + } + + public void modifyAComplaintInfo(Map param) { + update(NAMESPACE + ".modifyAComplaintInfo", param); + } + + public void modifyAComplaintDetail(Map param) { + update(NAMESPACE + ".modifyAComplaintDetail", param); + } + + public void modifyAComplaintFile(Map param) { + update(NAMESPACE + ".modifyAComplaintFile", param); + } + + public void modifyAComplaintFileDetail(Map param) { + update(NAMESPACE + ".modifyAComplaintFileDetail", param); + } + + public void cancleAComplaintInfo(Map param) { + update(NAMESPACE + ".cancleAComplaintInfo", param); + } + + public void cancleAComplaintDetail(Map param) { + update(NAMESPACE + ".cancleAComplaintDetail", param); + } + + public void submitAComplaintReply(Map param) { + insert(NAMESPACE + ".submitAComplaintReply", param); + } + + //환불정보 + public List getRefndList(Map param) { + return selectList(NAMESPACE + ".getRefndList", param); + } + + + public Map getRefndCnt(Map param) { + return selectOne(NAMESPACE + ".getRefndCnt", param); + } + + + public Map getRefndDetail(Map param) { + return selectOne(NAMESPACE + ".getNoticeDetail", param); + } + + + public int refndUpdate(Map param) { + return update(NAMESPACE + ".refndUpdate", param); + } + + public int atchfileInfoDelete(String fileId) { + return update(NAMESPACE + ".atchfileInfoDelete", fileId); + } + + public int atchfileInfoInsert(String fileId) { + return insert(NAMESPACE + ".atchfileInfoInsert", fileId); + } + + public int atchfileDetailInfoDelete(String fileId) { + return update(NAMESPACE + ".atchfileDetailInfoDelete", fileId); + } + + public int atchfileDetailInfoInsert(Map param) { + return insert(NAMESPACE + ".atchfileDetailInfoInsert", param); + } + + public List getFeeData(Map dbParam) { + return selectList(NAMESPACE + ".getFeeData", dbParam); + } + +} diff --git a/src/main/java/gtpa/brs/fee/service/impl/FeeServiceImpl.java b/src/main/java/gtpa/brs/fee/service/impl/FeeServiceImpl.java new file mode 100644 index 0000000..cc69db5 --- /dev/null +++ b/src/main/java/gtpa/brs/fee/service/impl/FeeServiceImpl.java @@ -0,0 +1,2956 @@ +package gtpa.brs.fee.service.impl; + +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import gtpa.brs.util.CommonUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.fee.service.FeeService; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.BrsIdGnrUtil; +import gtpa.brs.util.Http; +import gtpa.brs.util.Result; +import gtpa.brs.vehicle.service.VehicleService; + + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 17/05/2019 + * TIME : 5:27 PM + * Project : BRSPW + * Class : FeeServiceImpl + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service("FeeService") +public class FeeServiceImpl implements FeeService { + + Logger logger = LoggerFactory.getLogger(FeeServiceImpl.class); + /** + * The Fee mapper. + */ + @Resource(name = "feeDao") + FeeMapper feeMapper; + + /** + * The Pre regist payment service. + */ + @Autowired + PreRegistPaymentService preRegistPaymentService; + + /** + * The User info. + */ + @Autowired + UserInfo userInfo; + + /** + * The Vehicle service. + */ + @Autowired + VehicleService vehicleService; + + @Resource(name = "fileGenIDService") + BrsIdGnrUtil fileGenIDService; + + @Resource(name = "globalsProperties") + Properties env; + + /*@Autowired + HttpClient httpClient;*/ + + @Override + public Map getFeeList(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.rntFeeInfo"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNo = (String) param.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestRntFeeInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getParkFeeList(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.recvPassThroughList"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNo = (String) param.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestParkFeeInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getJmpTunnelFees(Map params) { + Map result; + String url = env.getProperty("Globals.jmpTunnel.getFeesList"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) params.get("startDate"); + String endDt = (String) params.get("endDate"); + String vhcleNo = (String) params.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestJmpFeeInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getYdpParkFees(Map params) { + Map result; + String url = env.getProperty("Globals.ydpPark.getFeesList"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) params.get("startDate"); + String endDt = (String) params.get("endDate"); + String vhcleNo = (String) params.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestYdpParkInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getJgParkFees(Map params) { + Map result; + String url = env.getProperty("Globals.jgPark.getFeesList"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) params.get("startDate"); + String endDt = (String) params.get("endDate"); + String vhcleNo = (String) params.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestJgParkInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getScgParkFees(Map params) { + Map result; + String url = env.getProperty("Globals.scgPark.getFeesList"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) params.get("startDate"); + String endDt = (String) params.get("endDate"); + String vhcleNo = (String) params.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestScgParkInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getSbgRoadFees(Map params) { + Map result; + String url = env.getProperty("Globals.sbgRoad.getFeesList"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) params.get("startDate"); + String endDt = (String) params.get("endDate"); + String vhcleNo = (String) params.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestSbgRoadInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getFeesInfo(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.rntFeeInfo"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNo = (String) param.get("vhcleNum"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestRntFeeInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getComplaintsList(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getDefaultCivilAcceptList"); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNum = (String) param.get("vhcleNum"); + String status = (String) param.get("status"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", ""); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + reqData.put("status", status); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + result = getDefaultCivilAcceptList(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getComplaintInfo(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getDefaultCivilAcceptDetail"); + String insttNo = (String) param.get("insttNo"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String civilNo = String.valueOf(param.get("civilNo")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", ""); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("civilNo", civilNo); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + result = getDefaultCivilAcceptDetail(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public List getComplaintFileInfo(Map param) { + List fileList = feeMapper.getComplaintFileInfo(param); + return fileList; + } + + @Override + public Map isExsistComplaintInfo(Map param) { + Map complaintInfo = feeMapper.isExsistComplaintInfo(param); + return complaintInfo; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map submitAComplaint(Map param, List files) { + Map result; + Map filesMap = null; + for (String key : param.keySet()) { + param.put(key, CommonUtil.cleanCode(param.get(key) == null ? "" : param.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.setDefaultCivilAccept"); + String insttNo = (String) param.get("insttNo"); + String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String vhcleNum = (String) param.get("vhcleNum"); + String civilTitle = (String) param.get("civilTitle"); + String civilContents = (String) param.get("civilContents"); + String passAmount = String.valueOf(param.get("passAmount")); + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String fileId = ""; + + if (files != null && files.size() > 0) { + fileId = fileGenIDService.makeGnrID(); + int idx = 1; + for (Object file : files) { + // API 호출용 + if (filesMap == null) filesMap = new HashMap(); + //int idx = files.indexOf(file); + filesMap.put("addFile" + idx, file); + idx++; + } + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + //addFile1 = fileId; + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + //addFile2 = fileId; + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + //addFile3 = fileId; + } + } + + Map reqData = new LinkedHashMap(); + //reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("vhcleNum", vhcleNum); + reqData.put("civilTitle", civilTitle); + reqData.put("civilContents", civilContents); + reqData.put("addFile1", addFile1); + reqData.put("addFile2", addFile2); + reqData.put("addFile3", addFile3); + reqData.put("passAmount", passAmount); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + result = setDefaultCivilAccept(url, reqData); + logger.info("result::" + result); + /*if (result.get("rspnsResult").equals("S")) { + if (files != null && files.size() > 0) { + int fileSeq = 0; + for (Object file : files) { + // 대민 파일정보 DB저장용 + Map fileInfo = (Map) file; + fileInfo.put("fileId", fileId); + fileInfo.put("fileSeq", fileSeq); + fileInfo.put("atchFileTy", "03"); + String fileNm = fileInfo.get("localFileName").toString(); + int pos = fileNm.lastIndexOf("."); + String ext = fileNm.substring(pos + 1); + fileInfo.put("fileExtsnNm", ext); + + if (fileSeq == 0) { + feeMapper.submitAComplaintFileMap(fileInfo); + } + fileSeq++; + } + + if (files.size() > 0) { + feeMapper.submitAComplaintFileDetail(files); + } + } + }*/ + + return result; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map modifyAComplaint(Map param, List files) { + Map resultMap = null; + //try { + Map filesMap = null; + for (String key : param.keySet()) { + param.put(key, CommonUtil.cleanCode(param.get(key) == null ? "" : param.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.setUpdateDefaultCivilAccept"); + String insttNo = (String) param.get("insttNo"); + String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String vhcleNum = (String) param.get("vhcleNum"); + String civilNo = String.valueOf(param.get("civilNo")); + String civilTitle = (String) param.get("civilTitle"); + String civilContents = (String) param.get("civilContents"); + String passAmount = String.valueOf(param.get("passAmount")); + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String fileId = ""; + String fileIdNew = ""; + + if (files != null && files.size() > 0) { + int idx = 1; + for (Object file : files) { + // API 호출용 + if (filesMap == null) filesMap = new HashMap(); + filesMap.put("addFile" + idx, file); + idx++; + } + + fileId = param.get("addFile1").toString(); + fileIdNew = fileGenIDService.makeGnrID(); + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + //addFile1 = fileId; + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + //addFile2 = fileId; + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + //addFile3 = fileId; + } + } + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", insttCntcJobSe); + //reqData.put("insttCntcJobSe", "176"); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("vhcleNum", vhcleNum); + reqData.put("civilNo", civilNo); + reqData.put("civilTitle", civilTitle); + reqData.put("civilContents", civilContents); + reqData.put("addFile1", addFile1); + reqData.put("addFile2", addFile2); + reqData.put("addFile3", addFile3); + reqData.put("passAmount", passAmount); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + resultMap = setUpdateDefaultCivilAccept(url, reqData); + resultMap.put("fileIdOld", fileId); + resultMap.put("fileIdNew", fileIdNew); + logger.info("result::" + resultMap); + + return resultMap; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map modifyAComplaintFileDelete(Map param) { + Map resultMap = new HashMap(); + try { + int cnt = 0; + String fileId = ""; + + fileId = param.get("fileIdOld").toString(); + feeMapper.atchfileDetailInfoDelete(fileId); + + resultMap.put("rspnsResult", "S"); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultMap.put("rspnsResult", "E"); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultMap.put("rspnsResult", "E"); + } finally { + // FileInfo 삭제처리 에러발생시 API 재호출 시행 + } + + return resultMap; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map modifyAComplaintFileInsert(List files, Map param) { + Map resultMap = new HashMap(); + try { + int cnt = 0; + String fileIdOld = ""; + String fileIdNew = ""; + + fileIdOld = param.get("fileIdOld").toString(); + fileIdNew = param.get("fileIdNew").toString(); + + feeMapper.atchfileInfoDelete(fileIdOld); + feeMapper.atchfileInfoInsert(fileIdNew); + + int fileSeq = 0; + for (Object file : files) { + Map fileInfo = (Map) file; + fileInfo.put("fileId", fileIdNew); + fileInfo.put("fileSeq", fileSeq); + fileInfo.put("atchFileTy", "03"); + String fileNm = fileInfo.get("localFileName").toString(); + int pos = fileNm.lastIndexOf("."); + String ext = fileNm.substring(pos + 1); + fileInfo.put("fileExtsnNm", ext); + + String serverFileName = ""; + serverFileName = fileInfo.get("serverFileName").toString(); + if (!"".equals(serverFileName)) { + feeMapper.atchfileDetailInfoInsert(fileInfo); + } + + fileSeq++; + } + + resultMap.put("rspnsResult", "S"); + + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultMap.put("rspnsResult", "E"); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultMap.put("rspnsResult", "E"); + } finally { + // FileInfo 신규생성처리 에러발생시 API 재호출 시행 + } + + return resultMap; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map cancleAComplaint(Map param) { + Map result; + for (String key : param.keySet()) { + param.put(key, CommonUtil.cleanCode(param.get(key) == null ? "" : param.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.setCancelDefaultCivilAccept"); + String insttNo = (String) param.get("insttNo"); + String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String vhcleNum = (String) param.get("vhcleNum"); + String civilNo = String.valueOf(param.get("civilNo")); + String civilCancleMsg = (String) param.get("civilCancleMsg"); + + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + //reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttCntcJobSe", "001"); + reqData.put("insttDelngNo", insttDelngNo); + //reqData.put("vhcleNum", vhcleNum); + reqData.put("civilNo", civilNo); + reqData.put("civilCancleMsg", civilCancleMsg); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("====#####== FeeServiceImpl cancleAComplaint POST ======="); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = setCancelDefaultCivilAccept(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map submitAComplaintReply(Map param) { + feeMapper.submitAComplaintReply(param); + return null; + } + + @Override + public Map payAFee(Map param) { + Result result = new Result(); + List resultList = new ArrayList(); + List feeList = (List) param.get("feeList"); + LinkedHashMap specPaymentDate = (LinkedHashMap) param.get("specPaymentDate"); + String resrvDate = (String) specPaymentDate.get("specPaymentDate"); + + logger.info("feeList::" + feeList); + logger.info("specPaymentDate" + specPaymentDate); + Map response = new LinkedHashMap(); + if (resrvDate.equals("")) { + for (Object obj : feeList) { + Map data = new LinkedHashMap(); + Map feeInfo = (LinkedHashMap) obj; + data.put("vhcleNo", feeInfo.get("vhcleNum")); + Map searchParam = new HashMap(); + searchParam.put("MBER_NO", userInfo.getUserNo()); + searchParam.put("VHCLE_NO", feeInfo.get("vhcleNum")); + Map vhcleInfo = vehicleService.getVhcleInfo(searchParam); + if (vhcleInfo != null) { + data.put("vhcleTy", feeInfo.get("vhcleTy")); + data.put("vhcleOwnerCi", vhcleInfo.get("VHCLE_OWNER_CI")); + data.put("insttNo", feeInfo.get("insttNo")); + data.put("insttDelngNo", feeInfo.get("insttDelngNo")); + data.put("requstAmount", feeInfo.get("passAmount")); + data.put("occrrncDate", feeInfo.get("occrrncDate")); + data.put("occrrncTime", feeInfo.get("occrrncTime")); + //혼잡: 01, 공영:02 분기처리, 과태료:03 + if ("T".equals(feeInfo.get("gubun"))) { + data.put("insttChrgeDetail", "01"); + } else { + data.put("insttChrgeDetail", "02"); + } + data.put("insttDetailCode", feeInfo.get("insttDetailCode")); + data.put("insttDetailNm", feeInfo.get("collectNm")); + data.put("pasngSeCode", feeInfo.get("pasngSeCode")); + data.put("ffnlgTaxitm", (feeInfo.get("ffnlgTaxitm") == null) ? "" : feeInfo.get("ffnlgTaxitm")); + data.put("passivePaymentAt", "Y"); + response = preRegistPaymentService.approvalPayment(data); + if (response.get("rspnsCode").equals("0000")) { + resultList.add(response); + } + } + } + } else { + for (Object obj : feeList) { + Map data = new LinkedHashMap(); + Map feeInfo = (LinkedHashMap) obj; + data.put("vhcleNo", feeInfo.get("vhrno")); + Map searchParam = new HashMap(); + searchParam.put("MBER_NO", userInfo.getUserNo()); + searchParam.put("VHCLE_NO", feeInfo.get("vhrno")); + Map vhcleInfo = vehicleService.getVhcleInfo(searchParam); + if (vhcleInfo != null) { + data.put("vhcleTy", feeInfo.get("vhcleTy")); + data.put("vhcleOwnerCi", vhcleInfo.get("VHCLE_OWNER_CI")); + data.put("insttNo", feeInfo.get("insttNo")); + data.put("insttDelngNo", feeInfo.get("insttDelngNo")); + data.put("requstAmount", feeInfo.get("fine")); + String checkDate = feeInfo.get("checkDate").toString(); + data.put("occrrncDate", checkDate.substring(0, 8)); + data.put("occrrncTime", checkDate.substring(8, 14)); + ////혼잡: 01, 공영:02 분기처리, 과태료:03 + if ("T".equals(feeInfo.get("gubun"))) { + data.put("insttChrgeDetail", "01"); + } else { + data.put("insttChrgeDetail", "02"); + } + data.put("insttChrgeSe", feeInfo.get("insttChrgeSe")); + data.put("insttDetailCode", feeInfo.get("insttDetailCode")); + data.put("insttDetailNm", feeInfo.get("violatContents")); + data.put("pasngSeCode", feeInfo.get("pasngSeCode")); + data.put("ffnlgTaxitm", (feeInfo.get("ffnlgTaxitm") == null) ? "" : feeInfo.get("ffnlgTaxitm")); + data.put("passivePaymentAt", "Y"); + data.put("reserveDate", resrvDate); + response = preRegistPaymentService.approvalReservePayment(data); + if (response.get("rspnsCode").equals("0000")) { + resultList.add(response); + } + } + } + } + if (feeList.size() != resultList.size()) { + result.setMsg(result.STATUS_ERROR, "총 " + feeList.size() + "건 중 " + resultList.size() + "건 처리되었습니다."); + } else { + result.setMsg(result.STATUS_SUCESS, "총 " + feeList.size() + "건 중 " + resultList.size() + "건 처리되었습니다."); + } + return result.getResult(); + } + + @Override + public Map getRefndList(Map param) { + logger.info("====#####== FeeServiceImpl.java getRefndList ======="); + logger.info("Param Data : " + param); + + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getRefundAcceptInfo"); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNum = (String) param.get("vhcleNum"); + String status = (String) param.get("status"); + + Map reqData = new LinkedHashMap(); + + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("status", status); + reqData.put("vhcleNum", vhcleNum); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + result = getRefundAcceptInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getRefndCnt(Map param) { + Map rs = null; + rs = feeMapper.getRefndCnt(param); + return rs; + } + + @Override + public Map getRefndDetail(Map param) { + Map rs = null; + rs = feeMapper.getRefndDetail(param); + return rs; + } + + @Override + public Map refndInsert(Map param1, Map param2) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.setInsertRefundAccept"); + String insttNo = (String) param1.get("insttNo"); + String insttCntcJobSe = (String) param1.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param1.get("insttDelngNo")); + String vhcleNum = (String) param1.get("vhcleNum"); + String rfnBank = (String) param1.get("rfnBank"); + String rfnAccount = (String) param1.get("rfnAccount"); + String rfnName = (String) param1.get("rfnName"); + String rfnTel = (String) param1.get("rfnTel"); + String passAmount = String.valueOf(param1.get("passAmount")); + String rfnAmount = String.valueOf(param1.get("rfnAmount")); + rfnTel = ""; + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", "126"); + //reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("vhcleNum", vhcleNum); + reqData.put("rfnBank", rfnBank); + reqData.put("rfnAccount", rfnAccount); + reqData.put("rfnName", rfnName); + reqData.put("passAmount", passAmount); + reqData.put("rfnAmount", rfnAmount); + //reqData.put("rfnTel", rfnTel); + String mberNo = (String) param2.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param2.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = setInsertRefundAccept(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map refndUpdate(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.setUpdateRefundAccept"); + String insttNo = (String) param.get("insttNo"); + String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String vhcleNum = (String) param.get("vhcleNum"); + String rfnBank = (String) param.get("rfnBank"); + String rfnAccount = (String) param.get("rfnAccount"); + String rfnName = (String) param.get("rfnName"); + String rfnAcepNo = String.valueOf(param.get("rfnAcepNo")); + String rfnTel = (String) param.get("rfnTel"); + String passAmount = String.valueOf(param.get("passAmount")); + String rfnAmount = String.valueOf(param.get("rfnAmount")); + rfnTel = ""; + /* + * insttNo insttNo + insttCntcJobSe 기관 연계 업무 구분 + insttDelngNo 기관 거래 번호 (50) + rfnAcepNo 환불신청번호 (20) + rfnBank 환불받을 은행명 + rfnAccount 환불받을 계좌 + rfnName 환불신청자명 + rfnTel 환불신청자연락처 + 당일 신청하고 처리상태가 접수인 경우만 수정 가능 + * */ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", "126"); + //reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("vhcleNum", vhcleNum); + reqData.put("rfnBank", rfnBank); + reqData.put("rfnAccount", rfnAccount); + reqData.put("rfnName", rfnName); + reqData.put("rfnAcepNo", rfnAcepNo); + reqData.put("passAmount", passAmount); + reqData.put("rfnAmount", rfnAmount); + //reqData.put("rfnTel", rfnTel); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = setUpdateRefundAccept(url, reqData); + logger.info("result::" + result); + return result; + } + + @Override + public Map getReciptList(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getReceiptList"); + String insttNo = (String) param.get("insttNo"); + String insttDelngNos = String.valueOf(param.get("insttDelngNos")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", ""); + reqData.put("insttCntcJobSe", "001"); + reqData.put("insttDelngNo", insttDelngNos); + + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = getReceiptList(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map privachCheckApi(Map param, List files) { + Map result; + String apiUrl = env.getProperty("Globals.Uprivacy.ApiUrl"); + String hostUrl = env.getProperty("Globals.Uprivacy.RealHostUrl"); + String hostIp = env.getProperty("Globals.Uprivacy.RealHostIp"); + String returnUrl = env.getProperty("Globals.Uprivacy.RealHostUrl") + "fee/privachCheckApi.do"; + String civilTitle = StringUtils.defaultIfBlank(param.get("civilTitle").toString(), ""); + String civilContents = StringUtils.defaultIfBlank(param.get("civilContents").toString(), ""); + String uiGubun = StringUtils.defaultIfBlank(param.get("uiGubun").toString(), ""); + String content = ""; + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String userIP = ""; + userIP = getRemoteAddr(request); + + Map reqData = new LinkedHashMap(); + reqData.put("hostUrl", hostUrl); + reqData.put("hostIP", hostIp); + reqData.put("returnURL", returnUrl); + reqData.put("userIP", userIP); + logger.info("uiGubun::" + uiGubun); + if (uiGubun.equals("complaint")) { + content = civilTitle + "," + civilContents; + } else if (uiGubun.equals("complaintCancle")) { + content = civilContents; + } + reqData.put("content", content); + + logger.info("reqData::" + reqData); + result = setPrivachCheckApi(apiUrl, reqData, files, request); + logger.info("result privachCheckApi::" + result); + + return result; + } + + @Override + public Map refundPrivachCheckApi(Map param) { + Map result; + String apiUrl = env.getProperty("Globals.Uprivacy.ApiUrl"); + String hostUrl = env.getProperty("Globals.Uprivacy.RealHostUrl"); + String hostIp = env.getProperty("Globals.Uprivacy.RealHostIp"); + String returnUrl = env.getProperty("Globals.Uprivacy.RealHostUrl") + "fee/refundPrivachCheckApi.do"; + String rfnBank = StringUtils.defaultIfBlank(param.get("rfnBank").toString(), ""); + String rfnAccount = StringUtils.defaultIfBlank(param.get("rfnAccount").toString(), ""); + String rfnName = StringUtils.defaultIfBlank(param.get("rfnName").toString(), ""); + String content = ""; + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String userIP = ""; + userIP = getRemoteAddr(request); + + Map reqData = new LinkedHashMap(); + reqData.put("hostUrl", hostUrl); + reqData.put("hostIP", hostIp); + reqData.put("returnURL", returnUrl); + reqData.put("userIP", userIP); + content = rfnBank + "," + rfnAccount + "," + rfnName; + reqData.put("content", content); + + logger.info("reqData::" + reqData); + result = setRefundPrivachCheckApi(apiUrl, reqData); + logger.info("result privachCheckApi::" + result); + + return result; + } + + public static String getRemoteAddr(HttpServletRequest request) { + String ip = null; + ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-RealIP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("REMOTE_ADDR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param files the files + * @param reqData the req data + * @return the update refund accept + */ + public Map setPrivachCheckApi(String requestURL, Map reqData, List files, HttpServletRequest req) { + Map resultMap = new HashMap(); + + try { + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String realUrl = env.getProperty("Globals.Url"); + String fsl = File.separator; + String root = req.getSession().getServletContext().getRealPath(fsl); + Map filesMap = null; + + if (files != null && files.size() > 0) { + int idx = 1; + for (Object file : files) { + if (filesMap == null) filesMap = new HashMap(); + filesMap.put("addFile" + idx, file); + idx++; + } + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + } + } + + logger.info("addFile1::" + addFile1); + logger.info("addFile2::" + addFile2); + logger.info("addFile3::" + addFile3); + + Http http = new Http(requestURL); + resultMap = http.addParam("returnURL", reqData.get("returnURL").toString()) + .addParam("hostIP", reqData.get("hostIP").toString()) + .addParam("hostUrl", reqData.get("hostUrl").toString()) + .addParam("userIP", reqData.get("userIP").toString()) + .addParam("content", reqData.get("content").toString()) + .addParam("upload_file1", new File(addFile1)) + .addParam("upload_file2", new File(addFile2)) + .addParam("upload_file3", new File(addFile3)) + .submit(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[setPrivachCheckApi process error::" + "e.getMessage()" + "]", e); + } + + return resultMap; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param files the files + * @param reqData the req data + * @return the update refund accept + */ + public Map setPrivachCheckApiTmp(String requestURL, Map reqData, List files) { + Map result = new HashMap(); + Map resultData = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("privacy"); + /* + * 개인정보 점점결과 Return 항목 및 코드 설명 + * isPriv -> 개인정보 유무(0:개인정보 없음, 1:개인정보 있음) + * privType -> 검출된 개인정보 유형(1:주민(외국인)번호, 2:카드번호, 3:여권번호, 4:운전면허번호, 5:휴대폰번호, + * 6:일반전화번호, 7:이메일, 8:건강보험번호, 9:은행계좌번호, 10:금칙어) + * privContent -> 검출된 개인정보 내용 + * hostIP -> 요청받을때 전달받은 HostIP 값 + * hostUrl -> 요청받을때 전달받은 HostUrl 값 + * userIP -> 요청받을때 전달받은 userIP 값 + * checkType -> 검출위치 표시(C: 본문내용, F:첨부파일) + */ + resultData = (Map) datas.get(0); + result.put("rspnsResult", "S"); + result.put("data", resultData); + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "response is error"); + } + + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + //e.printStackTrace(); + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("io ErrorMessage::" + "io.getMessage()", io); + } + + } + return result; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update refund accept + */ + public Map setRefundPrivachCheckApi(String requestURL, Map reqData) { + Map resultMap = new HashMap(); + + try { + Http http = new Http(requestURL); + resultMap = http.addParam("returnURL", reqData.get("returnURL").toString()) + .addParam("hostIP", reqData.get("hostIP").toString()) + .addParam("hostUrl", reqData.get("hostUrl").toString()) + .addParam("userIP", reqData.get("userIP").toString()) + .addParam("content", reqData.get("content").toString()) + .submit(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[setRefundPrivachCheckApi process error::" + "e.getMessage()" + "]", e); + } + + return resultMap; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update refund accept + */ + public Map setRefundPrivachCheckApiTmp(String requestURL, Map reqData) { + Map result = new HashMap(); + Map resultData = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("privacy"); + /* + * 개인정보 점점결과 Return 항목 및 코드 설명 + * isPriv -> 개인정보 유무(0:개인정보 없음, 1:개인정보 있음) + * privType -> 검출된 개인정보 유형(1:주민(외국인)번호, 2:카드번호, 3:여권번호, 4:운전면허번호, 5:휴대폰번호, + * 6:일반전화번호, 7:이메일, 8:건강보험번호, 9:은행계좌번호, 10:금칙어) + * privContent -> 검출된 개인정보 내용 + * hostIP -> 요청받을때 전달받은 HostIP 값 + * hostUrl -> 요청받을때 전달받은 HostUrl 값 + * userIP -> 요청받을때 전달받은 userIP 값 + * checkType -> 검출위치 표시(C: 본문내용, F:첨부파일) + */ + resultData = (Map) datas.get(0); + result.put("rspnsResult", "S"); + result.put("data", resultData); + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "response is error"); + } + + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + //e.printStackTrace(); + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("io ErrorMessage::" + "io.getMessage()", io); + } + + } + return result; + } + + /** + * 이용료 정보 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the map + */ + public Map requestRntFeeInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestParkFeeInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestJmpFeeInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + logger.info("body::" + jsonObj.toJSONString()); + if("0".equals(String.valueOf(jsonObj.get("dataCount")))) { + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestYdpParkInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + logger.info("body::" + jsonObj.toJSONString()); + if("0".equals(String.valueOf(jsonObj.get("dataCount")))) { + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestJgParkInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + logger.info("body::" + jsonObj.toJSONString()); + if("0".equals(String.valueOf(jsonObj.get("dataCount")))) { + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + + public Map requestScgParkInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + logger.info("body::" + jsonObj.toJSONString()); + if("0".equals(String.valueOf(jsonObj.get("dataCount")))) { + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestSbgRoadInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + logger.info("body::" + jsonObj.toJSONString()); + if("0".equals(String.valueOf(jsonObj.get("dataCount")))) { + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", new JSONArray()); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 민원접수 목록 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept list + */ + public Map getDefaultCivilAcceptList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 민원접수 상세 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept detail + */ + public Map getDefaultCivilAcceptDetail(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + /*JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data);*/ + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", jsonObj.get("rspnsCode")); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 민원접수 등록 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept + */ + public Map setDefaultCivilAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + result.put("rspnsResult", "S"); + result.put("data", data); + result.put("rspnsCode", jsonObj.get("resultCode")); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 민원접수 수정 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update default civil accept + */ + public Map setUpdateDefaultCivilAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage"));*/ + + result.put("rspnsResult", "S"); + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 민원접수 취소 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update default civil accept + */ + public Map setCancelDefaultCivilAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + + result.put("rspnsResult", "S"); + //result.put("data", data); + //result.put("rspnsCode", data.get("rspnsCode")); + //result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 환불신청 목록 및 상세 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept list + */ + public Map getRefundAcceptInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 환불신청 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the insert refund accept + */ + public Map setInsertRefundAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + result.put("rspnsResult", "S"); + result.put("data", data); + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 환불신청 수정 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update refund accept + */ + public Map setUpdateRefundAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /* if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + result.put("rspnsResult", "S"); + //result.put("data", data); + //result.put("rspnsCode", data.get("rspnsCode")); + //result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료 의견제출 및 이의제기 신청 목록 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept list + */ + public Map getPenaltyCivilAcceptList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료 의견제출 및 이의제기 신청 상세 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept detail + */ + public Map getPenaltyCivilAcceptDetail(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { +/* if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + result.put("data", data); + result.put("rspnsResult", "S"); + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료 의견제출 및 이의제기 수정 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update refund accept + */ + public Map setUpdatePenaltyCivilAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + + result.put("rspnsResult", "S"); + //result.put("data", data); + //result.put("rspnsCode", data.get("rspnsCode")); + //result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * Gets receipt list. + * + * @param requestURL the request url + * @param reqData the req data + * @return the receipt list + */ + public Map getReceiptList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(60000) + .setConnectTimeout(60000) + .setConnectionRequestTimeout(60000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + @Override + public List getFeeData(Map dbParam) { + List result = feeMapper.getFeeData(dbParam); + return result; + } +} diff --git a/src/main/java/gtpa/brs/fee/web/FeeController.java b/src/main/java/gtpa/brs/fee/web/FeeController.java new file mode 100644 index 0000000..8257a31 --- /dev/null +++ b/src/main/java/gtpa/brs/fee/web/FeeController.java @@ -0,0 +1,1309 @@ + +package gtpa.brs.fee.web; + +import java.io.IOException; +import java.util.*; + +import javax.servlet.http.HttpServletRequest; + +import gtpa.brs.login.service.LoginService; +import org.apache.commons.io.FilenameUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.fee.service.FeeService; +import gtpa.brs.join.service.JoinService; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.Result; +import gtpa.brs.vehicle.service.VehicleService; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 16/04/2019 + * TIME : 10:55 AM + * Project : BRSPW + * Class : FeeController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class FeeController { + + /** + * The User info. + */ + @Autowired + UserInfo userInfo; + + @Autowired + FeeService feeService; + + @Autowired + JoinService joinService; + + /** + * The Vehicle service. + */ + @Autowired + VehicleService vehicleService; + + @Autowired + PreRegistPaymentService preRegistPaymentService; + + @Autowired + LoginService loginService; + + Logger logger = LoggerFactory.getLogger(FeeController.class); + + /** + * Gets vehicles. + * + * @return the vehicles + */ + @RequestMapping(value = "/fee/getVehicles.do", method = RequestMethod.POST) + public @ResponseBody + Map getVehicles() { + Result result = new Result(); + Map params = new HashMap(); + params.put("MBER_NO", userInfo.getUserNo()); + params.put("SEARCHTYPE", "F"); + List carInfos = vehicleService.getVhclesInfo(params); + if (carInfos.size() > 0) { + result.setData("vhcleList", carInfos); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCESS, "본인 명의의 차량등록이 필요합니다."); + } + return result.getResult(); + } + + /** + * Gets fee list. + * + * @param param the param + * @return the fee list + */ + @RequestMapping(value = "/fee/getFeeList.do", method = RequestMethod.POST) + public @ResponseBody + Map getFeeList(@RequestBody Map param) { + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + Map userData = loginService.isMemberNoMap(userInfo.getUserNo()); + Result result = new Result(); + List feeList = new ArrayList(); + params.put("mberNo", userInfo.getUserNo()); + params.put("mberCi", userInfo.getUserCi()); + Map rtnVhcles = new HashMap(); + if (userInfo.isTempMber()) { + rtnVhcles.put("VHCLES_NUM", params.get("vhcleNum")); + userData = new HashMap(); + userData.put("TUNNEL_FEE_AGRE_AT", "N"); + userData.put("PARK_FEE_AGRE_AT", "N"); + userData.put("JMP_TUNNEL_FEE_AGRE_AT", "N"); + userData.put("SSM_TUNNEL_FEE_AGRE_AT", "N"); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(params); + } + logger.info("rtnVhcles : " + rtnVhcles); + + /** try { + String test = "{\"data\":" ++"[" +"{" +"\"chk\":\"\"," +"\"gubun\":\"\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301614240000000223\"," +"\"vhcleNum\":\"36우2523\"," +"\"passDt\":\"20200630161424\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161424S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161424\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"01\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161424M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301614240000000223\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630161424\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161424S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161424\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161424M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301613540000000279\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630161354\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630161354S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161354\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630161354M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301613290000000221\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630161329\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161329S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161329\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161329M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301612510000000274\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630161251\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630161251S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161251\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630161251M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"미납\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301611430000000218\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630161143\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"2\"," +"\"dueDatePayment\":\"20200715\"," +"\"dueDatePaymentMsg\":\"2020.07.15 (휴일이면 다음날) 납부기한까지 미납시 통행료의 5배 과태료가 부과됩니다.\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161143S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161143\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630161143M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"미납\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301611240000000266\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630161124\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"2\"," +"\"dueDatePayment\":\"20200715\"," +"\"dueDatePaymentMsg\":\"2020.07.15 (휴일이면 다음날) 납부기한까지 미납시 통행료의 5배 과태료가 부과됩니다.\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630161124S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"161124\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630161124M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"현금\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301605090000000198\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160509\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"1\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160509\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"현금\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630160509M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"현금\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301604170000000238\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160417\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"1\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160417\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"현금\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630160417M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301603130000000193\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160313\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":0," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160313\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630160313M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301602560000000235\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160256\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":0," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160256\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630160256M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301602370000000191\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160237\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":0," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160237\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630160237M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"면제\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301602130000000233\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160213\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":0," +"\"receiptCd\":\"0\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160213\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"면제\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630160213M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"카드\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301601490030400190\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160149\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"1\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160149\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"카드\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630160149M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"카드\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301601190030700227\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160119\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"1\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160119\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"10\"," +"\"statusNm\":\"민원신청 등록\"," +"\"receiptTypeNm\":\"카드\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630160119M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"현금\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301600320000000186\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160032\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"1\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160032\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"13\"," +"\"statusNm\":\"민원신청 거부\"," +"\"receiptTypeNm\":\"현금\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630160032M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"현금\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301600120000000223\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630160012\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"1\"," +"\"dueDatePayment\":\"\"," +"\"dueDatePaymentMsg\":\"\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/null\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"160012\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"10\"," +"\"statusNm\":\"민원신청 등록\"," +"\"receiptTypeNm\":\"현금\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630160012M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"미납\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301558180000000183\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630155818\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"2\"," +"\"dueDatePayment\":\"20200715\"," +"\"dueDatePaymentMsg\":\"2020.07.15 (휴일이면 다음날) 납부기한까지 미납시 통행료의 5배 과태료가 부과됩니다.\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630155818S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"155818\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630155818M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"미납\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301557580000000209\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630155758\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"2\"," +"\"dueDatePayment\":\"20200715\"," +"\"dueDatePaymentMsg\":\"2020.07.15 (휴일이면 다음날) 납부기한까지 미납시 통행료의 5배 과태료가 부과됩니다.\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630155758S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"155758\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630155758M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"미납\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300840304202006301557230000000180\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630155723\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"04차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"2\"," +"\"dueDatePayment\":\"20200715\"," +"\"dueDatePaymentMsg\":\"2020.07.15 (휴일이면 다음날) 납부기한까지 미납시 통행료의 5배 과태료가 부과됩니다.\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630155723S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"155723\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"1\"," +"\"status\":\"00\"," +"\"statusNm\":\"미신청\"," +"\"receiptTypeNm\":\"\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030420200630155723M.MP4\"," +"\"rowStatus\":\"R\"" +"}," +"{" +"\"chk\":\"\"," +"\"gubun\":\"T\"," +"\"collectNm\":\"미납\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"insttDelngNo\":\"0300130307202006301556550000000204\"," +"\"vhcleNum\":\"340로1833\"," +"\"passDt\":\"20200630155655\"," +"\"passFareOfi\":\"남산03터널\"," +"\"passLocBooth\":\"07차로\"," +"\"passAmount\":2000," +"\"receiptCd\":\"2\"," +"\"dueDatePayment\":\"20200715\"," +"\"dueDatePaymentMsg\":\"2020.07.15 (휴일이면 다음날) 납부기한까지 미납시 통행료의 5배 과태료가 부과됩니다.\"," +"\"imgPath\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630155655S.JPG\"," +"\"vhcleTy\":\"60\"," +"\"occrrncDate\":\"20200630\"," +"\"occrrncTime\":\"155655\"," +"\"insttDetailCode\":\"003\"," +"\"pasngSeCode\":\"2\"," +"\"status\":\"14\"," +"\"statusNm\":\"민원신청 취소\"," +"\"receiptTypeNm\":\"\"," +"\"usePay\":\"Y\"," +"\"virtualAcc\":\"남산 3호터널 우리 1005-881-229064
    ※ 위 전용계좌로 인터넷뱅킹, 은행 등 납부 가능
    (타행이체시 수수료 본인 부담)\"," +"\"movieUrl\":\"http://175.193.201.51/anprImages/cfs/2020/03/20200630/030720200630155655M.MP4\"," +"\"rowStatus\":\"R\"" +"}" +"]" + +"}"; + JSONParser jpa = new JSONParser(); + JSONObject job = (JSONObject)jpa.parse(test); + Map testInfo = new ObjectMapper().readValue(job.toString(), HashMap.class); + List testList = (List) testInfo.get("data"); + for(int i=0; i 0) { + feeList.addAll(tunnelFeesInfoList); + } + + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + if (params.get("vhcleNum") != null) { + String vhcleNums = (String) params.get("vhcleNum"); + String[] arrVhcleNums = vhcleNums.split(","); + for (String vhcleNum : arrVhcleNums) { + params.put("vhcleNum", vhcleNum); + Map parkFeesInfo = feeService.getParkFeeList(params); + try { + if (parkFeesInfo.get("data") != null) { + List parkFeesInfoList = (List) parkFeesInfo.get("data"); + for (Object parkFeesObj : parkFeesInfoList) { + Map feesInfo = (Map) parkFeesObj; + feesInfo.put("gubun", "P"); + feesInfo.put("ffnlgTaxitm", "02"); + feesInfo.put("usePay", userData.get("PARK_FEE_AGRE_AT") == null ? 'N' : userData.get("PARK_FEE_AGRE_AT")); + } + if (parkFeesInfoList.size() > 0) { + feeList.addAll(parkFeesInfoList); + } + + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + } + + /*신월여의지하도로 이용료 조회*/ + if (params.get("vhcleNum") != null) { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map jmpTunnelFeesInfo = feeService.getJmpTunnelFees(params); + try { + if (jmpTunnelFeesInfo.get("data") != null) { + List jmpTunnelFeesList = (List) jmpTunnelFeesInfo.get("data"); + for (Object jmpTunnelFeesObj : jmpTunnelFeesList) { + Map jmpTunnelFeeInfo = (Map) jmpTunnelFeesObj; + jmpTunnelFeeInfo.put("gubun", "J"); + jmpTunnelFeeInfo.put("ffnlgTaxitm", "04"); + jmpTunnelFeeInfo.put("usePay", userData.get("JMP_TUNNEL_FEE_AGRE_AT") == null ? 'N' : userData.get("JMP_TUNNEL_FEE_AGRE_AT")); + } + if (jmpTunnelFeesList.size() > 0) { + feeList.addAll(jmpTunnelFeesList); + } + + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + /*영등포 주차장 이용료 조회*/ + if (params.get("vhcleNum") != null) { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map ydpParkFeesInfo = feeService.getYdpParkFees(params); + try { + if (ydpParkFeesInfo.get("data") != null) { + List ydpParkFeesList = (List) ydpParkFeesInfo.get("data"); + for (Object ydpParkFeesObj : ydpParkFeesList) { + Map ydpParkFeeInfo = (Map) ydpParkFeesObj; + ydpParkFeeInfo.put("gubun", "J"); + ydpParkFeeInfo.put("ffnlgTaxitm", "04"); + ydpParkFeeInfo.put("usePay", userData.get("PARK_FEE_AGRE_AT") == null ? 'N' : userData.get("PARK_FEE_AGRE_AT")); + } + if (ydpParkFeesList.size() > 0) { + feeList.addAll(ydpParkFeesList); + } + + }/* else if("E".equals(ydpParkFeesInfo.get("rspnsResult"))) { + logger.info("영등포구청 오류 - 사전등록결제 리스트"); + Map dbParam = new HashMap<>(); + List ydpFeeDataList = new ArrayList(); + + dbParam.put("vhcleNo", rtnVhcles.get("VHCLES_NUM")); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("startDate", (String) params.get("startDate")); + dbParam.put("endDate", (String) params.get("endDate")); + dbParam.put("se", "ydp"); + logger.info("영등포구청 오류 -> "+ dbParam); + List ydpFeeData = feeService.getYdpParkFeeData(dbParam); + logger.info("영등포구청 오류 - ydpFeeData > "+ydpFeeData); + for (Object ydpParkFeesObj : ydpFeeData) { + Map ydpParkFeeInfo = (Map) ydpParkFeesObj; + ydpParkFeeInfo.put("gubun", "J"); + ydpParkFeeInfo.put("ffnlgTaxitm", "04"); + ydpParkFeeInfo.put("usePay", userData.get("PARK_FEE_AGRE_AT") == null ? 'N' : userData.get("PARK_FEE_AGRE_AT")); + + Map ydpFeeInfo = new HashMap<>(); + ydpFeeInfo.clear(); + if("정상승인".equals(ydpParkFeeInfo.get("RSPNS_MSSAGE"))) { + ydpFeeInfo.put("collectNm", "사전등록"); + ydpFeeInfo.put("receiptCd", "1"); + } else { + ydpFeeInfo.put("collectNm", "미납"); + ydpFeeInfo.put("receiptCd", "2"); + } + ydpFeeInfo.put("insttNo", ydpParkFeeInfo.get("INSTT_NO")); + ydpFeeInfo.put("insttDelngNo", ydpParkFeeInfo.get("INSTT_DELNG_NO")); + ydpFeeInfo.put("vhcleNum", ydpParkFeeInfo.get("VHCLE_NO")); + ydpFeeInfo.put("passDt", (String) ydpParkFeeInfo.get("DELNG_YMD") + (String) ydpParkFeeInfo.get("DELNG_HMS")); + ydpFeeInfo.put("passFareOfi", ydpParkFeeInfo.get("INSTT_NM")); + ydpFeeInfo.put("passLocBooth", ydpParkFeeInfo.get("INSTT_DETAIL_NM")); + ydpFeeInfo.put("passAmount", ydpParkFeeInfo.get("SETLE_AMOUNT")); + ydpFeeInfo.put("vhcleTy", ydpParkFeeInfo.get("CARS_TY")); + ydpFeeInfo.put("occrrncDate", ydpParkFeeInfo.get("OCCRRNC_DATE")); + ydpFeeInfo.put("occrrncTime", ydpParkFeeInfo.get("OCCRRNC_TIME")); + ydpFeeInfo.put("insttDetailCode", ydpParkFeeInfo.get("INSTT_DETAIL_CODE")); + ydpFeeInfo.put("pasngSeCode", ydpParkFeeInfo.get("PASNG_SE_CODE")); + ydpFeeInfo.put("receiptTypeNm", "사전등록"); + ydpFeeDataList.add(ydpFeeInfo); + } + if (ydpFeeData.size() > 0) { + feeList.addAll(ydpFeeDataList); + } + logger.info("영등포구청 오류 - feeList > "+feeList); + }*/ + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + /*중구 주차장 이용료 조회*/ + if (params.get("vhcleNum") != null) { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map jgParkFeesInfo = feeService.getJgParkFees(params); + try { + if (jgParkFeesInfo.get("data") != null) { + List jgParkFeesList = (List) jgParkFeesInfo.get("data"); + for (Object jgParkFeesObj : jgParkFeesList) { + Map jgParkFeeInfo = (Map) jgParkFeesObj; + jgParkFeeInfo.put("gubun", "J"); + jgParkFeeInfo.put("ffnlgTaxitm", "04"); + jgParkFeeInfo.put("usePay", userData.get("PARK_FEE_AGRE_AT") == null ? 'N' : userData.get("PARK_FEE_AGRE_AT")); + } + if (jgParkFeesList.size() > 0) { + feeList.addAll(jgParkFeesList); + } + + }/* else if("E".equals(jgParkFeesInfo.get("rspnsResult"))) { + logger.error("중구 오류 - 사전등록결제 리스트"); + Map dbParam = new HashMap<>(); + List jgFeeDataList = new ArrayList(); + + dbParam.put("vhcleNo", rtnVhcles.get("VHCLES_NUM")); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("startDate", (String) params.get("startDate")); + dbParam.put("endDate", (String) params.get("endDate")); + dbParam.put("se", "jg"); + logger.error("중구 오류 -> "+ dbParam); + List jgFeeData = feeService.getYdpParkFeeData(dbParam); + logger.error("중구 오류 - jgFeeData > "+jgFeeData); + for (Object jgParkFeesObj : jgFeeData) { + Map jgParkFeeInfo = (Map) jgParkFeesObj; + jgParkFeeInfo.put("gubun", "J"); + jgParkFeeInfo.put("ffnlgTaxitm", "04"); + jgParkFeeInfo.put("usePay", userData.get("PARK_FEE_AGRE_AT") == null ? 'N' : userData.get("PARK_FEE_AGRE_AT")); + + Map jgFeeInfo = new HashMap<>(); + jgFeeInfo.clear(); + if("정상승인".equals(jgParkFeeInfo.get("RSPNS_MSSAGE"))) { + jgFeeInfo.put("collectNm", "사전등록"); + jgFeeInfo.put("receiptCd", "1"); + } else { + jgFeeInfo.put("collectNm", "미납"); + jgFeeInfo.put("receiptCd", "2"); + } + jgFeeInfo.put("insttNo", jgParkFeeInfo.get("INSTT_NO")); + jgFeeInfo.put("insttDelngNo", jgParkFeeInfo.get("INSTT_DELNG_NO")); + jgFeeInfo.put("vhcleNum", jgParkFeeInfo.get("VHCLE_NO")); + jgFeeInfo.put("passDt", (String) jgParkFeeInfo.get("DELNG_YMD") + (String) jgParkFeeInfo.get("DELNG_HMS")); + jgFeeInfo.put("passFareOfi", jgParkFeeInfo.get("INSTT_NM")); + jgFeeInfo.put("passLocBooth", jgParkFeeInfo.get("INSTT_DETAIL_NM")); + jgFeeInfo.put("passAmount", jgParkFeeInfo.get("SETLE_AMOUNT")); + jgFeeInfo.put("vhcleTy", jgParkFeeInfo.get("CARS_TY")); + jgFeeInfo.put("occrrncDate", jgParkFeeInfo.get("OCCRRNC_DATE")); + jgFeeInfo.put("occrrncTime", jgParkFeeInfo.get("OCCRRNC_TIME")); + jgFeeInfo.put("insttDetailCode", jgParkFeeInfo.get("INSTT_DETAIL_CODE")); + jgFeeInfo.put("pasngSeCode", jgParkFeeInfo.get("PASNG_SE_CODE")); + jgFeeInfo.put("receiptTypeNm", "사전등록"); + jgFeeDataList.add(jgFeeInfo); + } + if (jgFeeData.size() > 0) { + feeList.addAll(jgFeeDataList); + } + logger.error("중구 오류 - feeList > "+feeList); + }*/ + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + /*서초구 주차장 이용료 조회*/ + if (params.get("vhcleNum") != null) { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map scgParkFeesInfo = feeService.getScgParkFees(params); + try { + if (scgParkFeesInfo.get("data") != null) { + List scgParkFeesList = (List) scgParkFeesInfo.get("data"); + for (Object scgParkFeesObj : scgParkFeesList) { + Map scgParkFeeInfo = (Map) scgParkFeesObj; + scgParkFeeInfo.put("gubun", "J"); + scgParkFeeInfo.put("ffnlgTaxitm", "04"); + scgParkFeeInfo.put("usePay", userData.get("PARK_FEE_AGRE_AT") == null ? 'N' : userData.get("PARK_FEE_AGRE_AT")); + } + if (scgParkFeesList.size() > 0) { + feeList.addAll(scgParkFeesList); + } + + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + /*서부간선도로 이용료 조회*/ + if (params.get("vhcleNum") != null) { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map sbgRoadFeesInfo = feeService.getSbgRoadFees(params); + try { + if (sbgRoadFeesInfo.get("data") != null) { + List sbgRoadFeesList = (List) sbgRoadFeesInfo.get("data"); + for (Object sbgRoadFeesObj : sbgRoadFeesList) { + Map sbgRoadFeeInfo = (Map) sbgRoadFeesObj; + sbgRoadFeeInfo.put("gubun", "J"); + sbgRoadFeeInfo.put("ffnlgTaxitm", "04"); + sbgRoadFeeInfo.put("usePay", userData.get("JMP_TUNNEL_FEE_AGRE_AT") == null ? 'N' : userData.get("JMP_TUNNEL_FEE_AGRE_AT")); + } + if (sbgRoadFeesList.size() > 0) { + feeList.addAll(sbgRoadFeesList); + } + + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + /*if (params.get("vhcleNum") != null) { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map ssmTunnelFeesInfo = feeService.getJmpTunnelFees(params); + if (ssmTunnelFeesInfo.get("data") != null) { + List ssmTunnelFeesList = (List) ssmTunnelFeesInfo.get("data"); + for (Object ssmTunnelFeesObj : ssmTunnelFeesList) { + Map ssmTunnelFeeInfo = (Map) ssmTunnelFeesObj; + ssmTunnelFeeInfo.put("gubun", "J"); + ssmTunnelFeeInfo.put("ffnlgTaxitm", "05"); + ssmTunnelFeeInfo.put("usePay", userData.get("SSM_TUNNEL_FEE_AGRE_AT") == null ? 'N' : userData.get("SSM_TUNNEL_FEE_AGRE_AT")); + } + if (ssmTunnelFeesList.size() > 0) { + feeList.addAll(ssmTunnelFeesList); + } + + } + }*/ + + if (feeList.size() > 0) { + try { + Collections.sort(feeList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("passDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("passDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + result.setData("feeList", feeList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, "조회된 데이터가 없습니다."); + } + } + return result.getResult(); + } + + /** + * Gets fee list. + * + * @param param the param + * @return the fee list + */ + @RequestMapping(value = "/fee/getDbFeeList.do", method = RequestMethod.POST) + public @ResponseBody Map getDbFeeList(@RequestBody Map param) { + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + Map userData = loginService.isMemberNoMap(userInfo.getUserNo()); + Result result = new Result(); + List feeList = new ArrayList(); + params.put("mberNo", userInfo.getUserNo()); + params.put("mberCi", userInfo.getUserCi()); + Map rtnVhcles = new HashMap(); + if (userInfo.isTempMber()) { + rtnVhcles.put("VHCLES_NUM", params.get("vhcleNum")); + userData = new HashMap(); + userData.put("TUNNEL_FEE_AGRE_AT", "N"); + userData.put("PARK_FEE_AGRE_AT", "N"); + userData.put("JMP_TUNNEL_FEE_AGRE_AT", "N"); + userData.put("SSM_TUNNEL_FEE_AGRE_AT", "N"); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(params); + } + logger.info("rtnVhcles : " + rtnVhcles); + + if (rtnVhcles == null || "".equals(rtnVhcles.get("VHCLES_NUM")) || rtnVhcles.get("VHCLES_NUM") == null) { + result.setMsg(result.STATUS_ERROR, "조회할 차량이 존재하지 않습니다."); + } else { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + if (params.get("vhcleNum") != null) { + String vhcleNums = (String) params.get("vhcleNum"); + String[] arrVhcleNums = vhcleNums.split(","); + for (String vhcleNum : arrVhcleNums) { + params.put("vhcleNum", vhcleNum); + try { + Map dbParam = new HashMap<>(); + List jgFeeDataList = new ArrayList(); + dbParam.put("vhcleNo", params.get("vhcleNum")); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("startDate", (String) params.get("startDate")); + dbParam.put("endDate", (String) params.get("endDate")); + logger.error("DB 결제내역 조회 -> " + dbParam); + List feeData = feeService.getFeeData(dbParam); + logger.error("DB 결제내역 조회 - jgFeeData > " + feeData); + for (Object feeDataObj : feeData) { + Map feeDataInfo = (Map) feeDataObj; + Map feeInfo = new HashMap<>(); + feeInfo.clear(); + if ("정상승인".equals(feeDataInfo.get("RSPNS_MSSAGE"))) { + feeInfo.put("collectNm", "사전등록"); + feeInfo.put("receiptCd", "1"); + } else { + feeInfo.put("collectNm", "미납"); + // feeInfo.put("receiptCd", "2"); + } + feeInfo.put("insttNo", feeDataInfo.get("INSTT_NO")); + feeInfo.put("insttDelngNo", feeDataInfo.get("INSTT_DELNG_NO")); + feeInfo.put("vhcleNum", feeDataInfo.get("VHCLE_NO")); + feeInfo.put("passDt", (String) feeDataInfo.get("DELNG_YMD") + (String) feeDataInfo.get("DELNG_HMS")); + feeInfo.put("passFareOfi", feeDataInfo.get("INSTT_NM")+"("+(String) feeDataInfo.get("MNGR_NM")+")"); + feeInfo.put("passLocBooth", feeDataInfo.get("INSTT_DETAIL_NM")); + feeInfo.put("passAmount", feeDataInfo.get("SETLE_AMOUNT")); + feeInfo.put("vhcleTy", feeDataInfo.get("CARS_TY")); + feeInfo.put("occrrncDate", feeDataInfo.get("OCCRRNC_DATE")); + feeInfo.put("occrrncTime", feeDataInfo.get("OCCRRNC_TIME")); + feeInfo.put("insttDetailCode", feeDataInfo.get("INSTT_DETAIL_CODE")); + feeInfo.put("pasngSeCode", feeDataInfo.get("PASNG_SE_CODE")); + feeInfo.put("receiptTypeNm", "사전등록"); + jgFeeDataList.add(feeInfo); + } + if (feeData.size() > 0) { + feeList.addAll(jgFeeDataList); + } + logger.error("DB 결제내역 조회 - feeList size > " + feeList.size()); + if (feeList.size() > 0) { + try { + Collections.sort(feeList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("passDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("passDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + logger.error("DB 결제내역 조회 - feeList size2 > " + feeList.size()); + result.setData("feeList", feeList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, "조회된 데이터가 없습니다."); + } + logger.error("DB 결제내역 조회 - feeList > " + feeList); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + } + } + return result.getResult(); + } + + /** + * Gets fees info. + * + * @param param the param + * @return the fees info + */ + @RequestMapping(value = "/fee/getFeesInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getFeesInfo(@RequestBody Map param) { + Map params = (Map) param.get("param"); + Map param2 = (Map) param.get("dma_param2"); + logger.info("====#####== FeeController getFeesInfo POST ======="); + logger.info("Param Data : " + params); + + Result result = new Result(); + params.put("vhcleNum", param2.get("vhcleNum")); + Map feesInfo = feeService.getFeesInfo(params); + /*Map complaintInfo = feeService.isExsistComplaintInfo(feesInfo); + if (complaintInfo != null) { + result.setData("complaintInfo", complaintInfo); + }*/ + if (feesInfo.get("rspnsResult").equals("S")) { + result.setData("feesInfo", feesInfo); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, feesInfo.get("rspnsMssage").toString()); + } + + + return result.getResult(); + } + + /** + * Gets pay info. + * + * @return the pay info + */ + @RequestMapping(value = "/fee/getPayInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getPayInfo() { + Result result = new Result(); + + Map payInfo = preRegistPaymentService.getPaymentInfo(userInfo.getUserNo()); + + result.setData("payInfo", payInfo); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + + return result.getResult(); + } + + /** + * Pay a fee map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/fee/payAFee.do", method = RequestMethod.POST) + public @ResponseBody + Map payAFee(@RequestBody Map param) { + logger.info("Param Data : " + param); + Map response = feeService.payAFee(param); + return response; + } + + /** + * Gets complaints list. + * + * @param param the param + * @return the complaints list + */ + @RequestMapping(value = "/fee/getComplaintsList.do", method = RequestMethod.POST) + public @ResponseBody + Map getComplaintsList(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== FeeController getComplaintsList POST ======="); + logger.info("Param Data : " + param); + + Map params = (Map) param.get("param"); + params.put("mberNo", userInfo.getUserNo()); + params.put("mberCi", userInfo.getUserCi()); + Map rtnVhcles = new HashMap(); + if (userInfo.isTempMber()) { + rtnVhcles.put("VHCLES_NUM", params.get("vhcleNum")); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(params); + } + logger.info("rtnVhcles : " + rtnVhcles); + if (rtnVhcles == null || "".equals(rtnVhcles.get("VHCLES_NUM")) || rtnVhcles.get("VHCLES_NUM") == null) { + result.setMsg(result.STATUS_ERROR, "조회할 차량이 존재하지 않습니다."); + } else { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map resultMap = feeService.getComplaintsList(params); + logger.info("resultMap::" + resultMap); + + if (resultMap.get("rspnsResult").equals("S")) { + List complaintsList = new ArrayList(); + if (resultMap.get("data") != null) { + complaintsList = (List) resultMap.get("data"); + } + if (complaintsList.size() > 0) { + Collections.sort(complaintsList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("requDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("requDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + result.setData("dlt_complaintsList2", complaintsList); + } else { + result.setMsg(result.STATUS_ERROR, resultMap.get("rspnsMssage").toString()); + } + } + logger.info("Result Data : " + result.getResult()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Gets complaint info. + * + * @param param the param + * @return the complaint info + */ + @RequestMapping(value = "/fee/getComplaintInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getComplaintInfo(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== FeeController getComplaintInfo POST ======="); + logger.info("Param Data : " + param); + + Map params = (Map) param.get("param"); + params.put("mberNo", userInfo.getUserNo()); + params.put("mberCi", userInfo.getUserCi()); + Map complatint = feeService.getComplaintInfo(params); + if (complatint.get("rspnsResult").equals("S")) { + Map data = null; + List resultList = new ArrayList(); + List fileList = new ArrayList(); + resultList = (List) complatint.get("data"); + data = (Map) resultList.get(0); + + /*String fileId = ""; + if (data.get("addFile1") != null) { + fileId = data.get("addFile1").toString(); + fileParam.put("ATCH_FILE_ID", fileId); + fileList = feeService.getComplaintFileInfo(fileParam); + }*/ + if (data.get("addFile1") != null) { + String file = data.get("addFile1").toString(); + /*info.fileId = o.ATCH_FILE_ID; + info.localFileName = o.ORGINL_FILE_NM; + info.fileSeq = o.FILE_SEQ_NO;*/ + Map fileParam = new HashMap(); + fileParam.put("ATCH_FILE_ID", file); + fileParam.put("ORGINL_FILE_NM", FilenameUtils.getName(file)); + fileParam.put("FILE_SEQ_NO", 1); + fileList.add(fileParam); + } + if (data.get("addFile2") != null) { + String file = data.get("addFile2").toString(); + /*info.fileId = o.ATCH_FILE_ID; + info.localFileName = o.ORGINL_FILE_NM; + info.fileSeq = o.FILE_SEQ_NO;*/ + Map fileParam = new HashMap(); + fileParam.put("ATCH_FILE_ID", file); + fileParam.put("ORGINL_FILE_NM", FilenameUtils.getName(file)); + fileParam.put("FILE_SEQ_NO", 2); + fileList.add(fileParam); + } + if (data.get("addFile3") != null) { + String file = data.get("addFile3").toString(); + /*info.fileId = o.ATCH_FILE_ID; + info.localFileName = o.ORGINL_FILE_NM; + info.fileSeq = o.FILE_SEQ_NO;*/ + Map fileParam = new HashMap(); + fileParam.put("ATCH_FILE_ID", file); + fileParam.put("ORGINL_FILE_NM", FilenameUtils.getName(file)); + fileParam.put("FILE_SEQ_NO", 3); + fileList.add(fileParam); + } + + result.setData("fileList", fileList); + result.setData("dlt_complaintsList", resultList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + String rspnsMssage = ""; + rspnsMssage = complatint.get("rspnsMssage").toString(); + if (!"".equals(rspnsMssage)) { + result.setMsg(result.STATUS_ERROR, rspnsMssage); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_SUCESS_MESSAGE); + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Submit a complaint map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/fee/submitAComplaint.do", method = RequestMethod.POST) + public @ResponseBody + Map submitAComplaint(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== FeeController submitAComplaint POST ======="); + logger.info("Param Data : " + param); + + Map complaintInfo = (Map) param.get("complaintInfo"); + complaintInfo.put("mberNo", userInfo.getUserNo()); + complaintInfo.put("mberCi", userInfo.getUserCi()); + logger.info("complaintInfo:: " + complaintInfo); + List files = (List) param.get("fileList"); + logger.info("files:: " + files); + + //complaintInfo.put("MBER_CI", userInfo.getUserCi()); + Map resultMap = feeService.submitAComplaint(complaintInfo, files); + if (resultMap.get("rspnsResult").equals("S")) { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + String rspnsMssage = ""; + rspnsMssage = resultMap.get("rspnsMssage").toString(); + if (!"".equals(rspnsMssage)) { + result.setMsg(result.STATUS_ERROR, rspnsMssage); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_SUCESS_MESSAGE); + } + } + + Map resultMap2 = feeService.privachCheckApi(complaintInfo, files); + result.setData("dma_result", resultMap2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + + /** + * Modify a complaint map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/fee/modifyAComplaint.do", method = RequestMethod.POST) + public @ResponseBody + Map modifyAComplaint(@RequestBody Map param) { + + logger.info("====#####== FeeController modifyAComplaint POST ======="); + logger.info("Param Data : " + param); + + Map dma_param = (Map) param.get("dma_param"); + logger.info("dma_param:: " + dma_param); + Map complaintInfo = (Map) param.get("dma_complaint"); + complaintInfo.put("mberNo", userInfo.getUserNo()); + complaintInfo.put("mberCi", userInfo.getUserCi()); + logger.info("complaintInfo:: " + complaintInfo); + List files = (List) param.get("fileList"); + logger.info("files::" + files); + + complaintInfo.put("insttDelngNo", dma_param.get("insttDelngNo")); + complaintInfo.put("civilNo", dma_param.get("civilNo")); + + Map resultMap = new HashMap(); + Map resultMap1 = feeService.modifyAComplaint(complaintInfo, files); + if (resultMap1.get("rspnsResult").equals("S")) { + resultMap.put("rspnsResult", "S"); + } else { + resultMap.put("rspnsResult", "E"); + } + + logger.info("resultMap11::" + resultMap); + Map resultMap2 = feeService.privachCheckApi(complaintInfo, files); + resultMap.putAll(resultMap2); + logger.info("resultMap22::" + resultMap); + + return resultMap; + } + + /** + * Cancle a complaint map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/fee/cancleAComplaint.do", method = RequestMethod.POST) + public @ResponseBody + Map cancleAComplaint(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== FeeController cancleAComplaint POST ======="); + logger.info("Param Data : " + param); + + Map dma_param = (Map) param.get("dma_param"); + dma_param.put("mberNo", userInfo.getUserNo()); + dma_param.put("mberCi", userInfo.getUserCi()); + logger.info("dma_param : " + dma_param); + + Map resultMap = feeService.cancleAComplaint(dma_param); + logger.info("resultMap:: " + resultMap); + + if (resultMap.get("rspnsResult").equals("S")) { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + + List files = null; + Map resultMap2 = feeService.privachCheckApi(dma_param, files); + result.setData("dma_result", resultMap2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Submit a complaint reply map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/fee/submitAComplaintReply.do", method = RequestMethod.POST) + public @ResponseBody + Map submitAComplaintReply(@RequestBody Map param) { + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + + Result result = new Result(); + + Map complatint = feeService.submitAComplaintReply(param); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + + return result.getResult(); + } + + /** + * Gets refnd list. + * + * @param param the param + * @return the refnd list + */ + @RequestMapping(value = "/fee/getRefndList.do", method = RequestMethod.POST) + public @ResponseBody + Map getRefndList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST getRefndList ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("param"); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("mberCi", userInfo.getUserCi()); + Map rtnVhcles = new HashMap(); + if (userInfo.isTempMber()) { + rtnVhcles.put("VHCLES_NUM", dbParam.get("vhcleNum")); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(dbParam); + } + logger.info("rtnVhcles : " + rtnVhcles); + if (rtnVhcles == null || "".equals(rtnVhcles.get("VHCLES_NUM")) || rtnVhcles.get("VHCLES_NUM") == null) { + logger.error("rtnVhcles not exsist" + rtnVhcles); + result.setMsg(result.STATUS_ERROR, "조회할 차량이 존재하지 않습니다."); + } else { + dbParam.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map resutMap = feeService.getRefndList(dbParam); + logger.info("resutMap::" + resutMap); + if (resutMap.get("rspnsResult").equals("S")) { + List refundsList = new ArrayList(); + if (resutMap.get("data") != null) { + refundsList = (List) resutMap.get("data"); + } + if (refundsList.size() > 0) { + Collections.sort(refundsList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("rfnProcDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("rfnProcDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + result.setData("dlt_resultList2", refundsList); + } else { + result.setMsg(result.STATUS_ERROR, resutMap.get("rspnsMssage").toString()); + } + } + logger.info("Result Data List: " + result.getResult()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + return result.getResult(); + } + + /** + * Gets bank code list. + * + * @param param the param + * @return the bank code list + */ + @RequestMapping(value = "/fee/getBankCodeList.do", method = RequestMethod.POST) + public @ResponseBody + Map getBankCodeList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + result.setData("dlt_bankCodeList", joinService.getBankCode()); + result.setMsg(result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Gets bank code Insert Map. + * + * @param param the param + * @return the bank code Map + */ + @RequestMapping(value = "/fee/refndInsert.do", method = RequestMethod.POST) + public @ResponseBody + Map refndInsert(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST refndInsert ======="); + logger.info("Param Data : " + param); + + Map dbParam1 = (Map) param.get("dma_result"); + Map dbParam2 = (Map) param.get("dma_param"); + dbParam2.put("mberNo", userInfo.getUserNo()); + dbParam2.put("mberCi", userInfo.getUserCi()); + Map resutMap = feeService.refndInsert(dbParam1, dbParam2); + logger.info("resutMap::" + resutMap); + if (resutMap.get("rspnsResult").equals("S")) { + result.setData("dma_result", resutMap); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, resutMap.get("rspnsMssage").toString()); + } + + Map resultMap2 = feeService.refundPrivachCheckApi(dbParam1); + result.setData("dma_result", resultMap2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Gets bank code Update Map. + * + * @param param the param + * @return the bank code Map + */ + @RequestMapping(value = "/fee/refndUpdate.do", method = RequestMethod.POST) + public @ResponseBody + Map refndUpdate(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST refndUpdate ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_result"); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("mberCi", userInfo.getUserCi()); + Map resutMap = feeService.refndUpdate(dbParam); + logger.info("resutMap::" + resutMap); + if (resutMap.get("rspnsResult").equals("S")) { + result.setData("dma_result", resutMap); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, resutMap.get("rspnsMssage").toString()); + } + + Map resultMap2 = feeService.refundPrivachCheckApi(dbParam); + result.setData("dma_result", resultMap2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Fee recipt string. + * + * @param model the model + * @param request the request + * @return the string + */ + @RequestMapping(value = "/fee/feeRecipt.do", method = RequestMethod.GET) + public String feeRecipt(ModelMap model, HttpServletRequest request) { + model.addAttribute("insttDelngNos", request.getParameter("insttDelngNos")); + return "report/fee/feeRecipt"; + } + + /** + * View fee recipt list map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/report/viewFeeReciptList.do", method = RequestMethod.GET) + public @ResponseBody + Map viewFeeReciptList(HttpServletRequest request) { + Result result = new Result(); + logger.info("report insttDelngNos [" + request.getParameter("insttDelngNos") + "]"); + String insttDelngNos = request.getParameter("insttDelngNos"); + Map param = new HashMap<>(); + param.put("insttDelngNos", insttDelngNos); + Map resutMap = feeService.getReciptList(param); + if (resutMap.get("rspnsResult").equals("S")) { + List reciptList = (List) resutMap.get("data"); + result.setData("reciptList", reciptList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + List reciptList = new ArrayList(); + result.setData("reciptList", reciptList); + result.setMsg(result.STATUS_ERROR, resutMap.get("rspnsMssage").toString()); + } + return result.getResult(); + } + + @RequestMapping(value = "/report/viewFeeReciptList.do", method = RequestMethod.POST) + public @ResponseBody + Map viewFeeReciptListPOST(HttpServletRequest request) { + Result result = new Result(); + logger.info("report insttDelngNos [" + request.getParameter("insttDelngNos") + "]"); + String insttDelngNos = request.getParameter("insttDelngNos"); + Map param = new HashMap<>(); + param.put("insttDelngNos", insttDelngNos); + Map resutMap = feeService.getReciptList(param); + if (resutMap.get("rspnsResult").equals("S")) { + List reciptList = (List) resutMap.get("data"); + result.setData("reciptList", reciptList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + List reciptList = new ArrayList(); + result.setData("reciptList", reciptList); + result.setMsg(result.STATUS_ERROR, resutMap.get("rspnsMssage").toString()); + } + return result.getResult(); + } + + /** + * Gets U-PRIVACY CHECK API Map. + * + * @param param the param + * @return the penalty Map + */ + @RequestMapping(value = "/fee/privachCheckApi.do", method = RequestMethod.POST) + public @ResponseBody + Map privachCheckApi(@RequestBody Map param) { + + Result result = new Result(); + Map resutMap = new HashMap<>(); + try { + logger.info("====#####== POST privachCheckApi ======="); + logger.info("Param Data : " + param); + + Map inputData = (Map) param.get("inputData"); + List files = (List) param.get("fileList"); + + resutMap = feeService.privachCheckApi(inputData, files); + + if (resutMap.get("rspnsResult").equals("S")) { + result.setData("dma_result", resutMap); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + + /** + * Gets U-PRIVACY CHECK API Map. + * + * @param param the param + * @return the penalty Map + */ + @RequestMapping(value = "/fee/refundPrivachCheckApi.do", method = RequestMethod.POST) + public @ResponseBody + Map refundPrivachCheckApi(@RequestBody Map param) { + + Result result = new Result(); + Map resutMap = new HashMap<>(); + try { + logger.info("====#####== POST privachCheckApi ======="); + logger.info("Param Data : " + param); + + Map inputData = (Map) param.get("inputData"); + + resutMap = feeService.refundPrivachCheckApi(inputData); + + if (resutMap.get("rspnsResult").equals("S")) { + result.setData("dma_result", resutMap); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + +} diff --git a/src/main/java/gtpa/brs/handler/ClobTypeHandler.java b/src/main/java/gtpa/brs/handler/ClobTypeHandler.java new file mode 100644 index 0000000..3370573 --- /dev/null +++ b/src/main/java/gtpa/brs/handler/ClobTypeHandler.java @@ -0,0 +1,45 @@ +package gtpa.brs.handler; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 23/04/2019 + * TIME : 2:13 PM + * Project : BRSPW + * Class : ClobTypeHandler + * Desc : + * ///////////////////////////////////////////////////// + */ +@MappedJdbcTypes(value = {JdbcType.CLOB}) +public class ClobTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException { + preparedStatement.setString(i, s); + } + + @Override + public String getNullableResult(ResultSet resultSet, String s) throws SQLException { + return resultSet.getString(s); + } + + @Override + public String getNullableResult(ResultSet resultSet, int i) throws SQLException { + return resultSet.getString(i); + } + + @Override + public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException { + return callableStatement.getString(i); + } +} diff --git a/src/main/java/gtpa/brs/handler/StringTypeHandler.java b/src/main/java/gtpa/brs/handler/StringTypeHandler.java new file mode 100644 index 0000000..4227474 --- /dev/null +++ b/src/main/java/gtpa/brs/handler/StringTypeHandler.java @@ -0,0 +1,58 @@ +package gtpa.brs.handler; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 23/04/2019 + * TIME : 2:01 PM + * Project : BRSPW + * Class : StringTypeHandler + * Desc : + * ///////////////////////////////////////////////////// + */ +@MappedJdbcTypes(value = {JdbcType.VARCHAR, JdbcType.CHAR}) +public class StringTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException { + preparedStatement.setString(i, s); + } + + @Override + public String getNullableResult(ResultSet resultSet, String s) throws SQLException { + if (resultSet.getString(s) != null) { + return resultSet.getString(s).trim(); + } else { + return resultSet.getString(s); + } + + } + + @Override + public String getNullableResult(ResultSet resultSet, int i) throws SQLException { + if (resultSet.getString(i) != null) { + return resultSet.getString(i).trim(); + } else { + return resultSet.getString(i); + } + } + + @Override + public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException { + if (callableStatement.getString(i) != null) { + return callableStatement.getString(i).trim(); + } else { + return callableStatement.getString(i); + } + } +} diff --git a/src/main/java/gtpa/brs/home/web/InitController.java b/src/main/java/gtpa/brs/home/web/InitController.java new file mode 100644 index 0000000..cb716db --- /dev/null +++ b/src/main/java/gtpa/brs/home/web/InitController.java @@ -0,0 +1,221 @@ +package gtpa.brs.home.web; + + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.PageURIUtil; +import gtpa.brs.util.Result; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import eu.bitwalker.useragentutils.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.view.RedirectView; + +import java.util.Map; + + +/** + * The type Init controller. + */ +@SuppressFBWarnings +@Controller +public class InitController { + + Logger logger = LoggerFactory.getLogger(InitController.class); + @Autowired + UserInfo userInfo; + + @Autowired + PageURIUtil pageURIUtil; + + /** + * Instantiates a new Init controller. + */ + public InitController() { + } + + /** + * 다국어 처리 Root Url 처리 + * + * @param request the request + * @param response the response + * @param model the model + * @return the string + * @throws Exception the exception + * @date 2017.12.22 + * @author Inswave + * @example websquare 진입 후 세션과 설정 값에 따른 화면 xml 분기를 위한 controller. 고려 대상은 websquare.jsp와 I18N.jsp. 화면 페이지의 정보는 properties파일에서 일괄 관리. + * @todo 차후 interceptor에서 일괄 처리 가능한지 체크 해야 함. + */ + @RequestMapping(value = "/I18N", method = RequestMethod.GET) + public String indexMultiLang(HttpServletRequest request, HttpServletResponse response, Model model) { + model.addAttribute("movePage", getInitPage(request.getParameter("w2xPath"))); + return "websquare/I18N"; + } + + /** + * 기본 Root Url 처리 + * + * @param request the request + * @param response the response + * @return the model and view + * @throws Exception the exception + * @date 2017.12.22 + * @author Inswave + * @todo url의 경로가 /(root)인 경우 웹스퀘어 엔진에서 하위 컨텐츠 로딩 부분의 특이사항이 발견되어 redirect로 처리.수정 및 개선 필요. + */ + @RequestMapping(value = "/ws.do", method = RequestMethod.GET) + public ModelAndView IndexHideBase(HttpServletRequest request, HttpServletResponse response) { + ModelAndView mv = new ModelAndView(); + HttpSession session = request.getSession(false); + + String movePage = request.getParameter("w2xPath"); + String linkPage = request.getParameter("link"); + if (session.getAttribute("w2xPath") != null) { + movePage = (String) session.getAttribute("w2xPath"); + session.removeAttribute("w2xPath"); + } else { + if (movePage == null || movePage.equals("")) { + movePage = getInitPage(movePage); + } + } + + if (linkPage == null && session.getAttribute("link") != null) { + linkPage = (String) session.getAttribute("link"); + session.removeAttribute("link"); + } + + mv.setViewName("websquare/websquare"); + mv.addObject("movePage", movePage); + mv.addObject("link", linkPage); + logger.info("movePage ::" + movePage); + logger.info("link ::" + linkPage); + + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // operating system + OperatingSystem os = agent.getOperatingSystem(); + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + if (deviceType.getName().indexOf("Computer") > -1) { + return mv; + } else { + String redirectUrl= "/"; + RedirectView redirectView = new RedirectView(redirectUrl); + redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); + return new ModelAndView(redirectView); + } + } + + /** + * SPA IFrame에서 호출하는 Blank 페이지를 반환하다. + * + * @param request the request + * @param model the model + * @return string + * @throws Exception the exception + */ + @RequestMapping(value = "/blank.xml", method = RequestMethod.GET) + public String callBlankPage(HttpServletRequest request, Model model){ + return "websquare/blank"; + } + + /** + * 로그인 페이지 Url을 반환한다. + * + * @param w2xPath w2xPath 파라미터 + * @return 로그인 페이지 Url + */ + private String getInitPage(String w2xPath) { + String movePage = w2xPath; + // session이 없을 경우 login 화면으로 이동. + if (!userInfo.isLogined()) { + // session이 있고 w2xPath가 없을 경우 index화면으로 이동. + if (movePage == null) { + //movePage = pageURIUtil.getLoginPage(); + movePage = pageURIUtil.getIndexPage(); + } else if (w2xPath.indexOf("/cm/main/") < 0) { + //movePage = pageURIUtil.getLoginPage(); + movePage = pageURIUtil.getIndexPage(); + } else if (w2xPath.indexOf("/cm/join/") < 0) { + logger.info(w2xPath); + } + } else { + if (movePage == null) { + // DB 설정조회 초기 page 구성 + movePage = pageURIUtil.getIndexPageURI(); + + // DB에 값이 저장되어 있지 않은 경우 기본 index화면으로 이동 + if (movePage == null) { + movePage = pageURIUtil.getIndexPageURI(); + } + } + } + logger.info("getInit movePage ::" + movePage); + return movePage; + } + + /** + * Init temp data map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/initTempData.do", method = RequestMethod.POST) + public @ResponseBody + Map initTempData(HttpServletRequest request) { + Result result = new Result(); + try { + HttpSession session = request.getSession(false); + if (session != null && session.getAttribute("scopedTarget.tempUserSessionInfoDTO") != null) { + session.invalidate(); + } + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE,re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE,e); + } + return result.getResult(); + } + + @RequestMapping(value = "/refreshPage.do", method = RequestMethod.POST) + public @ResponseBody + Map refreshPage(HttpServletRequest request, @RequestBody Map param) { + Result result = new Result(); + try { + HttpSession session = request.getSession(false); + if (session != null) { + session.setAttribute("link", param.get("link")); + } + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE,re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE,e); + } + return result.getResult(); + } + + @RequestMapping(value = "/error.do", method = RequestMethod.GET) + public String errorPage() { + return "error/errorPage"; + } +} diff --git a/src/main/java/gtpa/brs/interceptor/AccessStaticInterceptor.java b/src/main/java/gtpa/brs/interceptor/AccessStaticInterceptor.java new file mode 100644 index 0000000..58fe8f8 --- /dev/null +++ b/src/main/java/gtpa/brs/interceptor/AccessStaticInterceptor.java @@ -0,0 +1,141 @@ +package gtpa.brs.interceptor; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import eu.bitwalker.useragentutils.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.servlet.mvc.WebContentInterceptor; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.IOException; +import java.util.HashMap; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 31/05/2019 + * TIME : 5:30 PM + * Project : BRSMW + * Class : AccessStaticInterceptor + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +public class AccessStaticInterceptor extends WebContentInterceptor { + private Logger logger = LoggerFactory.getLogger(AccessStaticInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { + logger.info("=== refresh browser"); + logger.info("=== access Browser:" + request.getHeader("user-agent")); + logger.info("- - - - - - - - - - - - - - - - -"); + + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // browser + Browser browser = agent.getBrowser(); + HashMap userBrowser = userBrowserChk(request); + if("".equals(userBrowser.get("browser"))) { + userBrowser.put("browser",browser.getName()); + } + + logger.info("Browser type: " + browser.getBrowserType().getName()); + logger.info("**Browser name: " + userBrowser.get("browser")); + logger.info("Browser render engine: " + browser.getRenderingEngine()); + /* + * 21.05.12 - 서주희 : 아이폰에서 카카오톡 웹뷰로 실행하는 경우 오류가 발생하는 걸로 파악되어 try catch 적용 + * */ + try{ + Version version = agent.getBrowserVersion(); + if ("".equals(userBrowser.get("version"))) { + logger.info("*Browser version: " + version.getVersion()); + logger.info("Browser major version: " + version.getMajorVersion()); + logger.info("Browser minor version: " + version.getMinorVersion()); + } else { + logger.info("*Browser version: " + userBrowser.get("version")); + } + }catch(RuntimeException e){ + logger.info("**Browser version: " + userBrowser.get("version")); + } + logger.info("Browser manufacturer: " + browser.getManufacturer().getName()); + + // operating system + OperatingSystem os = agent.getOperatingSystem(); + logger.info("*OS Name: " + os.getName()); + logger.info("OS Manufacturer: " + os.getManufacturer()); + OperatingSystem group = os.getGroup(); + logger.info("*OS group: " + group.getName()); + + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + return super.preHandle(request, response, handler); + } + + private HashMap userBrowserChk(HttpServletRequest request) { + + String userAgent = request.getHeader("user-agent"); + HashMap info = new HashMap(); + String browser = ""; + String version = ""; + try { + if(userAgent.indexOf("Trident") > -1 || userAgent.indexOf("MSIE") > -1) { //IE + + if(userAgent.indexOf("Trident/7") > -1) { + browser = "Internet Explorer"; + version = "11"; + }else if(userAgent.indexOf("Trident/6") > -1) { + browser = "Internet Explorer"; + version = "10"; + }else if(userAgent.indexOf("Trident/5") > -1) { + browser = "Internet Explorer"; + version = "9"; + }else if(userAgent.indexOf("Trident/4") > -1) { + browser = "Internet Explorer"; + version = "8"; + }else if(userAgent.indexOf("edge") > -1 || userAgent.indexOf("Edge") > -1) { + browser = "Edge"; + } + + }else if(userAgent.indexOf("Whale") > -1){ //네이버 WHALE + //browser = "WHALE " + userAgent.split("Whale/")[1].toString().split(" ")[0].toString(); + browser = "Whale"; + version = userAgent.split("Whale/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("SamsungBrowser") > -1){ //SamsungBrowser + //browser = "WHALE " + userAgent.split("Whale/")[1].toString().split(" ")[0].toString(); + browser = "SamsungBrowser"; + version = userAgent.split("SamsungBrowser/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1){ //오페라 + if(userAgent.indexOf("Opera") > -1) { + browser = "Opera"; + version = userAgent.split("Opera/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("OPR") > -1) { + browser = "Opera"; + version = userAgent.split("OPR/")[1].toString().split(" ")[0].toString(); + } + }else if(userAgent.indexOf("Firefox") > -1){ //파이어폭스 + browser = "Firefox"; + version = userAgent.split("Firefox/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1 ){ //사파리 + browser = "Safari"; + version = userAgent.split("Safari/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("egde") > -1 || userAgent.indexOf("Edge") == -1 || userAgent.indexOf("Edg") == -1){ //사파리 + browser = "Edge"; + }else if(userAgent.indexOf("Chrome") > -1){ //크롬 + browser = "Chrome"; + version = userAgent.split("Chrome/")[1].toString().split(" ")[0].toString(); + } + } catch (RuntimeException e) { + logger.error("[userBrowserChk Error::",e); + } + + + info.put("browser",browser); + info.put("version",version); + + return info; + } +} diff --git a/src/main/java/gtpa/brs/interceptor/AuthenticInterceptor.java b/src/main/java/gtpa/brs/interceptor/AuthenticInterceptor.java new file mode 100644 index 0000000..b28dfb2 --- /dev/null +++ b/src/main/java/gtpa/brs/interceptor/AuthenticInterceptor.java @@ -0,0 +1,81 @@ +package gtpa.brs.interceptor; + +import gtpa.brs.user.dto.UserInfo; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.WebContentInterceptor; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 17/04/2019 + * TIME : 5:59 PM + * Project : BRSPW + * Class : AuthenticInterceptor + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +public class AuthenticInterceptor extends WebContentInterceptor { + + private Logger logger = LoggerFactory.getLogger(AuthenticInterceptor.class); + + @Autowired + private UserInfo userInfo; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { + boolean result = true; + try { + logger.info("== AuthenticInterceptor preHandle start =======" + request.getRequestURI()); + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + logger.info("== method ======" + method); + logger.info("== bean ======" + handlerMethod.getBean()); + + //logger.info("== UserInfo ============================" + userInfo.getUserInfo()); + if(request.getSession(false) != null){ + logger.info("== tempUserSessionInfoDTO =====================" + request.getSession(false).getAttribute("scopedTarget.tempUserSessionInfoDTO")); + } + + if (userInfo.getUserId() != null) { + result = true; + } else { + result = false; + //response.sendRedirect("/error.do"); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + //response.getWriter().write("{\"rsMsg\":{\"message\":\"장시간 서비스 이용이 없어 접속 종료되었습니다.\"}}"); + response.getWriter().write("{\"rsMsg\":{\"message\":\"접근권한이 없습니다.
    중복로그인 또는 장시간 서비스 이용이 없어 접속이 종료되었습니다.\"}}"); + /*response.setContentType("text/html; charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write("");*/ + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::"+ "" + "]",e); + }finally { + logger.info("== result ============================" + result); + } + + return result; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + super.postHandle(request, response, handler, modelAndView); + logger.info("== AuthenticInterceptor postHandle start =======" + request.getRequestURI()); + } +} + diff --git a/src/main/java/gtpa/brs/interceptor/MessageAdvice.java b/src/main/java/gtpa/brs/interceptor/MessageAdvice.java new file mode 100644 index 0000000..8af53d1 --- /dev/null +++ b/src/main/java/gtpa/brs/interceptor/MessageAdvice.java @@ -0,0 +1,267 @@ +package gtpa.brs.interceptor; + +import gtpa.brs.login.service.LoginService; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import eu.bitwalker.useragentutils.*; +import gtpa.brs.util.Result; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +@SuppressFBWarnings +@Aspect // AOP bean : AOP 애노테이션 +@Component +@EnableAspectJAutoProxy +public class MessageAdvice { + + @Autowired + private LoginService loginService; + private Logger logger = LoggerFactory.getLogger(MessageAdvice.class); + + // 매개변수 확인, @Before(대상:호출전) + @Before("execution(* gtpa.brs.login.web.LoginController.login(..)) || execution(* gtpa.brs.login.web.LoginController.deUserLogin(..))") + public void startLog(JoinPoint jp) { + // 핵심업무의 클래스,매서드, 매개변수 로깅 + //logger.info("핵심업무 코드정보 : "+jp.getSignature()); + //logger.info("메서드 : "+jp.getSignature().getName()); + //logger.info("매개변수:"+ Arrays.toString(jp.getArgs())); + } + + // method 실행 시간 확인, @Around : 핵심업무 전후에 자동호출, ProceedingJoinPoint + @Around("execution(* gtpa.brs.login.web.LoginController.login(..)) || execution(* gtpa.brs.login.web.LoginController.deUserLogin(..))") + public Object timeLog(ProceedingJoinPoint pjp) throws Throwable { + // 핵심업무 실행 전 + long start = System.currentTimeMillis(); + // 핵심업무 실행 + Object result = pjp.proceed(); + // 핵심업무 실행 후 + long end = System.currentTimeMillis(); + // 핵심업무 실행시간 연산 + //logger.info("매개변수:"+Arrays.toString(pjp.getArgs())); + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // browser + Browser browser = agent.getBrowser(); + //logger.info("Browser type: " + browser.getBrowserType().getName()); + //logger.info("*Browser name: " + browser.getName()); + //logger.info("Browser render engine: " + browser.getRenderingEngine()); + + Version version = agent.getBrowserVersion(); + if (version != null) { + //logger.info("Browser version: " + version.getVersion()); + //logger.info("Browser major version: " + version.getMajorVersion()); + //logger.info("Browser minor version: " + version.getMinorVersion()); + } + //logger.info("Browser manufacturer: " + browser.getManufacturer().getName()); + + // operating system + OperatingSystem os = agent.getOperatingSystem(); + //logger.info("*OS Name: " + os.getName()); + //logger.info("OS Manufacturer: " + os.getManufacturer()); + OperatingSystem group = os.getGroup(); + //logger.info("*OS group: " + group.getName()); + + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("SESSION::" + request.getSession().getAttribute("MBER_NO")); + HashMap param = new HashMap(); + param.put("MBER_NO", request.getSession().getAttribute("MBER_NO")); + param.put("DEVICE", deviceType.getName()); + //param.put("BROWSER", browser.getName()); + HashMap userBrowser = userBrowserChk(request); + if("".equals(userBrowser.get("browser"))) { + userBrowser.put("browser",browser.getName()); + } + logger.info("**Browser name: " + userBrowser.get("browser")); + param.put("BROWSER", userBrowser.get("browser")); + //HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest(); + String ip = getRemoteAddr(request); + logger.info("logined::" + ip); + boolean isLogined = false; + boolean isTempMber = false; + if (request.getSession().getAttribute("IS_LOGIN") != null) { + isLogined = (boolean) request.getSession().getAttribute("IS_LOGIN"); + if (request.getSession().getAttribute("IS_TEMPMBER") != null) { + isTempMber = (boolean) request.getSession().getAttribute("IS_TEMPMBER"); + } + } + if (isLogined) { + if (isTempMber) { + param.put("MBER_NO", request.getSession().getAttribute("MBER_ID")); + } + loginService.insertConnInfo(param); + } + logger.info(pjp.getSignature().getName()+"메서드 실행시간:"+(end-start)); + logger.info("=========================================="); + return result; + } + + public String getRemoteAddr(HttpServletRequest request) { + String ip = null; + ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length()== 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length()== 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-RealIP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("REMOTE_ADDR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + @AfterReturning(value = "execution(* gtpa.brs.login.web.LoginController.login(..)) || execution(* gtpa.brs.login.web.LoginController.deUserLogin(..))", returning = "returnValue") + public void writeErrorLog(JoinPoint joinPoint,Object returnValue) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + Object[] args = joinPoint.getArgs(); + LinkedHashMap reqParam = new LinkedHashMap<>(); + for (Object arg:args) { + if(arg instanceof LinkedHashMap){ + LinkedHashMap obj = (LinkedHashMap)arg; + if(obj instanceof LinkedHashMap) { + reqParam = (LinkedHashMap) obj.get("dma_loginCheck"); + } + } + } + logger.info("로그인 요청 ID : "+reqParam.get("id")); + if(returnValue instanceof Object){ + if (returnValue instanceof Map){ + if(((Map) returnValue).get("rsMsg") != null) { + Map rsMsg = (Map)((Map) returnValue).get("rsMsg"); + if("E".equals(rsMsg.get("statusCode")) || "O".equals(rsMsg.get("statusCode"))){ + logger.error("핵심업무 코드정보 : "+joinPoint.getSignature()); + logger.error("메서드 : "+joinPoint.getSignature().getName()); + logger.error("매개변수 : "+ Arrays.toString(joinPoint.getArgs())); + logger.error("에러메세지 : " + rsMsg.get("message")); + logger.error("에러코드 : " + rsMsg.get("statusCode")); + logger.error("returnValue Error::" + returnValue); + logger.error("Client IP Addr::" + getRemoteAddr(request)); + Map errLogKey = new HashMap(); + errLogKey.put("REQ_ID",reqParam.get("id")); + errLogKey.put("RES_CODE",rsMsg.get("statusCode")); + errLogKey.put("RES_MESG",rsMsg.get("message")); + loginService.insertPromptErrorConnInfo(errLogKey); + + } + } + } + } else if (returnValue instanceof Result){ + if(((Result) returnValue).getResult().get("rsMsg") != null){ + Map rsMsg = (Map) ((Result) returnValue).getResult().get("rsMsg"); + if("E".equals(rsMsg.get("statusCode")) || "O".equals(rsMsg.get("statusCode"))){ + logger.error("핵심업무 코드정보 : "+joinPoint.getSignature()); + logger.error("메서드 : "+joinPoint.getSignature().getName()); + logger.error("매개변수 : "+ Arrays.toString(joinPoint.getArgs())); + logger.error("에러메세지 : " + rsMsg.get("message")); + logger.error("에러코드 : " + rsMsg.get("statusCode")); + logger.error("returnValue Error::" + returnValue); + logger.error("Client IP Addr::" + getRemoteAddr(request)); + Map errLogKey = new HashMap(); + errLogKey.put("REQ_ID",reqParam.get("id")); + errLogKey.put("RES_CODE",rsMsg.get("statusCode")); + errLogKey.put("RES_MESG",rsMsg.get("message")); + loginService.insertPromptErrorConnInfo(errLogKey); + + } + } + } + } + + private HashMap userBrowserChk(HttpServletRequest request) { + + String userAgent = request.getHeader("user-agent"); + HashMap info = new HashMap(); + String browser = ""; + String version = ""; + try { + if(userAgent.indexOf("Trident") > -1 || userAgent.indexOf("MSIE") > -1) { //IE + + if(userAgent.indexOf("Trident/7") > -1) { + browser = "Internet Explorer"; + version = "11"; + }else if(userAgent.indexOf("Trident/6") > -1) { + browser = "Internet Explorer"; + version = "10"; + }else if(userAgent.indexOf("Trident/5") > -1) { + browser = "Internet Explorer"; + version = "9"; + }else if(userAgent.indexOf("Trident/4") > -1) { + browser = "Internet Explorer"; + version = "8"; + }else if(userAgent.indexOf("edge") > -1 || userAgent.indexOf("Edge") > -1) { + browser = "Edge"; + } + + }else if(userAgent.indexOf("Whale") > -1){ //네이버 WHALE + //browser = "WHALE " + userAgent.split("Whale/")[1].toString().split(" ")[0].toString(); + browser = "Whale"; + version = userAgent.split("Whale/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("SamsungBrowser") > -1){ //SamsungBrowser + //browser = "WHALE " + userAgent.split("Whale/")[1].toString().split(" ")[0].toString(); + browser = "SamsungBrowser"; + version = userAgent.split("SamsungBrowser/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1){ //오페라 + if(userAgent.indexOf("Opera") > -1) { + browser = "Opera"; + version = userAgent.split("Opera/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("OPR") > -1) { + browser = "Opera"; + version = userAgent.split("OPR/")[1].toString().split(" ")[0].toString(); + } + }else if(userAgent.indexOf("Firefox") > -1){ //파이어폭스 + browser = "Firefox"; + version = userAgent.split("Firefox/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1 ){ //사파리 + browser = "Safari"; + version = userAgent.split("Safari/")[1].toString().split(" ")[0].toString(); + }else if(userAgent.indexOf("egde") > -1 || userAgent.indexOf("Edge") == -1 || userAgent.indexOf("Edg") == -1){ //사파리 + browser = "Edge"; + }else if(userAgent.indexOf("Chrome") > -1){ //크롬 + browser = "Chrome"; + version = userAgent.split("Chrome/")[1].toString().split(" ")[0].toString(); + } + } catch (RuntimeException e) { + logger.error("[userBrowserChk Error::",e); + } + + + info.put("browser",browser); + info.put("version",version); + + return info; + } +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/interceptor/SessionCheckInterceptor.java b/src/main/java/gtpa/brs/interceptor/SessionCheckInterceptor.java new file mode 100644 index 0000000..c9bff01 --- /dev/null +++ b/src/main/java/gtpa/brs/interceptor/SessionCheckInterceptor.java @@ -0,0 +1,123 @@ +package gtpa.brs.interceptor; + +import gtpa.brs.user.dto.UserInfo; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 11/04/2019 + * TIME : 2:57 PM + * Project : BRSPW + * Class : SessionCheckInterceptor + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +public class SessionCheckInterceptor extends HandlerInterceptorAdapter { + + private Logger logger = LoggerFactory.getLogger(SessionCheckInterceptor.class); + + @Autowired + private UserInfo userInfo; + + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + String loginInfo; + HttpSession session = request.getSession(); + String reqUrl = request.getRequestURI(); + String w2xPath = request.getParameter("w2xPath"); + String link = request.getParameter("link"); + logger.info("== sessionId ============================" + session.getId()); + logger.info("== preHandle start ============================" + reqUrl); + logger.info("== w2xPath ============================" + w2xPath); + logger.info("== link ============================" + link); + //logger.info("== userInfo =====================" + userInfo.getUserInfo()); + + boolean result = true; + try { + loginInfo = (String) session.getAttribute("MBER_ID"); + logger.info("== loginInfo =====================" + loginInfo); + if (loginInfo != null) { + userInfo.setUserInfo(session); + } else { + if (!isSkipURI(request)) { + if ((w2xPath != null) || (reqUrl.indexOf(".xml") > -1)) { + // 웹스퀘어 화면 호출 시 세션이 종료된 경우, 로그인 페이지로 Redirect 처리한다. + result = false; + //response.sendRedirect("/ws.do?w2xPath=/cm/main/sub.xml&link=/cm/main/auth_check.xml"); + session.setAttribute("w2xPath", "/cm/main/auth_check.xml"); + response.sendRedirect("/"); + } else { + // 서비스 호출 시 세션이 종료된 경우, Session 종료 Alert 후, 로그인 페이지로 Redirect 처리 한다. + result = false; + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write("{\"rsMsg\":{\"statusCode\":\"E\", \"errorCode\" : \"E0001\", \"message\":\"접근권한이 없습니다.
    중복로그인 또는 장시간 서비스 이용이 없어 접속이 종료되었습니다.\",\"status\":\"Error\"}}"); + /*response.getWriter().write("{\"statusCode\":\"E\", \"errorCode\" : \"E0001\", \"message\":\"Session이 종료 되었습니다.\",\"status\":\"Error\"}");*/ + } + } + + if (link != null) { + if (link.indexOf("/ui") > -1) { + result = false; + //response.sendRedirect("/ws.do?w2xPath=/cm/main/sub.xml&link=/cm/main/auth_check.xml"); + session.setAttribute("w2xPath", "/cm/main/auth_check.xml"); + response.sendRedirect("/"); + } + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } finally { + logger.info("== result ============================" + result); + } + return result; + } + + /** + * Session 체크 대상에서 예외 URI 구성 + * + * @param request 파라미터 정보 + * @date 2016. 8. 29. + * @returns 반환 변수 및 객체 + * @author InswaveSystems + * @example 샘플 코드 + */ + private boolean isSkipURI(HttpServletRequest request) { + + String[] skipUrl = {"/", "/I18N", "/ws.do"}; + String[] skipw2xPath = {"/cm", "/pub"}; + boolean result = false; + String uri = (request.getRequestURI()).replace(request.getContextPath(), ""); + String w2xPath = request.getParameter("w2xPath"); + + for (int i = 0; i < skipUrl.length; i++) { + if (uri.equals(skipUrl[i])) { + result = true; + break; + } + } + if (w2xPath != null) { + for (int i = 0; i < skipw2xPath.length; i++) { + if (w2xPath.contains(skipw2xPath[i])) { + if (!result) result = true; + break; + } else { + result = false; + } + } + } + return result; + } +} diff --git a/src/main/java/gtpa/brs/join/service/CACheckService.java b/src/main/java/gtpa/brs/join/service/CACheckService.java new file mode 100644 index 0000000..eb717d7 --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/CACheckService.java @@ -0,0 +1,943 @@ +package gtpa.brs.join.service; + +import gtpa.brs.security.CACHECK; +import gtpa.brs.util.Result; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import eu.bitwalker.useragentutils.*; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 18/04/2019 + * TIME : 10:56 AM + * Project : BRSPW + * Class : CACheckService + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service +public class CACheckService { + + Logger logger = LoggerFactory.getLogger(CACheckService.class); + + @Resource(name = "globalsProperties") + Properties env; + + /*@Autowired + HttpClient httpClient;*/ + + /** + * Is exsist comp map. + * + * @param compRegNum the comp reg num + * @param corpRegNum the corp reg num + * @param compNm the comp nm + * @param compRepNm the comp rep nm + * @return the map + */ + public Map isExsistComp(String compRegNum, String corpRegNum, String compNm, String compRepNm) { + Map result = new HashMap<>(); + CACHECK caComp = new CACHECK(); + int iReturn = -1; + + iReturn = caComp.fnRequest(env.getProperty("Globals.Nice.CACheck.Code"), env.getProperty("Globals.Nice.CACheck.Key"), "3", compRegNum, corpRegNum, compNm, compRepNm); + + if (iReturn == 0) { + logger.info("RETURN_CODE=" + caComp.getReturnCode()); // 인증결과코드 + logger.info("STATUS_CODE=" + caComp.getStatusCode()); // 기업상태코드 + logger.info("RETURN_COMPNAME=" + caComp.getReturnCompName()); // 응답 기업명 + logger.info("RETURN_REPNAME=" + caComp.getReturnRepName()); // 응답 대표자명 + result.put("RETURN_CODE", caComp.getReturnCode()); + result.put("STATUS_CODE", caComp.getStatusCode()); + result.put("RETURN_MSG", getRtnMessage(caComp.getReturnCode())); + result.put("STATUS_MSG", getStatusMessage(caComp.getStatusCode())); + result.put("RETURN_COMPNAME", caComp.getReturnCompName()); + result.put("RETURN_REPNAME", caComp.getReturnRepName()); + } else { + logger.info("AUTH_ERROR=" + iReturn); + } + result.put("iReturn", iReturn); + result.put("iReturn_MSG", getIReturnMessage(iReturn)); + + return result; + } + + /** + * Interop service map. + * + * @param niNo the ni no + * @return the map + */ + public Map interopService(String niNo) { + Map result = new HashMap<>(); + + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getCiInfo"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("juminNo", niNo); + + logger.info("reqData::" + reqData); + result = requestCI(url, reqData); + logger.info("result::" + result); + + result.put("CI", result.get("sci")); + if (result.get("rspnsResult").equals("S")) { + result.put("iRtnCI", 1); + result.put("iRtnCI_MSG", result.get("rspnsMssage")); + } else { + result.put("iRtnCI", -9); + result.put("iRtnCI_MSG", "차량소유자 정보조회 오류가 발생하였습니다."); + } + + return result; + } + + public Map requestCI(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("sci", data.get("sci")); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "io.getMessage()" + "]", io); + } + + } + return result; + } + + /** + * Check plus main result. + * + * @param request the request + * @param type the type + * @return the result + */ + public Result checkPlusMain(HttpServletRequest request, String type) { + Result result = new Result(); + HttpSession session = request.getSession(); + NiceID.Check.CPClient niceCheck = new NiceID.Check.CPClient(); + StringBuffer url = request.getRequestURL(); + String uri = request.getRequestURI(); + String contextPath = request.getContextPath(); + String host = ""; + if (uri.equals("/")) { + host = url.toString(); + } else { + host = url.substring(0, url.indexOf(uri)) + contextPath + "/"; + } + //String url = env.getProperty("Globals.Url"); + String sSiteCode; // NICE로부터 부여받은 사이트 코드 + String sSitePassword; // NICE로부터 부여받은 사이트 패스워드 + String sAuthType = type; // 없으면 기본 선택화면, M: 핸드폰, C: 신용카드, X: 공인인증서 + String sReturnUrl; // 성공시 이동될 URL + String sErrorUrl; // 실패시 이동될 URL + if (type.equals("C")) { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Credit.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Credit.Key"); + sReturnUrl = host + "check/credit/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "check/credit/fail.do"; // 실패시 이동될 URL + } else { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Phone.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Phone.Key"); + sReturnUrl = host + "check/phone/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "check/phone/fail.do"; // 실패시 이동될 URL + } + String sRequestNumber = "REQ0000000001"; // 요청 번호, 이는 성공/실패후에 같은 값으로 되돌려주게 되므로 + // 업체에서 적절하게 변경하여 쓰거나, 아래와 같이 생성한다. + sRequestNumber = niceCheck.getRequestNO(sSiteCode); + session.setAttribute("REQ_SEQ", sRequestNumber); + + String popgubun = "N"; //Y : 취소버튼 있음 / N : 취소버튼 없음 + String customize = ""; //없으면 기본 웹페이지 / Mobile : 모바일페이지 + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // operating system + OperatingSystem os = agent.getOperatingSystem(); + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + if (deviceType.getName() != null && deviceType.getName().indexOf("Computer") > -1) { + customize = ""; + } else { + customize = "Mobile"; + } + String sGender = ""; //없으면 기본 선택 값, 0 : 여자, 1 : 남자 + // CheckPlus(본인인증) 처리 후, 결과 데이타를 리턴 받기위해 다음예제와 같이 http부터 입력합니다. + //리턴url은 인증 전 인증페이지를 호출하기 전 url과 동일해야 합니다. ex) 인증 전 url : http://www.~ 리턴 url : http://www.~ + //String sReturnUrl = "http://www.test.co.kr/checkplus_success.jsp"; // 성공시 이동될 URL + //String sErrorUrl = "http://www.test.co.kr/checkplus_fail.jsp"; // 실패시 이동될 URL + + // 입력될 plain 데이타를 만든다. + String sPlainData = "7:REQ_SEQ" + sRequestNumber.getBytes().length + ":" + sRequestNumber + + "8:SITECODE" + sSiteCode.getBytes().length + ":" + sSiteCode + + "9:AUTH_TYPE" + sAuthType.getBytes().length + ":" + sAuthType + + "7:RTN_URL" + sReturnUrl.getBytes().length + ":" + sReturnUrl + + "7:ERR_URL" + sErrorUrl.getBytes().length + ":" + sErrorUrl + + "11:POPUP_GUBUN" + popgubun.getBytes().length + ":" + popgubun + + "9:CUSTOMIZE" + customize.getBytes().length + ":" + customize + + "6:GENDER" + sGender.getBytes().length + ":" + sGender; + + String sMessage = ""; + String sEncData = ""; + + int iReturn = niceCheck.fnEncode(sSiteCode, sSitePassword, sPlainData); + if (iReturn == 0) { + sEncData = niceCheck.getCipherData(); + } else if (iReturn == -1) { + sMessage = "암호화 시스템 에러입니다."; + } else if (iReturn == -2) { + sMessage = "암호화 처리오류입니다."; + } else if (iReturn == -3) { + sMessage = "암호화 데이터 오류입니다."; + } else if (iReturn == -9) { + sMessage = "입력 데이터 오류입니다."; + } else { + sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; + } + if (iReturn != 0) { + result.setMsg(result.STATUS_ERROR, sMessage); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } + result.setData("sEncData", sEncData); + result.setData("sMessage", sMessage); + return result; + } + + /** + * ID/PWD 핸드폰/카드 인증용 + * Check plus main result. + * + * @param request the request + * @param type the type + * @return the result + */ + public Result idPwdCheckPlusMain(HttpServletRequest request, String type) { + Result result = new Result(); + HttpSession session = request.getSession(); + NiceID.Check.CPClient niceCheck = new NiceID.Check.CPClient(); + StringBuffer url = request.getRequestURL(); + String uri = request.getRequestURI(); + String contextPath = request.getContextPath(); + String host = ""; + if (uri.equals("/")) { + host = url.toString(); + } else { + host = url.substring(0, url.indexOf(uri)) + contextPath + "/"; + } + //String url = env.getProperty("Globals.Url"); + String sSiteCode; // NICE로부터 부여받은 사이트 코드 + String sSitePassword; // NICE로부터 부여받은 사이트 패스워드 + String sAuthType = type; // 없으면 기본 선택화면, M: 핸드폰, C: 신용카드, X: 공인인증서 + String sReturnUrl; // 성공시 이동될 URL + String sErrorUrl; // 실패시 이동될 URL + if (type.equals("C")) { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Credit.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Credit.Key"); + sReturnUrl = host + "idSearch/check/credit/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "idSearch/check/credit/fail.do"; // 실패시 이동될 URL + } else { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Phone.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Phone.Key"); + sReturnUrl = host + "idSearch/check/phone/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "idSearch/check/phone/fail.do"; // 실패시 이동될 URL + } + String sRequestNumber = "REQ0000000001"; // 요청 번호, 이는 성공/실패후에 같은 값으로 되돌려주게 되므로 + // 업체에서 적절하게 변경하여 쓰거나, 아래와 같이 생성한다. + sRequestNumber = niceCheck.getRequestNO(sSiteCode); + session.setAttribute("REQ_SEQ", sRequestNumber); + + String popgubun = "N"; //Y : 취소버튼 있음 / N : 취소버튼 없음 + String customize = ""; //없으면 기본 웹페이지 / Mobile : 모바일페이지 + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // operating system + OperatingSystem os = agent.getOperatingSystem(); + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + if (deviceType.getName() != null && deviceType.getName().indexOf("Computer") > -1) { + customize = ""; + } else { + customize = "Mobile"; + } + String sGender = ""; //없으면 기본 선택 값, 0 : 여자, 1 : 남자 + // CheckPlus(본인인증) 처리 후, 결과 데이타를 리턴 받기위해 다음예제와 같이 http부터 입력합니다. + //리턴url은 인증 전 인증페이지를 호출하기 전 url과 동일해야 합니다. ex) 인증 전 url : http://www.~ 리턴 url : http://www.~ + //String sReturnUrl = "http://www.test.co.kr/checkplus_success.jsp"; // 성공시 이동될 URL + //String sErrorUrl = "http://www.test.co.kr/checkplus_fail.jsp"; // 실패시 이동될 URL + + // 입력될 plain 데이타를 만든다. + String sPlainData = "7:REQ_SEQ" + sRequestNumber.getBytes().length + ":" + sRequestNumber + + "8:SITECODE" + sSiteCode.getBytes().length + ":" + sSiteCode + + "9:AUTH_TYPE" + sAuthType.getBytes().length + ":" + sAuthType + + "7:RTN_URL" + sReturnUrl.getBytes().length + ":" + sReturnUrl + + "7:ERR_URL" + sErrorUrl.getBytes().length + ":" + sErrorUrl + + "11:POPUP_GUBUN" + popgubun.getBytes().length + ":" + popgubun + + "9:CUSTOMIZE" + customize.getBytes().length + ":" + customize + + "6:GENDER" + sGender.getBytes().length + ":" + sGender; + + String sMessage = ""; + String sEncData = ""; + + int iReturn = niceCheck.fnEncode(sSiteCode, sSitePassword, sPlainData); + if (iReturn == 0) { + sEncData = niceCheck.getCipherData(); + } else if (iReturn == -1) { + sMessage = "암호화 시스템 에러입니다."; + } else if (iReturn == -2) { + sMessage = "암호화 처리오류입니다."; + } else if (iReturn == -3) { + sMessage = "암호화 데이터 오류입니다."; + } else if (iReturn == -9) { + sMessage = "입력 데이터 오류입니다."; + } else { + sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; + } + if (iReturn != 0) { + result.setMsg(result.STATUS_ERROR, sMessage); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } + result.setData("sEncData", sEncData); + result.setData("sMessage", sMessage); + return result; + } + + /** + * 카드 추가 등록을 위한 인증용 + * Check plus main result. + * + * @param request the request + * @param type the type + * @return the result + */ + public Result cardCheckPlusMain(HttpServletRequest request, String type) { + Result result = new Result(); + HttpSession session = request.getSession(); + NiceID.Check.CPClient niceCheck = new NiceID.Check.CPClient(); + StringBuffer url = request.getRequestURL(); + String uri = request.getRequestURI(); + String contextPath = request.getContextPath(); + String host = ""; + if (uri.equals("/")) { + host = url.toString(); + } else { + host = url.substring(0, url.indexOf(uri)) + contextPath + "/"; + } + //String url = env.getProperty("Globals.Url"); + String sSiteCode; // NICE로부터 부여받은 사이트 코드 + String sSitePassword; // NICE로부터 부여받은 사이트 패스워드 + String sAuthType = type; // 없으면 기본 선택화면, M: 핸드폰, C: 신용카드, X: 공인인증서 + String sReturnUrl; // 성공시 이동될 URL + String sErrorUrl; // 실패시 이동될 URL + if (type.equals("C")) { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Credit.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Credit.Key"); + sReturnUrl = host + "card/check/credit/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "card/check/credit/fail.do"; // 실패시 이동될 URL + } else { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Phone.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Phone.Key"); + sReturnUrl = host + "card/check/phone/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "card/check/phone/fail.do"; // 실패시 이동될 URL + } + String sRequestNumber = "REQ0000000001"; // 요청 번호, 이는 성공/실패후에 같은 값으로 되돌려주게 되므로 + // 업체에서 적절하게 변경하여 쓰거나, 아래와 같이 생성한다. + sRequestNumber = niceCheck.getRequestNO(sSiteCode); + session.setAttribute("REQ_SEQ", sRequestNumber); + + String popgubun = "N"; //Y : 취소버튼 있음 / N : 취소버튼 없음 + String customize = ""; //없으면 기본 웹페이지 / Mobile : 모바일페이지 + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // operating system + OperatingSystem os = agent.getOperatingSystem(); + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + if (deviceType.getName() != null && deviceType.getName().indexOf("Computer") > -1) { + customize = ""; + } else { + customize = "Mobile"; + } + String sGender = ""; //없으면 기본 선택 값, 0 : 여자, 1 : 남자 + // CheckPlus(본인인증) 처리 후, 결과 데이타를 리턴 받기위해 다음예제와 같이 http부터 입력합니다. + //리턴url은 인증 전 인증페이지를 호출하기 전 url과 동일해야 합니다. ex) 인증 전 url : http://www.~ 리턴 url : http://www.~ + //String sReturnUrl = "http://www.test.co.kr/checkplus_success.jsp"; // 성공시 이동될 URL + //String sErrorUrl = "http://www.test.co.kr/checkplus_fail.jsp"; // 실패시 이동될 URL + + // 입력될 plain 데이타를 만든다. + String sPlainData = "7:REQ_SEQ" + sRequestNumber.getBytes().length + ":" + sRequestNumber + + "8:SITECODE" + sSiteCode.getBytes().length + ":" + sSiteCode + + "9:AUTH_TYPE" + sAuthType.getBytes().length + ":" + sAuthType + + "7:RTN_URL" + sReturnUrl.getBytes().length + ":" + sReturnUrl + + "7:ERR_URL" + sErrorUrl.getBytes().length + ":" + sErrorUrl + + "11:POPUP_GUBUN" + popgubun.getBytes().length + ":" + popgubun + + "9:CUSTOMIZE" + customize.getBytes().length + ":" + customize + + "6:GENDER" + sGender.getBytes().length + ":" + sGender; + + String sMessage = ""; + String sEncData = ""; + + int iReturn = niceCheck.fnEncode(sSiteCode, sSitePassword, sPlainData); + if (iReturn == 0) { + sEncData = niceCheck.getCipherData(); + } else if (iReturn == -1) { + sMessage = "암호화 시스템 에러입니다."; + } else if (iReturn == -2) { + sMessage = "암호화 처리오류입니다."; + } else if (iReturn == -3) { + sMessage = "암호화 데이터 오류입니다."; + } else if (iReturn == -9) { + sMessage = "입력 데이터 오류입니다."; + } else { + sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; + } + if (iReturn != 0) { + result.setMsg(result.STATUS_ERROR, sMessage); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } + result.setData("sEncData", sEncData); + result.setData("sMessage", sMessage); + return result; + } + + /** + * Check plus success map. + * + * @param request the request + * @param type the type + * @return the map + */ + public Map checkPlusSuccess(HttpServletRequest request, String type) { + Map result = new HashMap(); + HttpSession session = request.getSession(); + //인증 후 결과값이 null로 나오는 부분은 관리담당자에게 문의 바랍니다. + NiceID.Check.CPClient niceCheck = new NiceID.Check.CPClient(); + String sEncodeData = requestReplace(request.getParameter("EncodeData"), "encodeData"); + + String sSiteCode; // NICE로부터 부여받은 사이트 코드 + String sSitePassword; // NICE로부터 부여받은 사이트 패스워드 + if (type.equals("C")) { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Credit.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Credit.Key"); + } else { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Phone.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Phone.Key"); + } + String sCipherTime = ""; // 복호화한 시간 + String sRequestNumber = ""; // 요청 번호 + String sResponseNumber = ""; // 인증 고유번호 + String sAuthType = ""; // 인증 수단 + String sName = ""; // 성명 + String sDupInfo = ""; // 중복가입 확인값 (DI_64 byte) + String sConnInfo = ""; // 연계정보 확인값 (CI_88 byte) + String sBirthDate = ""; // 생년월일(YYYYMMDD) + String sGender = ""; // 성별 + String sNationalInfo = ""; // 내/외국인정보 (개발가이드 참조) + String sMobileNo = ""; // 휴대폰번호 + String sMobileCo = ""; // 통신사 + String sMessage = ""; + String sPlainData = ""; + + int iReturn = niceCheck.fnDecode(sSiteCode, sSitePassword, sEncodeData); + + if (iReturn == 0) { + sPlainData = niceCheck.getPlainData(); + sCipherTime = niceCheck.getCipherDateTime(); + + // 데이타를 추출합니다. + HashMap mapresult = niceCheck.fnParse(sPlainData); + + sRequestNumber = (String) mapresult.get("REQ_SEQ"); + sResponseNumber = (String) mapresult.get("RES_SEQ"); + sAuthType = (String) mapresult.get("AUTH_TYPE"); + sName = (String) mapresult.get("NAME"); + //sName = (String)mapresult.get("UTF8_NAME"); //charset utf8 사용시 주석 해제 후 사용 + sBirthDate = (String) mapresult.get("BIRTHDATE"); + sGender = (String) mapresult.get("GENDER"); + sNationalInfo = (String) mapresult.get("NATIONALINFO"); + sDupInfo = (String) mapresult.get("DI"); + sConnInfo = (String) mapresult.get("CI"); + sMobileNo = (String) mapresult.get("MOBILE_NO"); + sMobileCo = (String) mapresult.get("MOBILE_CO"); + + String session_sRequestNumber = (String) session.getAttribute("REQ_SEQ"); + if (!sRequestNumber.equals(session_sRequestNumber)) { + sMessage = "세션값이 다릅니다. 올바른 경로로 접근하시기 바랍니다."; + sResponseNumber = ""; + sAuthType = ""; + } else { + sMessage = "정상적으로 처리 되었습니다."; + } + } else if (iReturn == -1) { + sMessage = "복호화 시스템 에러입니다."; + } else if (iReturn == -4) { + sMessage = "복호화 처리오류입니다."; + } else if (iReturn == -5) { + sMessage = "복호화 해쉬 오류입니다."; + } else if (iReturn == -6) { + sMessage = "복호화 데이터 오류입니다."; + } else if (iReturn == -9) { + sMessage = "입력 데이터 오류입니다."; + } else if (iReturn == -12) { + sMessage = "사이트 패스워드 오류입니다."; + } else { + sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; + } + + result.put("sRequestNumber", sRequestNumber); + result.put("sResponseNumber", sResponseNumber); + result.put("sAuthType", sAuthType); + result.put("sName", sName); + result.put("sBirthDate", sBirthDate); + result.put("sGender", sGender); + result.put("sNationalInfo", sNationalInfo); + result.put("sDupInfo", sDupInfo); + result.put("sConnInfo", sConnInfo); + result.put("sMobileNo", sMobileNo); + result.put("sMobileCo", sMobileCo); + result.put("sMessage", sMessage); + result.put("iReturn", iReturn); + + return result; + } + + /** + * Check plus fail map. + * + * @param request the request + * @param type the type + * @return the map + */ + public Map checkPlusFail(HttpServletRequest request, String type) { + Map result = new HashMap(); + NiceID.Check.CPClient niceCheck = new NiceID.Check.CPClient(); + + String sEncodeData = requestReplace(request.getParameter("EncodeData"), "encodeData"); + + String sSiteCode; // NICE로부터 부여받은 사이트 코드 + String sSitePassword; // NICE로부터 부여받은 사이트 패스워드 + if (type.equals("C")) { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Credit.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Credit.Key"); + } else { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Phone.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Phone.Key"); + } + + String sCipherTime = ""; // 복호화한 시간 + String sRequestNumber = ""; // 요청 번호 + String sErrorCode = ""; // 인증 결과코드 + String sAuthType = ""; // 인증 수단 + String sMessage = ""; + String sPlainData = ""; + + int iReturn = niceCheck.fnDecode(sSiteCode, sSitePassword, sEncodeData); + + if (iReturn == 0) { + sPlainData = niceCheck.getPlainData(); + sCipherTime = niceCheck.getCipherDateTime(); + + // 데이타를 추출합니다. + HashMap mapresult = niceCheck.fnParse(sPlainData); + + sRequestNumber = (String) mapresult.get("REQ_SEQ"); + sErrorCode = (String) mapresult.get("ERR_CODE"); + sAuthType = (String) mapresult.get("AUTH_TYPE"); + sMessage = "본인인증에 실패하였습니다. 입력데이터를 확인 바랍니다."; + } else if (iReturn == -1) { + sMessage = "복호화 시스템 에러입니다."; + } else if (iReturn == -4) { + sMessage = "복호화 처리오류입니다."; + } else if (iReturn == -5) { + sMessage = "복호화 해쉬 오류입니다."; + } else if (iReturn == -6) { + sMessage = "복호화 데이터 오류입니다."; + } else if (iReturn == -9) { + sMessage = "입력 데이터 오류입니다."; + } else if (iReturn == -12) { + sMessage = "사이트 패스워드 오류입니다."; + } else { + sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; + } + + result.put("sRequestNumber", sRequestNumber); + result.put("sCipherTime", sCipherTime); + result.put("sAuthType", sAuthType); + result.put("sErrorCode", sErrorCode); + result.put("sMessage", sMessage); + result.put("iReturn", iReturn); + return result; + } + + private String getIReturnMessage(int iReturn) { + String rtnMsg = ""; + switch (iReturn) { + case 0: + rtnMsg = "정상 처리"; + break; + case -1: + rtnMsg = "암호화 시스템 오류"; + break; + case -2: + rtnMsg = "암호화 처리 오류"; + break; + case -3: + rtnMsg = "암호화 데이터에 오류"; + break; + case -4: + rtnMsg = "복호화 처리 오류"; + break; + case -5: + rtnMsg = "복호화 데이터 검증 실패"; + break; + case -6: + rtnMsg = "복호화 데이터에 오류"; + break; + case -7: + rtnMsg = "암호화 버전 불일치"; + break; + case -8: + rtnMsg = "암호화 버전 불일치"; + break; + case -9: + rtnMsg = "입력값 오류"; + break; + case -12: + rtnMsg = "사이트코드/패스워드 불일치"; + break; + case -18: + rtnMsg = "Request 데이터 오류/통신 오류 (방화벽 확인 필요)"; + break; + } + return rtnMsg; + + } + + private String getRtnMessage(String rtnCode) { + String rtnMsg = ""; + switch (rtnCode) { + case "01": + rtnMsg = "일치"; + break; + case "02": + rtnMsg = "기업명불일치"; + break; + case "03": + rtnMsg = "기업명미보유"; + break; + case "04": + rtnMsg = "시스템오류"; + break; + case "05": + rtnMsg = "사업자/법인번호 유효성 오류"; + break; + case "08": + rtnMsg = "서비스이용 권한 없음"; + break; + case "09": + rtnMsg = "필수입력값오류"; + break; + case "12": + rtnMsg = "대표자 불일치"; + break; + case "13": + rtnMsg = "대표자 미보유"; + break; + case "22": + rtnMsg = "사업자/법인명일치 + 대표자 불일치"; + break; + case "23": + rtnMsg = "사업자/법인명일치 + 대표자 미보유"; + break; + } + return rtnMsg; + } + + private String getStatusMessage(String statusCode) { + String rtnMsg = ""; + switch (statusCode) { + case "0": + rtnMsg = "정보없음"; + break; + case "1": + rtnMsg = "정상"; + break; + case "6": + rtnMsg = "부도"; + break; + case "7": + rtnMsg = "휴업"; + break; + case "8": + rtnMsg = "폐업"; + break; + case "9": + rtnMsg = "폐업"; + break; + } + + return rtnMsg; + } + + private String requestReplace(String paramValue, String gubun) { + + String result = ""; + + if (paramValue != null) { + + paramValue = paramValue.replaceAll("<", "<").replaceAll(">", ">"); + + paramValue = paramValue.replaceAll("\\*", ""); + paramValue = paramValue.replaceAll("\\?", ""); + paramValue = paramValue.replaceAll("\\[", ""); + paramValue = paramValue.replaceAll("\\{", ""); + paramValue = paramValue.replaceAll("\\(", ""); + paramValue = paramValue.replaceAll("\\)", ""); + paramValue = paramValue.replaceAll("\\^", ""); + paramValue = paramValue.replaceAll("\\$", ""); + paramValue = paramValue.replaceAll("'", ""); + paramValue = paramValue.replaceAll("@", ""); + paramValue = paramValue.replaceAll("%", ""); + paramValue = paramValue.replaceAll(";", ""); + paramValue = paramValue.replaceAll(":", ""); + paramValue = paramValue.replaceAll("-", ""); + paramValue = paramValue.replaceAll("#", ""); + paramValue = paramValue.replaceAll("--", ""); + paramValue = paramValue.replaceAll("-", ""); + paramValue = paramValue.replaceAll(",", ""); + + if (gubun != "encodeData") { + paramValue = paramValue.replaceAll("\\+", ""); + paramValue = paramValue.replaceAll("/", ""); + paramValue = paramValue.replaceAll("=", ""); + } + + result = paramValue; + + } + return result; + } + + public Result deLoginCheckPlusMain(HttpServletRequest request, String type) { + Result result = new Result(); + HttpSession session = request.getSession(); + NiceID.Check.CPClient niceCheck = new NiceID.Check.CPClient(); + StringBuffer url = request.getRequestURL(); + String uri = request.getRequestURI(); + String contextPath = request.getContextPath(); + String host = ""; + if (uri.equals("/")) { + host = url.toString(); + } else { + host = url.substring(0, url.indexOf(uri)) + contextPath + "/"; + } + //String url = env.getProperty("Globals.Url"); + String sSiteCode; // NICE로부터 부여받은 사이트 코드 + String sSitePassword; // NICE로부터 부여받은 사이트 패스워드 + String sAuthType = type; // 없으면 기본 선택화면, M: 핸드폰, C: 신용카드, X: 공인인증서 + String sReturnUrl; // 성공시 이동될 URL + String sErrorUrl; // 실패시 이동될 URL + if (type.equals("C")) { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Credit.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Credit.Key"); + sReturnUrl = host + "login/credit/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "login/credit/fail.do"; // 실패시 이동될 URL + } else { + sSiteCode = env.getProperty("Globals.Nice.NiceID.Phone.Code"); + sSitePassword = env.getProperty("Globals.Nice.NiceID.Phone.Key"); + sReturnUrl = host + "login/phone/success.do"; // 성공시 이동될 URL + sErrorUrl = host + "login/phone/fail.do"; // 실패시 이동될 URL + } + String sRequestNumber = "REQ0000000001"; // 요청 번호, 이는 성공/실패후에 같은 값으로 되돌려주게 되므로 + // 업체에서 적절하게 변경하여 쓰거나, 아래와 같이 생성한다. + sRequestNumber = niceCheck.getRequestNO(sSiteCode); + session.setAttribute("REQ_SEQ", sRequestNumber); + + String popgubun = "N"; //Y : 취소버튼 있음 / N : 취소버튼 없음 + String customize = ""; //없으면 기본 웹페이지 / Mobile : 모바일페이지 + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // operating system + OperatingSystem os = agent.getOperatingSystem(); + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + if (deviceType.getName() != null && deviceType.getName().indexOf("Computer") > -1) { + customize = ""; + } else { + customize = "Mobile"; + } + String sGender = ""; //없으면 기본 선택 값, 0 : 여자, 1 : 남자 + // CheckPlus(본인인증) 처리 후, 결과 데이타를 리턴 받기위해 다음예제와 같이 http부터 입력합니다. + //리턴url은 인증 전 인증페이지를 호출하기 전 url과 동일해야 합니다. ex) 인증 전 url : http://www.~ 리턴 url : http://www.~ + //String sReturnUrl = "http://www.test.co.kr/checkplus_success.jsp"; // 성공시 이동될 URL + //String sErrorUrl = "http://www.test.co.kr/checkplus_fail.jsp"; // 실패시 이동될 URL + + // 입력될 plain 데이타를 만든다. + String sPlainData = "7:REQ_SEQ" + sRequestNumber.getBytes().length + ":" + sRequestNumber + + "8:SITECODE" + sSiteCode.getBytes().length + ":" + sSiteCode + + "9:AUTH_TYPE" + sAuthType.getBytes().length + ":" + sAuthType + + "7:RTN_URL" + sReturnUrl.getBytes().length + ":" + sReturnUrl + + "7:ERR_URL" + sErrorUrl.getBytes().length + ":" + sErrorUrl + + "11:POPUP_GUBUN" + popgubun.getBytes().length + ":" + popgubun + + "9:CUSTOMIZE" + customize.getBytes().length + ":" + customize + + "6:GENDER" + sGender.getBytes().length + ":" + sGender; + + String sMessage = ""; + String sEncData = ""; + + int iReturn = niceCheck.fnEncode(sSiteCode, sSitePassword, sPlainData); + if (iReturn == 0) { + sEncData = niceCheck.getCipherData(); + } else if (iReturn == -1) { + sMessage = "암호화 시스템 에러입니다."; + } else if (iReturn == -2) { + sMessage = "암호화 처리오류입니다."; + } else if (iReturn == -3) { + sMessage = "암호화 데이터 오류입니다."; + } else if (iReturn == -9) { + sMessage = "입력 데이터 오류입니다."; + } else { + sMessage = "알수 없는 에러 입니다. iReturn : " + iReturn; + } + if (iReturn != 0) { + result.setMsg(result.STATUS_ERROR, sMessage); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } + result.setData("sEncData", sEncData); + result.setData("sMessage", sMessage); + return result; + } + + //티머니비즈페이 + public Result tbCheckMain(HttpServletRequest request, String sMember) { + Result result = new Result(); + StringBuffer url = request.getRequestURL(); + String uri = request.getRequestURI(); + String contextPath = request.getContextPath(); + String host = ""; + if (uri.equals("/")) { + host = url.toString(); + } else { + host = url.substring(0, url.indexOf(uri)) + contextPath + "/"; + } + + String tbUrl = env.getProperty("Globals.tb.Url"); //티머니비즈페이 요청 URL + String frcInflCd; + String sReturnUrl; // 성공시 이동될 URL + sReturnUrl = host + "check/tb/success.do"; // 성공시 이동될 URL + frcInflCd = env.getProperty("Globals.tb.frcInflCd.pc"); + + // 입력될 tData 데이타를 만든다. + String tData = "{" + + "\"frcId\":\"" + env.getProperty("Globals.tb.frcId") + "\"," + + "\"frcCusId\":\"" + sMember + "\"," + + "\"frcInflCd\":\"" + frcInflCd + "\"," + + "\"frcAddInfo\":{\"stcmpNo\":\"BRSPG0000001\",\"setleMnMno\":\"BRSPG0000001010\",\"setleMnKnd\":\"004\",\"ccmpCode\":\"TMN\",\"ccmpKnd\":\"TB\"}," + + "\"sbrdFrcId\":\"" + "" + "\"," + + "\"authAmt\":\"" + "0" + "\"," + + "\"callbackUrl\":\"TMBPAY,callbackTmbpay\"," + + "\"returnUrl\":\"" + sReturnUrl + "\"" + + "}"; + result.setData("tbUrl", tbUrl); + result.setData("tData", tData); + return result; + } +} diff --git a/src/main/java/gtpa/brs/join/service/JoinService.java b/src/main/java/gtpa/brs/join/service/JoinService.java new file mode 100644 index 0000000..687c76c --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/JoinService.java @@ -0,0 +1,107 @@ +package gtpa.brs.join.service; + +import gtpa.brs.user.dto.TempUserSessionInfoDTO; +import gtpa.brs.util.Result; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 19/04/2019 + * TIME : 2:06 PM + * Project : BRSPW + * Class : JoinService + * Desc : + * ///////////////////////////////////////////////////// + */ +public interface JoinService { + + /** + * Is id exsist int. + * + * @param id the id + * @return the int + */ + int isIdExsist(String id); + + + /** + * Is member exsist map. + * + * @param param the param + * @return the map + */ + Map isMemberExsist(Map param); + + /** + * Insert member info result. + * + * @param tempUserSessionInfoDTO the temp user session info dto + * @return the result + * @throws Exception the exception + */ + Result insertMemberInfo(TempUserSessionInfoDTO tempUserSessionInfoDTO) throws SQLException; + + /** + * Gets stplat info. + * + * @param param the param + * @return the stplat info + */ + List getStplatInfo(Map param); + + /** + * Gets credit code. + * + * @return the credit code + */ + List getCreditCode(); + + /** + * Gets bank code. + * + * @return the bank code + */ + List getBankCode(); + + /** + * Is exsist vhcle owner int. + * + * @param car the car + * @return the int + */ + int isExsistVhcleOwner(Map car); + + /** + * Insert join failer log. + * + * @param param the param + */ + void insertJoinFailerLog(Map param); + + /** + * Gets rdcxpt info all chldrn. + * + * @param myInfo the my info + * @return the rdcxpt info all chldrn + */ + Map getRdcxptInfoAllChldrn(Map myInfo); + + /** + * Gets rdcxpt info ntttn. + * + * @param myInfo the my info + * @return the rdcxpt info ntttn + */ + Map getRdcxptInfoNtttn(Map myInfo); + + Map getResideInsttCnfirm(Map myInfo); + + + int vhcleChk(Map params); +} diff --git a/src/main/java/gtpa/brs/join/service/impl/JoinMapper.java b/src/main/java/gtpa/brs/join/service/impl/JoinMapper.java new file mode 100644 index 0000000..3835584 --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/impl/JoinMapper.java @@ -0,0 +1,78 @@ +package gtpa.brs.join.service.impl; + +import java.util.List; +import java.util.Map; + +import gtpa.brs.user.dto.TempCarInfo; +import gtpa.brs.user.dto.TempUserSessionInfoDTO; +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +@Repository("joinDao") +public class JoinMapper extends EgovAbstractMapper { + + private String NAMESPACE = "JoinDAO"; + + public int insertMemberInfo(TempUserSessionInfoDTO tempUserSessionInfoDTO) { + return update(NAMESPACE + ".insertMemberInfo", tempUserSessionInfoDTO); + } + + public int insertCarInfos(List carInfos) { + int rsltCnt = 0; + rsltCnt += insert(NAMESPACE + ".insertCarInfos", carInfos); + rsltCnt += insert(NAMESPACE + ".insertCarInfosHistory", carInfos); + return rsltCnt; + } + + public int insertStplatAgre(TempUserSessionInfoDTO tempUserSessionInfoDTO) { + return insert(NAMESPACE + ".insertStplatAgre", tempUserSessionInfoDTO); + } + + public int isIdExsist(String id) { + return selectOne(NAMESPACE + ".isIdExsist", id); + } + + public Map isMemberExsist(Map param) { + return selectOne(NAMESPACE + ".isMemberExsist", param); + } + + public List getStplatInfo(Map param) { + return selectList(NAMESPACE + ".getStplatInfo", param); + } + + public String getTranSerialNo() { + return selectOne(NAMESPACE + ".getTranSerialNo"); + } + + public List getCreditCode() { + return selectList(NAMESPACE + ".getCreditCode"); + } + + public List getBankCode() { + return selectList(NAMESPACE + ".getBankCode"); + } + + public int isExsistVhcleOwner(Map car) { + return selectOne(NAMESPACE + ".isExsistVhcleOwner", car); + } + + public void insertJoinFailerLog(Map param) { + insert(NAMESPACE + ".insertJoinFailerLog", param); + } + + public int insertMnychRdcxptInfo(TempUserSessionInfoDTO tempUserSessionInfoDTO) { + return update(NAMESPACE + ".insertMnychRdcxptInfo", tempUserSessionInfoDTO); + } + + public int insertNationMrtrsInfo(TempUserSessionInfoDTO tempUserSessionInfoDTO) { + return update(NAMESPACE + ".insertNationMrtrsInfo", tempUserSessionInfoDTO); + } + + public int insertSetleAgreAt(TempUserSessionInfoDTO tempUserSessionInfoDTO) { + return insert(NAMESPACE + ".insertSetleAgreAt", tempUserSessionInfoDTO); + } + + public int vhcleChk(Map param) { + return selectOne(NAMESPACE + ".vhcleChk", param); + } +} diff --git a/src/main/java/gtpa/brs/join/service/impl/JoinServiceImpl.java b/src/main/java/gtpa/brs/join/service/impl/JoinServiceImpl.java new file mode 100644 index 0000000..884703b --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/impl/JoinServiceImpl.java @@ -0,0 +1,681 @@ +package gtpa.brs.join.service.impl; + +import gtpa.brs.join.service.JoinService; +import gtpa.brs.join.service.impl.JoinMapper; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.user.dto.TempUserSessionInfoDTO; +import gtpa.brs.util.Result; +import gtpa.brs.join.service.impl.PublicFacilityReqXml; +import gtpa.brs.join.service.impl.PublicFacilitySend; +import gtpa.brs.join.service.impl.NewGpkiUtil; +import gtpa.brs.join.service.impl.ShareGpki; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import javax.annotation.Resource; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import java.io.IOException; +import java.io.StringReader; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 19/04/2019 + * TIME : 2:06 PM + * Project : BRSPW + * Class : JoinServiceImpl + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service("JoinService") +public class JoinServiceImpl implements JoinService { + + Logger logger = LoggerFactory.getLogger(JoinServiceImpl.class); + + @Resource(name = "joinDao") + JoinMapper joinMapper; + + @Autowired + PreRegistPaymentService preRegistPaymentService; + + @Autowired + private PublicFacilityReqXml publicFacilityReqXml; + + @Resource(name = "globalsProperties") + Properties env; + + //GPKI사용여부 + private final boolean useGPKI = true; + + private boolean isRealIp = true; + + @Override + public int isIdExsist(String id) { + return joinMapper.isIdExsist(id); + } + + @Override + public Map isMemberExsist(Map param) { + return joinMapper.isMemberExsist(param); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Result insertMemberInfo(TempUserSessionInfoDTO tempUserSessionInfoDTO) throws SQLException { + Result result = new Result(); + try { + Map params = new HashMap<>(); + params.put("cars", tempUserSessionInfoDTO.getTempCarInfos()); + params.put("banks", tempUserSessionInfoDTO.getTempBankInfos()); + params.put("credits", tempUserSessionInfoDTO.getTempCreditInfos()); + params.put("mberCi", tempUserSessionInfoDTO.getMberCi()); + params.put("mberNo", tempUserSessionInfoDTO.getMberNo()); + Map tempUserInfo = (Map) tempUserSessionInfoDTO.getTempUserInfo(); + params.put("mberMobileNo", tempUserInfo.get("sMobileNo")); + params.put("mberMobileCo", tempUserInfo.get("sMobileCo")); + if (tempUserSessionInfoDTO.getTempBankInfos() != null && tempUserSessionInfoDTO.getTempBankInfos().size() > 0) { + int rsltA = preRegistPaymentService.insertAcctInfoComplete(tempUserSessionInfoDTO.getTempBankInfos()); + if ((rsltA / 2) != tempUserSessionInfoDTO.getTempBankInfos().size()) { + logger.error("계좌등록 INSERT 오류"); + result.setMsg("Q", "계좌등록 저장중 오류가 발생하였습니다."); + result.setData("errorContent","계좌등록 INSERT 오류"); + return result; + //throw new SQLException("계좌등록 저장 오류발생"); + } + } + List dataResponse = preRegistPaymentService.completePayment(params); + if (tempUserSessionInfoDTO.getTempCreditInfos().size() != dataResponse.size()) { + logger.error("사전결제등록 오류"); + result.setData("errorContent","사전결제등록 오류"); + result.setMsg("Q", "카드정보 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("사전결제등록 오류발생"); + } + int rsltM = joinMapper.insertMemberInfo(tempUserSessionInfoDTO); + if (rsltM < 1) { + logger.error("회원정보 INSERT 오류"); + result.setData("errorContent","회원정보 INSERT 오류"); + result.setMsg("Q", "회원정보 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("회원정보 저장 오류발생"); + } + int rsltS = joinMapper.insertStplatAgre(tempUserSessionInfoDTO); + if (rsltS < 1) { + logger.error("회원동의정보 INSERT 오류"); + result.setData("errorContent","회원동의정보 INSERT 오류"); + result.setMsg("Q", "회원동의정보 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("회원동의정보 저장 오류발생"); + } + int rsltSAT = joinMapper.insertSetleAgreAt(tempUserSessionInfoDTO); + if (rsltSAT < 1) { + logger.error("회원결제동의정보 INSERT 오류"); + result.setData("errorContent","회원결제동의정보 INSERT 오류"); + result.setMsg("Q", "회원결제동의정보 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("회원결제동의정보 저장 오류발생"); + } + if ("Y".equals(tempUserSessionInfoDTO.getMnychRdcxptAt())) { + int rsltMny = joinMapper.insertMnychRdcxptInfo(tempUserSessionInfoDTO); + if (rsltMny < 1) { + logger.error("다자녀정보 INSERT 오류"); + result.setData("errorContent","다자녀정보 INSERT 오류"); + result.setMsg("Q", "다자녀정보 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("다자녀정보 저장 오류발생"); + } + } + if ("Y".equals(tempUserSessionInfoDTO.getAthzerAt())) { + int rsltNM = joinMapper.insertNationMrtrsInfo(tempUserSessionInfoDTO); + if (rsltNM < 1) { + logger.error("국가유공자 INSERT 오류"); + result.setData("errorContent","국가유공자 INSERT 오류"); + result.setMsg("Q", "국가유공자 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("국가유공자 저장 오류발생"); + } + } + List carInfoList = tempUserSessionInfoDTO.getTempCarInfos(); + int rsltV = joinMapper.insertCarInfos(carInfoList); + if ((rsltV / 2) != carInfoList.size()) { + logger.error("차량정보 INSERT 오류"); + result.setData("errorContent","차량정보 INSERT 오류"); + result.setMsg("Q", "차량정보 저장중 오류가 발생하였습니다."); + return result; + //throw new SQLException("차량정보 저장 오류발생"); + } + } catch (RuntimeException re) { + result.setData("errorContent","입력값 처리도중 오류가 발생하였습니다."); + result.setMsg("R", "입력값 처리도중 오류가 발생하였습니다.",re); + return result; + } + result.setMsg(Result.STATUS_SUCESS, "회원가입이 완료되었습니다."); + return result; + } + + @Override + public List getStplatInfo(Map param) { + return joinMapper.getStplatInfo(param); + } + + @Override + public List getCreditCode() { + return joinMapper.getCreditCode(); + } + + @Override + public List getBankCode() { + return joinMapper.getBankCode(); + } + + @Override + public int isExsistVhcleOwner(Map car) { + return joinMapper.isExsistVhcleOwner(car); + } + + @Override + public void insertJoinFailerLog(Map param) { + joinMapper.insertJoinFailerLog(param); + } + + @Override + public Map getResideInsttCnfirm(Map myInfo) { + Map result = new HashMap<>(); + // String url = env.getProperty("Globals.fis.Url") + env.getProperty("Globals.Fis.resideInsttCnfirm"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = "11-004"; + String mberSeNo = (String) myInfo.get("mberSeNo"); + String mberNm = (String) myInfo.get("searchNm"); + String uniqueID = UUID.randomUUID().toString(); + /* + * sysId 시스템 ID (6) + tranDate 전송일시 (14) + transId 트랜잭션ID(요청 원문 식별 값) (40) + orgCode 기관코드 (10) + id 주민등록번호 (13) + name 이름 (38) + * */ + Map reqData = new HashMap<>(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("orgCode", ""); + reqData.put("taxPyerIhidNum", mberSeNo); + reqData.put("taxPyerNm", mberNm); + + // logger.info("거주지 url::" + url); + logger.info("거주지 reqData::" + reqData); + result = requestResideInsttCnfirm(reqData); + logger.info("거주지 result::" + result); + + return result; + } + + @Override + public Map getRdcxptInfoAllChldrn(Map myInfo) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.rdcxptInfo"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = "11-004"; + String mberSeNo = (String) myInfo.get("mberSeNo"); + String mberNm = (String) myInfo.get("searchNm"); + String uniqueID = UUID.randomUUID().toString(); + /* + * sysId 시스템 ID (6) + tranDate 전송일시 (14) + transId 트랜잭션ID(요청 원문 식별 값) (40) + orgCode 기관코드 (10) + id 주민등록번호 (13) + name 이름 (38) + * */ + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("orgCode", ""); + reqData.put("id", mberSeNo); + reqData.put("name", mberNm); + + logger.info("다자녀 url::" + url); + logger.info("reqData::" + reqData); + result = requestRdcxptInfoAllChldrn(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getRdcxptInfoNtttn(Map myInfo) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.rdcxptInfoNtttn"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = "11-004"; + String mberSeNo = (String) myInfo.get("mberSeNo"); + String uniqueID = UUID.randomUUID().toString(); + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("juminNo", mberSeNo); + + logger.info("reqData::" + reqData); + result = requestRdcxptInfoNtttn(url, reqData); + logger.info("result::" + result); + + return result; + } + + private Map requestResideInsttCnfirm(Map facMap) { + Result result = new Result(); + HashMap rtnMap = new LinkedHashMap(); + HashMap respMap = new LinkedHashMap(); + HashMap facCntcMap = new HashMap<>(); + final String strOrgCode = "1174000001" ; //기관코드(고정) + String strSysId = (String) facMap.get("sysId"); + facCntcMap.put("orgCode", strOrgCode); + facCntcMap.put("id", facMap.get("taxPyerIhidNum")); + facCntcMap.put("name", facMap.get("taxPyerNm")); + facCntcMap.put("sysId", facMap.get("sysId")); + logger.info("[거주자] facCntcMap::"+facCntcMap.toString()); + + HashMap reqBodyXmlMap = new HashMap<>(); + reqBodyXmlMap = publicFacilityReqXml.getResideInsttCnfirmXml(facCntcMap); + logger.info("[거주자] reqBodyXmlMap::"+reqBodyXmlMap.toString()); + String strReqXml = (String)reqBodyXmlMap.get("reqXml"); //전송할 XML메세지 + String strReqBodyMessage = (String)reqBodyXmlMap.get("reqBodyMessage");//전송할 본문XML메세지 + String strXmlNs = (String)reqBodyXmlMap.get("xmlNs");//xmlNs이름 + String strElementResp = (String)reqBodyXmlMap.get("elementResp");//xml Element Response명 + + NewGpkiUtil g = null; + String serviceUrl = env.getProperty("Globals.Public.ResideInsttCnfirmService.Url"); + if (useGPKI) { + String encoded = null; + String strReqSendXml = null; + try { + logger.info("[거주자] 여기도 탔나::"); + final String targetServerId = "SVR1311000030"; + g = ShareGpki.getGpkiUtil(targetServerId, strSysId, isRealIp); + logger.info("[거주자] 여기도 탔나2::"); + String charset = "UTF-8"; + //String original = strReqXml.split("")[1].split("")[0]; + // String encoded; + byte[] encrypted = g.encrypt(strReqBodyMessage.getBytes(charset), targetServerId); + byte[] signed = g.sign(encrypted); + encoded = g.encode(signed); + logger.info("[거주지] strReqXml : " + strReqXml); + + strReqSendXml = strReqXml; + { + strReqSendXml = strReqSendXml.replace(strReqBodyMessage, encoded); + } + logger.info("[거주지] strReqSendXml : " + strReqSendXml); + + } catch (RuntimeException e) { + logger.info("에러발생"); + return null; + } catch (Exception e) { + logger.info("에러발생"); + return null; + } + + String strRespMsg = PublicFacilitySend.doService(serviceUrl, strReqSendXml); + logger.info("[거주지] strRespMsg : " + strRespMsg); + + if (strRespMsg.indexOf("Fault>") > 0){ //오류발생시 + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "fail"); + rtnMap.put("resultCode", "9999"); + rtnMap.put("resultMessage", result.STATUS_ERROR_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + facMap.put("cntcResult", "FAIL"); + facMap.put("cntcResultCode", "9999"); + facMap.put("cntcMessage", strRespMsg + "[거주지]"); + logger.info("[거주지] facMap : " + facMap); + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcCarInfoAdd(facMap);//연계정보 저장 + return rtnMap; + } + + String responseEncData = strRespMsg.split("<" + strElementResp + " xmlns=\"" +strXmlNs+ "\">")[1] + .split("")[0]; + + //logger.info("responseEncData : " + responseEncData); + + String decrypted = ""; + { + byte[] decoded; + try { + decoded = g.decode(responseEncData); + byte[] validated = g.validate(decoded); + decrypted = new String(g.decrypt(validated), "UTF-8"); + decrypted = decrypted.replace("><", ">\n<"); + } catch (RuntimeException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } + } + String dcriptMsg = strRespMsg.replace(responseEncData, decrypted); + logger.info("[거주지] dcriptMsg : " + dcriptMsg); + + if (dcriptMsg.indexOf("Fault>") <= 0){ //정상발생시 + InputSource is = new InputSource(new StringReader(dcriptMsg)); + Document document = null; + try { + document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); + // 파싱할 tag + NodeList nList = document.getElementsByTagName("getResideInsttCnfirmResponse"); + + for(int i = 0; i < nList.getLength(); i++){ + Node nNode = nList.item(i); + if(nNode.getNodeType() == Node.ELEMENT_NODE){ + Element eElement = (Element) nNode; + logger.info("[거주지] 주민등록번호 : " + PublicFacilityReqXml.getTagValue("id", eElement)); + logger.info("[거주지] 이름 : " + PublicFacilityReqXml.getTagValue("name", eElement)); + logger.info("[거주지] 행정동코드 : " + PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + logger.info("[거주지] 확인결과 : " + PublicFacilityReqXml.getTagValue("serviceResult", eElement)); //1:성공, 2:주민등록번호오류, 3:성명오류, 4:거주자아님, 9:시스템오류, 99:등록된이용기관이아님 + logger.info("[거주지] 기관코드 : " + PublicFacilityReqXml.getTagValue("orgCode", eElement)); + respMap.put("transId", (String)facMap.get("transId")); + respMap.put("id", PublicFacilityReqXml.getTagValue("id", eElement)); + respMap.put("name", PublicFacilityReqXml.getTagValue("name", eElement)); + respMap.put("hangkikCd", PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + respMap.put("serviceResult", PublicFacilityReqXml.getTagValue("serviceResult", eElement)); + respMap.put("orgCode", PublicFacilityReqXml.getTagValue("orgCode", eElement)); + } + } + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "SUCCESS"); + rtnMap.put("resultCode", "0000"); + rtnMap.put("resultMessage", result.STATUS_SUCESS_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + facMap.put("cntcResult", "SUCCESS"); + facMap.put("cntcResultCode", "0000"); + facMap.put("cntcMessage", result.STATUS_SUCESS_MESSAGE + "[거주지]"); + facMap.put("id", respMap.get("id")); + facMap.put("name", respMap.get("name")); + facMap.put("hangkikCd", respMap.get("hangkikCd")); + facMap.put("serviceResult", respMap.get("serviceResult")); + facMap.put("orgCode", respMap.get("orgCode")); + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcDspsnAdd(facMap);//연계정보 저장 + + } catch (RuntimeException e) { + // TODO Auto-generated catch block + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "FAIL"); + rtnMap.put("resultCode", "9999"); + rtnMap.put("resultMessage", result.STATUS_ERROR_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcDspsnAdd(facMap);//연계정보 저장 + } catch (Exception e) { + // TODO Auto-generated catch block + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "FAIL"); + rtnMap.put("resultCode", "9999"); + rtnMap.put("resultMessage", result.STATUS_ERROR_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcDspsnAdd(facMap);//연계정보 저장 + } + } + + } /**else{ + //String strRespMsg = PublicFacilitySend.doService(serviceUrl, strReqXml); + String strRespMsg = PublicFacilityReqXml.getTestRespResideInsttCnfirmXml(); + logger.info("[거주지] strRespMsg : " + strRespMsg); + InputSource is = new InputSource(new StringReader(strRespMsg)); + Document document = null; + try { + document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); + } catch (SAXException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } catch (IOException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } catch (ParserConfigurationException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } + + // 파싱할 tag + NodeList nList = document.getElementsByTagName("getResideInsttCnfirmResponse"); + //System.out.println("파싱할 리스트 수 : "+ nList.getLength()); + + for(int i = 0; i < nList.getLength(); i++){ + Node nNode = nList.item(i); + if(nNode.getNodeType() == Node.ELEMENT_NODE){ + + Element eElement = (Element) nNode; + //System.out.println(eElement.getTextContent()); + logger.info("기관코드 : " + PublicFacilityReqXml.getTagValue("orgCode", eElement)); + logger.info("주민등록번호 : " + PublicFacilityReqXml.getTagValue("id", eElement)); + logger.info("이름 : " + PublicFacilityReqXml.getTagValue("name", eElement)); + logger.info("행정동코드 : " + PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + logger.info("거주행정기관확인결과 : " + PublicFacilityReqXml.getTagValue("serviceResult", eElement)); + + rtnMap.put("transId", (String)facMap.get("transId")); + rtnMap.put("orgCode", PublicFacilityReqXml.getTagValue("orgCode", eElement)); + rtnMap.put("id", PublicFacilityReqXml.getTagValue("id", eElement)); + rtnMap.put("name", PublicFacilityReqXml.getTagValue("name", eElement)); + rtnMap.put("hangkikCd", PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + rtnMap.put("serviceResult", PublicFacilityReqXml.getTagValue("serviceResult", eElement)); + } + } + }*/ + return rtnMap; + } + + public Map requestRdcxptInfoAllChldrn(String requestURL, Map reqData) { + Map result = new HashMap(); + // CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(10000) + .setConnectionRequestTimeout(10000).setStaleConnectionCheckEnabled(true).build(); + CloseableHttpClient client = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); // POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + // Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", jsonObj.get("resultCode")); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestRdcxptInfoNtttn(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + JSONArray dataArr = (JSONArray) data.get("resp"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + if (dataArr != null && dataArr.size() > 0) { + result.put("rspnsResult", "S"); + result.put("data", dataArr); + } else if (dataArr != null && dataArr.size() == 0) { + result.put("rspnsResult", "N"); + } else { + result.put("rspnsResult", "W"); + } + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", jsonObj.get("resultCode")); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + @Override + public int vhcleChk(Map param) { + return joinMapper.vhcleChk(param); + } +} diff --git a/src/main/java/gtpa/brs/join/service/impl/NewGpkiUtil.java b/src/main/java/gtpa/brs/join/service/impl/NewGpkiUtil.java new file mode 100644 index 0000000..d43660b --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/impl/NewGpkiUtil.java @@ -0,0 +1,390 @@ +package gtpa.brs.join.service.impl; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.apache.log4j.Logger; + +import com.gpki.gpkiapi_jni; +import com.gpki.gpkiapi.GpkiApi; +import com.gpki.gpkiapi.cert.X509Certificate; +import com.gpki.gpkiapi.crypto.PrivateKey; +import com.gpki.gpkiapi.exception.GpkiApiException; +import com.gpki.gpkiapi.storage.Disk; + +public class NewGpkiUtil { + private static Logger logger = Logger.getLogger(NewGpkiUtil.class); + byte[] myEnvCert, myEnvKey, mySigCert, mySigKey; + private Map targetServerCertMap = new HashMap(); + + // properties + private String myServerId; + private String targetServerIdList; + private String envCertFilePathName; + private String envPrivateKeyFilePathName; + private String envPrivateKeyPasswd; + private String sigCertFilePathName; + private String sigPrivateKeyFilePathName; + private String sigPrivateKeyPasswd; + private String certFilePath; + private String gpkiLicPath = "."; + private boolean isLDAP = true; + private boolean testGPKI = false; + + + public void init() throws RuntimeException, Exception { + GpkiApi.init(gpkiLicPath); + gpkiapi_jni gpki = this.getGPKI(); + if(logger.isDebugEnabled()){ + if(gpki.API_GetInfo()==0) + logger.debug(gpki.sReturnString); + else + logger.error(gpki.sDetailErrorString); + } + if(targetServerIdList!=null){ + String certIdList[] = targetServerIdList.split(","); + for(int i = 0 ; i < certIdList.length ; i++){ + String certId = certIdList[i].trim(); + if(!certId.equals("")){ + load(gpki, certId); + } + } + } + + logger.info("Loading gpki certificate : myServerId=" + + this.getMyServerId()); + + X509Certificate _myEnvCert = Disk.readCert(this + .getEnvCertFilePathName()); + myEnvCert = _myEnvCert.getCert(); + + PrivateKey _myEnvKey = Disk.readPriKey(this + .getEnvPrivateKeyFilePathName(), this.getEnvPrivateKeyPasswd()); + myEnvKey = _myEnvKey.getKey(); + + X509Certificate _mySigCert = Disk.readCert(this + .getSigCertFilePathName()); + mySigCert = _mySigCert.getCert(); + + PrivateKey _mySigKey = Disk.readPriKey(this + .getSigPrivateKeyFilePathName(), this.getSigPrivateKeyPasswd()); + mySigKey = _mySigKey.getKey(); + + //test my cert GPKI + if(testGPKI){ + load(gpki, this.getMyServerId()); + testGpki(gpki); + } + this.finish(gpki); + logger.info("GpkiUtil initialized"); + } + + private void load(gpkiapi_jni gpki, String certId) throws RuntimeException, Exception { + + logger.debug("Loading gpki certificate : targetServerId=" + + certId); + + X509Certificate cert = targetServerCertMap.get(certId); + if (cert != null) { + return; + } + + if (isLDAP) { + String ldapUrl = "ldap://10.1.7.118:389/cn="; + String ldapUri; + if (certId.charAt(3) > '9') { + ldapUri = ",ou=Group of Server,o=Public of Korea,c=KR"; + } else { + ldapUri = ",ou=Group of Server,o=Government of Korea,c=KR"; + } + + int ret = gpki.LDAP_GetAnyDataByURL("userCertificate;binary", ldapUrl + certId + ldapUri); + this.checkResult(ret, gpki); + cert = new X509Certificate(gpki.baReturnArray); + } else { + if(certFilePath != null){ + cert = Disk.readCert(certFilePath + File.separator + certId + ".cer"); + }else{ + logger.debug("not certFilePath"); + } + } + + targetServerCertMap.put(certId, cert); + } + + private gpkiapi_jni getGPKI(){ + gpkiapi_jni gpki = new gpkiapi_jni(); + if(gpki.API_Init(gpkiLicPath) != 0){ + logger.error(gpki.sDetailErrorString); + } + return gpki; + } + private void finish(gpkiapi_jni gpki){ + if(gpki.API_Finish() != 0){ + logger.error(gpki.sDetailErrorString); + } + } + + public byte[] encrypt(byte[] plain, String certId , boolean load) throws RuntimeException, Exception { + X509Certificate targetEnvCert = targetServerCertMap.get(certId); + if (targetEnvCert == null) { + throw new RuntimeException("Certificate not found : targetServerId=" + certId); + } + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_MakeEnvelopedData(targetEnvCert.getCert(), plain, + gpkiapi_jni.SYM_ALG_NEAT_CBC); + checkResult(result, "Fail to encrypt message", gpki); + }catch(RuntimeException e){ + logger.info(e); + }catch(Exception e){ + logger.info(e); + }finally{ + finish(gpki); + } + return gpki.baReturnArray; + } + + public byte[] encrypt(byte[] plain, String certId) throws RuntimeException, Exception { + return encrypt(plain,certId , false); + } + + public byte[] decrypt(byte[] encrypted) throws RuntimeException, Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_ProcessEnvelopedData(myEnvCert, myEnvKey, + encrypted); + checkResult(result, "Fail to decrpyt message", gpki); + }catch(RuntimeException e){ + logger.info(e); + }catch(Exception e){ + logger.info(e); + }finally{ + finish(gpki); + } + return gpki.baReturnArray; + } + + public byte[] sign(byte[] plain) { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_MakeSignedData(mySigCert, mySigKey, plain, null); + checkResult(result, "Fail to sign message", gpki); + }catch(RuntimeException e){ + logger.info(e); + }catch(Exception e){ + logger.info(e); + }finally{ + finish(gpki); + } + return gpki.baReturnArray; + } + + public byte[] validate(byte[] signed) { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.CMS_ProcessSignedData(signed); + checkResult(result, "Fail to validate signed message", gpki); + }catch(RuntimeException e){ + logger.info(e); + }catch(Exception e){ + logger.info(e); + }finally{ + finish(gpki); + } + return gpki.baData; + } + + public String encode(byte[] plain) throws RuntimeException, Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.BASE64_Encode(plain); + checkResult(result, "Fail to encode message", gpki); + }catch(RuntimeException e){ + logger.info(e); + }catch(Exception e){ + logger.info(e); + }finally{ + finish(gpki); + } + return gpki.sReturnString; + } + + public byte[] decode(String base64) throws RuntimeException, Exception { + + gpkiapi_jni gpki = this.getGPKI(); + try{ + int result = gpki.BASE64_Decode(base64); + checkResult(result, "Fail to decode base64 message", gpki); + }catch(RuntimeException e){ + logger.info(e); + }catch(Exception e){ + logger.info(e); + }finally{ + finish(gpki); + } + return gpki.baReturnArray; + } + + private void checkResult(int result, gpkiapi_jni gpki)throws RuntimeException, Exception{ + this.checkResult(result, null, gpki); + } + + private void checkResult(int result ,String message, gpkiapi_jni gpki)throws RuntimeException, Exception{ + if( 0 != result){ + if(null != gpki){ + throw new RuntimeException(message + " : gpkiErrorMessage=" + gpki.sDetailErrorString); + }else{ + throw new RuntimeException(message + " : gpkiErrorCode=" + result); + } + } + } + + public void testGpki(gpkiapi_jni gpki) throws RuntimeException, Exception{ + //gpki test eng + logger.info("======================================================="); + logger.info("================ TEST GPKI START ======================"); + logger.info("======================================================="); + String original_Eng = "abc"; + logger.info("=== TEST ENG STRING: "+ original_Eng); + try { + byte[] encrypted = encrypt(original_Eng.getBytes(), myServerId); + logger.info("=== TEST ENG ENCRYPT STRING: "+ encode(encrypted)); + String decrypted = new String(decrypt(encrypted)); + logger.info("=== TEST ENG DECRYPT STRING: "+decrypted); + + if (!original_Eng.equals(decrypted)) { + throw new RuntimeException("GpkiUtil not initialized properly(english)"); + } + logger.info("=== TEST ENG: OK"); + } catch (RuntimeException e) { + logger.info("Gpki Test error(english)", e); + } catch (Exception e) { + logger.info("Gpki Test error(english)", e); + } + //gpki test kor + String original = "한글테스트"; + logger.info("=== TEST KOR STRING: "+ original); + try { + byte[] encrypted = encrypt(original.getBytes(), myServerId); + logger.info("=== TEST KOR ENCRYPT STRING: "+ encode(encrypted)); + String decrypted = new String(decrypt(encrypted)); + logger.info("=== TEST KOR DECRYPT STRING: "+decrypted); + if (!original.equals(decrypted)) { + throw new RuntimeException("GpkiUtil not initialized properly(korean)"); + } + logger.info("=== TEST KOR: OK"); + } catch (RuntimeException e) { + logger.warn("Gpki Test error(korean)", e); + } catch (Exception e) { + logger.warn("Gpki Test error(korean)", e); + }finally{ + logger.info("======================================================="); + logger.info("================ TEST GPKI END ========================"); + logger.info("======================================================="); + } + } + + public String getMyServerId() { + return myServerId; + } + + public void setMyServerId(String myServerId) { + this.myServerId = myServerId.trim(); + } + + public String getEnvCertFilePathName() { + return envCertFilePathName; + } + + public void setEnvCertFilePathName(String envCertFilePathName) { + this.envCertFilePathName = envCertFilePathName.trim(); + } + + public String getEnvPrivateKeyFilePathName() { + return envPrivateKeyFilePathName; + } + + public void setEnvPrivateKeyFilePathName(String envPrivateKeyFilePathName) { + this.envPrivateKeyFilePathName = envPrivateKeyFilePathName.trim(); + } + + public String getEnvPrivateKeyPasswd() { + return envPrivateKeyPasswd; + } + + public void setEnvPrivateKeyPasswd(String envPrivateKeyPasswd) { + this.envPrivateKeyPasswd = envPrivateKeyPasswd.trim(); + } + + public String getSigPrivateKeyPasswd() { + return sigPrivateKeyPasswd; + } + + public void setSigPrivateKeyPasswd(String sigPrivateKeyPasswd) { + this.sigPrivateKeyPasswd = sigPrivateKeyPasswd.trim(); + } + + public String getSigCertFilePathName() { + return sigCertFilePathName; + } + + public void setSigCertFilePathName(String sigCertFilePathName) { + this.sigCertFilePathName = sigCertFilePathName.trim(); + } + + public String getSigPrivateKeyFilePathName() { + return sigPrivateKeyFilePathName; + } + + public void setSigPrivateKeyFilePathName(String sigPrivateKeyFilePathName) { + this.sigPrivateKeyFilePathName = sigPrivateKeyFilePathName.trim(); + } + + public boolean getIsLDAP() { + return isLDAP; + } + + public void setIsLDAP(boolean isLDAP) { + this.isLDAP = isLDAP; + } + + public String getCertFilePath() { + return certFilePath; + } + + public void setCertFilePath(String certFilePath) { + this.certFilePath = certFilePath.trim(); + } + + public String getTargetServerIdList() { + return targetServerIdList; + } + + public void setTargetServerIdList(String targetServerIdList) { + this.targetServerIdList = targetServerIdList; + } + + public String getGpkiLicPath() { + return gpkiLicPath; + } + + public void setGpkiLicPath(String gpkiLicPath) { + this.gpkiLicPath = gpkiLicPath; + } + + public boolean getTestGPKI() { + return testGPKI; + } + + public void setTestGPKI(boolean testGPKI) { + this.testGPKI = testGPKI; + } + +} diff --git a/src/main/java/gtpa/brs/join/service/impl/PublicFacilityReqXml.java b/src/main/java/gtpa/brs/join/service/impl/PublicFacilityReqXml.java new file mode 100644 index 0000000..ff8b70c --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/impl/PublicFacilityReqXml.java @@ -0,0 +1,151 @@ +/** + * @Class Name : PublicFacilityReqXml.java + * @Description : 공공시설 감면 웹서비스 호출을 위한 xml 조립 + * @Version 1.0 + * @Since 2019. 05. 25 + * @Author 박영수 + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   
    +
    + * 
    + */ +package gtpa.brs.join.service.impl; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Random; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + + +/** + * @Class Name : PublicFacilityReqXml.java + * @Description : 공공시설 감면 웹서비스 호출을 위한 xml 조립 + * @Since 2019. 05. 25 + * @Author 박영수 + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   
    +
    + * 
    + */ + + +@Component +public class PublicFacilityReqXml { + + static Logger logger = Logger.getLogger(PublicFacilityReqXml.class.getName()); + + /** + * xmlHeader부 생성 + * @param strXmlNs : xmlns명 + */ + public String commonHeaderXml(String strXmlNs, String strServiceName, String strSysId) + { + String strCertServerId=null; + String strUseSystemCode = null; + String strUserDeptCode = null; + String strUserName = null; + if(strSysId.equals("11-004")){//공영주차장 + strCertServerId = "SVRB553774006"; + if("ResideInsttCnfirmService".equals(strServiceName)) { + strUseSystemCode = "FD2401090024601"; + } else { + strUseSystemCode = "B553774CMC"; //ESBTEST + } + strUserDeptCode = "B553774"; + strUserName = "공영주차장"; + } + + logger.info("strUseSystemCode:: : " + strUseSystemCode); + + String strTransactionUniqueId = ""; + + int iRndGidits = 8; + Date d = new Date(); + SimpleDateFormat mDate = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + //logger.debug("mDate " + mDate); + Random rand = new Random(); + String numStr = ""; + + for(int i=0;i\t\n"); + strSbXml.append("\n"); + strSbXml.append("
    \n"); + strSbXml.append(" \n"); + strSbXml.append(" " + strServiceName + "\n"); //서비스명 + strSbXml.append(" " + strUseSystemCode +"\n"); //이용시스템 코드 + strSbXml.append(" " + strCertServerId + "\n"); //GPKI 인증서 아이디 + strSbXml.append(" " + strTransactionUniqueId + "\n"); //트랜잭션 유일식별자 + strSbXml.append(" " + strUserDeptCode + "\n"); //이용자 부서코드 + strSbXml.append(" " + strUserName + "\n"); //이용자명 + strSbXml.append(" \n"); + strSbXml.append("
    \n"); + + return strSbXml.toString(); + } + + /** + * 관내주민여부확인 + * @param facMap : in Param + */ + public HashMap getResideInsttCnfirmXml(HashMap facMap) + { + HashMap reqXmlMap = new HashMap<>(); + String strXmlNs = "http://ccais.mopas.go.kr/dh/jmn/services/jumin/ResideInsttCnfirm/types"; + String strElement = "getResideInsttCnfirm"; + String strElementResp = "getResideInsttCnfirmResponse"; + String strServiceName = "ResideInsttCnfirmService"; + + StringBuffer strSbXml = new StringBuffer(); + strSbXml.append(commonHeaderXml(strXmlNs, strServiceName, (String)facMap.get("sysId"))); + strSbXml.append(" \n"); + strSbXml.append(" <" + strElement + " xmlns=\"" +strXmlNs+ "\">\n"); + strSbXml.append(" " + (String)facMap.get("orgCode") + "\n"); //기관코드 + strSbXml.append(" " + (String)facMap.get("id") + "\n"); //주민등록번호 + strSbXml.append(" " + (String)facMap.get("name") + "\n"); //성명 + strSbXml.append(" \n"); + strSbXml.append(" \n"); + strSbXml.append("
    \n"); + + String strReqXml = strSbXml.toString(); + String strReqBodyMessage = strReqXml.split("<" + strElement + " xmlns=\"" +strXmlNs+ "\">")[1].split("")[0]; + + reqXmlMap.put("reqXml", strReqXml); + reqXmlMap.put("reqBodyMessage", strReqBodyMessage); + reqXmlMap.put("xmlNs", strXmlNs); + reqXmlMap.put("elementResp", strElementResp); + + return reqXmlMap; + } + + //Tag값 정보 가져오는 메서드 + public static String getTagValue(String tag, Element eElement) { + if( eElement.getElementsByTagName(tag).getLength() == 0) + return null; + NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes(); + Node nValue = (Node) nlList.item(0); + if(nValue == null) + return null; + return nValue.getNodeValue(); + } +} diff --git a/src/main/java/gtpa/brs/join/service/impl/PublicFacilitySend.java b/src/main/java/gtpa/brs/join/service/impl/PublicFacilitySend.java new file mode 100644 index 0000000..af82969 --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/impl/PublicFacilitySend.java @@ -0,0 +1,149 @@ +/** + * @Class Name : PublicFacilitySend.java + * @Description : 공공시설 감면 웹서비스 호출 + * @Version 1.0 + * @Since 2019. 05. 25 + * @Author 박영수 + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   
    +
    + * 
    + */ +package gtpa.brs.join.service.impl; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpConnectionManager; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.SimpleHttpConnectionManager; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.RequestEntity; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; +import org.apache.commons.httpclient.params.HttpMethodParams; + +import websquare.logging.Logger; + +/** + * @Class Name : PublicFacilitySend.java + * @Description : 공공시설 감면 웹서비스 호출 + * @Since 2019. 05. 25 + * @Author 박영수 + *
    + *   수정일      수정자           수정내용
    + *  -------    -------------    ----------------------
    + *   
    +
    + * 
    + */ + +public abstract class PublicFacilitySend { + + /** + * 행안부 웹서비스 호출 + */ + public static String doService(String serviceUrl, String requestXml) { + Logger.info("[거주지] 행안부 호출 시작"); + String strContentType; + String strEndoding; + int iConnectTimeout; + int iSoTimeout; + { + strContentType = "text/xml; charset=utf-8"; + strEndoding = "UTF-8"; + + iConnectTimeout = 5 * 60 * 1000; + iSoTimeout = 900 * 1000; + } + + PostMethod method = null; + String strRespXml = null; + ByteArrayOutputStream baos = null; + try { + Logger.info("[거주지] 행안부 호출 httpClient"); + HttpClient client; + { + Logger.info("[거주지] 행안부 호출 params"); + HttpConnectionManagerParams params = new HttpConnectionManagerParams(); + + params.setConnectionTimeout(iConnectTimeout); + params.setSoTimeout(iSoTimeout); + params.setTcpNoDelay(true); + Logger.info("[거주지] 행안부 호출 params2"); + HttpConnectionManager conn = new SimpleHttpConnectionManager(); + conn.setParams(params); + client = new HttpClient(conn); + Logger.info("[거주지] 행안부 호출 client"); + method = new PostMethod(serviceUrl); + Logger.info("[거주지] 행안부 호출 method"); + method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, + new DefaultHttpMethodRetryHandler(0, false)); + + method.setRequestHeader("Content-Type", strContentType); + method.setRequestHeader("Connection", "close"); + + RequestEntity requestEntity = new StringRequestEntity( + requestXml, strContentType, strEndoding); + Logger.info("[거주지] requestEntity -> " + requestEntity.toString()); + method.setRequestEntity(requestEntity); + Logger.info("[거주지] method -> " + method.toString()); + } + + int iResponseCode = client.executeMethod(method); + { + InputStream is = method.getResponseBodyAsStream(); + + try { + int readLen; + byte[] buffer = new byte[1024]; + baos = new ByteArrayOutputStream(); + while ((readLen = is.read(buffer)) >= 0) { + baos.write(buffer, 0, readLen); + } + byte[] data = baos.toByteArray(); + strRespXml = new String(data, strEndoding); + } catch (IOException e) { + Logger.info("에러발생"); + } catch (Exception e) { + Logger.info("에러발생"); + } finally { + is.close(); + if(baos != null){ + try { + baos.close(); + } catch (IOException e) { + Logger.info("에러"); + } catch (Exception e) { + Logger.info("에러"); + } + } + } + } + +// if (iResponseCode == HttpStatus.SC_OK) { +// +// } else if (strRespXml.indexOf("Fault>") > 0) { +// //오류처리...실데이터가 어떤식으로 오는지...암호화 안하고 오면은.... +// } else { +// } + } catch (RuntimeException e) { + Logger.info("에러발생"); + } catch (Exception e) { + Logger.info("에러발생"); + } finally { + if (method != null) { + method.releaseConnection(); + } + } + + return strRespXml; + } +} diff --git a/src/main/java/gtpa/brs/join/service/impl/ShareGpki.java b/src/main/java/gtpa/brs/join/service/impl/ShareGpki.java new file mode 100644 index 0000000..0708150 --- /dev/null +++ b/src/main/java/gtpa/brs/join/service/impl/ShareGpki.java @@ -0,0 +1,81 @@ +package gtpa.brs.join.service.impl; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class ShareGpki { + + static Logger logger = Logger.getLogger(ShareGpki.class.getName()); + + public static NewGpkiUtil getGpkiUtil(String targetServerId, String strSysId, boolean isRealIp) throws RuntimeException, Exception{ + NewGpkiUtil g = new NewGpkiUtil(); + // 이용기관 서버CN + String myServerId = null; + // 이용기관 서버인증서 경로 + String envCertFilePathName = null; + String envPrivateKeyFilePathName = null; + // 서버인증서 비밀번호 + String envPrivateKeyPasswd = null; + // 이용기관 서버전자서명 경로 + String sigCertFilePathName = null; + String sigPrivateKeyFilePathName = null; + // 이용기관 서버전자서명 비밀번호 + String sigPrivateKeyPasswd = null; + String strGpkiPath = null; + logger.info("GPKI 경로 운영?: " + strGpkiPath); + if(isRealIp){ + strGpkiPath = "/gpta/source-app/fis/gpki/Certificate/"; + }else{ + strGpkiPath = "C:/gpki/Certificate/"; + } + + if(strSysId.equals("11-004")){//공영주차장 + myServerId = "SVRB553774006"; + + envCertFilePathName = strGpkiPath + "park/SVRB553774006_env.cer"; + envPrivateKeyFilePathName = strGpkiPath + "park/SVRB553774006_env.key"; + envPrivateKeyPasswd = "sisulwnck1!"; + + sigCertFilePathName = strGpkiPath + "park/SVRB553774006_sig.cer"; + sigPrivateKeyFilePathName = strGpkiPath + "park/SVRB553774006_sig.key"; + sigPrivateKeyPasswd = "sisulwnck1!"; + g.setCertFilePath(strGpkiPath + "park"); + // 이용기관 GPKI API 라이선스파일 경로 + g.setGpkiLicPath(strGpkiPath + "park"); + }else if(strSysId.equals("11-006")){//과태료 + myServerId = "SVR6113918001"; + + envCertFilePathName = strGpkiPath + "fis/SVR6113918001_env.cer"; + envPrivateKeyFilePathName = strGpkiPath + "fis/SVR6113918001_env.key"; + envPrivateKeyPasswd = "tjfdlfghks&1"; + + sigCertFilePathName = strGpkiPath + "fis/SVR6113918001_sig.cer"; + sigPrivateKeyFilePathName = strGpkiPath + "fis/SVR6113918001_sig.key"; + sigPrivateKeyPasswd = "tjfdlfghks&1"; + g.setCertFilePath(strGpkiPath + "fis"); + // 이용기관 GPKI API 라이선스파일 경로 + g.setGpkiLicPath(strGpkiPath + "fis"); + }else{ + throw new RuntimeException("SysId오류"); + } + + g.setEnvCertFilePathName(envCertFilePathName); + g.setEnvPrivateKeyFilePathName(envPrivateKeyFilePathName); + g.setEnvPrivateKeyPasswd(envPrivateKeyPasswd); + // LDAP 의 사용유무 + // 미사용일 경우 암호화할 타겟의 인증서를 파일로 저장해놓고 사용하여야함. + g.setIsLDAP(true); + g.setMyServerId(myServerId); + g.setSigCertFilePathName(sigCertFilePathName); + g.setSigPrivateKeyFilePathName(sigPrivateKeyFilePathName); + g.setSigPrivateKeyPasswd(sigPrivateKeyPasswd); + + g.setTargetServerIdList(targetServerId); + + g.init(); + return g; + } +} diff --git a/src/main/java/gtpa/brs/join/web/CACheckController.java b/src/main/java/gtpa/brs/join/web/CACheckController.java new file mode 100644 index 0000000..b83093a --- /dev/null +++ b/src/main/java/gtpa/brs/join/web/CACheckController.java @@ -0,0 +1,453 @@ +package gtpa.brs.join.web; + +import java.io.PrintWriter; +import java.net.URLDecoder; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import org.apache.commons.lang3.StringEscapeUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import gtpa.brs.join.service.CACheckService; +import gtpa.brs.join.service.JoinService; +import gtpa.brs.user.dto.TempUserSessionInfoDTO; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.BrsIdGnrUtil; +import gtpa.brs.util.Result; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 18/04/2019 + * TIME : 4:08 PM + * Project : BRSPW + * Class : CACheckController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class CACheckController { + + @Autowired + CACheckService caCheckService; + + @Autowired + JoinService joinService; + + /* @Autowired + TempUserSessionInfoDTO tempUserSessionDTO;*/ + + @Autowired + UserInfo userInfo; + + @Resource(name = "memberGenIDService") + BrsIdGnrUtil memberGenIDService; + + @Resource(name = "globalsProperties") + Properties env; + + Logger logger = LoggerFactory.getLogger(CACheckController.class); + + @RequestMapping(value = "/check/isExsistComp.do", method = RequestMethod.POST) + public @ResponseBody + Map isExsistComp(@RequestBody Map param, HttpServletRequest request) { + TempUserSessionInfoDTO sessionInfoDTO = (TempUserSessionInfoDTO) request.getSession().getAttribute("scopedTarget.tempUserSessionInfoDTO"); + Map data; + Result result = new Result(); + Map params = (Map) param.get("searchParam"); + logger.info("Param Data : " + param); + String compRepNm = (String) params.get("compRepNm"); + String entprsNm = (String) params.get("entrprsNm"); + String bsnmRegistNo1 = (String) params.get("bsnmRegistNo1"); + String bsnmRegistNo2 = (String) params.get("bsnmRegistNo2"); + String bsnmRegistNo3 = (String) params.get("bsnmRegistNo3"); + String bsnmRegistNo = bsnmRegistNo1 + bsnmRegistNo2 + bsnmRegistNo3; + try { + data = caCheckService.isExsistComp(bsnmRegistNo, "", entprsNm, compRepNm); + result.setData("data", data); + if ((Integer) data.get("iReturn") != 0) { + result.setMsg(result.STATUS_ERROR, "사업자가 확인되지 않았습니다."); + } else { + if (data.get("RETURN_CODE").equals("01") && data.get("STATUS_CODE").equals("0") + || + data.get("RETURN_CODE").equals("01") && data.get("STATUS_CODE").equals("1") + || + data.get("RETURN_CODE").equals("23") && data.get("STATUS_CODE").equals("0")) { + result.setMsg(result.STATUS_SUCESS, "사업자 인증이 완료되었습니다."); + sessionInfoDTO.setTempUserInfo(data); + } else if (!data.get("STATUS_CODE").equals("0") || !data.get("STATUS_CODE").equals("1")) { + result.setMsg(result.STATUS_ERROR, "사업자가 확인되지 않았습니다."); + } else { + result.setMsg(result.STATUS_ERROR, "사업자가 확인되지 않았습니다."); + } + } + + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + + return result.getResult(); + } + + @RequestMapping(value = "/check/phone/main.do", method = RequestMethod.GET) + public @ResponseBody + Map phoneCheckplus(HttpServletRequest request) { + Result result = caCheckService.checkPlusMain(request, "M"); + return result.getResult(); + } + + @RequestMapping(value = "/check/phone/success.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void phoneCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) { + try { + TempUserSessionInfoDTO sessionInfoDTO = (TempUserSessionInfoDTO) request.getSession().getAttribute("scopedTarget.tempUserSessionInfoDTO"); + Map data = caCheckService.checkPlusSuccess(request, "M"); + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sNationalInfo = (String) data.get("sNationalInfo"); + String sBirthDate = (String) data.get("sBirthDate"); + String sMobileNo = (String) data.get("sMobileNo"); + String sMobileCo = (String) data.get("sMobileCo"); + int iReturn = (Integer) data.get("iReturn"); + Map param = new HashMap(); + param.put("MBER_CI", sConnInfo); + if (sessionInfoDTO != null && sessionInfoDTO.getMberty() != null) { + param.put("MBER_TY", sessionInfoDTO.getMberty()); + } + Map rsltMap = joinService.isMemberExsist(param); + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + if (rsltMap != null) { + request.getSession().removeAttribute("scopedTarget.tempUserSessionInfoDTO"); + request.getSession().invalidate(); + sMessage = "이미 등록되어 있는 사용자 입니다."; + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + /*response.getWriter().print("");*/ + } else { + if (sessionInfoDTO != null && sessionInfoDTO.getMberty() != null) { + sessionInfoDTO.setMberCi(sConnInfo); + if (sessionInfoDTO.getMberty().equals("CP")) { + String repNm = (String) sessionInfoDTO.getTempUserInfo().get("RETURN_REPNAME"); + if (!repNm.equals(sName)) { + iReturn = -99; + sMessage = "대표자가 일치하지 않습니다."; + sessionInfoDTO.setMberCi(null); + } else { + sessionInfoDTO.setMberNm(sName); + Map tempData = sessionInfoDTO.getTempUserInfo(); + if (tempData == null) tempData = new HashMap(); + tempData.put("sBirthDate", sBirthDate); + tempData.put("sMobileNo", sMobileNo); + tempData.put("sMobileCo", sMobileCo); + sessionInfoDTO.setMberMobileNo(sMobileNo); + sessionInfoDTO.setMberBirthDt(sBirthDate); + sessionInfoDTO.setTempUserInfo(tempData); + sessionInfoDTO.setMberNo(memberGenIDService.makeGnrID()); + } + } else { + if (sessionInfoDTO.getMberty().equals("NT") && !sNationalInfo.equals("0")) { + iReturn = -99; + sMessage = "회원가입 유형을 잘못 선택하셨습니다. 올바른 유형을 선택해 주세요."; + sessionInfoDTO.setMberCi(null); + } else if (sessionInfoDTO.getMberty().equals("FR") && sNationalInfo.equals("0")) { + iReturn = -99; + sMessage = "회원가입 유형을 잘못 선택하셨습니다. 올바른 유형을 선택해 주세요."; + sessionInfoDTO.setMberCi(null); + } else { + sessionInfoDTO.setMberNm(sName); + Map tempData = sessionInfoDTO.getTempUserInfo(); + if (tempData == null) tempData = new HashMap(); + tempData.put("sBirthDate", sBirthDate); + tempData.put("sMobileNo", sMobileNo); + tempData.put("sMobileCo", sMobileCo); + sessionInfoDTO.setMberMobileNo(sMobileNo); + sessionInfoDTO.setMberBirthDt(sBirthDate); + sessionInfoDTO.setTempUserInfo(tempData); + sessionInfoDTO.setMberNo(memberGenIDService.makeGnrID()); + } + } + } else { + iReturn = -99; + sMessage = "처리중 오류가 발생했습니다."; + //sessionInfoDTO.setMberCi(null); + } + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/check/phone/fail.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void phoneCheckplusFail(HttpServletRequest request, HttpServletResponse response) { + try { + Map data = caCheckService.checkPlusFail(request, "M"); + String sMessage = (String) data.get("sMessage"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/check/credit/main.do", method = RequestMethod.GET) + public @ResponseBody + Map creditCheckplus(HttpServletRequest request) { + Result result = caCheckService.checkPlusMain(request, "C"); + return result.getResult(); + } + + @RequestMapping(value = "/check/credit/success.do", method = RequestMethod.POST) + public void creditCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) { + try { + TempUserSessionInfoDTO sessionInfoDTO = (TempUserSessionInfoDTO) request.getSession().getAttribute("scopedTarget.tempUserSessionInfoDTO"); + Map data = caCheckService.checkPlusSuccess(request, "C"); + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sNationalInfo = (String) data.get("sNationalInfo"); + String sBirthDate = (String) data.get("sBirthDate"); + String sMobileNo = (String) data.get("sMobileNo"); + String sMobileCo = (String) data.get("sMobileCo"); + int iReturn = (Integer) data.get("iReturn"); + Map param = new HashMap(); + param.put("MBER_CI", sConnInfo); + if (sessionInfoDTO != null && sessionInfoDTO.getMberty() != null) { + param.put("MBER_TY", sessionInfoDTO.getMberty()); + } + Map rsltMap = joinService.isMemberExsist(param); + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + if (rsltMap != null) { + request.getSession().removeAttribute("scopedTarget.tempUserSessionInfoDTO"); + request.getSession().invalidate(); + sMessage = "이미 등록되어 있는 사용자 입니다."; + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } else { + if (sessionInfoDTO != null && sessionInfoDTO.getMberty() != null) { + sessionInfoDTO.setMberCi(sConnInfo); + if (sessionInfoDTO.getMberty().equals("CP")) { + String repNm = (String) sessionInfoDTO.getTempUserInfo().get("RETURN_REPNAME"); + if (!repNm.equals(sName)) { + iReturn = -99; + sMessage = "대표자가 일치하지 않습니다."; + sessionInfoDTO.setMberCi(null); + } else { + sessionInfoDTO.setMberNm(sName); + Map tempData = sessionInfoDTO.getTempUserInfo(); + if (tempData == null) tempData = new HashMap(); + tempData.put("sBirthDate", sBirthDate); + tempData.put("sMobileNo", sMobileNo); + tempData.put("sMobileCo", sMobileCo); + sessionInfoDTO.setMberMobileNo(sMobileNo); + sessionInfoDTO.setMberBirthDt(sBirthDate); + sessionInfoDTO.setTempUserInfo(tempData); + sessionInfoDTO.setMberNo(memberGenIDService.makeGnrID()); + } + } else { + if (sessionInfoDTO.getMberty().equals("NT") && !sNationalInfo.equals("0")) { + iReturn = -99; + sMessage = "회원가입 유형을 잘못 선택하셨습니다. 올바른 유형을 선택해 주세요."; + sessionInfoDTO.setMberCi(null); + } else if (sessionInfoDTO.getMberty().equals("FR") && sNationalInfo.equals("0")) { + iReturn = -99; + sMessage = "회원가입 유형을 잘못 선택하셨습니다. 올바른 유형을 선택해 주세요."; + sessionInfoDTO.setMberCi(null); + } else { + sessionInfoDTO.setMberNm(sName); + Map tempData = sessionInfoDTO.getTempUserInfo(); + if (tempData == null) tempData = new HashMap(); + tempData.put("sBirthDate", sBirthDate); + tempData.put("sMobileNo", sMobileNo); + tempData.put("sMobileCo", sMobileCo); + sessionInfoDTO.setMberMobileNo(sMobileNo); + sessionInfoDTO.setMberBirthDt(sBirthDate); + sessionInfoDTO.setTempUserInfo(tempData); + sessionInfoDTO.setMberNo(memberGenIDService.makeGnrID()); + } + } + } else { + iReturn = -99; + sMessage = "처리중 오류가 발생했습니다."; + //sessionInfoDTO.setMberCi(null); + } + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/check/credit/fail.do", method = RequestMethod.POST) + public void creditCheckplusFail(HttpServletRequest request, HttpServletResponse response) { + try { + Map data = caCheckService.checkPlusFail(request, "C"); + String sMessage = (String) data.get("sMessage"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/check/makeConnInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map makeConnInfo(@RequestBody Map param, HttpServletRequest request) { + TempUserSessionInfoDTO sessionInfoDTO = (TempUserSessionInfoDTO) request.getSession().getAttribute("scopedTarget.tempUserSessionInfoDTO"); + Result result = new Result(); + try { + Map params = (Map) param.get("tempData"); + String chargerNiNo = (String) params.get("chargerNiNo"); + String chargerNm = (String) params.get("chargerNm"); + Map data = caCheckService.interopService(chargerNiNo); + if (!data.get("iRtnCI").equals(1)) { + throw new RuntimeException(data.get("iRtnCI_MSG").toString()); + } else { + sessionInfoDTO.setChargerCi(data.get("CI").toString()); + sessionInfoDTO.setChargerNm(chargerNm); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + @RequestMapping(value = "/check/tb/main.do", method = RequestMethod.GET) + public @ResponseBody + Map tbCheckplus(HttpServletRequest request) { + Result result = caCheckService.tbCheckMain(request, userInfo.getUserNo()); + return result.getResult(); + } + + @RequestMapping(value = "/check/tb/success.do", method = {RequestMethod.POST}) + public void tbCheckSuccess(HttpServletRequest request, HttpServletResponse response, @RequestParam(name="rData", required=false) String param) {//@RequestBody String param + try { + System.out.println("param:"+param); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(StringEscapeUtils.unescapeHtml4(StringEscapeUtils.unescapeHtml3(URLDecoder.decode(param, "UTF-8")))); + JSONObject rData = (JSONObject) obj; + JSONObject frcAddInfo = (JSONObject) rData.get("frcAddInfo"); + String rstcd = (String) rData.get("rstcd"); + String rstval = (String) rData.get("rstval"); + String authKey = (String) rData.get("authKey"); + String setleMnMno = (String) frcAddInfo.get("setleMnMno"); + String ccmpKnd = (String) frcAddInfo.get("ccmpKnd"); + String stcmpNo = (String) frcAddInfo.get("stcmpNo"); + String setleMnKnd = (String) frcAddInfo.get("setleMnKnd"); + String ccmpCode = (String) frcAddInfo.get("ccmpCode"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + if ("0000".equals(rstcd)) { + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } else { + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } +} diff --git a/src/main/java/gtpa/brs/join/web/JoinController.java b/src/main/java/gtpa/brs/join/web/JoinController.java new file mode 100644 index 0000000..5c57759 --- /dev/null +++ b/src/main/java/gtpa/brs/join/web/JoinController.java @@ -0,0 +1,1184 @@ +package gtpa.brs.join.web; + +import gtpa.brs.join.service.CACheckService; +import gtpa.brs.join.service.JoinService; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.user.dto.TempUserSessionInfoDTO; +import gtpa.brs.util.BrsIdGnrUtil; +import gtpa.brs.util.Result; +import gtpa.brs.vehicle.service.VehicleService; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.transaction.SystemException; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 08/04/2019 + * TIME : 9:10 AM + * Project : BRSPW + * Class : MemberController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class JoinController { + Logger logger = LoggerFactory.getLogger(JoinController.class); + + @Autowired + JoinService joinService; + + @Autowired + CACheckService caCheckService; + + @Autowired + PreRegistPaymentService preRegistPaymentService; + + @Autowired + VehicleService vehicleService; + + /** + * The Temp user session dto. + */ + @Autowired + TempUserSessionInfoDTO tempUserSessionDTO; + + @Resource(name = "memberGenIDService") + BrsIdGnrUtil memberGenIDService; + + @Resource(name = "carGenIDService") + BrsIdGnrUtil carGenIDService; + + /** + * Save temp data map. + * + * @param param the param + * @param request the request + * @param session the session + * @return the map + */ + @RequestMapping(value = "/join/tempData.do", method = RequestMethod.POST) + public @ResponseBody + Map saveTempData(@RequestBody Map param, HttpServletRequest request, HttpSession session) { + Result result = new Result(); + logger.info("before::" + tempUserSessionDTO.toString()); + logger.info("tempData set Param Data : " + param); + try { + Iterator keys = param.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + switch (key) { + case "tempUserInfos": + Map userInfo = (Map) param.get(key); + tempUserSessionDTO.setMberId((String) userInfo.get("mberId")); + tempUserSessionDTO.setMberPw((String) userInfo.get("mberPw")); + tempUserSessionDTO.setInfoProvdAgreAt((String) userInfo.get("infoProvdAgreAt")); + tempUserSessionDTO.setTunnelFeeAgreAt((String) userInfo.get("tunnelFeeAgreAt")); + tempUserSessionDTO.setParkFeeAgreAt((String) userInfo.get("parkFeeAgreAt")); + tempUserSessionDTO.setJmpTunnelFeeAgreAt((String) userInfo.get("jmpTunnelFeeAgreAt")); + tempUserSessionDTO.setSsmTunnelFeeAgreAt((String) userInfo.get("ssmTunnelFeeAgreAt")); + tempUserSessionDTO.setPenaltyAgreAt((String) userInfo.get("penaltyAgreAt")); + tempUserSessionDTO.setTunnelPenaltyAgreAt((String) userInfo.get("tunnelPenaltyAgreAt")); + tempUserSessionDTO.setTrnsitDscntAt((String) userInfo.get("trnsitDscntAt")); + /** tempUserSessionDTO.setMnychRdcxptAt((String) userInfo.get("mnychRdcxptAt")); + tempUserSessionDTO.setChildrenCnt((String) userInfo.get("childrenCnt")); + tempUserSessionDTO.setChildrenBirthday((String) userInfo.get("childrenBirthday")); + tempUserSessionDTO.setServiceResult((String) userInfo.get("serviceResult")); */ + tempUserSessionDTO.setAthzerAt((String) userInfo.get("athzerAt")); + tempUserSessionDTO.setResName((String) userInfo.get("resName")); + tempUserSessionDTO.setRelCd((String) userInfo.get("relCd")); + tempUserSessionDTO.setAuthoriPsnYn((String) userInfo.get("authoriPsnYn")); + tempUserSessionDTO.setSubjKbnCd((String) userInfo.get("subjKbnCd")); + tempUserSessionDTO.setWondClassCd((String) userInfo.get("wondClassCd")); + tempUserSessionDTO.setInquRsltCd((String) userInfo.get("inquRsltCd")); + break; + case "mberId": + tempUserSessionDTO.setMberId(param.get(key).toString()); + break; + case "mberPw": + tempUserSessionDTO.setMberPw(param.get(key).toString()); + break; + case "joinType": + session.setMaxInactiveInterval(60 * 60); + Map joinType = (Map) param.get(key); + tempUserSessionDTO.setMberty(joinType.get("ty").toString()); + break; + case "company": + Map companyInfo = (Map) param.get(key); + tempUserSessionDTO.setEntrprsNm(companyInfo.get("entrprsNm").toString()); + tempUserSessionDTO.setBsnmRegistNo(companyInfo.get("bsnmRegistNo").toString()); + //tempUserSessionDTO.setCprRegistNo(companyInfo.get("").toString()); + break; + case "entrprsNm": + tempUserSessionDTO.setEntrprsNm(param.get(key).toString()); + break; + case "bsnmRegistNo": + tempUserSessionDTO.setBsnmRegistNo(param.get(key).toString()); + break; + case "cprRegistNo": + tempUserSessionDTO.setCprRegistNo(param.get(key).toString()); + break; + case "chargerNm": + tempUserSessionDTO.setChargerNm(param.get(key).toString()); + break; + case "chargerCi": + tempUserSessionDTO.setChargerCi(param.get(key).toString()); + break; + case "chargerMobileNo": + tempUserSessionDTO.setChargerMobileNo(param.get(key).toString()); + break; + case "infoProvdAgreAt": + tempUserSessionDTO.setInfoProvdAgreAt(param.get(key).toString()); + break; + case "agreeData": + Map agreeData = (Map) param.get(key); + tempUserSessionDTO.setTermsCheck1(agreeData.get("termsCheck1").toString()); + tempUserSessionDTO.setTermsCheck2(agreeData.get("termsCheck2").toString()); + tempUserSessionDTO.setTermsCheck3(agreeData.get("termsCheck3").toString()); + tempUserSessionDTO.setTermsCheck4(agreeData.get("termsCheck4").toString()); + tempUserSessionDTO.setTermsCheck5(agreeData.get("termsCheck5").toString()); + break; + case "tempCarInfos": + tempUserSessionDTO.setTempCarInfos((ArrayList) param.get(key)); + break; + case "mnychRdcxpt": + Map userInfo2 = (Map) param.get(key); + tempUserSessionDTO.setMnychRdcxptVhcle((String) userInfo2.get("mnychRdcxptVhcle")); + tempUserSessionDTO.setMnychRdcxptAt((String) userInfo2.get("mnychRdcxptAt")); + tempUserSessionDTO.setChildrenCnt((String) userInfo2.get("childrenCnt")); + tempUserSessionDTO.setChildrenBirthday((String) userInfo2.get("childrenBirthday")); + tempUserSessionDTO.setServiceResult((String) userInfo2.get("serviceResult")); + break; + case "tempCreditInfos": + tempUserSessionDTO.setTempCreditInfos((ArrayList) param.get(key)); + break; + case "tempBankInfos": + tempUserSessionDTO.setTempBankInfos((ArrayList) param.get(key)); + break; + case "addInfo": + Map addInfo = (Map) param.get(key); + tempUserSessionDTO.setMberMobileNo(addInfo.get("sMobileNo").toString()); + break; + default: + logger.error("not have variable:" + key); + Map inputMap = tempUserSessionDTO.getTempUserInfo(); + if (inputMap == null) inputMap = new HashMap(); + inputMap.put(key, key); + tempUserSessionDTO.setTempUserInfo(inputMap); + break; + } + + + } + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + + logger.info("after::" + tempUserSessionDTO.toString()); + return result.getResult(); + } + + /** + * Gets temp data. + * + * @param param the param + * @return the temp data + */ + @RequestMapping(value = "/join/getTempData.do", method = RequestMethod.POST) + public @ResponseBody + Map getTempData(@RequestBody Map param) { + Result result = new Result(); + try { + Map params = (Map) param.get("param"); + String process = (String) params.get("process"); + if (tempUserSessionDTO.getMberCi() != null) { + if (process.equals("car")) { + result.setData("tempData", tempUserSessionDTO.getTempCarInfos()); + } else if (process.equals("pay")) { + if (tempUserSessionDTO.getTempBankInfos() != null && tempUserSessionDTO.getTempCreditInfos() != null) { + List mergeList = Stream.concat(tempUserSessionDTO.getTempBankInfos().stream(), tempUserSessionDTO.getTempCreditInfos().stream()) + .collect(Collectors.toList()); + result.setData("tempData", mergeList); + } else if (tempUserSessionDTO.getTempBankInfos() != null) { + List mergeList = new ArrayList(tempUserSessionDTO.getTempBankInfos()); + result.setData("tempData", mergeList); + } else if (tempUserSessionDTO.getTempCreditInfos() != null) { + List mergeList = new ArrayList(tempUserSessionDTO.getTempCreditInfos()); + result.setData("tempData", mergeList); + } else { + List mergeList = new ArrayList(); + result.setData("tempData", mergeList); + } + Map tempData = tempUserSessionDTO.getTempUserInfo(); + result.setData("userTempData", tempData); + } else if (process.equals("user")) { + Map userTempData = new HashMap(); + userTempData.put("mberNo", tempUserSessionDTO.getMberNo()); + userTempData.put("mberCi", tempUserSessionDTO.getMberCi()); + userTempData.put("mberNm", tempUserSessionDTO.getMberNm()); + userTempData.put("mberId", tempUserSessionDTO.getMberId()); + userTempData.put("infoProvdAgreAt", tempUserSessionDTO.getInfoProvdAgreAt()); + userTempData.put("tunnelFeeAgreAt", tempUserSessionDTO.getTunnelFeeAgreAt()); + userTempData.put("parkFeeAgreAt", tempUserSessionDTO.getParkFeeAgreAt()); + userTempData.put("jmpTunnelFeeAgreAt",tempUserSessionDTO.getJmpTunnelFeeAgreAt()); + userTempData.put("ssmTunnelFeeAgreAt",tempUserSessionDTO.getSsmTunnelFeeAgreAt()); + userTempData.put("penaltyAgreAt", tempUserSessionDTO.getPenaltyAgreAt()); + userTempData.put("tunnelPenaltyAgreAt", tempUserSessionDTO.getTunnelPenaltyAgreAt()); + userTempData.put("trnsitDscntAt", tempUserSessionDTO.getTrnsitDscntAt()); + userTempData.put("mnychRdcxptAt", tempUserSessionDTO.getMnychRdcxptAt()); + userTempData.put("childrenCnt", tempUserSessionDTO.getChildrenCnt()); + userTempData.put("childrenBirthday", tempUserSessionDTO.getChildrenBirthday()); + userTempData.put("serviceResult", tempUserSessionDTO.getServiceResult()); + userTempData.put("mnychRdcxptVhcle", tempUserSessionDTO.getMnychRdcxptVhcle()); + userTempData.put("athzerAt", tempUserSessionDTO.getAthzerAt()); + userTempData.put("resName", tempUserSessionDTO.getResName()); + userTempData.put("relCd", tempUserSessionDTO.getRelCd()); + userTempData.put("authoriPsnYn", tempUserSessionDTO.getAuthoriPsnYn()); + userTempData.put("subjKbnCd", tempUserSessionDTO.getSubjKbnCd()); + userTempData.put("wondClassCd", tempUserSessionDTO.getWondClassCd()); + userTempData.put("inquRsltCd", tempUserSessionDTO.getInquRsltCd()); + result.setData("tempData", userTempData); + } else if (process.equals("terms")) { + Map termsTempData = new HashMap(); + termsTempData.put("termsCheck1", tempUserSessionDTO.getTermsCheck1()); + termsTempData.put("termsCheck2", tempUserSessionDTO.getTermsCheck2()); + termsTempData.put("termsCheck3", tempUserSessionDTO.getTermsCheck3()); + termsTempData.put("termsCheck4", tempUserSessionDTO.getTermsCheck4()); + termsTempData.put("termsCheck5", tempUserSessionDTO.getTermsCheck5()); + result.setData("tempData", termsTempData); + } else if (process.equals("final")) { + Map userTempData = new HashMap(); + userTempData.put("mberId", tempUserSessionDTO.getMberId()); + result.setData("tempUserData", userTempData); + + if (tempUserSessionDTO.getTempBankInfos() != null && tempUserSessionDTO.getTempCreditInfos() != null) { + List mergeList = Stream.concat(tempUserSessionDTO.getTempBankInfos().stream(), tempUserSessionDTO.getTempCreditInfos().stream()) + .collect(Collectors.toList()); + result.setData("tempPayData", mergeList); + } else if (tempUserSessionDTO.getTempBankInfos() != null) { + List mergeList = new ArrayList(tempUserSessionDTO.getTempBankInfos()); + result.setData("tempPayData", mergeList); + } else if (tempUserSessionDTO.getTempCreditInfos() != null) { + List mergeList = new ArrayList(tempUserSessionDTO.getTempCreditInfos()); + result.setData("tempPayData", mergeList); + } else { + List mergeList = new ArrayList(); + result.setData("tempPayData", mergeList); + } + result.setData("tempVhcleData", tempUserSessionDTO.getTempCarInfos()); + } + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_WARNING, "비정상적인 접근입니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + logger.info("getTempData::" + result.getResult()); + return result.getResult(); + } + + void initTempData(HttpServletRequest request) { + request.getSession().removeAttribute("scopedTarget.tempUserSessionInfoDTO"); + request.getSession().invalidate(); + } + + /** + * Make member gnr id map. + * + * @return the map + */ + @RequestMapping(value = "/join/makeMemberGnrId.do", method = RequestMethod.GET) + public @ResponseBody + Map makeMemberGnrId() { + Result result = new Result(); + String gnrId = memberGenIDService.makeGnrID(); + tempUserSessionDTO.setMberNo(gnrId); + logger.info("makeMemberGnrId::" + tempUserSessionDTO.toString()); + result.setData("gnrID", gnrId); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + return result.getResult(); + } + + /** + * Make car gnr id map. + * + * @return the map + */ + @RequestMapping(value = "/join/makeCarGnrId.do", method = RequestMethod.POST) + public @ResponseBody + Map makeCarGnrId() { + Result result = new Result(); + String gnrId = carGenIDService.makeGnrID(); + logger.info(tempUserSessionDTO.toString()); + result.setData("gnrID", gnrId); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + return result.getResult(); + } + + /** + * Gets car info. + * + * @param param the param + * @return the car info + */ + @RequestMapping(value = "/join/getCarInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getCarInfo(@RequestBody Map param) { + Result result = new Result(); + try { + Map params = (Map) param.get("param"); + logger.info("car params :: "+params); + String vhclePosesnTy = (String) params.get("SEARCH_CAR_POSESN_TY"); + String vhcleNo = (String) params.get("SEARCH_VHCLE_NO"); + String vhcleUser = (String) params.get("SEARCH_VHCLE_OWNER"); + String vhcleOwnerTy = (String) params.get("SEARCH_VHCLE_OWNER_TY"); + String mberCi = (String) params.get("PARAM_MBER_CI"); + String mnychRdcxptAt = (String) params.get("MNYCH_RDCXPT_AT"); + String cmpnyVhcleRcivEndde = ""; + String mberSeCode = ""; + String vhcleOwnerCi = ""; + params.put("vhcleNo", vhcleNo); + int vhcleChk = joinService.vhcleChk(params); + if(vhcleChk > 0) { + result.setMsg(result.STATUS_SUCESS, "이미 등록된 차량이므로 등록하실 수 없습니다."); + return result.getResult(); + } + Map resData = vehicleService.vhcleInquiry(params); + Map data = new HashMap(); + if (resData.get("rspnsResult").equals("S")) { + Map carResData = (Map) resData.get("data"); + if("Y".equals(vhcleOwnerTy)){ + vhcleOwnerCi = carResData.get("mberSeNo").toString(); + cmpnyVhcleRcivEndde = (String) params.get("CMPNY_VHCLE_RCIV_ENDDE"); + }else{ + data = caCheckService.interopService((String) carResData.get("mberSeNo")); + if (!data.get("iRtnCI").equals(1)) { + throw new RuntimeException(data.get("iRtnCI_MSG").toString()); + } + vhcleOwnerCi = data.get("CI").toString(); + + if(!mberCi.equals(vhcleOwnerCi)) { + result.setMsg(result.STATUS_ERROR, "본인 소유의 차량이 아니므로 등록하실 수 없습니다.
    ※공동소유 차량의 경우 '대표소유자'가 등록 가능"); + return result.getResult(); + } + } + + /** if("Y".equals(mnychRdcxptAt)) { + if(!vhcleOwnerCi.equals(mberCi)) { + result.setMsg(result.STATUS_SUCESS, "본인 소유의 차량이 아니므로 다자녀 감면 차량으로 등록하실 수 없습니다."); + // return result.getResult(); + } + }*/ + + Map car = new HashMap(); + car.put("VHCLE_OWNER_CI", vhcleOwnerCi); + car.put("VHCLE_POSESN_TY", vhclePosesnTy); + car.put("VHCLE_NO", carResData.get("vhrno")); + car.put("VHCLE_OWNER", carResData.get("mberNm").toString().replaceAll("\n", "")); + car.put("VHCLE_STTUS_TY", "01"); + //car.put("CARS_TY_ID", resData.get("")); + car.put("CARS_TY_ID", "60"); + car.put("CARS_TY", carResData.get("cnm")); + car.put("PRPOS_SE_CODE", carResData.get("prposSeCode")); + car.put("VHCLE_KND_CODE", carResData.get("vhctyAsortCode")); + car.put("VHCLE_CL_CODE", carResData.get("vhctySeCode")); + car.put("VHCLE_TY_CODE", carResData.get("vhctyTyCode")); + car.put("SPEC_REGIST_DETAIL_CODE", carResData.get("spcfRegistSttusCode")); + car.put("REGIST_DETAIL_CODE", carResData.get("registDetailCode")); + car.put("USE_FUEL_CODE", carResData.get("useFuelCode")); + car.put("LEGALDONG_CODE", carResData.get("ownerLegaldongCode")); + car.put("ADSTRD_CODE", carResData.get("ownerAdstrdCode")); + car.put("ROADNM_CODE", carResData.get("ownerRoadNmCode")); + /* 210602 서주희 - 법인차량 항목추가 + * 대표소유자회원구분코드, 납부 가능종료일 추가 + * */ + mberSeCode = carResData.get("mberSeCode").toString(); + car.put("VHCLE_OWNER_SE", mberSeCode); + car.put("CMPNY_VHCLE_RCIV_ENDDE", cmpnyVhcleRcivEndde); + if (!"Y".equals(vhcleOwnerTy) && !"13".equals(mberSeCode) && !"14".equals(mberSeCode)) { + int rsltCnt = joinService.isExsistVhcleOwner(car); + if (rsltCnt < 1 && vhcleUser.replaceAll(" ", "").equals(carResData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + if (data.get("CI").equals(tempUserSessionDTO.getMberCi())) { + car.put("VHCLE_OWNER_EQ", "Y"); + } else { + car.put("VHCLE_OWNER_EQ", "N"); + } + result.setData("data", car); + result.setMsg(result.STATUS_SUCESS, "차량정보가 확인되었습니다."); + } else if (rsltCnt < 1 && !vhcleUser.replaceAll(" ", "").equals(carResData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + result.setMsg(result.STATUS_SUCESS, "차량번호와 소유자가 일치하지 않습니다."); + } else { + result.setMsg(result.STATUS_SUCESS, "등록된 차량정보입니다. 다른 차량정보를 입력해 주십시오."); + } + /* 210602 서주희 - 법인차량 항목추가 + * 22.01.25 서주희 - 법인차량 종료일자 미등록 체크 + * */ + } else if ("Y".equals(vhcleOwnerTy) && ("13".equals(mberSeCode) || "14".equals(mberSeCode))) { + if("".equals(cmpnyVhcleRcivEndde) || cmpnyVhcleRcivEndde == null){ + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 명의 차량은 종료일자를 입력하셔야 등록이 가능합니다."); + }else if(cmpnyVhcleRcivEndde.length() != 8 ){ + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 명의 차량은 종료일자에 문제가 있습니다. 정상적인 날짜를 입력해주시기 바랍니다.("+cmpnyVhcleRcivEndde+")"); + }else { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); + String stDate = df.format(cal.getTime()); + cal.add(Calendar.MONTH, 12); + String endDate = df.format(cal.getTime()); + Date date1 = df.parse(stDate); + Date date2 = df.parse(endDate); + Date date3 = df.parse(cmpnyVhcleRcivEndde); + + if(date1.after(date3) || date2.before(date3)){ + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 결제이용 종료일은 등록일 기준 최대 1년까지 가능합니다.("+cmpnyVhcleRcivEndde+")"); + }else{ + int rsltCnt = joinService.isExsistVhcleOwner(car); + if (rsltCnt < 1 && vhcleUser.replaceAll(" ", "").equals(carResData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + car.put("VHCLE_OWNER_EQ", "N"); + result.setData("data", car); + result.setMsg(result.STATUS_SUCESS, "차량정보가 확인되었습니다."); + } else if (rsltCnt < 1 && !vhcleUser.replaceAll(" ", "").equals(carResData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + result.setMsg(result.STATUS_SUCESS, "차량번호와 소유자가 일치하지 않습니다."); + } else { + result.setMsg(result.STATUS_SUCESS, "등록된 차량정보입니다. 다른 차량정보를 입력해 주십시오."); + } + } + } + } else if (!"Y".equals(vhcleOwnerTy) && ("13".equals(mberSeCode) || "14".equals(mberSeCode))) { + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 명의 차량은 선택 항목을 체크하셔야 조회가 가능합니다."); + } else if ("Y".equals(vhcleOwnerTy) && !"13".equals(mberSeCode) && !"14".equals(mberSeCode)) { + result.setMsg(Result.STATUS_SUCESS, "개인 명의 차량은 선택 항목을 체크 해제 하셔야 조회가 가능합니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "개인/법인/사업자 명의 차량만 등록 가능합니다."); + } + } else { + throw new SystemException(resData.get("rspnsMssage").toString()); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_SUCESS, "차량소유자 정보조회 오류가 발생하였습니다.", re); + } catch (SystemException re) { + logger.error("[SystemException::" + "" + "]", re); + result.setMsg(result.STATUS_SUCESS, "차량 정보조회 오류가 발생하였습니다.
    ※참고(차량정보조회 오류시)
    국토교통부 \"자동차관리시스템\" 점검시 차량등록이 불가합니다.
    - 매월 말일(평일) : 19시부터 약 6시간
    - 매월 말일(휴일) : 13시부터 약 6시간", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + //result.setMsg(result.STATUS_ERROR, e.getMessage(), e); + result.setMsg(result.STATUS_SUCESS, result.STATUS_ERROR_MESSAGE, e); + } + + + return result.getResult(); + } + + /** + * Gets mnych rdcxpt info. + * + * @param param the param + * @return the mnych rdcxpt info + */ + @RequestMapping(value = "/join/getMnychRdcxptInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getMnychRdcxptInfo(@RequestBody Map param) { + Result result = new Result(); + String errorMsg = ""; + try { + Map params = (Map) param.get("param"); + logger.info("다자녀 params::" + params); + String mberSeNo = (String) params.get("searchNiNo1") + (String) params.get("searchNiNo2"); + params.put("mberSeNo", mberSeNo); + Map ciData = caCheckService.interopService((String) params.get("mberSeNo")); + if (!ciData.get("iRtnCI").equals(1)) { + errorMsg = ciData.get("iRtnCI_MSG").toString(); + throw new RuntimeException(ciData.get("iRtnCI_MSG").toString()); + } + String searchCi = (String) ciData.get("CI"); + if (!searchCi.equals(tempUserSessionDTO.getMberCi())) { + errorMsg = "본인과 동일하지 않은 주민등록번호입니다.
    확인후 다시 입력바랍니다."; + throw new SystemException("본인과 동일하지 않은 주민등록번호입니다.
    확인후 다시 입력바랍니다."); + } + + // 거주지 행정코드 조회 api + Map resReside = joinService.getResideInsttCnfirm(params); + logger.info("resReside:" + resReside); + if (resReside.get("resultCode").equals("0000")) { + Map data = (Map) resReside.get("data"); + resReside.put("id", data.get("id")); + resReside.put("name", data.get("name")); + resReside.put("hangkikCd", data.get("hangkikCd")); + resReside.put("serviceResult", data.get("serviceResult")); + + switch ((String) data.get("serviceResult")) { + case "1": + result.setMsg(result.STATUS_SUCESS, "정상적으로 조회가 완료되었습니다."); + break; + case "2": + result.setMsg(result.STATUS_WARNING, "거주지 코드 조회 실패(주민등록번호 오류)"); + case "3": + result.setMsg(result.STATUS_WARNING, "거주지 코드 조회 실패(성명 오류)"); + case "4": + result.setMsg(result.STATUS_WARNING, "거주지 코드 조회 실패(거주자아님)"); + break; + case "9": + result.setMsg(result.STATUS_WARNING, "시스템 오류가 발생하였습니다."); + case "99": + result.setMsg(result.STATUS_WARNING, "등록된 이용기관이 오류가 발생하였습니다. 관리자에게 문의바랍니다."); + default: + errorMsg = "시스템 오류가 발생하였습니다."; + throw new SystemException("시스템 오류가 발생하였습니다."); + } + // 서울시 거주자 아니면 다자녀 감면 대상 X + String hangKikCd = (String) resReside.get("hangkikCd"); + if("11".equals(hangKikCd.substring(0, 2))) { + // 다자녀 조회 api + Map resData = joinService.getRdcxptInfoAllChldrn(params); + logger.debug("resData:" + resData); + if (resData.get("rspnsResult").equals("S")) { + Map data2 = (Map) resData.get("data"); + /* + serviceResult 전체자녀수확인결과 (2) + "1: 성공 + 2: 주민등록번호 오류 + 3: 성명 오류 + 4: 거주자아님 + 5: 대상자아님 (세대주,배우자) + 9: 시스템 오류 + 99: 등록된 이용기관이 아님" + * */ + resData.put("childrenCnt", data2.get("childrenCnt")); + resData.put("childrenBirthday", data2.get("birthDay")); + resData.put("serviceResult", data2.get("serviceResult")); + logger.debug("serviceResult:" + (String) data2.get("serviceResult")); + switch ((String) data2.get("serviceResult")) { + case "1": + resData.put("mnychRdcxptAt", "Y"); + result.setMsg(result.STATUS_SUCESS, "정상적으로 조회가 완료되었습니다."); + break; + case "2": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(주민등록번호 오류)"); + case "3": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(성명 오류)"); + case "4": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(거주자아님)"); + break; + case "5": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(대상자아님 (세대주,배우자))"); + break; + case "9": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "시스템 오류가 발생하였습니다."); + case "99": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "등록된 이용기관이 오류가 발생하였습니다. 관리자에게 문의바랍니다."); + default: + errorMsg = "시스템 오류가 발생하였습니다."; + throw new SystemException("시스템 오류가 발생하였습니다."); + } + result.setData("data", resData); + + // int uCnt = mypageService.updateMnychRdcxptInfo(params); + /*if (uCnt == 0) { + result.setMsg(result.STATUS_WARNING, "시스템 오류가 발생하였습니다."); + }*/ + } else { + result.setMsg(result.STATUS_WARNING, result.STATUS_WARNING_MESSAGE); + } + } else { + result.setMsg(result.STATUS_WARNING, "서울시 거주자가 아니므로 다자녀 감면 서비스 이용대상이 아닙니다."); + } + } else { + result.setMsg(result.STATUS_WARNING, result.STATUS_WARNING_MESSAGE); + } + } catch (SystemException se) { + logger.error("[process error::" + "se.getMessage()" + "]", se); + result.setMsg(result.STATUS_WARNING, errorMsg, se); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_WARNING, errorMsg, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + //result.setMsg(result.STATUS_ERROR, e.getMessage(), e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } + + /** + * Gets rdcxpt info ntttn. + * + * @param param the param + * @return the rdcxpt info ntttn + */ + @RequestMapping(value = "/join/getRdcxptInfoNtttn.do", method = RequestMethod.POST) + public @ResponseBody + Map getRdcxptInfoNtttn(@RequestBody Map param) { + Result result = new Result(); + String errorMsg = ""; + try { + Map params = (Map) param.get("param"); + logger.info("params::" + params); + Map ciData = caCheckService.interopService((String) params.get("mberSeNo")); + if (!ciData.get("iRtnCI").equals(1)) { + errorMsg = ciData.get("iRtnCI_MSG").toString(); + throw new RuntimeException(ciData.get("iRtnCI_MSG").toString()); + } + String searchCi = (String) ciData.get("CI"); + if (!searchCi.equals(tempUserSessionDTO.getMberCi())) { + errorMsg = "본인과 동일하지 않은 주민등록번호입니다.
    확인후 다시 입력바랍니다."; + throw new SystemException("본인과 동일하지 않은 주민등록번호입니다.
    확인후 다시 입력바랍니다."); + } + Map resData = joinService.getRdcxptInfoNtttn(params); + logger.debug("resData:" + resData); + if (resData.get("rspnsResult").equals("S")) { + if (resData.get("data") != null) { + List resDataList = (List) resData.get("data"); + for (Object obj : resDataList) { + Map data = (Map) obj; + if (params.get("searchNm").equals(data.get("resName"))) { + /* + resName 이름 (25) 보훈대상자 이름 + resSecrNum 주민등록번호 (13) 조회 값 리턴 + relCd 가족관계 (1) A:본인, B:배우자, C:유가족 + authoriPsnYn 수권자여부 (1) Y:해당, N:비해당 / 조회안할시에는 null + subjKbnCd 국가유공자 구분 (5) 공통코드표 참조 + wondClassCd 국가유공자 급수 (5) 공통코드표 참조 + inquRsltCd 조회결과 (1) "S: 정상, R: 제적자력, D: 사망, I: 무효가족, F: 조회불가" + validDate 조회일자 (17) yyyyMMdd24HMISS + * */ + resData.put("resName", data.get("resName")); + resData.put("relCd", data.get("relCd")); + resData.put("authoriPsnYn", data.get("authoriPsnYn")); + resData.put("subjKbnCd", data.get("subjKbnCd")); + resData.put("wondClassCd", data.get("wondClassCd")); + resData.put("inquRsltCd", data.get("inquRsltCd")); + switch ((String) data.get("inquRsltCd")) { + case "S": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_SUCESS, "정상적으로 조회가 완료되었습니다."); + break; + case "R": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "제적자력"); + case "D": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "사망"); + case "I": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "무효가족"); + break; + case "F": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "조회불가"); + break; + default: + errorMsg = "시스템 오류가 발생하였습니다."; + throw new SystemException("시스템 오류가 발생하였습니다."); + } + result.setData("data", resData); + break; + } + } + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, "정상적으로 조회가 완료되었습니다."); + } + if (result.getResult().get("data") == null) { + result.setMsg(result.STATUS_SUCCESS_NODATA, "정상적으로 조회가 완료되었습니다."); + } + logger.info("data::" + result.getResult().get("data")); + } else if (resData.get("rspnsResult").equals("N")) { + result.setMsg(result.STATUS_SUCCESS_NODATA, "정상적으로 조회가 완료되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, result.STATUS_WARNING_MESSAGE); + } + } catch (SystemException se) { + logger.error("[process error::" + "se.getMessage()" + "]", se); + result.setMsg(result.STATUS_WARNING, errorMsg, se); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_WARNING, errorMsg, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + //result.setMsg(result.STATUS_ERROR, e.getMessage(), e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } + + /** + * Regist card info map. + * + * @param param the param + * @param request the request + * @return the map + */ + @RequestMapping(value = "/join/registCardInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map registCardInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + Map params = (Map) param.get("cardInfo"); + if (tempUserSessionDTO.getMberty().equals("FR")) { + params.put("isForeigner", "Y"); + } else { + params.put("isForeigner", "N"); + } + if (tempUserSessionDTO.getTempCarInfos() != null || tempUserSessionDTO.getTempCarInfos().size() > 0) { + params.put("cars", tempUserSessionDTO.getTempCarInfos()); + params.put("mberCi", tempUserSessionDTO.getMberCi()); + params.put("mberNo", tempUserSessionDTO.getMberNo()); + //List dataResponse = preRegistPaymentService.registPayment(params); + Map dataResponse = preRegistPaymentService.registPayment(params, request); + //if(tempUserSessionDTO.getTempCarInfos().size() == dataResponse.size()){ + if (dataResponse.get("rspnsCode").equals("0000")) { + result.setData("data", dataResponse); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else if (dataResponse.get("rspnsCode").equals("EP0005")){ + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, dataResponse.get("rspnsMssage").toString()); + } + } else { + result.setMsg(result.STATUS_ERROR, "차량정보를 등록해주세요."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + + return result.getResult(); + } + + /** + * Regist Tmoney info map. + * + * @param param the param + * @param request the request + * @return the map + */ + @RequestMapping(value = "/join/registTmInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map registTmInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + Map params = (Map) param.get("cardInfo"); + if (tempUserSessionDTO.getMberty().equals("FR")) { + params.put("isForeigner", "Y"); + } else { + params.put("isForeigner", "N"); + } + if (tempUserSessionDTO.getTempCarInfos() != null || tempUserSessionDTO.getTempCarInfos().size() > 0) { + params.put("cars", tempUserSessionDTO.getTempCarInfos()); + params.put("mberCi", tempUserSessionDTO.getMberCi()); + params.put("mberNo", tempUserSessionDTO.getMberNo()); + Map dataResponse = preRegistPaymentService.registTMPayment(params, request); + //if(tempUserSessionDTO.getTempCarInfos().size() == dataResponse.size()){ + if (dataResponse.get("rspnsCode").equals("0000")) { + result.setData("data", dataResponse); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else if (dataResponse.get("rspnsCode").equals("EP0005")){ + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, dataResponse.get("rspnsMssage").toString()); + } + } else { + result.setMsg(result.STATUS_ERROR, "차량정보를 등록해주세요."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + + return result.getResult(); + } + + /** + * Is id exsist map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/join/isIdExsist.do", method = RequestMethod.POST) + public @ResponseBody + Map isIdExsist(@RequestBody Map param) { + Result result = new Result(); + Map params = (Map) param.get("param"); + String id = (String) params.get("id"); + try { + int rsltCnt = joinService.isIdExsist(id); + if (rsltCnt > 0) { + result.setMsg("D", "이미 존재하는 아이디입니다."); + } else { + result.setMsg(result.STATUS_SUCESS, "사용가능한 아이디입니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } finally { + result.setData("MBER_ID", id); + } + logger.info("isIdExsist::" + result.getResult()); + return result.getResult(); + } + + /** + * Join process map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/join/joinProcess.do", method = RequestMethod.POST) + public @ResponseBody + Map joinProcess(HttpServletRequest request) { + logger.debug("joinProcess before::" + tempUserSessionDTO.toString()); + Result result = new Result(); + try { + result = joinService.insertMemberInfo(tempUserSessionDTO); + Map rsMsg = (Map) result.getResult().get("rsMsg"); + if (rsMsg.get("statusCode").equals(result.STATUS_SUCESS)) { + initTempData(request); + } else if (rsMsg.get("statusCode").equals("Q")) { + throw new SQLException((String) result.getResult().get("errorContent")); + } else { + throw new RuntimeException((String) result.getResult().get("errorContent")); + } + logger.debug("joinProcess after::" + tempUserSessionDTO.toString()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + logger.error("joinProcess Error::["); + logger.error("joinProcess Error::" + "e.getMessage()", re); + logger.error("joinProcess Error::" + tempUserSessionDTO.toString()); + logger.error("joinProcess Error::]"); + Map failData = new HashMap(); + failData.put("MBER_ID", (tempUserSessionDTO.getMberId() == null ? "값없음" : tempUserSessionDTO.getMberId())); + failData.put("MBER_NM", (tempUserSessionDTO.getMberNm() == null ? "값없음" : tempUserSessionDTO.getMberNm())); + failData.put("ENTRPRS_NM", (tempUserSessionDTO.getEntrprsNm() == null ? "" : tempUserSessionDTO.getEntrprsNm())); + List vhcles = tempUserSessionDTO.getTempCarInfos(); + String vhcleNos = ""; + if (vhcles != null) { + for (int i = 0; i < vhcles.size(); i++) { + vhcleNos += (vhcles.get(i).get("VHCLE_NO")); + vhcleNos += ","; + } + vhcleNos = vhcleNos.substring(0, vhcleNos.length() - 1); + } + + failData.put("VHCLE_NO", vhcleNos); + failData.put("FAILR_INFO", result.getResult().get("errorContent")); + joinService.insertJoinFailerLog(failData); + //result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (SQLException se) { + logger.error("joinProcess Error::["); + logger.error("joinProcess Error::" + "e.getMessage()", se); + logger.error("joinProcess Error::" + tempUserSessionDTO.toString()); + logger.error("joinProcess Error::]"); + Map failData = new HashMap(); + failData.put("MBER_ID", (tempUserSessionDTO.getMberId() == null ? "값없음" : tempUserSessionDTO.getMberId())); + failData.put("MBER_NM", (tempUserSessionDTO.getMberNm() == null ? "값없음" : tempUserSessionDTO.getMberNm())); + failData.put("ENTRPRS_NM", (tempUserSessionDTO.getEntrprsNm() == null ? "" : tempUserSessionDTO.getEntrprsNm())); + List vhcles = tempUserSessionDTO.getTempCarInfos(); + String vhcleNos = ""; + if (vhcles != null) { + for (int i = 0; i < vhcles.size(); i++) { + vhcleNos += (vhcles.get(i).get("VHCLE_NO")); + vhcleNos += ","; + } + vhcleNos = vhcleNos.substring(0, vhcleNos.length() - 1); + } + + failData.put("VHCLE_NO", vhcleNos); + failData.put("FAILR_INFO", result.getResult().get("errorContent")); + joinService.insertJoinFailerLog(failData); + //result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, se); + } catch (Exception e) { + logger.error("joinProcess Error::["); + logger.error("joinProcess Error::" + "e.getMessage()", e); + logger.error("joinProcess Error::" + tempUserSessionDTO.toString()); + logger.error("joinProcess Error::]"); + Map failData = new HashMap(); + failData.put("MBER_ID", (tempUserSessionDTO.getMberId() == null ? "값없음" : tempUserSessionDTO.getMberId())); + failData.put("MBER_NM", (tempUserSessionDTO.getMberNm() == null ? "값없음" : tempUserSessionDTO.getMberNm())); + failData.put("ENTRPRS_NM", (tempUserSessionDTO.getEntrprsNm() == null ? "" : tempUserSessionDTO.getEntrprsNm())); + List vhcles = tempUserSessionDTO.getTempCarInfos(); + String vhcleNos = ""; + if (vhcles != null) { + for (int i = 0; i < vhcles.size(); i++) { + vhcleNos += (vhcles.get(i).get("VHCLE_NO")); + vhcleNos += ","; + } + vhcleNos = vhcleNos.substring(0, vhcleNos.length() - 1); + } + + failData.put("VHCLE_NO", vhcleNos); + failData.put("FAILR_INFO", "시스템 오류발생 (로그참조 바랍니다.)"); + joinService.insertJoinFailerLog(failData); + //result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } + + /** + * Gets pre regist payment code. + * + * @return the pre regist payment code + */ + @RequestMapping(value = "/join/getPaymentMngCd.do", method = RequestMethod.POST) + public @ResponseBody + Map getPreRegistPaymentCode() { + Result result = new Result(); + List paymentList = null; + try { + paymentList = preRegistPaymentService.getPaymentMngCd(); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } finally { + result.setData("paymentList", paymentList); + } + logger.info("getPreRegistPaymentCode::" + result.getResult()); + return result.getResult(); + } + + /** + * Gets credit code. + * + * @param param the param + * @return the credit code + */ + @RequestMapping(value = "/join/getPaymentCd.do", method = RequestMethod.POST) + public @ResponseBody + Map getCreditCode(@RequestBody Map param) { + Result result = new Result(); + List paymentCodeList = null; + try { + Map params = (Map) param.get("param"); + paymentCodeList = preRegistPaymentService.getPaymentCd(params); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } finally { + result.setData("paymentCodeList", paymentCodeList); + } + logger.info("getPaymentCd::" + result.getResult()); + return result.getResult(); + } + + /** + * Gets bank code. + * + * @param param the param + * @return the bank code + */ + @RequestMapping(value = "/join/getBankCd.do", method = RequestMethod.POST) + public @ResponseBody + Map getBankCode(@RequestBody Map param) { + Result result = new Result(); + List paymentCodeList = null; + try { + Map params = (Map) param.get("param"); + paymentCodeList = preRegistPaymentService.getBankCd(params); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } finally { + result.setData("bankCdList", paymentCodeList); + } + logger.info("bankCdList::" + result.getResult()); + return result.getResult(); + } + + /** + * Regist acct info map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/join/registAcctInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map registAcctInfo(@RequestBody Map param) { + Result result = new Result(); + Map dataResponse = new HashMap(); + Map params = new HashMap<>(); + try { + params = (Map) param.get("acctInfo"); + if (tempUserSessionDTO.getTempCarInfos() != null || tempUserSessionDTO.getTempCarInfos().size() > 0) { + params.put("cars", tempUserSessionDTO.getTempCarInfos()); + params.put("mberCi", tempUserSessionDTO.getMberCi()); + params.put("mberNo", tempUserSessionDTO.getMberNo()); + //List dataResponse = preRegistPaymentService.registPayment(params); + dataResponse = preRegistPaymentService.checkNormalAcctNo(params); + //if(tempUserSessionDTO.getTempCarInfos().size() == dataResponse.size()){ + if (dataResponse.get("rspnsCode").equals("000")) { + if (dataResponse.get("ACCT_NM").equals(tempUserSessionDTO.getMberNm())) { + Map tempData = tempUserSessionDTO.getTempUserInfo(); + String yyyymmdd = (String) tempData.get("sBirthDate"); + String yymmdd; + if (yyyymmdd.length() == 8) { + yymmdd = yyyymmdd.substring(2, 8); + } else { + yymmdd = yyyymmdd; + } + if (!params.get("niNo1").equals(yymmdd)) { + dataResponse.put("rspnsCode", "999"); + result.setMsg(result.STATUS_SUCESS, "회원과 예금주가 동일하지 않습니다. 본인계좌로 등록 바랍니다."); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } + } else { + dataResponse.put("rspnsCode", "999"); + result.setMsg(result.STATUS_SUCESS, "회원과 예금주가 동일하지 않습니다. 본인계좌로 등록 바랍니다."); + } + result.setData("data", dataResponse); + + } else { + result.setMsg(result.STATUS_ERROR, dataResponse.get("rspnsMssage").toString()); + } + + } else { + result.setMsg(result.STATUS_ERROR, "차량정보를 등록해주세요."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } finally { + Map acctHistData = new HashMap(); + acctHistData.put("mberNo", tempUserSessionDTO.getMberNo()); + acctHistData.put("pblMno", dataResponse.get("TRSC_SEQ_NO")); + acctHistData.put("vhcleMngNo", tempUserSessionDTO.getTempCarInfos().get(0).get("vhcleManageNo")); + acctHistData.put("reqDt", dataResponse.get("reqDt")); + acctHistData.put("bankCd", params.get("bankCd")); + acctHistData.put("bankNm", params.get("bankNm")); + acctHistData.put("acnutNo", params.get("acctNo")); + acctHistData.put("bsnmRegistNo", params.get("bsnmRegistNo")); + acctHistData.put("niNo", params.get("niNo1")); + acctHistData.put("acctNm", dataResponse.get("ACCT_NM")); + if (acctHistData.get("acctNm") == null) acctHistData.put("acctNm", tempUserSessionDTO.getMberNm()); + acctHistData.put("rspnsCode", dataResponse.get("rspnsCode")); + acctHistData.put("rspnsMssage", dataResponse.get("rspnsMssage")); + Iterator keys = acctHistData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + if (acctHistData.get(key) == null) { + acctHistData.put(key, "null"); + } + } + try { + preRegistPaymentService.insertAcctHist(acctHistData); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + + } + + return result.getResult(); + } + + @RequestMapping(value = "/join/tb/main.do", method = RequestMethod.GET) + public @ResponseBody + Map tbCheckplus(HttpServletRequest request) { + Result result = caCheckService.tbCheckMain(request, tempUserSessionDTO.getMberNo()); + return result.getResult(); + } + + /** + * Cars data Check. + * + * @param param the param + * @param request the request + * @param session the session + * @return the map + */ + @RequestMapping(value = "/join/checkCars.do", method = RequestMethod.POST) + public @ResponseBody + Map checkCars(@RequestBody Map param, HttpServletRequest request, HttpSession session) { + Result result = new Result(); + logger.info("tempUserSessionDTO::" + tempUserSessionDTO.getTempCarInfos()); + String vhcleNo = ""; + List tempCarInfos = new ArrayList(); + try { + for (Map obj : tempUserSessionDTO.getTempCarInfos()) { + obj.put("VHCLE_NO", obj.get("vhcleNo")); + obj.put("VHCLE_OWNER_CI", obj.get("vhcleOwnerCi")); + int rsltCnt = joinService.isExsistVhcleOwner(obj); + logger.info("rsltCnt::" + rsltCnt); + if(rsltCnt > 0) { + if("".equals(vhcleNo)){ + vhcleNo += (String)obj.get("vhcleNo"); + }else{ + vhcleNo += ", "+(String)obj.get("vhcleNo"); + } + } + } + if("".equals(vhcleNo)){ + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + }else{ + result.setMsg(result.STATUS_ERROR, "중복 차량이 존재합니다.
    이전 단계로 넘어가서 기존 차량을 삭제 후 다른 차량번호를 등록하시기 바랍니다.
    ("+ vhcleNo +")"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + logger.info("after vhcleNo::" + vhcleNo); + return result.getResult(); + } +} diff --git a/src/main/java/gtpa/brs/login/service/LoginService.java b/src/main/java/gtpa/brs/login/service/LoginService.java new file mode 100644 index 0000000..bc65b84 --- /dev/null +++ b/src/main/java/gtpa/brs/login/service/LoginService.java @@ -0,0 +1,98 @@ +package gtpa.brs.login.service; + +import java.util.HashMap; +import java.util.Map; + +/** + * The interface Login service. + */ +public interface LoginService { + + /** + * Select member info for login map. + * + * @param param the param + * @return the map + */ +// 사용자 정보 조회 (로그인 체크용도로 사용 ) + public Map selectMemberInfoForLogin(Map param); + + /** + * Is admin boolean. + * + * @param userId the user id + * @return the boolean + */ +// 해당 사용자 아이디가 관리자 아이디인지를 검사한다. + public boolean isAdmin(String userId); + + /** + * Update password int. + * + * @param param the param + * @return the int + */ +// 사용자의 비밀번호를 업데이트한다. + public int updatePassword(Map param); + + + /** + * Is member exsist map map. + * + * @param param the param + * @return the map + */ + public Map isMemberExsistMap(Map param); + + /** + * Is bsnm member exsist map map. + * + * @param param the param + * @return the map + */ + public Map isBsnmMemberExsistMap(Map param); + + /** + * Is member id map map. + * + * @param mberId the mber id + * @return the map + */ + public Map isMemberIdMap(String mberId); + + public Map isMemberNoMap(String mberNo); + + /** + * Update new pwd map. + * + * @param param the param + * @return the map + */ + public int updateNewPwd(Map param); + + public int saveMnychRdcxptInfo(Map param); + + public int saveNationMrtrsInfo(Map param); + + public Map checkSecsnAt(Map defInfo); + + void insertConnInfo(HashMap param); + + public int chkExsistActNo(Map param); + + int updateFixPwd(Map dbParam); + + void insertPromptErrorConnInfo(Map errLogKey); + + public String selectDisuseMemberInfo(String param); + + public Map selectBackupMemberInfo(String param); + + public String memberInfoUpdt(Map param); + + public String agreAtUpdt(Map param); + + public String backupMberUpdt(String param); + + public String disuseMemberUpdt(String param); +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/login/service/impl/LoginMapper.java b/src/main/java/gtpa/brs/login/service/impl/LoginMapper.java new file mode 100644 index 0000000..8c73048 --- /dev/null +++ b/src/main/java/gtpa/brs/login/service/impl/LoginMapper.java @@ -0,0 +1,106 @@ +package gtpa.brs.login.service.impl; + +import java.util.HashMap; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +@Repository("loginDao") +public class LoginMapper extends EgovAbstractMapper { + private String NAMESPACE = "LoginDAO"; + + // 사용자 정보 조회 (로그인 체크용도로 사용 ) + public Map selectMemberInfoForLogin(Map param) { + return selectOne(NAMESPACE + ".selectMemberInfoForLogin", param); + } + + // 사용자의 비밀번호를 업데이트한다. + public int updatePassword(Map param) { + return update(NAMESPACE + ".updatePassword", param); + } + + public Map isMemberExsistMap(Map param) { + return selectOne(NAMESPACE + ".isMemberExsistMap", param); + } + + public Map isBsnmMemberExsistMap(Map param) { + return selectOne(NAMESPACE + ".isBsnmMemberExsistMap", param); + } + + public Map isMemberIdMap(String mberId) { + return selectOne(NAMESPACE + ".isMemberIdMap", mberId); + } + + public Map isMemberNoMap(String mberNo) { + return selectOne(NAMESPACE + ".isMemberNoMap", mberNo); + } + + public int updatePwd(Map param) { + return update(NAMESPACE + ".updatePwd", param); + } + + public int updateNewPwd(Map param) { + return update(NAMESPACE + ".updateNewPwd", param); + } + + public Map checkSecsnAt(Map defInfo) { + return selectOne(NAMESPACE + ".checkSecsnAt", defInfo); + } + + public void insertConnInfo(HashMap param) { + insert(NAMESPACE + ".insertConnInfo", param); + } + + public int chkExsistActNo(Map param) { + return selectOne(NAMESPACE + ".chkExsistActNo", param); + } + + public int saveMnychRdcxptInfo(Map param) { + return insert(NAMESPACE + ".saveMnychRdcxptInfo", param); + } + + public int saveNationMrtrsInfo(Map param) { + return insert(NAMESPACE + ".saveNationMrtrsInfo", param); + } + + public int updateSetleAgreAt(Map param) { + return update(NAMESPACE + ".updateSetleAgreAt", param); + } + + public int updateFixPwd(Map param) { + return update(NAMESPACE + ".updateFixPwd", param); + } + + public void updateMemberLoginErrCount(Map param) { + update(NAMESPACE + ".updateMemberLoginErrCount", param); + } + + public void insertPromptErrorConnInfo(Map errLogKey) { + update(NAMESPACE + ".insertPromptErrorConnInfo", errLogKey); + } + + public int selectDisuseMemberInfo(String param) { + return selectOne(NAMESPACE + ".selectDisuseMemberInfo", param); + } + + public Map selectBackupMemberInfo(String param) { + return selectOne(NAMESPACE + ".selectBackupMemberInfo", param); + } + + public int memberInfoUpdt(Map param) { + return update(NAMESPACE + ".memberInfoUpdt", param); + } + + public int agreAtUpdt(Map param) { + return update(NAMESPACE + ".agreAtUpdt", param); + } + + public int backupMberUpdt(String param) { + return update(NAMESPACE + ".backupMberUpdt", param); + } + + public int disuseMemberUpdt(String param) { + return update(NAMESPACE + ".disuseMemberUpdt", param); + } +} diff --git a/src/main/java/gtpa/brs/login/service/impl/LoginServiceImpl.java b/src/main/java/gtpa/brs/login/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..5af7de9 --- /dev/null +++ b/src/main/java/gtpa/brs/login/service/impl/LoginServiceImpl.java @@ -0,0 +1,277 @@ +package gtpa.brs.login.service.impl; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; + +import gtpa.brs.login.service.LoginService; +import gtpa.brs.join.service.impl.JoinMapper; +import gtpa.brs.login.service.impl.LoginMapper; +import gtpa.brs.mypage.web.MypageController; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.SHA256Util; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@SuppressFBWarnings +@Service +public class LoginServiceImpl implements LoginService { + + @Resource(name = "loginDao") + private LoginMapper loginMapper; + + @Resource(name = "joinDao") + private JoinMapper joinMapper; + + @Autowired + private UserInfo userInfo; + + //@Value("${system.admin.id}") + private String adminId = "admin"; + + Logger logger = LoggerFactory.getLogger(MypageController.class); + + /** + * 사용자 정보 조회 (로그인 체크용도로 사용 ) + */ + @Override + public Map selectMemberInfoForLogin(Map param) { + Map memberMap = loginMapper.selectMemberInfoForLogin(param); + + // 사용자가 존재하지 않을 경우 + if (memberMap == null) { + memberMap = new HashMap(); + memberMap.put("LOGIN", "notexist"); + + // 사용자가 존재할 경우 + } else { + String PASSWORD = (String) memberMap.get("PW"); + String reqPASSWORD = (String) param.get("pw"); + reqPASSWORD = SHA256Util.encryptSHA256(reqPASSWORD); + logger.info("reqPASSWORD2 : " + reqPASSWORD); + logger.info("PASSWORD2 : " + PASSWORD); + int promptLogin = Integer.parseInt(String.valueOf(memberMap.get("CONECT_FAILR_CO"))); + int pwChange = Integer.parseInt(String.valueOf(memberMap.get("PASSWORD_CHANGE_DAY"))); + if( promptLogin > 4) { + memberMap.put("LOGIN", "promptover"); + return memberMap; + } + // 패스워드 일치 + if (PASSWORD.equals(reqPASSWORD)) { + if(pwChange < 0){ //비밀번호 변경 90일 초과 + memberMap.put("LOGIN", "pwChange"); + }else{ + memberMap.put("PW_CHANGE", pwChange); + memberMap.put("PW", ""); + memberMap.put("LOGIN", "success"); + } + } else { // 패스워드 불일치 + memberMap.put("LOGIN", "error"); + promptLogin = promptLogin + 1; + memberMap.put("CONECT_FAILR_CO",promptLogin); + loginMapper.updateMemberLoginErrCount(memberMap); + } + } + return memberMap; + } + + /** + * 해당 사용자 아이디가 관리자 아이디인지를 검사한다. + */ + @Override + public boolean isAdmin(String userId) { + String[] adminIdList = adminId.split(","); + + for (String adminId : adminIdList) { + if (adminId.trim().equals(userId)) { + return true; + } + } + + return false; + } + + /** + * 사용자의 비밀번호를 업데이트한다. + */ + @Override + public int updatePassword(Map param) { + return loginMapper.updatePassword(param); + } + + @Override + public int saveMnychRdcxptInfo(Map param) { + Map resultMap = userInfo.getUserInfoByBase(); + String mberNo = (String) resultMap.get("MBER_NO"); + param.put("mberNo", mberNo); + return loginMapper.saveMnychRdcxptInfo(param); + } + + @Override + public int saveNationMrtrsInfo(Map param) { + Map resultMap = userInfo.getUserInfoByBase(); + String mberNo = (String) resultMap.get("MBER_NO"); + param.put("mberNo", mberNo); + return loginMapper.saveNationMrtrsInfo(param); + } + + @Override + public Map isMemberExsistMap(Map param) { + return loginMapper.isMemberExsistMap(param); + } + + @Override + public Map isBsnmMemberExsistMap(Map param) { + return loginMapper.isBsnmMemberExsistMap(param); + } + + @Override + public Map isMemberIdMap(String mberId) { + return loginMapper.isMemberIdMap(mberId); + } + + @Override + public Map isMemberNoMap(String mberNo) { + return loginMapper.isMemberNoMap(mberNo); + } + + @Override + public int updateNewPwd(Map param) { + int uCnt = 0; + String newPwd = (String) param.get("sNewPwd"); + logger.info("newPwd ->>" + newPwd); + if ("".equals(newPwd) || newPwd == null) { + //새로운 비밀번호를 변경하지 않은경우 + uCnt = loginMapper.updatePwd(param); + } else { + if((regEx("[^a-zA-Z0-9]", newPwd)) && (regEx("[~!@#$^*()=_.|]", newPwd))) { + //새로운 비밀번호를 변경한경우 + newPwd = SHA256Util.encryptSHA256(newPwd); + param.put("sNewPwd", newPwd); + uCnt = loginMapper.updateNewPwd(param); + } else { + uCnt = -1; + return uCnt; + } + } + uCnt += loginMapper.updateSetleAgreAt(param); + /*Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("UCNT", String.valueOf(uCnt));*/ + return uCnt; + } + + /** + * 정규식 검사 메소드(문자열이 지정된 패턴과 일치하는지 여부 검사) + * @param ptn 패턴 + * @param str 검사할 문자열 + * @return true | false + */ + public static boolean regEx(String ptn, String str){ + java.util.regex.Pattern p = java.util.regex.Pattern.compile(ptn,java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.MULTILINE ); + java.util.regex.Matcher m = p.matcher(str); + return m.find(); + } + + @Override + public Map checkSecsnAt(Map defInfo) { + return loginMapper.checkSecsnAt(defInfo); + } + + @Override + public void insertConnInfo(HashMap param) { + loginMapper.insertConnInfo(param); + } + + @Override + public int chkExsistActNo(Map param) { + return loginMapper.chkExsistActNo(param); + } + + @Override + public int updateFixPwd(Map param) { + int uCnt = 0; + String newPwd = (String) param.get("sNewPwd"); + newPwd = SHA256Util.encryptSHA256(newPwd); + param.put("sNewPwd", newPwd); + uCnt = loginMapper.updateFixPwd(param); + return uCnt; + } + + @Override + public void insertPromptErrorConnInfo(Map errLogKey) { + loginMapper.insertPromptErrorConnInfo(errLogKey); + } + + @Override + public String selectDisuseMemberInfo(String param) { + String result = ""; + int disuseCnt = loginMapper.selectDisuseMemberInfo(param); + if(disuseCnt == 0) { + result = "N"; + } else if(disuseCnt == 1) { + result = "Y"; + } + return result; + } + + @Override + public Map selectBackupMemberInfo(String param) { + Map result = new HashMap<>(); + result = loginMapper.selectBackupMemberInfo(param); + return result; + } + + @Override + public String memberInfoUpdt(Map param) { + String result = ""; + int mberUpdtCnt = loginMapper.memberInfoUpdt(param); + if(mberUpdtCnt == 0) { + result = "F"; + } else if(mberUpdtCnt == 1) { + result = "S"; + } + return result; + } + + @Override + public String agreAtUpdt(Map param) { + String result = ""; + int mberUpdtCnt = loginMapper.agreAtUpdt(param); + if(mberUpdtCnt == 0) { + result = "F"; + } else if(mberUpdtCnt == 1) { + result = "S"; + } + return result; + } + + @Override + public String backupMberUpdt(String param) { + String result = ""; + int mberUpdtCnt = loginMapper.backupMberUpdt(param); + if(mberUpdtCnt == 0) { + result = "F"; + } else if(mberUpdtCnt == 1) { + result = "S"; + } + return result; + } + + @Override + public String disuseMemberUpdt(String param) { + String result = ""; + int mberUpdtCnt = loginMapper.disuseMemberUpdt(param); + if(mberUpdtCnt == 0) { + result = "F"; + } else if(mberUpdtCnt == 1) { + result = "S"; + } + return result; + } +} diff --git a/src/main/java/gtpa/brs/login/web/LoginController.java b/src/main/java/gtpa/brs/login/web/LoginController.java new file mode 100644 index 0000000..849a33e --- /dev/null +++ b/src/main/java/gtpa/brs/login/web/LoginController.java @@ -0,0 +1,1180 @@ +package gtpa.brs.login.web; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import gtpa.brs.join.service.JoinService; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.util.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import gtpa.brs.common.web.BaseController; +import gtpa.brs.join.service.CACheckService; +import gtpa.brs.login.service.LoginService; +import gtpa.brs.user.dto.UserInfo; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 11/04/2019 + * TIME : 1:07 PM + * Project : BRSPW + * Class : LoginController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class LoginController extends BaseController { + + @Autowired + UserInfo userInfo; + + @Autowired + LoginService loginService; + + @Autowired + JoinService joinService; + + /** + * The Ca check service. + */ + @Autowired + CACheckService caCheckService; + + /** + * The De member gen id service. + */ + @Resource(name = "deMemberGenIDService") + BrsIdGnrUtil deMemberGenIDService; + + @Resource(name = "globalsProperties") + Properties env; + + Logger logger = LoggerFactory.getLogger(LoginController.class); + + @RequestMapping(value = "/common/init.do", method = RequestMethod.POST) + public @ResponseBody + Map getInitMainInfo(HttpServletRequest request) { + Result result = new Result(); + //Map memberParam = null; + //Map setInfo = null; + Map defInfo = null; + try { + //memberParam = userInfo.getUserInfoByBase(); + defInfo = new HashMap(); + String loginInfo = (String) request.getSession().getAttribute("MBER_ID"); + if (loginInfo != null) { + userInfo.setUserInfo(request.getSession()); + } + defInfo.put("MBER_NO", userInfo.getUserNo()); + defInfo.put("MBER_ID", userInfo.getUserId()); + defInfo.put("MBER_NM", userInfo.getUserName()); + defInfo.put("MBER_TY", userInfo.getUserType()); + defInfo.put("IS_ADMIN", userInfo.getIsAdmin()); + defInfo.put("IS_TEMPMBER", userInfo.isTempMber()); + defInfo.put("IS_LOGIN", userInfo.isLogined()); + String vhcleNo = (String) request.getSession().getAttribute("VHCLE_NO"); + defInfo.put("VHCLE_NO", vhcleNo); + if (userInfo.isLogined() && !userInfo.isTempMber()) { + Map checkData = loginService.checkSecsnAt(defInfo); + if (checkData != null && "Y".equals(checkData.get("SECSN_AT"))) { + request.getSession().invalidate(); + } else { + defInfo.put("EXIST_ACTNO", loginService.chkExsistActNo(defInfo)); + result.setData("dma_defInfo", defInfo); + } + } else { + result.setData("dma_defInfo", defInfo); + } + /*result.setData("dlt_menu", commonService.selectMenuList(memberParam)); + result.setData("dlt_fav", commonService.selectFavListByEmpCd(user.getUserId())); + result.setData("dlt_programAuthority", commonService.selectProgramAuthorityList(memberParam));*/ + result.setMsg(Result.STATUS_SUCESS, Result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[process error::" + "ex.getMessage()" + "]", ex); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + + /** + * Session check map. + * + * @param session the session + * @return the map + */ + @RequestMapping(value = "/login/sessionCheck.do", method = RequestMethod.GET) + public @ResponseBody + Map sessionCheck(HttpSession session) { + Map result = new HashMap(); + Map header = new HashMap(); + try { + logger.info("sessionCheck"); + + if (session.getAttribute("LoginVO") != null) { + header.put("resultCode", "001"); + header.put("resultMessage", "성공했습니다."); + } else { + header.put("resultCode", "002"); + header.put("resultMessage", "실패했습니다."); + } + result.put("header", header); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + header.put("resultCode", "002"); + header.put("resultMessage", "오류발생"); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + header.put("resultCode", "002"); + header.put("resultMessage", "오류발생"); + } + return result; + } + + /** + * logout session 삭제 성공 : redirect로 기본 페이지 이동. session 삭제 오류 : 기존 화면으로 오류 메세지 전송 + * + * @param request the request + * @param response the response + * @return the map + * @throws Exception the exception + * @date 2017.12.22 + * @returns modelAndView + * @author Inswave + * @example + */ + @RequestMapping(value = "/login/logout.do", method = RequestMethod.POST) + public @ResponseBody + Map logout(HttpServletRequest request, HttpServletResponse response) { + Result result = new Result(); + try { + result.setMsg(result.STATUS_SUCESS, "정상적으로 로그아웃 되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "로그아웃 도중 오류가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[process error::" + "ex.getMessage()" + "]", ex); + result.setMsg(result.STATUS_ERROR, "로그아웃 도중 오류가 발생하였습니다.", ex); + } finally { + if(userInfo.getUserNo() != null){ + RequestContextHolder.getRequestAttributes().removeAttribute(userInfo.getUserNo(), RequestAttributes.SCOPE_SESSION); + } + request.getSession().invalidate(); + userInfo.init(); + logger.info(userInfo.toString()); + } + return result.getResult(); + } + + /** + * login - 요청받은 아이디, 비밀번호를 회원DB와 비교한다. + * + * @param param the param (dma_loginCheck { MBER_ID:"사원코드", PASSWORD:"비밀번호" } ) + * @param request the request + * @param response the response + * @return the map + * @author Inswave + * @author Inswave + * @example + * @example + * @date 2017.12.22 + * @returns mv dma_resLoginCheck { MBER_ID:"사원코드", EMP_NM:"사원명", LOGIN:"상태" } + */ + @RequestMapping(value = "/login/login.do") + public @ResponseBody + Map login(@RequestBody Map param + , HttpServletRequest request, HttpServletResponse response) { + HttpSession session = request.getSession(); + Map memberMap = null; + String status = null; + Map loginParam = null; + + Result result = new Result(); + if (session.getAttribute("IS_LOGIN") != null && (boolean) session.getAttribute("IS_LOGIN") == true) { + result.setMsg(result.STATUS_WARNING, "이미 로그인중입니다."); + return result.getResult(); + } + try { + + + // loginParam은 param(EMP_CD/PW)의 값을 꺼내는 용도 + loginParam = (Map) param.get("dma_loginCheck"); + + memberMap = loginService.selectMemberInfoForLogin(loginParam); + status = (String) memberMap.get("LOGIN"); + + // 로그인 성공 + if (status.equals("success")) { + /*if(EgovMultiLoginPreventor.findByLoginId(memberMap.get("MBER_NO").toString())) { + result.setMsg(result.STATUS_WARNING, "이미 로그인중입니다."); + return result.getResult(); + }*/ + String mainLayout = (String) memberMap.get("MAIN_LAYOUT_PAGE_CODE"); + String msg = "로그인 성공"; + int pwChange = Integer.parseInt(String.valueOf(memberMap.get("PW_CHANGE"))); + + // main setting에 값이 저장되어 있지 않는 경우 insert. + if (mainLayout == null) { + mainLayout = userInfo.getDefaultMainLayoutCode(); + } + + userInfo.setUserInfo(memberMap); + session.setAttribute("MBER_CI", (String) memberMap.get("MBER_CI")); + session.setAttribute("MBER_NO", (String) memberMap.get("MBER_NO")); + session.setAttribute("MBER_ID", (String) memberMap.get("MBER_ID")); + session.setAttribute("MBER_NM", (String) memberMap.get("MBER_NM")); + session.setAttribute("MBER_TY", (String) memberMap.get("MBER_TY")); + + session.setAttribute("MAIN_LAYOUT_PAGE_CODE", mainLayout); + + // 로그인한 아이디가 시스템 관리자인지 여부를 체크한다. + // 시스템 관리자 아이디는 websquareConfig.properties 파일의 system.admin.id 속성에 정의하면 된다. + // 시스템 관자자 아이디가 여러 개일 경우 콤마(",") 구분해서 작성할 수 있다. + boolean isAdmin = loginService.isAdmin((String) memberMap.get("MBER_ID")); + session.setAttribute("IS_ADMIN", isAdmin); + session.setAttribute("IS_TEMPMBER", false); + + // 클라이언트(UI)에 전달하는 IS_ADMIN 정보는 관리자인지의 여부에 따라 화면 제어가 필요한 로직 처리를 위해서만 사용한다. + // 서버 서비스에서의 로직 처리는 보안을 위해서 클라이언트에서 전달하는 IS_ADMIN 정보가 아닌 + // 서버 서비스에서 관리하는 UserInfo.getIsAdmin()에서 관리자 여부를 받아와서 판단해야 한다. + session.setMaxInactiveInterval(60 * 60); + userInfo.setUserInfo(session); + logger.info("UserLogin after::" + userInfo.toString()); + logger.info(userInfo.toString()); + if(pwChange >= 0 && pwChange <= 10) msg = "비밀번호 만료일이 "+pwChange+"일 남았습니다.
    비밀번호를 변경하시기 바랍니다.
    만료일이 지날 때까지 변경하지 않을 경우 로그인에 제한이 있을 수 있습니다.
    비밀번호 만료기간은 변경일 기준 90일입니다."; + result.setMsg(result.STATUS_SUCESS, msg); + result.setData("dc_result", memberMap); + HttpSessionRenew listener = new HttpSessionRenew(); + request.getSession().setAttribute(userInfo.getUserNo(), listener); + + logger.info("미사용 회원 로직 시작"); + logger.info("[MBER_NO]::"+(String) memberMap.get("MBER_NO")); + String disuseMber = loginService.selectDisuseMemberInfo((String) memberMap.get("MBER_NO")); + logger.info("[disuseMber]::"+disuseMber); + if("Y".equals(disuseMber)) { + Map backupMber = loginService.selectBackupMemberInfo((String) memberMap.get("MBER_NO")); + logger.info("[backupMber]::"+backupMber); + if(backupMber != null) { + String mberInfoUpdt = loginService.memberInfoUpdt(backupMber); + logger.info("[mberInfoUpdt]::"+mberInfoUpdt); + if(mberInfoUpdt == "S") { + logger.info("[회원 정보 테이블 백업 완료]"); + + String agreAtUpdt = loginService.agreAtUpdt(backupMber); + logger.info("[agreAtUpdt]::"+agreAtUpdt); + if(agreAtUpdt == "S") { + logger.info("[결제 동의 여부 테이블 백업 완료]"); + + String backupMberUpdt = loginService.backupMberUpdt((String) memberMap.get("MBER_NO")); + String disuseMberUpdt = loginService.disuseMemberUpdt((String) memberMap.get("MBER_NO")); + logger.info("[backupMberUpdt]::"+backupMberUpdt); + logger.info("[disuseMberUpdt]::"+disuseMberUpdt); + if(backupMberUpdt == "S" || disuseMberUpdt == "S") { + logger.info("[백업 테이블 미사용 회원 테이블 백업 상태 업데이트 성공]"); + } else { + logger.info("[백업 테이블 미사용 회원 테이블 백업 상태 업데이트 실패]"); + } + } else { + logger.info("[결제 동의 여부 테이블 백업 실패]"); + } + } else { + logger.info("[회원 정보 테이블 백업 실패]"); + } + } + } + } else if (status.equals("promptover")) { + result.setMsg("O", "비밀번호 오류가 5회이 발생하여 로그인이 불가하오니
    [비밀번호찾기]에 비밀번호 변경 후 다시 로그인하여 주시기 바랍니다."); + return result.getResult(); + } else if (status.equals("pwChange")) { + result.setMsg("O", "비밀번호 변경이 90일이 지나서 로그인이 불가하오니
    [비밀번호찾기]에 비밀번호 변경 후 다시 로그인하여 주시기 바랍니다."); + return result.getResult(); + } else if (status.equals("error")) { + //result.setMsg(result.STATUS_ERROR, "로그인 실패(비밀번호 불일치)"); + result.setMsg(result.STATUS_ERROR, "아이디 또는 패스워드가 잘못 되었습니다."); + } else { + //result.setMsg(result.STATUS_ERROR, "사용자 정보가 존재하지 않습니다."); + result.setMsg(result.STATUS_ERROR, "아이디 또는 패스워드가 잘못 되었습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception ex) {// DB커넥션 없음 + logger.error("[process error::" + "ex.getMessage()" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } finally { + session.setAttribute("IS_LOGIN", userInfo.isLogined()); + } + return result.getResult(); + } + + /** + * login - 요청받은 아이디, 비밀번호를 회원DB와 비교한다. + * + * @param param the param (dma_loginCheck { MBER_ID:"사원코드", PASSWORD:"비밀번호" } ) + * @param request the request + * @param response the response + * @return the map + * @author Inswave + * @author Inswave + * @example + * @example + * @date 2017.12.22 + * @returns mv dma_resLoginCheck { MBER_ID:"사원코드", EMP_NM:"사원명", LOGIN:"상태" } + */ + @RequestMapping(value = "/login/deUserLogin.do", method = RequestMethod.POST) + public @ResponseBody + Map deUserLogin(@RequestBody Map param + , HttpServletRequest request, HttpServletResponse response) { + HttpSession session = request.getSession(); + Map memberMap = null; + Map loginParam = null; + + Result result = new Result(); + try { + // loginParam은 param(EMP_CD/PW)의 값을 꺼내는 용도 + loginParam = (Map) param.get("dma_loginCheck"); + + memberMap = new HashMap(); + memberMap.put("MBER_ID", deMemberGenIDService.makeGnrID()); + memberMap.put("MBER_NM", "비회원"); + // 비회원 인증 CI정보 + memberMap.put("MBER_CI", userInfo.getUserCi()); + String mainLayout = userInfo.getDefaultMainLayoutCode(); + userInfo.setUserInfo(memberMap); + session.setAttribute("MBER_NO", (String) memberMap.get("MBER_NO")); + session.setAttribute("MBER_ID", (String) memberMap.get("MBER_ID")); + session.setAttribute("MBER_NM", (String) memberMap.get("MBER_NM")); + session.setAttribute("MBER_CI", (String) memberMap.get("MBER_CI")); + session.setAttribute("MAIN_LAYOUT_PAGE_CODE", mainLayout); + session.setAttribute("IS_ADMIN", false); + session.setAttribute("IS_TEMPMBER", true); + session.setMaxInactiveInterval(30 * 60); + userInfo.setUserInfo(session); + result.setMsg(result.STATUS_SUCESS, "로그인 성공"); + logger.info("deUserLogin after::" + userInfo.toString()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리도중 시스템 오류가 발생하였습니다.", re); + } catch (Exception ex) {// DB커넥션 없음 + logger.error("[process error::" + "ex.getMessage()" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리도중 시스템 오류가 발생하였습니다.", ex); + } finally { + session.setAttribute("IS_LOGIN", userInfo.isLogined()); + } + return result.getResult(); + } + + /** + * Phone checkplus map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/login/phone/main.do", method = RequestMethod.GET) + public @ResponseBody + Map deLoginPhoneCheckplus(HttpServletRequest request) { + Result result = caCheckService.deLoginCheckPlusMain(request, "M"); + return result.getResult(); + } + + /** + * Phone checkplus success. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/login/phone/success.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void deLoginPhoneCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map data = caCheckService.checkPlusSuccess(request, "M"); + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sNationalInfo = (String) data.get("sNationalInfo"); + int iReturn = (Integer) data.get("iReturn"); + Map param = new HashMap(); + param.put("MBER_CI", sConnInfo); + Map rsltMap = joinService.isMemberExsist(param); + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + if (rsltMap != null) { + sMessage = "이미 등록되어 있는 사용자 입니다."; + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } else { + userInfo.setUserCi(sConnInfo); + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + } + + /** + * Phone checkplus fail. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/login/phone/fail.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void deLoginPhoneCheckplusFail(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map data = caCheckService.checkPlusFail(request, "M"); + String sMessage = (String) data.get("sMessage"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + + /** + * Credit checkplus map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/login/credit/main.do", method = RequestMethod.GET) + public @ResponseBody + Map deLogincreditCheckplus(HttpServletRequest request) { + Result result = caCheckService.deLoginCheckPlusMain(request, "C"); + return result.getResult(); + } + + /** + * Credit checkplus success. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/login/credit/success.do", method = RequestMethod.POST) + public void deLoginCreditCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map data = caCheckService.checkPlusSuccess(request, "M"); + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sNationalInfo = (String) data.get("sNationalInfo"); + int iReturn = (Integer) data.get("iReturn"); + Map param = new HashMap(); + param.put("MBER_CI", sConnInfo); + Map rsltMap = joinService.isMemberExsist(param); + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + if (rsltMap != null) { + sMessage = "이미 등록되어 있는 사용자 입니다."; + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } else { + userInfo.setUserCi(sConnInfo); + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + } + + /** + * Credit checkplus fail. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/login/credit/fail.do", method = RequestMethod.POST) + public void deLoginCreditCheckplusFail(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map data = caCheckService.checkPlusFail(request, "C"); + String sMessage = (String) data.get("sMessage"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + + /** + * Is exsist comp map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/idSearch/check/isExsistComp.do", method = RequestMethod.POST) + public @ResponseBody + Map isExsistComp(@RequestBody Map param) { + Map data = new HashMap(); + Result result = new Result(); + Map params = (Map) param.get("searchParam"); + logger.info("Param Data : " + param); + String compRepNm = (String) params.get("compRepNm"); + String entprsNm = (String) params.get("entrprsNm"); + String bsnmRegistNo1 = (String) params.get("bsnmRegistNo1"); + String bsnmRegistNo2 = (String) params.get("bsnmRegistNo2"); + String bsnmRegistNo3 = (String) params.get("bsnmRegistNo3"); + String bsnmRegistNo = bsnmRegistNo1 + bsnmRegistNo2 + bsnmRegistNo3; + try { + data = caCheckService.isExsistComp(bsnmRegistNo, "", entprsNm, compRepNm); + if ((Integer) data.get("iReturn") != 0) { + result.setMsg(result.STATUS_ERROR, "사업자가 확인되지 않았습니다."); + } else { + if (data.get("RETURN_CODE").equals("01") && data.get("STATUS_CODE").equals("0") + || data.get("RETURN_CODE").equals("01") && data.get("STATUS_CODE").equals("1")) { + + params.put("bsnmRegistNo", bsnmRegistNo); + Map rsltMap = loginService.isBsnmMemberExsistMap(params); + if (rsltMap != null) { + result.setData("data", rsltMap); + result.setMsg(result.STATUS_SUCESS, "Y"); + } else { + result.setMsg(result.STATUS_SUCESS, "N"); + } + } else if (!data.get("STATUS_CODE").equals("0") || !data.get("STATUS_CODE").equals("1")) { + result.setMsg(result.STATUS_ERROR, "사업자가 확인되지 않았습니다."); + } else { + result.setMsg(result.STATUS_ERROR, "사업자가 확인되지 않았습니다."); + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + + return result.getResult(); + } + + /** + * member info select map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/idCheck/selectMemberInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map selectMemberInfo(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== LoginController selectMemberInfo POST ======="); + Map dbParam = (Map) param.get("dma_param"); + String mberId = userInfo.getUserId(); + String mberNo = userInfo.getUserNo(); + Map rsltMap = loginService.isMemberNoMap(mberNo); + if (rsltMap != null) { + result.setData("dma_result", rsltMap); + result.setMsg(result.STATUS_SUCESS, "아이디가 확인되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, "존재하지 않는 아이디입니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "존재하지 않는 아이디입니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, "존재하지 않는 아이디입니다."); + } + + return result.getResult(); + } + + /** + * Id check map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/pwdSearch/idCheck.do", method = RequestMethod.POST) + public @ResponseBody + Map idCheck(@RequestBody Map param) { + Result result = new Result(); + Map params = (Map) param.get("sData"); + logger.info("Param Data : " + param); + String mberId = (String) params.get("sMberId"); + try { + Map rsltMap = loginService.isMemberIdMap(mberId); + if (rsltMap != null) { +// if (rsltMap.get("MBER_TY").equals(params.get("MBER_TY"))) { + result.setData("data", rsltMap.get("MBER_NO").toString()); + result.setMsg(result.STATUS_SUCESS, "아이디가 확인되었습니다."); +// } else { +// result.setMsg(result.STATUS_WARNING, "회원구분을 확인해 주세요."); +// } + } else { + result.setMsg(result.STATUS_WARNING, "존재하지 않는 아이디입니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "존재하지 않는 아이디입니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, "존재하지 않는 아이디입니다."); + } + + return result.getResult(); + } + + + /** + * Phone checkplus id search map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/idSearch/check/phone/main.do", method = RequestMethod.POST) + public @ResponseBody + Map phoneCheckplusIdSearch(HttpServletRequest request) { + logger.info("====#####== phoneCheckplusIdSearch POST ======="); + printRequest(request); // 파라메터 Key, Value 로그 표시 + + Result result = caCheckService.idPwdCheckPlusMain(request, "M"); + + logger.info("Result Data : " + result.getResult()); + return result.getResult(); + } + + /** + * Phone checkplus success. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/idSearch/check/phone/success.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void phoneCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) throws IOException { + logger.info("====#####== phoneCheckplusSuccess POST ======="); + printRequest(request); // 파라메터 Key, Value 로그 표시 + +// String mberTy = request.getParameter("param_r1"); + String uiType = request.getParameter("param_r2"); + String sMberId = request.getParameter("param_r3"); +// mberTy = CommonUtil.cleanCode(mberTy); + uiType = CommonUtil.cleanCode(uiType); + sMberId = CommonUtil.cleanCode(sMberId); +// String tmpMberTy = ""; +// String tmpMberTyNm = ""; +// if ("NT".equals(mberTy)) { +// tmpMberTy = "0"; +// tmpMberTyNm = "내국인"; +// } +// if ("FR".equals(mberTy)) { +// tmpMberTy = "1"; +// tmpMberTyNm = "외국인"; +// } + + Map data = caCheckService.checkPlusSuccess(request, "M"); + logger.info("phoneCheckplusSuccess data -> " + data); + + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sNationalInfo = (String) data.get("sNationalInfo"); + String sMobileNo = (String) data.get("sMobileNo"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + String mberId = ""; + String mberNm = ""; + String mberCi = ""; + String sbscrpDt = ""; + // 아이디 찾기 혹은 패스워드 찾기 인증 구분 + if (uiType.equals("idSh")) { + Map dbParam = new HashMap(); + dbParam.put("mberCi", sConnInfo); +// dbParam.put("mberTy", mberTy); + + Map rsltMap1 = loginService.isMemberExsistMap(dbParam); + logger.info("rsltMap1 :: " + rsltMap1); + if (rsltMap1 != null) { +// if (tmpMberTy.equals(sNationalInfo)) { + mberId = (String) rsltMap1.get("MBER_ID"); + sbscrpDt = (String) rsltMap1.get("SBSCRB_DT"); + sMessage = "아이디 찾기를 위한 본인인증이 성공하였습니다."; + response.getWriter().print(""); +// } else { +// sMessage = "아이디찾기 화면에서 선택한 " + tmpMberTyNm + "탭 유형과 핸드폰인증 팝업에서 선태한 유형이 상이합니다."; +// response.getWriter().print(""); +// } + } else { + mberId = "noData"; + sMessage = "아이디 찾기를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } else if (uiType.equals("pwdSh")) { + Map rsltMap2 = loginService.isMemberIdMap(sMberId); + logger.info("rsltMap2 :: " + rsltMap2); + + if (rsltMap2 != null) { + mberId = (String) rsltMap2.get("MBER_ID"); + mberNm = (String) rsltMap2.get("MBER_NM"); + mberCi = (String) rsltMap2.get("MBER_CI"); + logger.info("mberCi ->111 " + mberCi); + logger.info("sConnInfo ->222 " + sConnInfo); + if (mberCi.equals(sConnInfo)) { + request.getSession().setAttribute("PWFIND_CI", sConnInfo); + sMessage = "새로운 비밀번호 설정을 위한 본인인증이 성공하였습니다."; + } else { + mberId = "noData"; + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + response.getWriter().print(""); + } else { + mberId = "noData"; + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } else if (uiType.equals("pwdUp")) { + Map rsltMap2 = loginService.isMemberIdMap(sMberId); + logger.info("rsltMap2 :: " + rsltMap2); + + if (rsltMap2 != null) { + mberId = (String) rsltMap2.get("MBER_ID"); + mberNm = (String) rsltMap2.get("MBER_NM"); + mberCi = (String) rsltMap2.get("MBER_CI"); + logger.info("mberCi ->111 " + mberCi); + logger.info("sConnInfo ->222 " + sConnInfo); + if (mberCi.equals(sConnInfo)) { + sMessage = "새로운 비밀번호 설정을 위한 본인인증이 성공하였습니다."; + } else { + mberId = "noData"; + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + response.getWriter().print(""); + } else { + mberId = "noData"; + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } else { + Map rsltMap3 = loginService.isMemberIdMap(sMberId); + logger.info("rsltMap2 :: " + rsltMap3); + + if (rsltMap3 != null) { + mberId = (String) rsltMap3.get("MBER_ID"); + mberNm = (String) rsltMap3.get("MBER_NM"); + mberCi = (String) rsltMap3.get("MBER_CI"); + logger.info("mberCi ->111 " + mberCi); + logger.info("sConnInfo ->222 " + sConnInfo); + if (mberCi.equals(sConnInfo)) { + sMessage = "회원탈퇴를 위한 본인인증이 성공하였습니다."; + } else { + mberId = "noData"; + sMessage = "회원탈퇴를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + response.getWriter().print(""); + } else { + mberId = "noData"; + sMessage = "회원탈퇴를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } + } + + /** + * Phone checkplus fail. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/idSearch/check/phone/fail.do", method = RequestMethod.POST) + public void phoneCheckplusFail(HttpServletRequest request, HttpServletResponse response) throws IOException { + Map data = caCheckService.checkPlusFail(request, "M"); + //String sMessage = (String) data.get("sMessage"); + + printRequest(request); // 파라메터 Key, Value 로그 표시 + String sMessage = "본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + String uiType = request.getParameter("param_r2"); + uiType = CommonUtil.cleanCode(uiType); + if (uiType.equals("idSh")) { + sMessage = "아이디 찾기를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } else if (uiType.equals("pwdSh")) { + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } else { + sMessage = "회원탈퇴를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + + /** + * Credit checkplus id search map. + * + * @param request the request + * @return the map + */ + @RequestMapping(value = "/idSearch/check/credit/main.do", method = RequestMethod.POST) + public @ResponseBody + Map creditCheckplusIdSearch(HttpServletRequest request) { + logger.info("====#####== creditCheckplusIdSearch POST ======="); + printRequest(request); // 파라메터 Key, Value 로그 표시 + + Result result = caCheckService.idPwdCheckPlusMain(request, "C"); + logger.info("Result Data : " + result.getResult()); + return result.getResult(); + } + + /** + * Credit checkplus success. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/idSearch/check/credit/success.do", method = RequestMethod.POST) + public void creditCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) throws IOException { + + logger.info("====#####== creditCheckplusSuccess POST ======="); + printRequest(request); // 파라메터 Key, Value 로그 표시 + + String mberTy = request.getParameter("param_r1"); + String uiType = request.getParameter("param_r2"); + String sMberId = request.getParameter("param_r3"); + mberTy = CommonUtil.cleanCode(mberTy); + uiType = CommonUtil.cleanCode(uiType); + sMberId = CommonUtil.cleanCode(sMberId); + Map data = caCheckService.checkPlusSuccess(request, "C"); + logger.info("creditCheckplusSuccess data -> " + data); + + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sNationalInfo = (String) data.get("sNationalInfo"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + String mberId = ""; + String mberNm = ""; + String mberCi = ""; + String sbscrpDt = ""; + // 아이디 찾기 혹은 패스워드 찾기 인증 구분 + if (uiType.equals("idSh")) { + Map dbParam = new HashMap(); + dbParam.put("mberCi", sConnInfo); + dbParam.put("mberTy", mberTy); + + Map rsltMap1 = loginService.isMemberExsistMap(dbParam); + logger.info("rsltMap1 :: " + rsltMap1); + if (rsltMap1 != null) { + mberId = (String) rsltMap1.get("MBER_ID"); + sbscrpDt = (String) rsltMap1.get("SBSCRB_DT"); + sMessage = "아이디 찾기를 위한 본인인증이 성공하였습니다."; + response.getWriter().print(""); + } else { + mberId = "noData"; + sMessage = "아이디 찾기를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } + if (uiType.equals("pwdSh")) { + Map rsltMap2 = loginService.isMemberIdMap(sMberId); + logger.info("rsltMap2 :: " + rsltMap2); + + if (rsltMap2 != null) { + mberId = (String) rsltMap2.get("MBER_ID"); + mberNm = (String) rsltMap2.get("MBER_NM"); + mberCi = (String) rsltMap2.get("MBER_CI"); + logger.info("mberCi ->111 " + mberCi); + logger.info("sConnInfo ->222 " + sConnInfo); + if (mberCi.equals(sConnInfo)) { + sMessage = "새로운 비밀번호 설정을 위한 본인인증이 성공하였습니다."; + } else { + mberId = "noData"; + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + response.getWriter().print(""); + } else { + mberId = "noData"; + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } else { + Map rsltMap3 = loginService.isMemberIdMap(sMberId); + logger.info("rsltMap2 :: " + rsltMap3); + + if (rsltMap3 != null) { + mberId = (String) rsltMap3.get("MBER_ID"); + mberNm = (String) rsltMap3.get("MBER_NM"); + mberCi = (String) rsltMap3.get("MBER_CI"); + logger.info("mberCi ->111 " + mberCi); + logger.info("sConnInfo ->222 " + sConnInfo); + if (mberCi.equals(sConnInfo)) { + sMessage = "회원탈퇴를 위한 본인인증이 성공하였습니다."; + } else { + mberId = "noData"; + sMessage = "회원탈퇴를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + response.getWriter().print(""); + } else { + mberId = "noData"; + sMessage = "회원탈퇴를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + response.getWriter().print(""); + } + } + } + + /** + * Credit checkplus fail. + * + * @param request the request + * @param response the response + * @throws IOException the io exception + */ + @RequestMapping(value = "/idSearch/check/credit/fail.do", method = RequestMethod.POST) + public void creditCheckplusFail(HttpServletRequest request, HttpServletResponse response) throws IOException { + logger.info("====#####== creditCheckplusFail POST ======="); + Map data = caCheckService.checkPlusFail(request, "C"); + //String sMessage = (String) data.get("sMessage"); + + printRequest(request); // 파라메터 Key, Value 로그 표시 + String sMessage = "본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + String uiType = request.getParameter("param_r2"); + uiType = CommonUtil.cleanCode(uiType); + if (uiType.equals("idSh")) { + sMessage = "아이디 찾기를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } else if (uiType.equals("pwdSh")) { + sMessage = "새로운 비밀번호 설정을 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } else { + sMessage = "회원탈퇴를 위한 본인인증에 실패하였습니다. 입력하신 정보를 확인 바랍니다."; + } + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(""); + } + + + /** + * Update new pwd map. + * + * @param param the param + * @param request the request + * @return the map + */ + // 신규패스워드 설정 수정 + @RequestMapping(value = "/login/updateNewPwd.do", method = RequestMethod.POST) + public @ResponseBody + Map updateNewPwd(@RequestBody Map param, HttpServletRequest request) { + + Result result = new Result(); + try { + logger.info("====#####== POST updateNewPwd ======="); + logger.info("Param Data : " + param); + printRequest(request); // 파라메터 Key, Value 로그 표시 + + Map dbParam = (Map) param.get("dma_param"); + if ("Y".equals(dbParam.get("pwset"))) { + String ci = (String) request.getSession().getAttribute("PWFIND_CI"); + if (ci != null) { + dbParam.put("MBER_CI", ci); + dbParam.put("MBER_ID", dbParam.get("MBER_ID")); + int uCnt1 = loginService.updateFixPwd(dbParam); + if (uCnt1 > 0) { + result.setMsg(result.STATUS_SUCESS, "기본정보가 정상적으로 수정되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다."); + } + } else { + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다."); + } + return result.getResult(); + } else { + dbParam.put("MBER_NO", userInfo.getUserNo()); + dbParam.put("MBER_ID", userInfo.getUserId()); + } + int uCnt1 = loginService.updateNewPwd(dbParam); + if (uCnt1 > 0) { + result.setMsg(result.STATUS_SUCESS, "기본정보가 정상적으로 수정되었습니다."); + //다자녀 감면정보 일경우만 업데이트 + /** if ("Y".equals(dbParam.get("mnychRdcxptAt").toString())) { + int uCnt2 = loginService.saveMnychRdcxptInfo(dbParam); + if (uCnt2 > 0) { + result.setMsg(result.STATUS_SUCESS, "기본정보가 정상적으로 수정되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다."); + } + }*/ + //국가유공자 일경우만 업데이트 + if ("Y".equals(dbParam.get("authoriPsnYn").toString())) { + int uCnt3 = loginService.saveNationMrtrsInfo(dbParam); + if (uCnt3 > 0) { + result.setMsg(result.STATUS_SUCESS, "기본정보가 정상적으로 수정되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다."); + } + } + } else if (uCnt1 == -1){ + result.setMsg(result.STATUS_WARNING, "패스워드는 영문,숫자,특수문자가 포함되어야 합니다."); + } else{ + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다.", re); + } catch (Exception ex) { + result.setMsg(result.STATUS_WARNING, "기본정보 변경에 실패하였습니다.", ex); + } + + logger.info("Result Data : " + result.getResult()); + return result.getResult(); + } + + + /** + * Request replace string. + * + * @param paramValue the param value + * @param gubun the gubun + * @return the string + */ + public String requestReplace(String paramValue, String gubun) { + + String result = ""; + + if (paramValue != null) { + + paramValue = paramValue.replaceAll("<", "<").replaceAll(">", ">"); + + paramValue = paramValue.replaceAll("\\*", ""); + paramValue = paramValue.replaceAll("\\?", ""); + paramValue = paramValue.replaceAll("\\[", ""); + paramValue = paramValue.replaceAll("\\{", ""); + paramValue = paramValue.replaceAll("\\(", ""); + paramValue = paramValue.replaceAll("\\)", ""); + paramValue = paramValue.replaceAll("\\^", ""); + paramValue = paramValue.replaceAll("\\$", ""); + paramValue = paramValue.replaceAll("'", ""); + paramValue = paramValue.replaceAll("@", ""); + paramValue = paramValue.replaceAll("%", ""); + paramValue = paramValue.replaceAll(";", ""); + paramValue = paramValue.replaceAll(":", ""); + paramValue = paramValue.replaceAll("-", ""); + paramValue = paramValue.replaceAll("#", ""); + paramValue = paramValue.replaceAll("--", ""); + paramValue = paramValue.replaceAll("-", ""); + paramValue = paramValue.replaceAll(",", ""); + + if (gubun != "encodeData") { + paramValue = paramValue.replaceAll("\\+", ""); + paramValue = paramValue.replaceAll("/", ""); + paramValue = paramValue.replaceAll("=", ""); + } + + result = paramValue; + + } + return result; + } + +} diff --git a/src/main/java/gtpa/brs/mypage/service/MypageService.java b/src/main/java/gtpa/brs/mypage/service/MypageService.java new file mode 100644 index 0000000..91d75fa --- /dev/null +++ b/src/main/java/gtpa/brs/mypage/service/MypageService.java @@ -0,0 +1,131 @@ +package gtpa.brs.mypage.service; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +public interface MypageService { + + public Map isCheckNowPwdInfo(Map param); + + public String isCheckNowPwdInfoCnt(Map param); + + public int companyInfoUpdate(Map param); + + public List getMyCarinfoList(Map param); + + public Map myCarinfoDeleteList(List params); + + public Map updateCarinfoList(List params); + + public Map updateCarCardinfoList(List params); + + public Map updateDelCarinfoList(List params); + + public String updateNewCarinfoList(List params1, List params2, List params3) throws SQLException; + + public String updateNewBankinfoList(List params1, List params2, List params3, List params4) throws SQLException; + + public List getMyCardInfoList(Map param); + + public Map myCreditDelList(List params); + + public Map registCardInfo(Map param, HttpServletRequest request); + + public Map registTmInfo(Map param, HttpServletRequest request); + + public Map getMyLeaderCarInfo(Map param); + + public List getMyBankInfoList(Map param); + + public String secSnUpdate(Map param); + + public String mySecSnCarinfoDelete(Map param); + + public String mySecSnCardterminatePayment(Map param); + + public String mySecSnBankPayment(Map param); + + public String updateSecSnBankCarInfo(Map params) throws SQLException; + + public Map updateCardinfoList(List params); + + public int updateMnychRdcxptInfo(Map param); + + public int updateMnychRdcxptInfo2(Map param); + + public Map selMnychRdcxptInfo(Map param); + + public int instMnychRdcxptInfo(Map param); + + public int updtMberInfo(Map param); + + public int updateNationMrtrsInfo(Map param); + + //계좌등록 관련 메소드 + public Map insertMyAcnutPblLog(Map param); + + public Map insertMyAcnutPblInfoHist(Map param); + + public Map updateMyAcnutPblLog(Map param); + + public String updateBankinfoList(List params); + + public String deleteBankinfoList(List params); + + public String getMyAcctNo(Map params); + + // 녹새교통 현황 - 메인 + public Map getFeeCnt(Map param); + + public ArrayList> getParkingFeeCnt(Map param); + + public Map getPenaltyCnt(Map param); + + public Map getFeeStateCnt(Map param); + + public Map getCvplRceptCnt(Map param); + + public Map getPenaltyStateCnt(Map param); + + public Map getPenaltySubCnt(Map param); + + public Map getPenaltyDecisionCnt(Map param); + + public Map getRefndCnt(Map param); + + public Map vhcleConfirm(Map params); + + // 다자녀 감면정보 및 국가공유자 및 거주지 조회 + public Map getRdcxptInfoAllChldrn(Map myInfo); + + public Map getMnychRdcxpt(Map dbParam); + + public Map getRdcxptInfoNtttn(Map myInfo); + + public Map getResideInsttCnfirm(Map myInfo); + + public List getMyInfo(Map param); + + public int updateMberSttus(String param); + + public int updateVhcleSttus(String param); + + public int deleteMberVhcle(Map param); + + public List mberData(String param); + + public String getMberInfoCi(); +} + + + + + + + + + diff --git a/src/main/java/gtpa/brs/mypage/service/impl/MypageMapper.java b/src/main/java/gtpa/brs/mypage/service/impl/MypageMapper.java new file mode 100644 index 0000000..a751e20 --- /dev/null +++ b/src/main/java/gtpa/brs/mypage/service/impl/MypageMapper.java @@ -0,0 +1,212 @@ +package gtpa.brs.mypage.service.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; + +@Repository("MypageDAO") +public class MypageMapper extends EgovAbstractMapper { + private String NAMESPACE = "MypageDAO"; + + public Map isCheckNowPwdInfo(Map param) { + return selectOne(NAMESPACE + ".isCheckNowPwdInfo", param); + } + + public String isCheckNowPwdInfoCnt(Map param) { + return selectOne(NAMESPACE + ".isCheckNowPwdInfoCnt", param); + } + + public int companyNoPwdInfoUpdate(Map param) { + return update(NAMESPACE + ".companyNoPwdInfoUpdate", param); + } + + public int companyInfoUpdate(Map param) { + return update(NAMESPACE + ".companyInfoUpdate", param); + } + + public int secSnUpdate(Map param) { + return update(NAMESPACE + ".secSnUpdate", param); + } + + //차량등록정보 + public List getMyCarinfoList(Map param) { + return selectList(NAMESPACE + ".getMyCarinfoList", param); + } + + //나의 탈퇴처리 차량정보 조회 + public List getMySecSnCarinfoList(String mberNo) { + List resultList = new ArrayList(); + resultList = selectList(NAMESPACE + ".getMySecSnCarinfoList", mberNo); + return resultList; + } + + //나의 자동차 해지카드정보 조회 + public Map getMyCarCardDelInfo(Map param) { + return selectOne(NAMESPACE + ".getMyCarCardDelInfo", param); + } + + public int myCarinfoDeleteList(String tmpData) { + return delete(NAMESPACE + ".myCarinfoDeleteList", tmpData); + } + + public int myCarinfoUpdateList(String vhcleManageNo) { + return update(NAMESPACE + ".myCarinfoUpdateList", vhcleManageNo); + } + + public int insertMyCarInfos(Map param) { + return insert(NAMESPACE + ".insertMyCarInfos", param); + } + + public int insertMyCarInfosHistory(Map param) { + return insert(NAMESPACE + ".insertMyCarInfosHistory", param); + } + + public int myCarinfoModifiedList(Map param) { + return insert(NAMESPACE + ".myCarinfoModifiedList", param); + } + + // 나의 계좌정보 등록 Start + public int insertMyAcnutPblLog(Map param) { + return insert(NAMESPACE + ".insertMyAcnutPblLog", param); + } + + public int insertMyAcnutPblInfo(Map param) { + return insert(NAMESPACE + ".insertMyAcnutPblInfo", param); + } + + public int insertMyAcnutPblInfoHist(Map param) { + return insert(NAMESPACE + ".insertMyAcnutPblInfoHist", param); + } + + public int insertMyAcnutPblInfoHistC(Map param) { + return insert(NAMESPACE + ".insertMyAcnutPblInfoHistC", param); + } + + public int insertMyAcnutPblInfoHistU(Map param) { + return insert(NAMESPACE + ".insertMyAcnutPblInfoHistU", param); + } + + public int insertMyAcnutPblInfoHistD(Map param) { + return insert(NAMESPACE + ".insertMyAcnutPblInfoHistD", param); + } + + public int updateMyAcnutPblLog(Map param) { + return update(NAMESPACE + ".updateMyAcnutPblLog", param); + } + + public int updateMyAcnutPblInfo(Map param) { + return update(NAMESPACE + ".updateMyAcnutPblInfo", param); + } + + public int deleteMyAcnutPblInfo(Map param) { + return update(NAMESPACE + ".deleteMyAcnutPblInfo", param); + } + + // 나의 계좌정보 등록 End + + public Map selMnychRdcxptInfo(Map param) { + return selectOne(NAMESPACE + ".selMnychRdcxptInfo", param); + } + + public int updateMnychRdcxptInfo(Map param) { + return update(NAMESPACE + ".updateMnychRdcxptInfo", param); + } + + public int updateMnychRdcxptInfo2(Map param) { + return update(NAMESPACE + ".updateMnychRdcxptInfo2", param); + } + + public int instMnychRdcxptInfo(Map param) { + return insert(NAMESPACE + ".instMnychRdcxptInfo", param); + } + + public int delMnychVhcle(Map param) { + return update(NAMESPACE + ".delMnychVhcle", param); + } + + public int updateNationMrtrsInfo(Map param) { + return update(NAMESPACE + ".updateNationMrtrsInfo", param); + } + + public int updtMberInfo(Map param) { + return update(NAMESPACE + ".updtMberInfo", param); + } + + //카드정보 + public List getMyCardInfoList(Map param) { + return selectList(NAMESPACE + ".getMyCardInfoList", param); + } + + //계좌정보 + public List getMyBankInfoList(Map param) { + return selectList(NAMESPACE + ".getMyBankInfoList", param); + } + + // 나의 대표차량정보 정보 + public Map getMyLeaderCarInfo(Map param) { + return selectOne(NAMESPACE + ".getMyLeaderCarInfo", param); + } + + // 나의 대표차량정보 목록 정보 + public List getMyLeaderCarInfoList(Map param) { + return selectList(NAMESPACE + ".getMyLeaderCarInfoList", param); + } + + //이용료 - 환불 현황 + public Map getRefndCnt(Map param) { + return selectOne(NAMESPACE + ".getRefndCntList", param); + } + + // 나의 등록된 쿠콘계좌정보에 주민번호 조회 + public String getMyAcctNo(Map param) { + return selectOne(NAMESPACE + ".getMyAcctNo", param); + } + + public int updateSetleAgreAt(Map param) { + return update(NAMESPACE + ".updateSetleAgreAt", param); + } + + public List getMyInfo(Map param) { + return selectList(NAMESPACE + ".getMyInfo", param); + } + + public int updateMberSttus(String param) { + return update(NAMESPACE + ".updateMberSttus", param); + } + + public int updateVhcleSttus(String param) { + return update(NAMESPACE + ".updateVhcleSttus", param); + } + + public int deleteMberVhcle(Map param) { + return delete(NAMESPACE + ".deleteMberVhcle", param); + } + + public List mberData(String param) { + return selectList(NAMESPACE + ".mberData", param); + } + + public Map getMnychRdcxpt(Map param) { + return selectOne(NAMESPACE + ".getMnychRdcxpt", param); + } + + public String getMberInfoCi(Map mberinfo) { + return selectOne(NAMESPACE + ".getMberInfoCi", mberinfo); + } + + public Map vhcleConfirm(Map params) { + return selectOne(NAMESPACE + ".vhcleConfirm", params); + } + + public int insertResideLog(Map params) { + return insert(NAMESPACE + ".insertResideLog", params); + } + + public int insertRdcxptLog(Map params) { + return insert(NAMESPACE + ".insertRdcxptLog", params); + } +} diff --git a/src/main/java/gtpa/brs/mypage/service/impl/MypageServiceImpl.java b/src/main/java/gtpa/brs/mypage/service/impl/MypageServiceImpl.java new file mode 100644 index 0000000..f3f8fc9 --- /dev/null +++ b/src/main/java/gtpa/brs/mypage/service/impl/MypageServiceImpl.java @@ -0,0 +1,2575 @@ +package gtpa.brs.mypage.service.impl; + +import java.io.IOException; +import java.io.StringReader; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.UUID; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.xml.parsers.DocumentBuilderFactory; +import gtpa.brs.join.service.impl.PublicFacilityReqXml; +import gtpa.brs.join.service.impl.PublicFacilitySend; +import gtpa.brs.join.service.impl.NewGpkiUtil; +import gtpa.brs.join.service.impl.ShareGpki; + +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import com.raonsecure.transkey.TransKey; +import com.raonsecure.transkey.XSSValueExpection; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.join.service.impl.NewGpkiUtil; +import gtpa.brs.join.service.impl.PublicFacilityReqXml; +import gtpa.brs.join.service.impl.PublicFacilitySend; +import gtpa.brs.join.service.impl.ShareGpki; +import gtpa.brs.login.service.LoginService; +import gtpa.brs.mypage.service.MypageService; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.payment.service.impl.PreRegistPaymentMapper; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.user.service.UserService; +import gtpa.brs.util.Result; +import gtpa.brs.util.SHA256Util; + +@SuppressFBWarnings +@Service +public class MypageServiceImpl implements MypageService { + + Logger logger = LoggerFactory.getLogger(PreRegistPaymentService.class); + + @Autowired + UserInfo userInfo; + + @Autowired + LoginService loginService; + + @Autowired + UserService userService; + + @Autowired + private PublicFacilityReqXml publicFacilityReqXml; + + @Autowired + PreRegistPaymentService pPaymentService; + + @Resource(name = "MypageDAO") + MypageMapper mypageMapper; + + @Resource(name = "preRegistPaymentDao") + PreRegistPaymentMapper paymentMapper; + + @Resource(name = "globalsProperties") + Properties env; + + //GPKI사용여부 + private final boolean useGPKI = true; + + private boolean isRealIp = true; + + @Override + public Map isCheckNowPwdInfo(Map param) { + String reqPASSWORD = (String) param.get("nowPwd"); + logger.info("reqPASSWORD1 -> " + reqPASSWORD); + reqPASSWORD = SHA256Util.encryptSHA256(reqPASSWORD); + logger.info("reqPASSWORD2 -> " + reqPASSWORD); + param.put("nowPwd", reqPASSWORD); + + return mypageMapper.isCheckNowPwdInfo(param); + } + + @Override + public String isCheckNowPwdInfoCnt(Map param) { + logger.info("param2 -> " + param); + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String reqPASSWORD = (String) param.get("nowPwd"); + logger.info("reqPASSWORD1 -> " + reqPASSWORD); + reqPASSWORD = SHA256Util.encryptSHA256(reqPASSWORD); + logger.info("reqPASSWORD2 -> " + reqPASSWORD); + + param.put("mberId", mberId); + param.put("nowPwd", reqPASSWORD); + + return mypageMapper.isCheckNowPwdInfoCnt(param); + } + + @Override + public Map getMyLeaderCarInfo(Map param) { + return mypageMapper.getMyLeaderCarInfo(param); + } + + @Override + public int companyInfoUpdate(Map param) { + int uCnt = 0; + String newPwd = (String) param.get("sNewPwd"); + if ("".equals(newPwd) || newPwd == null) { + //새로운 비밀번호를 변경하지 않은경우 + uCnt = mypageMapper.companyNoPwdInfoUpdate(param); + } else { + //새로운 비밀번호를 변경한경우 + newPwd = SHA256Util.encryptSHA256(newPwd); + param.put("sNewPwd", newPwd); + uCnt = mypageMapper.companyInfoUpdate(param); + } + uCnt += mypageMapper.updateSetleAgreAt(param); + /*Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("UCNT", String.valueOf(uCnt));*/ + return uCnt; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map myCarinfoDeleteList(List params) { + Map result = new HashMap(); + try { + int dCnt = 0; + logger.info("params1 -> " + params); + for (int i = 0; i < params.size(); i++) { + //String tmpData = (String) params.get(i); + + Map resMap = (Map) params.get(i); + String vhcleManageNo = (String) resMap.get("VHCLE_MANAGE_NO"); + logger.info("vhcleManageNo -> " + vhcleManageNo); + dCnt += mypageMapper.myCarinfoUpdateList(vhcleManageNo); + + //uCnt += mypageMapper.myCarinfoUpdateList(tmpData); + } + + result.put("STATUS", "S"); + result.put("DCNT", String.valueOf(dCnt)); + } catch (RuntimeException re) { + result.put("STATUS", "F"); + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.put("STATUS", "F"); + logger.error("[process error::" + "" + "]", e); + } + + return result; + } + + // 회원탈퇴시 회원정보 탈퇴처리 + @Override + public String secSnUpdate(Map param) { + int uCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + param.put("sMberId", mberId); + + uCnt = mypageMapper.secSnUpdate(param); + + logger.info("uCnt -> " + uCnt); + String resultFlag = "F"; + if (uCnt > 0) { + resultFlag = "S"; + } + return resultFlag; + } + + // 회원탈퇴시 등록된 차량정보 삭제 처리 + @Override + public String mySecSnCarinfoDelete(Map param) { + int carDelCnt = 0; + String resultFlag = "F"; + List vhNoList = new ArrayList(); + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) resultMap.get("MBER_NO"); + + vhNoList = mypageMapper.getMySecSnCarinfoList(mberNo); + for (int i = 0; i < vhNoList.size(); i++) { + Map resMap = (Map) vhNoList.get(i); + String vhcleManageNo = (String) resMap.get("VHCLE_MANAGE_NO"); + carDelCnt += mypageMapper.myCarinfoUpdateList(vhcleManageNo); + } + + logger.info("carDelCnt -> " + carDelCnt); + //if(carDelCnt > 0) { + resultFlag = "S"; + //} + + return resultFlag; + } + + // 회원탈퇴시 등록된 카드정보 해지 처리 + @Override + public String mySecSnCardterminatePayment(Map param) { + + Map result = new HashMap(); + Map params = new HashMap(); + Map resultMap = new HashMap(); + List cars = null; + List pays = null; + List resultList = null; + + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) resultMap.get("MBER_NO"); + + params.put("mberId", mberId); + params.put("mberNo", mberNo); + + cars = mypageMapper.getMyLeaderCarInfoList(params); + logger.info("cars -> " + cars); + params.put("cars", cars); + + pays = mypageMapper.getMyCardInfoList(resultMap); + logger.info("pays -> " + pays); + int cnt = 0; + for (int i = 0; i < pays.size(); i++) { + Map tmpData = (Map) pays.get(i); + logger.info("tmpData -> " + tmpData); + params.put("pay", tmpData); + + // 최종 카드해지 처리 + result = pPaymentService.terminatePayment(params); + String rspnsResult = (String) result.get("rspnsResult"); + logger.info("result -> " + result); + //if(rspnsResult.equals("S")) { + //cnt++; + //} + } + + //logger.info("cnt -> "+cnt); + String resultFlag = "F"; + //if(cnt > 0) { + resultFlag = "S"; + //} + + logger.info("resultFlag -> " + resultFlag); + + return resultFlag; + } + + // 회원탈퇴시 등록된 카드정보 해지 처리 + @Override + public String mySecSnBankPayment(Map param) { + + Map result = new HashMap(); + Map params = new HashMap(); + Map resultMap = new HashMap(); + List cars = null; + List pays = null; + List resultList = null; + int dCnt1 = 0; + int dCnt2 = 0; + + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) resultMap.get("MBER_NO"); + + /*params.put("mberId", mberId); + params.put("mberNo", mberNo); + cars = mypageMapper.getMyLeaderCarInfoList(params); + logger.info("cars -> "+cars); + params.put("cars", cars);*/ + + pays = mypageMapper.getMyBankInfoList(resultMap); + logger.info("pays -> " + pays); + String resultFlag = "F"; + for (int i = 0; i < pays.size(); i++) { + Map tmpData = (Map) pays.get(i); + logger.info("tmpData -> " + tmpData); + + tmpData.put("ACNUT_INFO_STTUS", "90"); + + try { + dCnt1 += mypageMapper.deleteMyAcnutPblInfo(tmpData); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + try { + dCnt2 += mypageMapper.insertMyAcnutPblInfoHistD(tmpData); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + } + + logger.info("dCnt1 -> " + dCnt1); + logger.info("dCnt2 -> " + dCnt2); + if (dCnt1 > 0 && dCnt2 > 0) { + resultFlag = "S"; + } + + logger.info("resultFlag -> " + resultFlag); + + return resultFlag; + } + + @Override + public List getMyCarinfoList(Map param) { + List rs = null; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + rs = mypageMapper.getMyCarinfoList(resultMap); + logger.info("rs -> " + rs); + return rs; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map updateCarinfoList(List params) { + Map result = new HashMap(); + try { + int iCnt = 0; + int dCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) resultMap.get("MBER_NO"); + + for (int i = 0; i < params.size(); i++) { + Map tmpData = (Map) params.get(i); + logger.info("tmpData -> " + tmpData); + String rowStatus = (String) tmpData.get("rowStatus"); + // 신규 차량정보 저장 + tmpData.put("MBER_NO", mberNo); + + iCnt += mypageMapper.insertMyCarInfos(tmpData); + iCnt += mypageMapper.insertMyCarInfosHistory(tmpData); + + /*if (rowStatus.equals("C")) { + // 신규 차량정보 저장 + tmpData.put("MBER_NO", mberNo); + + iCnt += mypageMapper.insertMyCarInfos(tmpData); + iCnt += mypageMapper.insertMyCarInfosHistory(tmpData); + } else if(rowStatus.equals("D")) { + // 기존 차량정보에 삭제 처리 + String vhcleManageNo = (String)tmpData.get("VHCLE_MANAGE_NO"); + logger.info("vhcleManageNo : "+vhcleManageNo); + dCnt += mypageMapper.myCarinfoUpdateList(vhcleManageNo); + + logger.info("22 -> "); + }*/ + } + + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(iCnt)); + result.put("DCNT", String.valueOf(dCnt)); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("STATUS", "F"); + } catch (Exception e) { + result.put("STATUS", "F"); + logger.error("[process error::" + "" + "]", e); + } + + return result; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public String updateNewCarinfoList(List params1, List params2, List params3) throws SQLException { + String resultFlag = "S"; + int iCnt1 = 0; + int iCnt2 = 0; + int dCnt1 = 0; + int dCnt2 = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) resultMap.get("MBER_NO"); + + // 신규 차량 저장 + logger.info("params1::" + params1.size()); + for (int i = 0; i < params1.size(); i++) { + Map newCarMap = (Map) params1.get(i); + logger.info("newCarMap -> " + newCarMap); + // 신규 차량정보 저장 + newCarMap.put("MBER_NO", mberNo); + + iCnt1 += mypageMapper.insertMyCarInfos(newCarMap); + if (iCnt1 == 0) { + resultFlag = "F"; + logger.error("신규 차량정보 저장 오류"); + throw new SQLException("신규 차량정보 저장 오류발생"); + } + iCnt2 += mypageMapper.insertMyCarInfosHistory(newCarMap); + if (iCnt2 == 0) { + resultFlag = "F"; + logger.error("신규 차량정보 변경이력 저장 오류"); + throw new SQLException("신규 차량정보 변경이력 저장 오류발생"); + } + } + + // 기존 차량 삭제 + logger.info("params2::" + params2.size()); + if (params2.size() > 0) { + for (int i = 0; i < params2.size(); i++) { + Map delCarMap = (Map) params2.get(i); + delCarMap.put("VHCLE_STTUS_TY", "03"); + logger.info("delCarMap -> " + delCarMap); + String vhcleManageNo = (String) delCarMap.get("VHCLE_MANAGE_NO"); + String mnychVhcle = (String) delCarMap.get("CHLDRN_BRTHDY"); + + if(!"".equals(mnychVhcle)) { + int delMnychVhcle = mypageMapper.delMnychVhcle(delCarMap); + if (delMnychVhcle == 0) { + resultFlag = "F"; + logger.error("다자녀 감면 차량정보 삭제 오류"); + throw new SQLException("다자녀 감면 차량정보 삭제 오류발생"); + } else { + Map mberInfo = new HashMap<>(); + mberInfo.put("MBER_NO", (String) delCarMap.get("MBER_NO")); + mberInfo.put("mnychRdcxptAt", "N"); + int updtMberAT = mypageMapper.updtMberInfo(mberInfo); + + if (updtMberAT == 0) { + resultFlag = "F"; + logger.error("다자녀 감면 회원정보 삭제 오류"); + throw new SQLException("다자녀 감면 회원정보 삭제 오류발생"); + } + } + } + + dCnt1 += mypageMapper.myCarinfoUpdateList(vhcleManageNo); + if (dCnt1 == 0) { + resultFlag = "F"; + logger.error("기존 차량정보 삭제 오류"); + throw new SQLException("기존 차량정보 삭제 오류발생"); + } + dCnt2 += mypageMapper.insertMyCarInfosHistory(delCarMap); + if (dCnt2 == 0) { + resultFlag = "F"; + logger.error("기존 차량정보 변경이력 저장 오류"); + throw new SQLException("기존 차량정보 변경이력 저장 오류발생"); + } + + + } + } + + // 기존 차량 수정 (법인/사업자) + logger.info("params3::" + params3.size()); + if (params3.size() > 0) { + for (int i = 0; i < params3.size(); i++) { + Map modiCarMap = (Map) params3.get(i); + + iCnt1 += mypageMapper.myCarinfoModifiedList(modiCarMap); + if (iCnt1 == 0) { + resultFlag = "F"; + logger.error("기존 차량정보 수정 (법인/사업자) 오류"); + throw new SQLException("기존 차량정보 수정 (법인/사업자) 오류발생"); + } + iCnt2 += mypageMapper.insertMyCarInfosHistory(modiCarMap); + if (iCnt2 == 0) { + resultFlag = "F"; + logger.error("기존 차량정보 수정 변경이력 (법인/사업자) 저장 오류"); + throw new SQLException("기존 차량정보 수정 변경이력 (법인/사업자) 저장 오류발생"); + } + } + } + + return resultFlag; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public String updateSecSnBankCarInfo(Map param) throws SQLException { + String resultFlag = "S"; + int dCnt1 = 0; + int dCnt2 = 0; + int dCnt3 = 0; + int dCnt4 = 0; + int dCnt5 = 0; + Map resultMap = new HashMap(); + Map parmCarMap = new HashMap(); + Map resultCarMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + + //대표차량 조회 + parmCarMap.put("mberId", (String) resultMap.get("MBER_ID")); + resultCarMap = mypageMapper.getMyLeaderCarInfo(parmCarMap); + + // 기존 쿠콘계좌정보 삭제 처리 + List pays = null; + pays = mypageMapper.getMyBankInfoList(resultMap); + for (int i = 0; i < pays.size(); i++) { + Map bankMap = (Map) pays.get(i); + + bankMap.put("ACNUT_INFO_STTUS", "90"); + dCnt1 += mypageMapper.deleteMyAcnutPblInfo(bankMap); + if (dCnt1 == 0) { + resultFlag = "F"; + logger.error("계좌등록 삭제 저장 오류"); + throw new SQLException("계좌등록 삭제 저장 오류발생"); + } + dCnt2 += mypageMapper.insertMyAcnutPblInfoHistD(bankMap); + if (dCnt2 == 0) { + resultFlag = "F"; + logger.error("계좌등록 삭제 변경이력 저장 오류"); + throw new SQLException("계좌등록 삭제 변경이력 저장 오류발생"); + } + } + + // 기존 신용카드정보 삭제 처리 + List creditPays = null; + creditPays = mypageMapper.getMyCardInfoList(resultMap); + Map resultPaysDelMap = new HashMap(); + Map dltDelCreditMap = new HashMap(); + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpTerminate"); + + for (int i = 0; i < creditPays.size(); i++) { + dltDelCreditMap = (Map) creditPays.get(i); + + String vhcleManageNo = (String) resultCarMap.get("VHCLE_MANAGE_NO"); + String stcmpNo = (String) dltDelCreditMap.get("STCMP_NO"); + String setleMnMno = (String) dltDelCreditMap.get("SETLE_MN_MNO"); + String setleMnKnd = (String) dltDelCreditMap.get("SETLE_MN_KND"); + String vkeyIssuSeqNo = (String) dltDelCreditMap.get("VKEY_ISSU_SEQ_NO"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "002"); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("mberNo", (String) resultMap.get("MBER_NO")); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("requstDt", now); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo); + + resultPaysDelMap = pPaymentService.requestPreRegistPayment(url, reqData); + if (!resultPaysDelMap.get("rspnsCode").equals("0000")) { + resultFlag = "F"; + logger.error("사전결제카드 해지 오류"); + throw new SQLException("사전결제카드 해지 오류발생"); + } + } + + // 기존 등록차량 삭제 처리 + List cars = null; + cars = mypageMapper.getMySecSnCarinfoList((String) resultMap.get("MBER_NO")); + logger.info("cars::" + cars); + for (int j = 0; j < cars.size(); j++) { + Map carMap = (Map) cars.get(j); + String vhcleManageNo = (String) carMap.get("VHCLE_MANAGE_NO"); + + dCnt3 += mypageMapper.myCarinfoUpdateList(vhcleManageNo); + if (dCnt3 == 0) { + resultFlag = "F"; + logger.error("기존 등록차량 삭제 처리 오류"); + throw new SQLException("기존 등록차량 삭제 처리 오류발생"); + } + + carMap.put("VHCLE_STTUS_TY", "03"); + dCnt5 += mypageMapper.insertMyCarInfosHistory(carMap); + if (dCnt5 == 0) { + resultFlag = "F"; + logger.error("기존 등록차량 삭제이력 생성시 오류"); + throw new SQLException("기존 등록차량 삭제이력 생성시 오류발생"); + } + + int delMnychVhcle = mypageMapper.delMnychVhcle(carMap); + if(delMnychVhcle != 0) { + Map mberInfo = new HashMap<>(); + mberInfo.put("MBER_NO", (String) carMap.get("MBER_NO")); + mberInfo.put("mnychRdcxptAt", "N"); + int updtMberAT = mypageMapper.updtMberInfo(mberInfo); + + if(updtMberAT != 0) { + logger.error("다자녀 데이터 삭제 완료"); + } else { + logger.error("다자녀 데이터 삭제 안됨"); + } + } + } + + // 회원정보 탈퇴 처리 + //Map paramMap = new HashMap(); + //String mberId = (String)resultMap.get("MBER_ID"); + //paramMap.put("sMberId", mberId); + logger.info("resultMap -> " + resultMap); + dCnt4 = mypageMapper.secSnUpdate(resultMap); + if (dCnt4 == 0) { + resultFlag = "F"; + logger.error("회원정보 탈퇴 처리 오류"); + throw new SQLException("회원정보 탈퇴 처리 오류발생"); + } + + + return resultFlag; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map updateCarCardinfoList(List params) { + Result result = new Result(); + try { + int iCnt = 0; + int dCnt = 0; + int dCnt1 = 0; + int dCnt2 = 0; + int flagCnt = 0; + String resultFlag = "F"; + Map resultMap = new HashMap(); + Map resultCardDel; + Map resutVkeyInfo; + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) resultMap.get("MBER_NO"); + + List pays = null; + + for (int i = 0; i < params.size(); i++) { + Map tmpData = (Map) params.get(i); + logger.info("tmpData -> " + tmpData); + String rowStatus = (String) tmpData.get("rowStatus"); + if (rowStatus.equals("C")) { + // 신규 차량정보 저장 + tmpData.put("MBER_NO", mberNo); + + iCnt += mypageMapper.insertMyCarInfos(tmpData); + iCnt += mypageMapper.insertMyCarInfosHistory(tmpData); + + logger.info("11 -> "); + } else if (rowStatus.equals("D")) { + flagCnt++; + + // 기존 차량정보에 삭제 처리 + String vhcleManageNo = (String) tmpData.get("VHCLE_MANAGE_NO"); + logger.info("vhcleManageNo : " + vhcleManageNo); + dCnt += mypageMapper.myCarinfoUpdateList(vhcleManageNo); + + logger.info("22 -> "); + } + } + + // 기존 쿠콘계좌정보 삭제 처리 + if (flagCnt == 1) { + pays = mypageMapper.getMyBankInfoList(resultMap); + logger.info("pays -> " + pays); + + for (int i = 0; i < pays.size(); i++) { + Map tmpData = (Map) pays.get(i); + logger.info("tmpData -> " + tmpData); + + tmpData.put("ACNUT_INFO_STTUS", "90"); + + try { + dCnt1 += mypageMapper.deleteMyAcnutPblInfo(tmpData); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + try { + dCnt2 += mypageMapper.insertMyAcnutPblInfoHistD(tmpData); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + } + } + + + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + result.setData("STATUS", "S"); + result.setData("ICNT", String.valueOf(iCnt)); + result.setData("DCNT", String.valueOf(dCnt)); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + + //Map result = new HashMap(); + //result.put("STATUS", "S"); + //result.put("ICNT", String.valueOf(uCnt)); + return result.getResult(); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map insertMyAcnutPblLog(Map param) { + Map result = new HashMap(); + try { + int iCnt = 0; + iCnt += mypageMapper.insertMyAcnutPblLog(param); + + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(iCnt)); + } catch (RuntimeException re) { + result.put("STATUS", "F"); + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.put("STATUS", "F"); + logger.error("[process error::" + "" + "]", e); + } + return result; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map insertMyAcnutPblInfoHist(Map param) { + Map result = new HashMap(); + try { + int iCnt = 0; + iCnt += mypageMapper.insertMyAcnutPblInfoHist(param); + + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(iCnt)); + } catch (RuntimeException re) { + result.put("STATUS", "F"); + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.put("STATUS", "F"); + logger.error("[process error::" + "" + "]", e); + } + return result; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map updateMyAcnutPblLog(Map param) { + Map result = new HashMap(); + try { + int uCnt = 0; + uCnt += mypageMapper.updateMyAcnutPblLog(param); + + result.put("STATUS", "S"); + result.put("UCNT", String.valueOf(uCnt)); + } catch (RuntimeException re) { + result.put("STATUS", "F"); + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.put("STATUS", "F"); + logger.error("[process error::" + "" + "]", e); + } + return result; + } + + @Override + public Map updateDelCarinfoList(List params) { + int uCnt = 0; + Map resultMap = new HashMap(); + Map mebrIdMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberId = (String) resultMap.get("MBER_ID"); + String mberNo = (String) mebrIdMap.get("MBER_NO"); + mebrIdMap = loginService.isMemberNoMap(mberNo); + + + for (int i = 0; i < params.size(); i++) { + Map tmpData = (Map) params.get(i); + logger.info("tmpData -> " + tmpData); + String rowStatus = (String) tmpData.get("rowStatus"); + if (rowStatus.equals("C")) { + tmpData.put("MBER_NO", mberNo); + + uCnt += mypageMapper.insertMyCarInfos(tmpData); + uCnt += mypageMapper.insertMyCarInfosHistory(tmpData); + } else if (rowStatus.equals("D")) { + // 사전등록 카드 모두 해제 처리 + } + } + + Map result = new HashMap(); + result.put("STATUS", "S"); + result.put("ICNT", String.valueOf(uCnt)); + return result; + } + + @Override + public List getMyCardInfoList(Map param) { + List rs = null; + + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + logger.info("resultMap Data : " + resultMap); + + rs = mypageMapper.getMyCardInfoList(resultMap); + + logger.info("mapper rs : " + rs); + + return rs; + } + + @Override + public List getMyBankInfoList(Map param) { + List rs = null; + + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + + rs = mypageMapper.getMyBankInfoList(resultMap); + + logger.info("mapper rs : " + rs); + + return rs; + } + + public List completePayment(List params) { + List resultLlist = new ArrayList(); + Map result; + String url = env.getProperty("Globals.PreRegistPayment.Url") + "regist/complete"; + String mberNo = ""; + + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + mberNo = (String) resultMap.get("MBER_NO"); + + /*for (int i = 0; i < params.size(); i++) { + + *"insttNo":"BRSMC0100001", (고정) + "insttCntcJobSe":"008", (고정) + + "mberNo":"MB00000001", + "vkeyIssuSeqNo":"VKEYISSU000000000006", + "requstDt":"20190423105530", + "priorOrdr":"5", <- 파라미터 추가 + "registSe":"00" (고정) + * + + String tmpData = (String) params.get(i); + logger.info("tmpData -> "+tmpData); + String[] pArr = tmpData.split("-"); + String vkeyIssuSeqNo = pArr[0]; + String priorOrdr = pArr[1]; + + JSONObject reqData = new JSONObject(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "008"); + reqData.put("mberNo", mberNo); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo); + reqData.put("requstDt", now); + reqData.put("priorOrdr", priorOrdr); + reqData.put("registSe", "00"); + + logger.info("reqData::" + reqData.toJSONString()); + result = pPaymentService.requestPreRegistPayment(url, reqData.toJSONString()); + logger.info("사전결제카드 수정버튼 클릭시 result::" + result); + if (result.get("rspnsCode").equals("0000")) { + resultLlist.add(result); + } + }*/ + return resultLlist; + } + + @Override + public Map registCardInfo(Map param, HttpServletRequest request) { + logger.info("registCardInfo param : " + param); + Map result = new HashMap(); + try { + Map dbParam = new HashMap(); + Map myCarInfo = new HashMap(); + + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpRegist"); + String terminalId = env.getProperty("Globals.PreRegistPayment.TerminalId"); + String pbszUserKey = env.getProperty("Globals.PreRegistPayment.UserKey"); + + String tranSerialNo = paymentMapper.getTranSerialNo(); + String priorOrdr = "99"; + String mBerCi; + String vhcleNo = ""; + String mberNo = ""; + String mberId = ""; + String mberTy = ""; + String vhcleManageNo = ""; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String cardNo1; + String cardNo2; + String cardNo3; + String cardNo4; + String expireDay; + String secureNo = ""; + String cvcNo = ""; + String niNo; + String carrier; + String phoneNo; + String isForeigner; + String stcmpNo; + String setleMnKnd; + String setleMnMno; + String ccmpCode; + String cardNo = ""; + + /* 22.08.08 서주희 - 웹접근성 작업(기능 추가) + * 22.08.29 서주희 - 웹접근성 작업(기능 제거) + * 23.07.20 김경민 - 웹접근성 작업(기능 복구)*/ + String cNo1 = (String) param.get("cardNo1"); + String cNo4 = (String) param.get("cardNo4"); + String decodeCardNo2 = (String) param.get("cardNo2"); + String decodeCardNo3 = (String) param.get("cardNo3"); + cardNo = cNo1 + decodeCardNo2 + decodeCardNo3 + cNo4; + cvcNo = (String) param.get("cvcNo"); + secureNo = (String) param.get("secureNo"); + logger.info("cNo1:" + cNo1 + ",decodeCardNo2:" + decodeCardNo2 + ",decodeCardNo3:" + decodeCardNo3 + ",cNo4:" + cNo4); + logger.info("decodeInfo[ cardNo2:" + decodeCardNo2 + ",cardNo3:" + decodeCardNo3 + ",cvcNo:" + cvcNo + ",secureNo:" + secureNo + "]"); + + /* 22.08.08 서주희 - 웹접근성 작업(기능제거) + * 22.08.29 서주희 - 웹접근성 작업(기능 복구) + * 23.07.20 김경민 - 웹접근성 작업(가상 키패드 제거) + try { + String cNo1 = (String) param.get("cardNo1"); + String cNo4 = (String) param.get("cardNo4"); + String decodeCardNo2 = TransKey.withoutSessionDecode(param.get("cardNo2_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("cardNo2_transkey_keyIndex").toString() + , param.get("cardNo2_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("cardNo2_transkey").toString() + , param.get("cardNo2_transkey_HM").toString() + , null); + String decodeCardNo3 = TransKey.withoutSessionDecode(param.get("cardNo3_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("cardNo3_transkey_keyIndex").toString() + , param.get("cardNo3_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("cardNo3_transkey").toString() + , param.get("cardNo3_transkey_HM").toString() + , null); + cardNo = cNo1 + decodeCardNo2 + decodeCardNo3 + cNo4; + String decodeCvcNo = TransKey.withoutSessionDecode(param.get("cardNo2_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("cvcNo_transkey_keyIndex").toString() + , param.get("cvcNo_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("cvcNo_transkey").toString() + , param.get("cvcNo_transkey_HM").toString() + , null); + String decodeSecureNo = TransKey.withoutSessionDecode(param.get("secureNo_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("secureNo_transkey_keyIndex").toString() + , param.get("secureNo_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("secureNo_transkey").toString() + , param.get("secureNo_transkey_HM").toString() + , null); + secureNo = decodeSecureNo; + cvcNo = decodeCvcNo; + logger.info("cNo1:" + cNo1 + ",decodeCardNo2:" + decodeCardNo2 + ",decodeCardNo3:" + decodeCardNo3 + ",cNo4:" + cNo4); + logger.info("decodeInfo[ cardNo2:" + decodeCardNo2 + ",cardNo3:" + decodeCardNo3 + ",cvcNo:" + decodeCvcNo + ",secureNo:" + decodeSecureNo + "]"); + } catch (IOException ioe) { + logger.error("decodeError:" + "ioe.getMessage()", ioe); + } catch (XSSValueExpection xss) { + logger.error("decodeError:" + "xss.getMessage()", xss); + } + */ + + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + mberNo = (String) resultMap.get("MBER_NO"); + mberId = (String) resultMap.get("MBER_ID"); + mBerCi = (String) resultMap.get("MBER_CI"); + mberTy = (String) resultMap.get("MBER_TY"); + + dbParam.put("mberId", mberId); + myCarInfo = mypageMapper.getMyLeaderCarInfo(dbParam); + + if (mberTy.equals("FR")) { + isForeigner = "Y"; + } else { + isForeigner = "N"; + } + + logger.info("mberTy -> " + mberTy); + + //cardNo = (String) param.get("cardNo"); + logger.info("[" + cardNo + "]"); + + if (cardNo.length() == 14) { + cardNo1 = cardNo.substring(0, 2); + cardNo2 = cardNo.substring(2, 6); + cardNo3 = cardNo.substring(6, 10); + cardNo4 = cardNo.substring(10, 14); + } else if (cardNo.length() == 15) { + cardNo1 = cardNo.substring(0, 3); + cardNo2 = cardNo.substring(3, 7); + cardNo3 = cardNo.substring(7, 11); + cardNo4 = cardNo.substring(11, 15); + } else { + cardNo1 = cardNo.substring(0, 4); + cardNo2 = cardNo.substring(4, 8); + cardNo3 = cardNo.substring(8, 12); + cardNo4 = cardNo.substring(12, 16); + } + + logger.info("cardNo1:" + cardNo1 + ",cardNo2:" + cardNo2 + ",cardNo3:" + cardNo3 + ",cardNo4:" + cardNo4); + + expireDay = (String) param.get("expireDay"); + //secureNo = (String) param.get("secureNo"); + //cvcNo = (String) param.get("cvcNo"); + niNo = (String) param.get("niNo"); + carrier = (String) param.get("phoneCarrier"); + phoneNo = (String) param.get("phoneNo"); + //isForeigner = (String) param.get("isForeigner"); + stcmpNo = (String) param.get("stcmpNo"); + setleMnKnd = (String) param.get("setleMnKnd"); + setleMnMno = (String) param.get("setleMnMno"); + ccmpCode = (String) param.get("ccmpCode"); + vhcleManageNo = (String) myCarInfo.get("VHCLE_MANAGE_NO"); + vhcleNo = (String) myCarInfo.get("VHCLE_NO"); + + logger.info("terminalId -> " + terminalId); + logger.info("tranSerialNo -> " + tranSerialNo); + logger.info("cardNo1 -> " + cardNo1); + logger.info("cardNo2 -> " + cardNo2); + logger.info("cardNo3 -> " + cardNo3); + logger.info("cardNo4 -> " + cardNo4); + logger.info("expireDay -> " + expireDay); + logger.info("secureNo -> " + secureNo); + logger.info("cvcNo -> " + cvcNo); + logger.info("niNo -> " + niNo); + logger.info("carrier -> " + carrier); + logger.info("phoneNo -> " + phoneNo); + logger.info("isForeigner -> " + isForeigner); + logger.info("vhcleNo -> " + vhcleNo); + logger.info("pbszUserKey -> " + pbszUserKey); + + Map seedEncrypt = pPaymentService.cardSeedEncrypt(terminalId, tranSerialNo, cardNo1, cardNo2 + , cardNo3 + , cardNo4, expireDay, secureNo, cvcNo, niNo, carrier, phoneNo + , isForeigner, vhcleNo + , pbszUserKey); + + logger.info("seedEncrypt::" + seedEncrypt); + + String trackData = (String) seedEncrypt.get("trackData"); + String authInfo = (String) seedEncrypt.get("authInfo"); + String custInfo = (String) seedEncrypt.get("custInfo"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("mberNo", mberNo); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("ccmpCode", ccmpCode); + reqData.put("requstDt", now); + reqData.put("tranSerialNo", tranSerialNo); + reqData.put("cardInfo", trackData); + reqData.put("authInfo", authInfo); + reqData.put("custInfo", custInfo); + reqData.put("mberCi", mBerCi); + reqData.put("vhcleNo", vhcleNo); + reqData.put("priorOrdr", priorOrdr); + reqData.put("registSe", "03"); + + logger.info("reqData::" + reqData); + result = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + + result.put("STATUS", "S"); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + logger.error("registPayment :[" + param + "]"); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9998"); + result.put("rspnsMssage", "잘못된 정보가 입력되었습니다. 다시 확인 후 입력바랍니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } + return result; + } + + @Override + public Map registTmInfo(Map param, HttpServletRequest request) { + logger.info("registTmInfo param : " + param); + Map result = new HashMap(); + try { + Map dbParam = new HashMap(); + Map myCarInfo = new HashMap(); + + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpRegist"); + String terminalId = env.getProperty("Globals.PreRegistPayment.TerminalId"); + String pbszUserKey = env.getProperty("Globals.PreRegistPayment.UserKey"); + + String tranSerialNo = paymentMapper.getTranSerialNo(); + String priorOrdr = "99"; + String mBerCi; + String vhcleNo = ""; + String mberNo = ""; + String mberId = ""; + String mberTy = ""; + String vhcleManageNo = ""; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String secureNo = ""; + String niNo = ""; + String stcmpNo; + String setleMnKnd; + String setleMnMno; + String ccmpCode; + String ccmpKnd = ""; + String decodeSecureNo = ""; + + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + mberNo = (String) resultMap.get("MBER_NO"); + mberId = (String) resultMap.get("MBER_ID"); + mBerCi = (String) resultMap.get("MBER_CI"); + mberTy = (String) resultMap.get("MBER_TY"); + + dbParam.put("mberId", mberId); + myCarInfo = mypageMapper.getMyLeaderCarInfo(dbParam); + + stcmpNo = (String) param.get("stcmpNo"); + setleMnKnd = (String) param.get("setleMnKnd"); + setleMnMno = (String) param.get("setleMnMno"); + ccmpCode = (String) param.get("ccmpCode"); + ccmpKnd = (String) param.get("ccmpKnd"); + vhcleManageNo = (String) myCarInfo.get("VHCLE_MANAGE_NO"); + vhcleNo = (String) myCarInfo.get("VHCLE_NO"); + + if("TP".equals(ccmpKnd)){ + niNo = (String) param.get("niNo"); + /*secureNo = (String) param.get("secureNo"); + 22.08.08 서주희 - 웹접근성 작업(기능제거) + * 22.08.29 서주희 - 웹접근성 작업(기능 복구) + * 23.07.20 김경민 - 웹접근성 작업(가상 키패드 제거) */ + try { + decodeSecureNo = TransKey.withoutSessionDecode(param.get("secureNo_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("secureNo_transkey_keyIndex").toString() + , param.get("secureNo_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("secureNo_transkey").toString() + , param.get("secureNo_transkey_HM").toString() + , null); + secureNo = decodeSecureNo; + logger.info("decodeInfo[ secureNo:" + decodeSecureNo + "]"); + } catch (IOException ioe) { + logger.error("decodeError:" + "ioe.getMessage()", ioe); + } catch (XSSValueExpection xss) { + logger.error("decodeError:" + "xss.getMessage()", xss); + } + } + + logger.info("terminalId -> " + terminalId); + logger.info("tranSerialNo -> " + tranSerialNo); + logger.info("secureNo -> " + secureNo); + logger.info("niNo -> " + niNo); + logger.info("vhcleNo -> " + vhcleNo); + logger.info("pbszUserKey -> " + pbszUserKey); + + Map seedEncrypt = pPaymentService.tMoneySeedEncrypt(terminalId, tranSerialNo, mberNo, ccmpKnd + , secureNo, niNo, vhcleNo, pbszUserKey); + + logger.info("seedEncrypt::" + seedEncrypt); + + String trackData = (String) seedEncrypt.get("trackData"); + String authInfo = ""; + if("TP".equals(ccmpKnd)){ + authInfo = (String) seedEncrypt.get("authInfo"); + }else if("TB".equals(ccmpKnd)){ + authInfo = (String) param.get("authInfo"); + } + String custInfo = "NO_DATA"; + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("mberNo", mberNo); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("ccmpCode", ccmpCode); + reqData.put("requstDt", now); + reqData.put("tranSerialNo", tranSerialNo); + reqData.put("cardInfo", trackData); + reqData.put("authInfo", authInfo); + reqData.put("custInfo", custInfo); + reqData.put("mberCi", mBerCi); + reqData.put("vhcleNo", vhcleNo); + reqData.put("priorOrdr", priorOrdr); + reqData.put("registSe", "03"); + reqData.put("ccmpKnd", ccmpKnd); + + logger.info("reqData::" + reqData); + result = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + + result.put("STATUS", "S"); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + logger.error("registPayment :[" + param + "]"); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9998"); + result.put("rspnsMssage", "잘못된 정보가 입력되었습니다. 다시 확인 후 입력바랍니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } + return result; + } + + @Override + public Map myCreditDelList(List params) { + List resultLlist = new ArrayList(); + Map result = new HashMap(); + String url = env.getProperty("Globals.PreRegistPayment.Url") + "terminate"; + int uCnt = 0; + for (int i = 0; i < params.size(); i++) { + String tmpData = (String) params.get(i); + logger.info("tmpData -> " + tmpData); + String[] pArr = tmpData.split("-"); + String mberNo = pArr[0]; + String vhcleManageNo = pArr[1]; + String stcmpNo = pArr[2]; + String setleMnMno = pArr[3]; + String setleMnKnd = pArr[4]; + String vkeyIssuSeqNo = pArr[5]; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + logger.info("mberNo -> " + mberNo); + logger.info("vhcleManageNo -> " + vhcleManageNo); + logger.info("stcmpNo -> " + stcmpNo); + logger.info("setleMnMno -> " + setleMnMno); + logger.info("setleMnKnd -> " + setleMnKnd); + logger.info("vkeyIssuSeqNo -> " + vkeyIssuSeqNo); + logger.info("now -> " + now); + + /* + * "insttNo":"BRSMC0100001", (고정) + "insttCntcJobSe":"002", (고정) + "mberNo":"MB00000001", (TB_BRS_MBER_INFO > MBER_NO 값) + "vhcleManageNo":"000002", (TB_BRS_VHCLE_REGIST_INFO > VHCLE_MANAGE_NO 값) + "stcmpNo":"BRSPG0000001", (TB_BRS_SETLE_MN_INFO > STCMP_NO 값) + "setleMnMno":"BRSPG0000001004", (TB_BRS_SETLE_MN_INFO > SETLE_MN_MNO 값) + "setleMnKnd":"001", (TB_BRS_SETLE_MN_INFO > SETLE_MN_KND 값) + "requstDt":"20190423105530", (요청일시) + "vkeyIssuSeqNo":"VKEYISSU000000000008" (TB_BRS_VKEY_INFO > VKEY_ISSU_SEQ_NO 값) + * */ + + /*JSONObject reqData = new JSONObject(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "002"); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("mberNo", mberNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("requstDt", now); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo);*/ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "002"); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("mberNo", mberNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("requstDt", now); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo); + + result = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("사전결제카드 대표차량 해지 result::" + result); + if (result.get("rspnsCode").equals("0000")) { + resultLlist.add(result); + } + } + + result.put("STATUS", "S"); + return result; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map updateCardinfoList(List params) { + Result result = new Result(); + try { + int iCnt = 0; + Map resultPaysMap = new HashMap(); + Map resultMap = new HashMap(); + Map dltMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String mberNo = (String) resultMap.get("MBER_NO"); + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpComplete"); + + for (int i = 0; i < params.size(); i++) { + dltMap = (Map) params.get(i); + logger.info("dltMap -> " + dltMap); + String rowStatus = (String) dltMap.get("rowStatus"); + logger.info("rowStatus -> " + rowStatus); + + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + /* + *"insttNo":"BRSMC0100001", (고정) + "insttCntcJobSe":"008", (고정) + "mberNo":"MB00000001", + "vkeyIssuSeqNo":"VKEYISSU000000000006", + "requstDt":"20190423105530", + "priorOrdr":"5", <- 파라미터 추가 + "registSe":"00" (고정) + * */ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "008"); + reqData.put("mberNo", mberNo); + reqData.put("vkeyIssuSeqNo", dltMap.get("VKEY_ISSU_SEQ_NO")); + reqData.put("requstDt", now); + reqData.put("priorOrdr", dltMap.get("PRIOR_ORDR")); + reqData.put("registSe", "00"); + + logger.info("reqData::" + reqData); + resultPaysMap = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("resultPaysMap::" + resultPaysMap); + if (resultPaysMap.get("rspnsCode").equals("0000")) { + iCnt++; + } + } + + logger.info("result::" + result); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + result.setData("STATUS", "S"); + result.setData("ICNT", String.valueOf(iCnt)); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + + return result.getResult(); + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public String updateNewBankinfoList(List params1, List params2, List params3, List params4) throws SQLException { + String resultFlag = "S"; + //try { + int iCnt1 = 0; + int iCnt2 = 0; + int uCnt1 = 0; + int uCnt2 = 0; + int dCnt1 = 0; + int dCnt2 = 0; + Map resultMap = new HashMap(); + Map parmCarMap = new HashMap(); + Map resultCarMap = new HashMap(); + resultMap = userInfo.getDeUserInfo(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + String MBER_NM = (String) resultMap.get("MBER_NM"); + + logger.info("Param dlt_bankList::" + params1); + logger.info("Param dlt_bankDelList::" + params2); + logger.info("Param dlt_creditList::" + params3); + logger.info("Param dlt_creditDelList::" + params4); + + //대표차량 조회 + parmCarMap.put("mberId", (String) resultMap.get("MBER_ID")); + resultCarMap = mypageMapper.getMyLeaderCarInfo(parmCarMap); + logger.info("resultCarMap -> " + resultCarMap); + + // 계좌정보 신규/수정 처리 + if (params1.size() > 0) { + Map dltMap = new HashMap(); + for (int i = 0; i < params1.size(); i++) { + dltMap = (Map) params1.get(i); + String rowStatus = (String) dltMap.get("rowStatus"); + dltMap.put("MBER_NO", MBER_NO); + dltMap.put("ACNUT_NM", MBER_NM); + dltMap.put("VHCLE_MANAGE_NO", (String) resultCarMap.get("VHCLE_MANAGE_NO")); + dltMap.put("ACNUT_INFO_STTUS", "00"); + dltMap.put("rowStatus", rowStatus); + dltMap.put("ACNUT_NO", (String) dltMap.get("SEARCH_ACCT_NO")); + logger.info("dltMap -> " + dltMap); + + if (rowStatus.equals("C")) { + iCnt1 = mypageMapper.insertMyAcnutPblInfo(dltMap); + if (iCnt1 == 0) { + resultFlag = "F"; + logger.error("계좌_발행_정보 저장 오류"); + throw new SQLException("계좌_발행_정보 저장 오류발생"); + } + iCnt2 = mypageMapper.insertMyAcnutPblInfoHistC(dltMap); + if (iCnt2 == 0) { + resultFlag = "F"; + logger.error("계좌_발행_정보_이력 저장 오류"); + throw new SQLException("계좌_발행_정보_이력 저장 오류발생"); + } + } else if (rowStatus.equals("U")) { + uCnt1 = mypageMapper.updateMyAcnutPblInfo(dltMap); + if (uCnt1 == 0) { + resultFlag = "F"; + logger.error("계좌등록 순위변경 저장 오류"); + throw new SQLException("계좌등록 순위변경 저장 오류발생"); + } + uCnt2 = mypageMapper.insertMyAcnutPblInfoHistU(dltMap); + if (uCnt2 == 0) { + resultFlag = "F"; + logger.error("계좌등록 순위변경이력 저장 오류"); + throw new SQLException("계좌등록 순위변경이력 저장 오류발생"); + } + } + } + } + + // 계좌정보 삭제 처리 + if (params2.size() > 0) { + Map dltDelMap = new HashMap(); + for (int i = 0; i < params2.size(); i++) { + dltDelMap = (Map) params2.get(i); + String rowStatus = (String) dltDelMap.get("rowStatus"); + dltDelMap.put("MBER_NO", MBER_NO); + dltDelMap.put("ACNUT_NM", MBER_NM); + dltDelMap.put("VHCLE_MANAGE_NO", (String) resultCarMap.get("VHCLE_MANAGE_NO")); + dltDelMap.put("rowStatus", rowStatus); + dltDelMap.put("ACNUT_NO", (String) dltDelMap.get("SEARCH_ACCT_NO")); + dltDelMap.put("ACNUT_INFO_STTUS", "90"); + logger.info("dltDelMap -> " + dltDelMap); + + dCnt1 = mypageMapper.deleteMyAcnutPblInfo(dltDelMap); + if (dCnt1 == 0) { + resultFlag = "F"; + logger.error("계좌등록 삭제 처리 오류"); + throw new SQLException("계좌등록 삭제 처리 오류발생"); + } + + dCnt2 = mypageMapper.insertMyAcnutPblInfoHistD(dltDelMap); + if (dCnt2 == 0) { + resultFlag = "F"; + logger.error("계좌등록 삭제 변경이력 저장 오류"); + throw new SQLException("계좌등록 삭제 변경이력 저장 오류발생"); + } + } + } + + // 신용카드정보 저장 처리 + if (params3.size() > 0) { + Map resultPaysMap = new HashMap(); + Map dltCreditMap = new HashMap(); + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpComplete"); + + for (int i = 0; i < params3.size(); i++) { + dltCreditMap = (Map) params3.get(i); + logger.info("dltCreditMap -> " + dltCreditMap); + + String rowStatus = (String) dltCreditMap.get("rowStatus"); + String vkeyInfoSttus = (String) dltCreditMap.get("VKEY_INFO_STTUS"); + + if ("03".equals(vkeyInfoSttus) || "C".equals(rowStatus) || "U".equals(rowStatus)) { + logger.info("rowStatus -> " + rowStatus); + logger.info("vkeyInfoSttus -> " + vkeyInfoSttus); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + /* + *"insttNo":"BRSMC0100001", (고정) + "insttCntcJobSe":"008", (고정) + "mberNo":"MB00000001", + "vkeyIssuSeqNo":"VKEYISSU000000000006", + "requstDt":"20190423105530", + "priorOrdr":"5", <- 파라미터 추가 + "registSe":"00" (고정) + * */ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "008"); + reqData.put("mberNo", MBER_NO); + reqData.put("vkeyIssuSeqNo", dltCreditMap.get("VKEY_ISSU_SEQ_NO")); + reqData.put("requstDt", now); + reqData.put("priorOrdr", dltCreditMap.get("PRIOR_ORDR")); + reqData.put("registSe", "00"); + + logger.info("url::" + url); + logger.info("reqData::" + reqData); + resultPaysMap = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("사전결제카드 최종 등록처리 resultPaysMap::" + resultPaysMap); + if (resultPaysMap.get("rspnsCode").equals("0000")) { + resultFlag = "S"; + } else { + resultFlag = "F"; + logger.error("사전결제카드 최종 등록처리 오류"); + throw new SQLException("사전결제카드 최종 등록처리 오류발생"); + } + } + } + } + + // 신용카드 삭제 처리 + if (params4.size() > 0) { + Map resultPaysDelMap = new HashMap(); + Map dltDelCreditMap = new HashMap(); + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpTerminate"); + + for (int i = 0; i < params4.size(); i++) { + dltDelCreditMap = (Map) params4.get(i); + logger.info("dltDelCreditMap -> " + dltDelCreditMap); + + String vhcleManageNo = (String) resultCarMap.get("VHCLE_MANAGE_NO"); + String stcmpNo = StringUtils.defaultIfBlank((String) dltDelCreditMap.get("STCMP_NO"), ""); + String setleMnMno = StringUtils.defaultIfBlank((String) dltDelCreditMap.get("SETLE_MN_MNO"), ""); + String setleMnKnd = StringUtils.defaultIfBlank((String) dltDelCreditMap.get("SETLE_MN_KND"), ""); + String vkeyIssuSeqNo = (String) dltDelCreditMap.get("VKEY_ISSU_SEQ_NO"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + /* + * "insttNo":"BRSMC0100001", (고정) + "insttCntcJobSe":"002", (고정) + "mberNo":"MB00000001", (TB_BRS_MBER_INFO > MBER_NO 값) + "vhcleManageNo":"000002", (TB_BRS_VHCLE_REGIST_INFO > VHCLE_MANAGE_NO 값) + "stcmpNo":"BRSPG0000001", (TB_BRS_SETLE_MN_INFO > STCMP_NO 값) + "setleMnMno":"BRSPG0000001004", (TB_BRS_SETLE_MN_INFO > SETLE_MN_MNO 값) + "setleMnKnd":"001", (TB_BRS_SETLE_MN_INFO > SETLE_MN_KND 값) + "requstDt":"20190423105530", (요청일시) + "vkeyIssuSeqNo":"VKEYISSU000000000008" (TB_BRS_VKEY_INFO > VKEY_ISSU_SEQ_NO 값) + * */ + + /*JSONObject reqData = new JSONObject(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "002"); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("mberNo", mberNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("requstDt", now); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo);*/ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "002"); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("mberNo", MBER_NO); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("requstDt", now); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo); + + logger.info("url::" + url); + logger.info("reqData::" + reqData); + if ("".equals(stcmpNo) || "".equals(setleMnMno) || "".equals(setleMnKnd)) { + logger.error("::::사전결제카드 대표차량 해지 필수값 누락::::"); + } else { + resultPaysDelMap = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("사전결제카드 대표차량 해지 결과값::" + resultPaysDelMap); + } + /*resultPaysDelMap = pPaymentService.requestPreRegistPayment(url, reqData); + logger.info("사전결제카드 대표차량 해지 resultPaysMap::" + resultPaysDelMap);*/ + if (resultPaysDelMap.get("rspnsCode").equals("0000")) { + resultFlag = "S"; + } else { + resultFlag = "F"; + logger.error("사전결제카드 대표차량 해지 오류"); + throw new SQLException("사전결제카드 대표차량 해지 오류발생"); + } + } + } + + //} catch (Exception e){ + //resultFlag = "F"; + ////e.printStackTrace(); + //} + return resultFlag; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public String updateBankinfoList(List params) { + String resultFlag = "F"; + try { + int iCnt1 = 0; + int iCnt2 = 0; + int uCnt1 = 0; + int uCnt2 = 0; + //int dCnt1 = 0; + //int dCnt2 = 0; + Map resultMap = new HashMap(); + Map parmCarMap = new HashMap(); + Map resultCarMap = new HashMap(); + Map dltMap = new HashMap(); + resultMap = userInfo.getDeUserInfo(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + String MBER_NM = (String) resultMap.get("MBER_NM"); + + //대표차량 조회 + parmCarMap.put("mberId", (String) resultMap.get("MBER_ID")); + resultCarMap = mypageMapper.getMyLeaderCarInfo(parmCarMap); + logger.info("resultCarMap -> " + resultCarMap); + + for (int i = 0; i < params.size(); i++) { + dltMap = (Map) params.get(i); + String rowStatus = (String) dltMap.get("rowStatus"); + dltMap.put("MBER_NO", MBER_NO); + dltMap.put("ACNUT_NM", MBER_NM); + dltMap.put("VHCLE_MANAGE_NO", (String) resultCarMap.get("VHCLE_MANAGE_NO")); + dltMap.put("ACNUT_INFO_STTUS", "00"); + dltMap.put("rowStatus", rowStatus); + dltMap.put("ACNUT_NO", (String) dltMap.get("SEARCH_ACCT_NO")); + logger.info("dltMap -> " + dltMap); + + if (rowStatus.equals("C")) { + try { + iCnt1 = mypageMapper.insertMyAcnutPblInfo(dltMap); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + try { + iCnt2 = mypageMapper.insertMyAcnutPblInfoHistC(dltMap); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + } else if (rowStatus.equals("U")) { + try { + uCnt1 = mypageMapper.updateMyAcnutPblInfo(dltMap); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + try { + uCnt2 = mypageMapper.insertMyAcnutPblInfoHistU(dltMap); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + } + } + + resultFlag = "S"; + + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + return resultFlag; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public String deleteBankinfoList(List params) { + String resultFlag = "F"; + try { + int dCnt1 = 0; + int dCnt2 = 0; + Map resultMap = new HashMap(); + Map parmCarMap = new HashMap(); + Map resultCarMap = new HashMap(); + Map dltMap = new HashMap(); + resultMap = userInfo.getDeUserInfo(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + String MBER_NM = (String) resultMap.get("MBER_NM"); + + //대표차량 조회 + parmCarMap.put("mberId", (String) resultMap.get("MBER_ID")); + resultCarMap = mypageMapper.getMyLeaderCarInfo(parmCarMap); + logger.info("resultCarMap -> " + resultCarMap); + + for (int i = 0; i < params.size(); i++) { + dltMap = (Map) params.get(i); + String rowStatus = (String) dltMap.get("rowStatus"); + dltMap.put("MBER_NO", MBER_NO); + dltMap.put("ACNUT_NM", MBER_NM); + dltMap.put("VHCLE_MANAGE_NO", (String) resultCarMap.get("VHCLE_MANAGE_NO")); + dltMap.put("rowStatus", rowStatus); + dltMap.put("ACNUT_NO", (String) dltMap.get("SEARCH_ACCT_NO")); + logger.info("dltMap1 -> " + dltMap); + + dltMap.put("ACNUT_INFO_STTUS", "90"); + logger.info("dltMap2 -> " + dltMap); + + try { + dCnt1 = mypageMapper.deleteMyAcnutPblInfo(dltMap); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + try { + dCnt2 = mypageMapper.insertMyAcnutPblInfoHistD(dltMap); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + } + + if (dCnt1 > 0 && dCnt2 > 0) { + resultFlag = "S"; + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + resultFlag = "F"; + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + resultFlag = "F"; + } + return resultFlag; + } + + // 이용료 - 이용료 집계 현황 + @Override + public Map getFeeCnt(Map param) { + Map result = new HashMap(); + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + + logger.info("resultMap::" + resultMap); + param.put("MBER_ID", resultMap.get("MBER_ID")); + param.put("MBER_NO", resultMap.get("MBER_NO")); + result = userService.getPassThroughSummary(param); + logger.info("getFeeCnt result::" + result); + + return result; + } + + // 공영주차장 이용료 - 이용료 집계 현황 + @Override + public ArrayList> getParkingFeeCnt(Map param) { + Map result = new HashMap(); + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + + param.put("MBER_ID", resultMap.get("MBER_ID")); + param.put("MBER_NO", resultMap.get("MBER_NO")); + ArrayList> resultList = new ArrayList>(); + param.put("uiType", "mypage"); + resultList = userService.getPublicParkingThroughSummary(param); + logger.info("getParkingFeeCnt result::" + result); + + return resultList; + } + + // 과태료 - 이용료 집계 현황 + @Override + public Map getPenaltyCnt(Map param) { + Map result = new HashMap(); + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + + logger.info("resultMap::" + resultMap); + param.put("MBER_ID", resultMap.get("MBER_ID")); + param.put("MBER_NO", resultMap.get("MBER_NO")); + result = userService.getPenaltyThroughSummary(param); + logger.info("getPenaltyCnt result::" + result); + + return result; + } + + + // 이용료 - 이용료 현황 + @Override + public Map getFeeStateCnt(Map param) { + Map result = new HashMap(); + + result.put("FEE_PASS_TOTAL_CNT", "0"); + result.put("FEE_PASS_TOTAL_PAY", "0"); + result.put("FEE_PASS_DISCOUNT_TOTAL_PAY", "0"); + result.put("FEE_PASS_UNPAID_CNT", "0"); + + result.put("FEE_PARKING_TOTAL_CNT", "0"); + result.put("FEE_PARKING_TOTAL_PAY", "0"); + result.put("FEE_PARKING_DISCOUNT_TOTAL_PAY", "0"); + result.put("FEE_PARKING_UNPAID_CNT", "0"); + + return result; + } + + // 이용료 - 민원접수 + @Override + public Map getCvplRceptCnt(Map param) { + Map result = new HashMap(); + + result.put("CVPL_PASS_CONFIRM_CNT", "0"); + result.put("CVPL_PASS_ACCEPT_CNT", "0"); + result.put("CVPL_PASS_SCREEN_CNT", "0"); + result.put("CVPL_PASS_FINISH_CNT", "0"); + + result.put("CVPL_PARKING_CONFIRM_CNT", "0"); + result.put("CVPL_PARKING_ACCEPT_CNT", "0"); + result.put("CVPL_PARKING_SCREEN_CNT", "0"); + result.put("CVPL_PARKING_FINISH_CNT", "0"); + + return result; + } + + // 과태료 - 과태료 현황 + @Override + public Map getPenaltyStateCnt(Map param) { + Map result = new HashMap(); + + result.put("PENALTY_PASS_TOTAL_CNT", "0"); + result.put("PENALTY_PASS_TOTAL_PAY", "0"); + result.put("PENALTY_PASS_DISCOUNT_PAY", "0"); + result.put("PENALTY_PASS_UNPAID_CNT", "0"); + + result.put("PENALTY_PARKING_TOTAL_CNT", "0"); + result.put("PENALTY_PARKING_TOTAL_PAY", "0"); + result.put("PENALTY_PARKING_DISCOUNT_PAY", "0"); + result.put("PENALTY_PARKING_UNPAID_CNT", "0"); + + return result; + } + + // 과태료 - 의견제출 + @Override + public Map getPenaltySubCnt(Map param) { + Map result = new HashMap(); + + result.put("PENALTY_SUB_PASS_CONFIRM_CNT", "0"); + result.put("PENALTY_SUB_PASS_ACCEPT_CNT", "0"); + result.put("PENALTY_SUB_PASS_SCREEN_CNT", "0"); + result.put("PENALTY_SUB_PASS_FINISH_CNT", "0"); + + result.put("PENALTY_SUB_PARKING_CONFIRM_CNT", "0"); + result.put("PENALTY_SUB_PARKING_ACCEPT_CNT", "0"); + result.put("PENALTY_SUB_PARKING_SCREEN_CNT", "0"); + result.put("PENALTY_SUB_PARKING_FINISH_CNT", "0"); + + return result; + } + + // 과태료 - 이의제기 + @Override + public Map getPenaltyDecisionCnt(Map param) { + Map result = new HashMap(); + + result.put("PENALTY_DEC_PASS_CONFIRM_CNT", "0"); + result.put("PENALTY_DEC_PASS_ACCEPT_CNT", "0"); + result.put("PENALTY_DEC_PASS_SCREEN_CNT", "0"); + result.put("PENALTY_DEC_PASS_FINISH_CNT", "0"); + + result.put("PENALTY_DEC_PARKING_CONFIRM_CNT", "0"); + result.put("PENALTY_DEC_PARKING_ACCEPT_CNT", "0"); + result.put("PENALTY_DEC_PARKING_SCREEN_CNT", "0"); + result.put("PENALTY_DEC_PARKING_FINISH_CNT", "0"); + + return result; + } + + //이용료 - 환불요청 + @Override + public Map getRefndCnt(Map param) { + Map result = new HashMap(); + + /*Map resultMap = new HashMap(); + resultMap = userInfo.getDeUserInfo(); + String mberCi = (String)resultMap.get("MBER_CI"); + param.put("mberCi", mberCi); + + result = mypageMapper.getRefndCnt(param);*/ + + result.put("PASS_TOTAL_CNT", "0"); + result.put("PASS_TOTAL_REFND_AMOUNT", "0"); + result.put("PASS_TOTAL_REFND_AMOUNT_CNT", "0"); + result.put("PARKING_TOTAL_CNT", "0"); + result.put("PARKING_TOTAL_REFND_AMOUNT", "0"); + result.put("PARKING_TOTAL_REFND_AMOUNT_CNT", "0"); + + return result; + } + + @Override + public String getMyAcctNo(Map param) { + String result = ""; + + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + result = mypageMapper.getMyAcctNo(resultMap); + + return result; + } + + @Override + public Map getResideInsttCnfirm(Map myInfo) { + Map result; + // String url = env.getProperty("Globals.fis.Url") + env.getProperty("Globals.Fis.resideInsttCnfirm"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = "11-004"; + String mberSeNo = (String) myInfo.get("mberSeNo"); + String mberNm = (String) myInfo.get("searchNm"); + String uniqueID = UUID.randomUUID().toString(); + /* + * sysId 시스템 ID (6) + tranDate 전송일시 (14) + transId 트랜잭션ID(요청 원문 식별 값) (40) + orgCode 기관코드 (10) + id 주민등록번호 (13) + name 이름 (38) + * */ + Map reqData = new HashMap<>(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("orgCode", ""); + reqData.put("id", mberSeNo); + reqData.put("name", mberNm); + + // logger.info("거주지 url::" + url); + logger.info("거주지 reqData::" + reqData); + result = requestResideInsttCnfirm(reqData); + // logger.info("거주지 result::" + result); + Map data = (Map) result.get("data"); + Map resideData = new HashMap<>(); + String birthday = mberSeNo.substring(0, 6); + resideData.put("REQUST_ID", birthday); + resideData.put("ORG_CODE", "1174000001"); + resideData.put("CNTC_ID", uniqueID); + resideData.put("CNTC_DT", now); + resideData.put("name", mberNm); + resideData.put("hangkikCd", (String) data.get("hangkikCd")); + resideData.put("serviceResult", (String) data.get("serviceResult")); + resideData.put("RESULT_CODE", (String) result.get("resultCode")); + resideData.put("RESULT_MSSAGE", (String) result.get("resultMessage")); + logger.info("거주지 data::" + resideData); + int resResideLog = mypageMapper.insertResideLog(resideData); + + return result; + } + + @Override + public Map getRdcxptInfoAllChldrn(Map myInfo) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.rdcxptInfo"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = "11-004"; + String mberSeNo = (String) myInfo.get("mberSeNo"); + String mberNm = (String) myInfo.get("searchNm"); + String uniqueID = UUID.randomUUID().toString(); + /* + * sysId 시스템 ID (6) + tranDate 전송일시 (14) + transId 트랜잭션ID(요청 원문 식별 값) (40) + orgCode 기관코드 (10) + id 주민등록번호 (13) + name 이름 (38) + * */ + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("orgCode", ""); + reqData.put("id", mberSeNo); + reqData.put("name", mberNm); + + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = requestRdcxptInfoAllChldrn(url, reqData); + logger.info("result::" + result); + Map data = (Map) result.get("data"); + String birthDay = mberSeNo.substring(0, 6); + data.put("CNTC_ID", uniqueID); + data.put("CNTC_DT", now); + data.put("mberSeNo", birthDay); + data.put("RESULT_CODE", (String) result.get("rspnsCode")); + data.put("RESULT_MSSAGE", (String) result.get("rspnsMssage")); + logger.info("다자녀 data::" + data); + int resRdcxptLog = mypageMapper.insertRdcxptLog(data); + + return result; + } + + @Override + public Map getRdcxptInfoNtttn(Map myInfo) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.rdcxptInfoNtttn"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = "11-004"; + String mberSeNo = (String) myInfo.get("mberSeNo"); + String uniqueID = UUID.randomUUID().toString(); + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("juminNo", mberSeNo); + + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = requestRdcxptInfoNtttn(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public int updateMnychRdcxptInfo(Map param) { + int uCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + param.put("MBER_NO", MBER_NO); + + uCnt = mypageMapper.updateMnychRdcxptInfo(param); + logger.info("uCnt -> " + uCnt); + + return uCnt; + } + + @Override + public int updateMnychRdcxptInfo2(Map param) { + int uCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + param.put("MBER_NO", MBER_NO); + + uCnt = mypageMapper.updateMnychRdcxptInfo2(param); + logger.info("uCnt -> " + uCnt); + + return uCnt; + } + + @Override + public Map selMnychRdcxptInfo(Map param) { + Map resultMap = new HashMap(); + Map resultData = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + param.put("MBER_NO", MBER_NO); + + resultData = mypageMapper.selMnychRdcxptInfo(param); + return resultData; + } + + @Override + public int instMnychRdcxptInfo(Map param) { + int uCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + param.put("MBER_NO", MBER_NO); + + uCnt = mypageMapper.instMnychRdcxptInfo(param); + logger.info("uCnt -> " + uCnt); + + return uCnt; + } + + @Override + public int updtMberInfo(Map param) { + int uCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + param.put("MBER_NO", MBER_NO); + + uCnt = mypageMapper.updtMberInfo(param); + logger.info("uCnt -> " + uCnt); + + return uCnt; + } + + @Override + public int updateNationMrtrsInfo(Map param) { + int uCnt = 0; + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfoByBase(); + String MBER_NO = (String) resultMap.get("MBER_NO"); + param.put("MBER_NO", MBER_NO); + + uCnt = mypageMapper.updateNationMrtrsInfo(param); + logger.info("uCnt -> " + uCnt); + + return uCnt; + } + + private Map requestResideInsttCnfirm(Map facMap) { + Result result = new Result(); + HashMap rtnMap = new LinkedHashMap(); + HashMap respMap = new LinkedHashMap(); + HashMap facCntcMap = new HashMap<>(); + final String strOrgCode = "1174000001" ; //기관코드(고정) + String strSysId = (String) facMap.get("sysId"); + facCntcMap.put("orgCode", strOrgCode); + facCntcMap.put("id", facMap.get("id")); + facCntcMap.put("name", facMap.get("name")); + facCntcMap.put("sysId", facMap.get("sysId")); + logger.info("[거주자] facCntcMap::"+facCntcMap.toString()); + + HashMap reqBodyXmlMap = new HashMap<>(); + reqBodyXmlMap = publicFacilityReqXml.getResideInsttCnfirmXml(facCntcMap); + logger.info("[거주자] reqBodyXmlMap::"+reqBodyXmlMap.toString()); + String strReqXml = (String)reqBodyXmlMap.get("reqXml"); //전송할 XML메세지 + String strReqBodyMessage = (String)reqBodyXmlMap.get("reqBodyMessage");//전송할 본문XML메세지 + String strXmlNs = (String)reqBodyXmlMap.get("xmlNs");//xmlNs이름 + String strElementResp = (String)reqBodyXmlMap.get("elementResp");//xml Element Response명 + + NewGpkiUtil g = null; + String serviceUrl = env.getProperty("Globals.Public.ResideInsttCnfirmService.Url"); + if (useGPKI) { + String encoded = null; + String strReqSendXml = null; + try { + logger.info("[거주자] 여기도 탔나::"); + final String targetServerId = "SVR1311000030"; + g = ShareGpki.getGpkiUtil(targetServerId, strSysId, isRealIp); + logger.info("[거주자] 여기도 탔나2::"); + String charset = "UTF-8"; + //String original = strReqXml.split("")[1].split("")[0]; + // String encoded; + byte[] encrypted = g.encrypt(strReqBodyMessage.getBytes(charset), targetServerId); + byte[] signed = g.sign(encrypted); + encoded = g.encode(signed); + logger.info("[거주지] strReqXml : " + strReqXml); + + strReqSendXml = strReqXml; + { + strReqSendXml = strReqSendXml.replace(strReqBodyMessage, encoded); + } + logger.info("[거주지] strReqSendXml : " + strReqSendXml); + + } catch (RuntimeException e) { + logger.info("에러발생"); + return null; + } catch (Exception e) { + logger.info("에러발생"); + return null; + } + logger.info("[거주지] serviceUrl : " + serviceUrl); + String strRespMsg = PublicFacilitySend.doService(serviceUrl, strReqSendXml); + logger.info("[거주지] strRespMsg : " + strRespMsg); + + if (strRespMsg.indexOf("Fault>") > 0){ //오류발생시 + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "fail"); + rtnMap.put("resultCode", "9999"); + rtnMap.put("resultMessage", result.STATUS_ERROR_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + facMap.put("cntcResult", "FAIL"); + facMap.put("cntcResultCode", "9999"); + facMap.put("cntcMessage", strRespMsg + "[거주지]"); + logger.info("[거주지] facMap : " + facMap); + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcCarInfoAdd(facMap);//연계정보 저장 + return rtnMap; + } + + String responseEncData = strRespMsg.split("<" + strElementResp + " xmlns=\"" +strXmlNs+ "\">")[1] + .split("")[0]; + + //logger.info("responseEncData : " + responseEncData); + + String decrypted = ""; + { + byte[] decoded; + try { + decoded = g.decode(responseEncData); + byte[] validated = g.validate(decoded); + decrypted = new String(g.decrypt(validated), "UTF-8"); + decrypted = decrypted.replace("><", ">\n<"); + } catch (RuntimeException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } catch (Exception e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } + } + String dcriptMsg = strRespMsg.replace(responseEncData, decrypted); + logger.info("[거주지] dcriptMsg : " + dcriptMsg); + + if (dcriptMsg.indexOf("Fault>") <= 0){ //정상발생시 + InputSource is = new InputSource(new StringReader(dcriptMsg)); + Document document = null; + try { + document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); + // 파싱할 tag + NodeList nList = document.getElementsByTagName("getResideInsttCnfirmResponse"); + + for(int i = 0; i < nList.getLength(); i++){ + Node nNode = nList.item(i); + if(nNode.getNodeType() == Node.ELEMENT_NODE){ + Element eElement = (Element) nNode; + logger.info("[거주지] 주민등록번호 : " + PublicFacilityReqXml.getTagValue("id", eElement)); + logger.info("[거주지] 이름 : " + PublicFacilityReqXml.getTagValue("name", eElement)); + logger.info("[거주지] 행정동코드 : " + PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + logger.info("[거주지] 확인결과 : " + PublicFacilityReqXml.getTagValue("serviceResult", eElement)); //1:성공, 2:주민등록번호오류, 3:성명오류, 4:거주자아님, 9:시스템오류, 99:등록된이용기관이아님 + logger.info("[거주지] 기관코드 : " + PublicFacilityReqXml.getTagValue("orgCode", eElement)); + respMap.put("transId", (String)facMap.get("transId")); + respMap.put("id", PublicFacilityReqXml.getTagValue("id", eElement)); + respMap.put("name", PublicFacilityReqXml.getTagValue("name", eElement)); + respMap.put("hangkikCd", PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + respMap.put("serviceResult", PublicFacilityReqXml.getTagValue("serviceResult", eElement)); + respMap.put("orgCode", PublicFacilityReqXml.getTagValue("orgCode", eElement)); + } + } + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "SUCCESS"); + rtnMap.put("resultCode", "0000"); + rtnMap.put("resultMessage", result.STATUS_SUCESS_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + facMap.put("cntcResult", "SUCCESS"); + facMap.put("cntcResultCode", "0000"); + facMap.put("cntcMessage", result.STATUS_SUCESS_MESSAGE + "[거주지]"); + facMap.put("id", respMap.get("id")); + facMap.put("name", respMap.get("name")); + facMap.put("hangkikCd", respMap.get("hangkikCd")); + facMap.put("serviceResult", respMap.get("serviceResult")); + facMap.put("orgCode", respMap.get("orgCode")); + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcDspsnAdd(facMap);//연계정보 저장 + + } catch (RuntimeException e) { + // TODO Auto-generated catch block + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "FAIL"); + rtnMap.put("resultCode", "9999"); + rtnMap.put("resultMessage", result.STATUS_ERROR_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcDspsnAdd(facMap);//연계정보 저장 + } catch (Exception e) { + // TODO Auto-generated catch block + respMap.put("transId", (String)facMap.get("transId")); + + rtnMap.put("result", "FAIL"); + rtnMap.put("resultCode", "9999"); + rtnMap.put("resultMessage", result.STATUS_ERROR_MESSAGE + "[거주지]"); + rtnMap.put("data", respMap); + + logger.info("[거주지] rtnMap : " + rtnMap); + // apicntcInfoProcess.cntcDspsnAdd(facMap);//연계정보 저장 + } + } + + } /**else{ + //String strRespMsg = PublicFacilitySend.doService(serviceUrl, strReqXml); + String strRespMsg = PublicFacilityReqXml.getTestRespResideInsttCnfirmXml(); + logger.info("[거주지] strRespMsg : " + strRespMsg); + InputSource is = new InputSource(new StringReader(strRespMsg)); + Document document = null; + try { + document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); + } catch (SAXException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } catch (IOException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } catch (ParserConfigurationException e) { + // TODO Auto-generated catch block + logger.info("에러발생"); + return null; + } + + // 파싱할 tag + NodeList nList = document.getElementsByTagName("getResideInsttCnfirmResponse"); + //System.out.println("파싱할 리스트 수 : "+ nList.getLength()); + + for(int i = 0; i < nList.getLength(); i++){ + Node nNode = nList.item(i); + if(nNode.getNodeType() == Node.ELEMENT_NODE){ + + Element eElement = (Element) nNode; + //System.out.println(eElement.getTextContent()); + logger.info("기관코드 : " + PublicFacilityReqXml.getTagValue("orgCode", eElement)); + logger.info("주민등록번호 : " + PublicFacilityReqXml.getTagValue("id", eElement)); + logger.info("이름 : " + PublicFacilityReqXml.getTagValue("name", eElement)); + logger.info("행정동코드 : " + PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + logger.info("거주행정기관확인결과 : " + PublicFacilityReqXml.getTagValue("serviceResult", eElement)); + + rtnMap.put("transId", (String)facMap.get("transId")); + rtnMap.put("orgCode", PublicFacilityReqXml.getTagValue("orgCode", eElement)); + rtnMap.put("id", PublicFacilityReqXml.getTagValue("id", eElement)); + rtnMap.put("name", PublicFacilityReqXml.getTagValue("name", eElement)); + rtnMap.put("hangkikCd", PublicFacilityReqXml.getTagValue("hangkikCd", eElement)); + rtnMap.put("serviceResult", PublicFacilityReqXml.getTagValue("serviceResult", eElement)); + } + } + }*/ + return rtnMap; + } + + public Map requestRdcxptInfoAllChldrn(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", jsonObj.get("resultCode")); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "io.getMessage()" + "]", io); + } + + } + return result; + } + + + public Map requestRdcxptInfoNtttn(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + JSONArray dataArr = (JSONArray) data.get("resp"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + if (dataArr != null) { + result.put("data", dataArr); + } else { + result.put("rspnsResult", "E"); + } + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", jsonObj.get("resultCode")); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "io.getMessage()" + "]", io); + } + + } + return result; + } + + public List getMyInfo(Map param) { + return mypageMapper.getMyInfo(param); + } + + // 회원 상태 유형 업데이트 + @Override + public int updateMberSttus(String param) { + return mypageMapper.updateMberSttus(param); + } + + // 차량 상태 유형 업데이트 + @Override + public int updateVhcleSttus(String param) { + return mypageMapper.updateVhcleSttus(param); + } + + // 차량 등록시 같은 차량의 03(삭제) 상태 차량 삭제 + @Override + public int deleteMberVhcle(Map param) { + return mypageMapper.deleteMberVhcle(param); + } + + // 나의 녹색교통 문구 구분을 위한 회원 정보 조회 + @Override + public List mberData(String param) { + return mypageMapper.mberData(param); + } + + // 다자녀 테이블 감면차량 조회 + @Override + public Map getMnychRdcxpt(Map param) { + return mypageMapper.getMnychRdcxpt(param); + } + + // 회원 CI 조회 + @Override + public String getMberInfoCi() { + Map mberinfo = userInfo.getUserInfoByBase(); + return mypageMapper.getMberInfoCi(mberinfo); + } + + // 차량 검증 + @Override + public Map vhcleConfirm(Map params) { + params.put("MBER_NO", userInfo.getUserNo()); + return mypageMapper.vhcleConfirm(params); + } +} diff --git a/src/main/java/gtpa/brs/mypage/web/MypageController.java b/src/main/java/gtpa/brs/mypage/web/MypageController.java new file mode 100644 index 0000000..1a402e3 --- /dev/null +++ b/src/main/java/gtpa/brs/mypage/web/MypageController.java @@ -0,0 +1,1884 @@ +package gtpa.brs.mypage.web; + +import java.io.PrintWriter; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Properties; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.transaction.SystemException; + +import gtpa.brs.user.service.UserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import com.clipsoft.jsEngine.javascript.regexp.SubString; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.common.web.BaseController; +import gtpa.brs.join.service.CACheckService; +import gtpa.brs.join.service.JoinService; +import gtpa.brs.login.service.impl.LoginMapper; +import gtpa.brs.mypage.service.MypageService; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.BrsIdGnrUtil; +import gtpa.brs.util.Result; +import gtpa.brs.util.SHA256Util; +import gtpa.brs.vehicle.service.VehicleService; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : jackt + * Date : 10/05/2019 + * TIME : 09:30 PM + * Project : brsmw + * Class : MypageController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class MypageController extends BaseController { + + @Autowired + UserInfo userInfo; + + @Autowired + MypageService mypageService; + + @Autowired + CACheckService caCheckService; + + @Autowired + JoinService joinService; + + @Autowired + UserService userService; + + @Autowired + VehicleService vehicleService; + + @Resource(name = "loginDao") + private LoginMapper loginMapper; + + @Autowired + PreRegistPaymentService preRegistPaymentService; + + @Resource(name = "globalsProperties") + Properties env; + + @Resource(name = "carGenIDService") + BrsIdGnrUtil carGenIDService; + + Logger logger = LoggerFactory.getLogger(MypageController.class); + + // 회원 세션정보 + @RequestMapping(value = "/mypage/sessionInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map sessionInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + logger.info("====#####== MypageController sessionInfo POST ======="); + if (userInfo.isTempMber()) { + result.setMsg(result.STATUS_WARNING, "비정상적인 접근입니다."); + } else { + printRequest(request); // 파라메터 Key, Value 로그 표시 + + //Map dbParam = (Map) param.get("dc_param"); + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + String getMberNo = userInfo.getUserNo(); + String aaa = getMberNo.substring(0, getMberNo.length() - 16); + logger.info("resultMap1 :::::"+resultMap); + logger.info("getMberNo :::::"+aaa); + Date now = new Date(); + + SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd"); + logger.info(format.format(now)); // 20090529 + + resultMap.put("NOW_LOGIN_DT", format.format(now)); + result.setData("dc_result", resultMap); + logger.info("resultMap2 :::::"+resultMap); + List mberData = mypageService.mberData((String) resultMap.get("MBER_NO")); + logger.info("mberData :::::"+mberData); + result.setData("dc_mberData", mberData); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 처리되었습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + // 현재비밀번호 체크 + @RequestMapping(value = "/mypage/isCheckNowPwdInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map isCheckNowPwdInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + //Map resultMap = new HashMap(); + try { + logger.info("====#####== MypageController isCheckNowPwdInfo POST ======="); + printRequest(request); // 파라메터 Key, Value 로그 표시 + logger.info("Param Data : " + param); + Map dbParam = (Map) param.get("param"); + Map id = new HashMap(); + id.put("id", userInfo.getUserInfoByBase().get("MBER_ID")); + logger.info("id : " + id); + Map memberMap = loginMapper.selectMemberInfoForLogin(id); + + String PASSWORD = (String) memberMap.get("PW"); + String reqPASSWORD = (String) dbParam.get("nowPwd"); + reqPASSWORD = SHA256Util.encryptSHA256(reqPASSWORD); + logger.info("reqPASSWORD : " + reqPASSWORD); + logger.info("PASSWORD : " + PASSWORD); + if (PASSWORD.equals(reqPASSWORD)) { + result.setData("NOW_PWD_FLAG", "Y"); + } else { // 패스워드 불일치 + result.setData("NOW_PWD_FLAG", "N"); + } + + dbParam.put("password", reqPASSWORD); + logger.info("dbParam Data2 : " + dbParam); + String resultNowPwd = ""; + resultNowPwd = mypageService.isCheckNowPwdInfoCnt(dbParam); + logger.info("resultNowPwd : " + resultNowPwd); + + if ("0".equals(resultNowPwd)) { + result.setData("NOW_PWD_FLAG", "N"); + } else { + result.setData("NOW_PWD_FLAG", "Y"); + } + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 처리되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + // 법인 기본정보 수정 + @RequestMapping(value = "/mypage/companyInfoUpdate.do", method = RequestMethod.POST) + public @ResponseBody + Map companyInfoUpdate(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + logger.info("====#####== MypageController companyInfoUpdate POST ======="); + logger.info("Param Data : " + param); + printRequest(request); // 파라메터 Key, Value 로그 표시 + + Map dbParam = (Map) param.get("dma_param"); + dbParam.put("MBER_NO", userInfo.getUserNo()); + dbParam.put("MBER_ID", userInfo.getUserId()); + int uCnt = mypageService.companyInfoUpdate(dbParam); + if (uCnt > 0) { + result.setMsg(Result.STATUS_SUCESS, "비밀번호가 정상적으로 수정되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, "비밀번호 변경에 실패하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_WARNING, "비밀번호 변경에 실패하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_WARNING, "비밀번호 변경에 실패하였습니다."); + } + + return result.getResult(); + } + + // 담당자 CI 정보 연계호출 + @RequestMapping(value = "/mypage/makeConnInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map makeConnInfo(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== makeConnInfo POST ======="); + logger.info("Param Data : " + param); + Map dbParam = (Map) param.get("dma_param"); + String sJuminNo = (String) dbParam.get("chargerNiNo"); + logger.info("sJuminNo:: " + sJuminNo); + Map data = caCheckService.interopService(sJuminNo); + if (!data.get("iRtnCI").equals(1)) { + throw new RuntimeException(data.get("iRtnCI_MSG").toString()); + } else { + result.setData("dma_result", data); + result.setMsg(Result.STATUS_SUCESS, Result.STATUS_SUCESS_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + // 회원탈퇴처리 -> 신용카드 해지 및 차량정보 삭제처리 + @RequestMapping(value = "/mypage/secSnUpdate.do", method = RequestMethod.POST) + public @ResponseBody + Map secSnUpdate(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + //Map resultMap = new HashMap(); + try { + logger.info("====#####== MypageController secSnUpdate POST ======="); + logger.info("Param Data : " + param); + printRequest(request); // 파라메터 Key, Value 로그 표시 + Map resultDel = new HashMap(); + + //Map dbParam = (Map) param.get("param"); + String resDel1 = mypageService.mySecSnCardterminatePayment(param); + logger.info("resDel1 : " + resDel1); + if (resDel1.equals("S")) { + String resDel2 = mypageService.mySecSnCarinfoDelete(param); + logger.info("resDel2 : " + resDel2); + if (resDel2.equals("S")) { + String resDel3 = mypageService.secSnUpdate(param); + logger.info("resDel3 : " + resDel3); + if (resDel3.equals("S")) { + resultDel.put("STATUS", "S"); + } else { + resultDel.put("STATUS", "F"); + } + } else { + resultDel.put("STATUS", "F"); + } + } else { + resultDel.put("STATUS", "F"); + } + + result.setData("dc_result", resultDel); + + logger.info("secSnUpdate Result Data : " + result.getResult()); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 처리되었습니다."); + request.getSession().invalidate(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + // 회원탈퇴처리 -> 쿠콘 계좌정보 임시 추가후 탈퇴처리 + @RequestMapping(value = "/mypage/secSnTmpUpdate.do", method = RequestMethod.POST) + public @ResponseBody + Map secSnTmpUpdate(@RequestBody Map param, HttpServletRequest request) { + logger.info("====#####== secSnTmpUpdate POST ======="); + logger.info("Param Data : " + param); + + Result result = new Result(); + try { + Map dbParam = (Map) param.get("dma_param"); + String resultSrc = mypageService.updateSecSnBankCarInfo(dbParam); + + logger.info("resultSrc::" + resultSrc); + + if ("S".equals(resultSrc)) { + result.setData("SUCESS", "S"); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 탈퇴가 완료되었습니다."); + } else { + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "탈퇴처리시 오류가 발생하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "탈퇴처리시 오류가 발생하였습니다.", re); + } catch (SQLException se) { + logger.error("[SQLException::" + "" + "]", se); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "탈퇴처리시 오류가 발생하였습니다.", se); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "탈퇴처리시 오류가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 차량정보 목록 + @RequestMapping(value = "/mypage/getMyCarinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map getMyCarinfoList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dc_searchParm"); + + result.setData("dlt_resultList", mypageService.getMyCarinfoList(dbParam)); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 차량정보 삭제 + @RequestMapping(value = "/mypage/myCarinfoDeleteList.do", method = RequestMethod.POST) + public @ResponseBody + Map myCarinfoDeleteList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST myCarinfoDeleteList ======="); + logger.info("Param Data : " + param.get("dlt_carInfo")); + + result.setData("dlt_resultList", mypageService.myCarinfoDeleteList((List) param.get("dlt_carInfo"))); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 삭제되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "삭제시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "삭제시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 차량정보 신규저장, 기존 차량 삭제처리 + @RequestMapping(value = "/mypage/updateCarinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map updateCarinfoList(@RequestBody Map param) { + + logger.info("====#####== updateCarinfoList POST ======="); + logger.info("Param Data1: " + param.get("dlt_resultList")); + logger.info("Param Data2: " + param.get("dlt_carInfoDelList")); + logger.info("Param Data3: " + param.get("dlt_carInfoModiList")); + + Result result = new Result(); + + try { + + List resultList = null; + resultList = (List) param.get("dlt_resultList"); + String vhcleNo = ""; + + List delList = null; + delList = (List) param.get("dlt_carInfoDelList"); + + List modiList = null; + modiList = (List) param.get("dlt_carInfoModiList"); + + String resultSrc = mypageService.updateNewCarinfoList(resultList, delList, modiList); + + logger.info("resultSrc::" + resultSrc); + + if ("S".equals(resultSrc)) { + // 2023.10.16 김경민 - 중복 차량 삭제 로직 위치 변경 + /** for(Object rstList : resultList) { + Map List = (Map) rstList; + vhcleNo = (String) List.get("VHCLE_NO"); + + logger.info("====== 중복 03 차량 삭제 로직 시작 ======="); + Map deleteMberVhcleVO = new HashMap(); + deleteMberVhcleVO.put("MBER_NO", userInfo.getUserNo().toString()); + deleteMberVhcleVO.put("VHCLE_NO", vhcleNo); + logger.info("deleteMberVhcleVO :::"+deleteMberVhcleVO); + int deleteMberVhcle = mypageService.deleteMberVhcle(deleteMberVhcleVO); + logger.info("deleteMberVhcle :::"+deleteMberVhcle); + if(deleteMberVhcle == 0) { + logger.info("삭제할 차량이 없습니다."); + } else if(deleteMberVhcle > 0) { + logger.info("삭제 상태의 중복 차량 삭제 완료"); + } else { + logger.info("중복 차량 삭제 중 오류"); + } + }*/ + result.setData("SUCESS", "S"); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 적용되었습니다."); + } else { + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } + + logger.info("Result Data::" + result.getResult()); + + return result.getResult(); + } + + // 나의 차량정보 신규저장, 기존 차량 삭제처리 (백업) + @RequestMapping(value = "/mypage/updateCarinfoListTmp.do", method = RequestMethod.POST) + public @ResponseBody + Map updateCarinfoListTmp(@RequestBody Map param) { + + logger.info("====#####== updateCarinfoList POST ======="); + logger.info("Param Data1: " + param.get("dlt_resultList")); + logger.info("Param Data2: " + param.get("dlt_carInfoDelList")); + + Result result = new Result(); + + try { + + List delList = null; + delList = (List) param.get("dlt_carInfoDelList"); + + logger.info("delList.size::" + delList.size()); + + Map result2 = null; + Map result1 = mypageService.updateCarinfoList((List) param.get("dlt_resultList")); + if (delList.size() > 0) { + result2 = mypageService.myCarinfoDeleteList((List) param.get("dlt_carInfoDelList")); + } + + logger.info("result1::" + result1); + logger.info("result2::" + result2); + + if (delList.size() > 0) { + if (result1.get("STATUS") != null && "S".equals(result1.get("STATUS")) && "S".equals(result2.get("STATUS"))) { + result.setMsg(Result.STATUS_SUCESS, "정상적으로 적용되었습니다."); + } else { + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } + } else { + if ("S".equals(result1.get("STATUS"))) { + result.setMsg(Result.STATUS_SUCESS, "정상적으로 적용되었습니다."); + } else { + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } catch (Exception e) { + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + logger.error("[process error::" + "" + "]", e); + } + + return result.getResult(); + } + + // 나의 차량정보 신규저장, 기존 차량 삭제처리, 기존 사전결제 등록 해지처리 + @RequestMapping(value = "/mypage/updateCarCardinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map updateCarCardinfoList(@RequestBody Map param) { + + logger.info("====#####== updateCarCardinfoList POST ======="); + logger.info("Param Data : " + param.get("dlt_resultList")); + + Map result = mypageService.updateCarCardinfoList((List) param.get("dlt_resultList")); + + return result; + } + + // 나의 차량정보 신규저장시 삭제차량 있을떼 + @RequestMapping(value = "/mypage/updateDelCarinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map updateDelCarinfoList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param.get("dlt_resultList")); + + result.setData("dma_result", mypageService.updateDelCarinfoList((List) param.get("dlt_resultList"))); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 삭제되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "삭제시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "삭제시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 카드정보 목록 + @RequestMapping(value = "/mypage/getMyCardInfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map getMyCardInfoList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== getMyCardInfoList POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_searchParam"); + + result.setData("dlt_creditList", mypageService.getMyCardInfoList(dbParam)); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 계좌정보 목록 + @RequestMapping(value = "/mypage/getMyBankInfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map getMyBankInfoList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== getMyBankInfoList POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_searchParam"); + + result.setData("dlt_bankList", mypageService.getMyBankInfoList(dbParam)); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 사전결제정보 목록 배열 처리 + @RequestMapping(value = "/mypage/updateCardinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map updateCardinfoList(@RequestBody Map param) { + + logger.info("====#####== updateCardinfoList POST ======="); + logger.info("Param Data : " + param.get("dlt_creditList")); + + Map result = mypageService.updateCardinfoList((List) param.get("dlt_creditList")); + + logger.info("result: " + result); + + return result; + } + + // 나의 카드정보 순위코드 목록 + @RequestMapping(value = "/mypage/getPreOrderCodeList.do", method = RequestMethod.POST) + public @ResponseBody + Map getPreOrderCodeList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param); + + List codeList = new ArrayList(); + for (int i = 0; i < 100; i++) { + Map tmpData = new HashMap(); + tmpData.put("code", (i + 1)); + tmpData.put("codeNm", (i + 1) + "순위"); + codeList.add(i, tmpData); + } + + result.setData("dlt_preOrderCodeList", codeList); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 신용카드 정보 해지 처리 + @RequestMapping(value = "/mypage/myCreditDelList.do", method = RequestMethod.POST) + public @ResponseBody + Map myCreditDelList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST ======="); + logger.info("Param Data : " + param.get("dlt_creditDels")); + + List params = (List) param.get("dlt_creditDels"); + + result.setData("dlt_resultList", mypageService.myCreditDelList(params)); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 카드정보 사전결제등록 ( 대표차량 : 최신건 등록) + @RequestMapping(value = "/mypage/registCardInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map registCardInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + logger.info("====#####== mypage registCardInfo POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_cardInfo"); + Map dataResponse = mypageService.registCardInfo(dbParam, request); + //result.setData("dlt_creditList", mypageService.registCardInfo(dbParam, request)); + if (dataResponse.get("rspnsCode").equals("0000")) { + result.setData("dlt_creditList", dataResponse); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else if (dataResponse.get("rspnsCode").equals("EP0005")){ + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, dataResponse.get("rspnsMssage").toString()); + } + //result.setMsg(Result.STATUS_SUCESS, Result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + // 티머니 사전결제등록 ( 대표차량 : 최신건 등록) + @RequestMapping(value = "/mypage/registTmInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map registTmInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + logger.info("====#####== mypage registTmInfo POST ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_cardInfo"); + Map dataResponse = mypageService.registTmInfo(dbParam, request); + if (dataResponse.get("rspnsCode").equals("0000")) { + result.setData("dlt_creditList", dataResponse); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else if (dataResponse.get("rspnsCode").equals("EP0005")){ + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, dataResponse.get("rspnsMssage").toString()); + } + //result.setMsg(Result.STATUS_SUCESS, Result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + + return result.getResult(); + } + + // 차량정보확인 + @RequestMapping(value = "/mypage/getCarInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getCarInfo(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== getCarInfo POST ======="); + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + + String vhclePosesnTy = (String) params.get("SEARCH_CAR_POSESN_TY"); + String vhcleNo = (String) params.get("SEARCH_VHCLE_NO"); + String vhcleUser = (String) params.get("SEARCH_VHCLE_OWNER"); + String vhcleOwnerTy = (String) params.get("SEARCH_VHCLE_OWNER_TY"); + String cmpnyVhcleRcivEndde = ""; + String mberSeCode = ""; + String vhcleOwnerCi = ""; + + params.put("vhcleNo", vhcleNo); + int vhcleChk = joinService.vhcleChk(params); + if(vhcleChk > 0) { + result.setMsg(Result.STATUS_SUCESS, "이미 등록된 차량이므로 등록하실 수 없습니다."); + return result.getResult(); + } + + Map resData = vehicleService.vhcleInquiry(params); + Map data = new HashMap(); + logger.info("resData:: " + resData); + if (resData.get("rspnsResult").equals("S")) { + Map carResData = (Map) resData.get("data"); + if("Y".equals(vhcleOwnerTy)){ + vhcleOwnerCi = carResData.get("mberSeNo").toString(); + cmpnyVhcleRcivEndde = (String) params.get("CMPNY_VHCLE_RCIV_ENDDE"); + }else{ + data = caCheckService.interopService((String) resData.get("mberSeNo")); + if (!data.get("iRtnCI").equals(1)) { + result.setMsg(Result.STATUS_SUCESS, data.get("iRtnCI_MSG").toString()); + throw new RuntimeException(data.get("iRtnCI_MSG").toString()); + } + vhcleOwnerCi = data.get("CI").toString(); + + String mberCiInfo = mypageService.getMberInfoCi(); + if(!mberCiInfo.equals(vhcleOwnerCi)) { + result.setMsg(result.STATUS_ERROR, "본인 소유의 차량이 아니므로 등록하실 수 없습니다."); + return result.getResult(); + } + } + + Map car = new HashMap(); + car.put("VHCLE_OWNER_CI", vhcleOwnerCi); + car.put("VHCLE_POSESN_TY", vhclePosesnTy); + car.put("VHCLE_NO", carResData.get("vhrno")); + car.put("VHCLE_OWNER", carResData.get("mberNm").toString().replaceAll("\n", "")); + car.put("CARS_TY_ID", "60"); + car.put("CARS_TY", carResData.get("cnm")); + car.put("PRPOS_SE_CODE", carResData.get("prposSeCode")); + car.put("VHCLE_KND_CODE", carResData.get("vhctyAsortCode")); + car.put("VHCLE_CL_CODE", carResData.get("vhctySeCode")); + car.put("VHCLE_TY_CODE", carResData.get("vhctyTyCode")); + car.put("SPEC_REGIST_DETAIL_CODE", carResData.get("spcfRegistSttusCode")); + car.put("REGIST_DETAIL_CODE", carResData.get("registDetailCode")); + car.put("USE_FUEL_CODE", carResData.get("useFuelCode")); + car.put("LEGALDONG_CODE", carResData.get("ownerLegaldongCode")); + car.put("ADSTRD_CODE", carResData.get("ownerAdstrdCode")); + car.put("ROADNM_CODE", carResData.get("ownerRoadNmCode")); + /* 210602 서주희 - 법인차량 항목추가 + * 대표소유자회원구분코드, 납부 가능종료일 추가 + * */ + mberSeCode = carResData.get("mberSeCode").toString(); + logger.info("mberSeCode:"+mberSeCode); + car.put("VHCLE_OWNER_SE", mberSeCode); + car.put("CMPNY_VHCLE_RCIV_ENDDE", cmpnyVhcleRcivEndde); + car.put("VHCLE_STTUS_TY", "01"); + + if (!"Y".equals(vhcleOwnerTy) && !"13".equals(mberSeCode) && !"14".equals(mberSeCode)) { + int rsltCnt = joinService.isExsistVhcleOwner(car); + if (rsltCnt < 1 && vhcleUser.equals(resData.get("mberNm").toString().replaceAll("\n", ""))) { + Map resultMap = new HashMap(); + resultMap = userInfo.getUserInfo(); + if (data.get("CI").equals(resultMap.get("MBER_CI"))) { + car.put("VHCLE_OWNER_EQ", "Y"); + } else { + car.put("VHCLE_OWNER_EQ", "N"); + } + result.setData("data", car); + result.setMsg(Result.STATUS_SUCESS, "차량정보가 확인되었습니다."); + } else if (!vhcleUser.replaceAll(" ", "").equals(resData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + result.setMsg(Result.STATUS_SUCESS, "차량번호와 소유자가 일치하지 않습니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "등록된 차량정보입니다. 다른 차량정보를 입력해 주십시오."); + } + /* 210602 서주희 - 법인차량 항목추가 + * 22.01.25 서주희 - 법인차량 종료일자 미등록 체크 + * */ + } else if ("Y".equals(vhcleOwnerTy) && ("13".equals(mberSeCode) || "14".equals(mberSeCode))) { + if("".equals(cmpnyVhcleRcivEndde) || cmpnyVhcleRcivEndde == null){ + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 명의 차량은 종료일자를 입력하셔야 등록이 가능합니다."); + }else if(cmpnyVhcleRcivEndde.length() != 8 ){ + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 명의 차량은 종료일자에 문제가 있습니다. 정상적인 날짜를 입력해주시기 바랍니다.("+cmpnyVhcleRcivEndde+")"); + }else { + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); + String stDate = df.format(cal.getTime()); + cal.add(Calendar.MONTH, 12); + String endDate = df.format(cal.getTime()); + Date date1 = df.parse(stDate); + Date date2 = df.parse(endDate); + Date date3 = df.parse(cmpnyVhcleRcivEndde); + + if(date1.after(date3) || date2.before(date3)){ + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 결제이용 종료일은 등록일 기준 최대 1년까지 가능합니다.("+cmpnyVhcleRcivEndde+")"); + }else{ + int rsltCnt = joinService.isExsistVhcleOwner(car); + if (rsltCnt < 1 && vhcleUser.replaceAll(" ", "").equals(resData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + car.put("VHCLE_OWNER_EQ", "N"); + result.setData("data", car); + result.setMsg(result.STATUS_SUCESS, "차량정보가 확인되었습니다."); + } else if (!vhcleUser.replaceAll(" ", "").equals(resData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + result.setMsg(result.STATUS_SUCESS, "차량번호와 소유자가 일치하지 않습니다."); + } else { + result.setMsg(result.STATUS_SUCESS, "등록된 차량정보입니다. 다른 차량정보를 입력해 주십시오."); + } + } + } + } else if (!"Y".equals(vhcleOwnerTy) && ("13".equals(mberSeCode) || "14".equals(mberSeCode))) { + result.setMsg(Result.STATUS_SUCESS, "법인/사업자 명의 차량은 선택 항목을 체크하셔야 조회가 가능합니다."); + } else if ("Y".equals(vhcleOwnerTy) && !"13".equals(mberSeCode) && !"14".equals(mberSeCode)) { + result.setMsg(Result.STATUS_SUCESS, "개인 명의 차량은 선택 항목을 체크 해제 하셔야 조회가 가능합니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "개인/법인/사업자 명의 차량만 등록 가능합니다."); + } + } else { + result.setMsg(Result.STATUS_SUCESS, resData.get("rspnsMssage").toString()); + throw new RuntimeException(resData.get("rspnsMssage").toString()); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + //result.setMsg(Result.STATUS_ERROR, resData.get("rspnsMssage").toString(), re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_SUCESS, Result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } + + // 나의녹색교통 현황 메인 + @RequestMapping(value = "/mypage/getMyGreenTraficMainList.do", method = RequestMethod.POST) + public @ResponseBody + Map getMyGreenTraficMainList(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== MypageController myGreenTraficMainList POST ======="); + logger.info("Param Data : " + (Map) param.get("dma_searchParm")); + + Map dbParam = (Map) param.get("dma_searchParm"); + dbParam.put("MBER_NO",userInfo.getUserNo()); + Map dataParam = userInfo.getUserInfo(); + dataParam.put("startDt",dbParam.get("startDt")); + dataParam.put("endDt",dbParam.get("endDt")); + // 이용료 집계 + Map fee = mypageService.getFeeCnt(dbParam); + if (fee.get("data") == null) { + Map feeInfo = new HashMap(); + feeInfo.put("passCount", "0"); + feeInfo.put("passNoPayCount", "0"); + feeInfo.put("fineCount", "0"); + feeInfo.put("fineNoPayCount", "0"); + feeInfo.put("passAmountTotal", "0"); + feeInfo.put("passNoPayAmountTotal", "0"); + fee.put("data", feeInfo); + } + // 과태료 집계 + Map penalty = userService.getPenaltyThroughSummary(dbParam); + Map tPenalty = userService.getPenaltyByFeeThroughSummary(dbParam); + Map penaltyStatic = new HashMap(); + int fineNoPayCount = 0; + int fineCount = 0; + if (penalty.get("data") != null && tPenalty.get("data") != null) { + Map penaltyData = (Map) penalty.get("data"); + Map tPenaltyData = (Map) tPenalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()) + Integer.parseInt(tPenaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()) + Integer.parseInt(tPenaltyData.get("fineCount").toString()); + + } else if (penalty.get("data") == null && tPenalty.get("data") != null) { + Map penaltyData = (Map) tPenalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()); + } else if (penalty.get("data") != null && tPenalty.get("data") == null) { + Map penaltyData = (Map) penalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()); + } + penaltyStatic.put("fineNoPayCount", fineNoPayCount); + penaltyStatic.put("fineCount", fineCount); + + // 공용주차장 이용료 집계 + Map pFeeTmp = new HashMap(); + Map pFee = new HashMap(); + ArrayList> pFeeList = new ArrayList>(); + pFeeList = mypageService.getParkingFeeCnt(dbParam); + logger.info("pFeeList::" + pFeeList); + + int passNoPayAmountTotal = 0; + int passNoPayCount = 0; + int passAmountTotal = 0; + int passCount = 0; + if (pFeeList.size() > 0) { + for (Object parkFeesObj : pFeeList) { + //Map parkFees = (Map) ((HashMap) parkFeesObj).get("data"); + Map parkFees = (Map) parkFeesObj; + if (parkFees.get("data") != null) { + passNoPayAmountTotal += Integer.parseInt(parkFees.get("passNoPayAmountTotal").toString()); + passNoPayCount += Integer.parseInt(parkFees.get("passNoPayCount").toString()); + passAmountTotal += Integer.parseInt(parkFees.get("passAmountTotal").toString()); + passCount += Integer.parseInt(parkFees.get("passCount").toString()); + } + } + } + + pFeeTmp.put("passNoPayAmountTotal", passNoPayAmountTotal); + pFeeTmp.put("passNoPayCount", passNoPayCount); + pFeeTmp.put("passAmountTotal", passAmountTotal); + pFeeTmp.put("passCount", passCount); + + pFee.putAll(pFeeTmp); + + + /* + * 21.11.03 서주희 + * 이용료 기관이 증가해서 각 서비스별로 try catch 적용 + * Exception일 경우 0값으로 셋팅하여 excepFee 적용 + * 데이터 없을 경우 feeInfo 적용 + */ + Map feeInfo = new HashMap(); + feeInfo.put("passCount", "0"); + feeInfo.put("passNoPayCount", "0"); + feeInfo.put("passAmountTotal", "0"); + feeInfo.put("passNoPayAmountTotal", "0"); + + try{ + // 제물포이용료 집계 + Map jmpFee = userService.getJmpTunnelPassThroughSummary(dbParam); + + if (jmpFee.get("data") == null) { + jmpFee.put("data", feeInfo); + } + result.setData("jmpFee", (Map) jmpFee.get("data")); + } catch (RuntimeException re) { + result.setData("jmpFee", feeInfo); + logger.error("[jmpFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("jmpFee", feeInfo); + logger.error("[jmpFee process error::" + "" + "]", e); + } + + try{ + // 영등포 주차장 이용료 집계 + Map ydpFee = userService.getYdpParkPassThroughSummary(dbParam); + + if (ydpFee.get("data") == null) { + ydpFee.put("data", feeInfo); + } + result.setData("ydpFee", (Map) ydpFee.get("data")); + } catch (RuntimeException re) { + result.setData("ydpFee", feeInfo); + logger.error("[ydpFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("ydpFee", feeInfo); + logger.error("[ydpFee process error::" + "" + "]", e); + } + + + try{ + // 중구 주차장 이용료 집계 + Map jgFee = userService.getJgParkPassThroughSummary(dbParam); + + if (jgFee.get("data") == null) { + jgFee.put("data", feeInfo); + } + result.setData("jgFee", (Map) jgFee.get("data")); + } catch (RuntimeException re) { + result.setData("jgFee", feeInfo); + logger.error("[jgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("jgFee", feeInfo); + logger.error("[jgFee process error::" + "" + "]", e); + } + + try{ + // 서초구 주차장 이용료 집계 + Map scgFee = userService.getScgParkPassThroughSummary(dbParam); + + if (scgFee.get("data") == null) { + scgFee.put("data", feeInfo); + } + result.setData("scgFee", (Map) scgFee.get("data")); + } catch (RuntimeException re) { + result.setData("scgFee", feeInfo); + logger.error("[scgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("scgFee", feeInfo); + logger.error("[scgFee process error::" + "" + "]", e); + } + + try{ + // 서부간선도로 이용료 집계 + Map sbgFee = userService.getSbgRoadPassThroughSummary(dbParam); + + if (sbgFee.get("data") == null) { + sbgFee.put("data", feeInfo); + } + result.setData("sbgFee", (Map) sbgFee.get("data")); + } catch (RuntimeException re) { + result.setData("sbgFee", feeInfo); + logger.error("[sbgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("sbgFee", feeInfo); + logger.error("[sbgFee process error::" + "" + "]", e); + } + + result.setData("fee", (Map) fee.get("data")); + result.setData("penalty", (Map) penalty.get("data")); + result.setData("tPenalty", (Map) tPenalty.get("data")); + result.setData("parkingFee", pFee); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 제로페이 계좌인증처리 + @RequestMapping(value = "/mypage/registAcctInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map registAcctInfo(@RequestBody Map param) { + Result result = new Result(); + Map dataResponse = new HashMap(); + Map params = new HashMap<>(); + Map memberMap = new HashMap(); + Map carMap = new HashMap(); + Map tnsMap1 = new HashMap(); + Map tnsMap2 = new HashMap(); + Map tnsMap3 = new HashMap(); + try { + params = (Map) param.get("acctInfo"); + logger.info("====#####== MypageController registAcctInfo POST ======="); + logger.info("Param Data : " + params); + memberMap = userInfo.getUserInfo(); + Map carParmMap = new HashMap(); + carParmMap.put("mberId", memberMap.get("MBER_ID")); + logger.info("carParmMap: " + carParmMap); + carMap = mypageService.getMyLeaderCarInfo(carParmMap); + String vhcleNo = ""; + vhcleNo = (String) carMap.get("VHCLE_NO"); + logger.info("vhcleNo: " + vhcleNo); + + if (!"".equals(vhcleNo)) { + logger.info("params: " + params); + dataResponse = preRegistPaymentService.checkNormalAcctNo(params); + logger.info("dataResponse: " + dataResponse); + if (dataResponse.get("rspnsCode").equals("000")) { + String MBER_NM = ""; + MBER_NM = (String) memberMap.get("MBER_NM"); + logger.info("ACCT_NM: " + dataResponse.get("ACCT_NM")); + logger.info("MBER_NM: " + MBER_NM); + if (dataResponse.get("ACCT_NM").equals(MBER_NM)) { + result.setData("data1", dataResponse); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, "회원과 예금주가 동일하지 않습니다. 본인계좌로 등록 바랍니다."); + } + } else { + result.setMsg(result.STATUS_ERROR, dataResponse.get("rspnsMssage").toString()); + } + } else { + result.setMsg(result.STATUS_ERROR, "차량정보를 등록해주세요."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } finally { + Map insData = new HashMap(); + insData.put("MBER_NO", memberMap.get("MBER_NO")); + insData.put("PBL_MNO", dataResponse.get("TRSC_SEQ_NO")); + insData.put("VHCLE_MANAGE_NO", carMap.get("VHCLE_MANAGE_NO")); + insData.put("reqDt", dataResponse.get("reqDt")); + insData.put("BANK_CODE", params.get("bankCd")); + insData.put("BANK_NM", params.get("bankNm")); + insData.put("ACNUT_NO", params.get("acctNo")); + insData.put("bsnmRegistNo", params.get("bsnmRegistNo")); + insData.put("BIRTH_YMD", params.get("niNo1")); + insData.put("ACNUT_NM", dataResponse.get("ACCT_NM")); + insData.put("PRIOR_ORDR", "99"); + insData.put("ACNUT_INFO_STTUS", "00"); + if (insData.get("ACNUT_NM") == null) { + insData.put("ACNUT_NM", memberMap.get("MBER_NM")); + } + insData.put("RSPNS_CODE", dataResponse.get("rspnsCode")); + insData.put("RSPNS_MSSAGE", dataResponse.get("rspnsMssage")); + logger.info("insData: " + insData); + + Iterator keys = insData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + if (insData.get(key) == null) { + insData.put(key, "null"); + } + } + + // 1번수행 + try { + tnsMap1 = mypageService.insertMyAcnutPblLog(insData); + result.setData("data2", tnsMap1); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, Result.STATUS_ERROR_MESSAGE, e); + } + + // 2번수행 + /*try { + tnsMap2 = mypageService.insertMyAcnutPblInfoHist(insData); + result.setData("data3", tnsMap2); + }catch (Exception e){ + //e.printStackTrace(); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE,e); + }*/ + + // 3번수행 + try { + tnsMap3 = mypageService.updateMyAcnutPblLog(insData); + result.setData("data4", tnsMap3); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + } + + return result.getResult(); + } + + // 나의 제로페이 계좌정보 List 수정처리 + @RequestMapping(value = "/mypage/updateBankinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map updateBankinfoList(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== updateBankinfoList POST ======="); + /*logger.info("Param dlt_bankList::" + (List) param.get("dlt_bankList")); + logger.info("Param dlt_bankDelList::" + (List) param.get("dlt_bankDelList")); + logger.info("Param dlt_creditList::" + (List) param.get("dlt_creditList")); + logger.info("Param dlt_creditDelList::" + (List) param.get("dlt_creditDelList"));*/ + + List bankList = null; + bankList = (List) param.get("dlt_bankList"); + + List delBankList = null; + delBankList = (List) param.get("dlt_bankDelList"); + + List creditList = null; + creditList = (List) param.get("dlt_creditList"); + + List creditDelList = null; + creditDelList = (List) param.get("dlt_creditDelList"); + + String resultStr1 = mypageService.updateNewBankinfoList(bankList, delBankList, creditList, creditDelList); + logger.info("resultStr1::" + resultStr1); + + List cdtList1 = (List) param.get("dlt_creditList"); + Map dltMap = new HashMap(); + int mberSttus = 0; + int vhcleSttus = 0; + + for(int i=0; i < 1; i++) { + dltMap = (Map) cdtList1.get(i); + } + + String userNo = userInfo.getUserNo(); + + mberSttus = mypageService.updateMberSttus(userNo); + vhcleSttus = mypageService.updateVhcleSttus(userNo); + + logger.info("mberSttus / vhcleSttus::"+mberSttus+" || "+vhcleSttus); + + if ("S".equals(resultStr1)) { + result.setData("SUCESS", "S"); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 적용되었습니다."); + } else { + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } + + logger.info("result::" + result.getResult()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 제로페이 계좌정보 List 수정처리(백업) + @RequestMapping(value = "/mypage/updateBankinfoListTmp.do", method = RequestMethod.POST) + public @ResponseBody + Map updateBankinfoListTmp(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== updateBankinfoList POST ======="); + logger.info("Param Data1::" + param.get("dlt_bankList")); + logger.info("Param Data2::" + param.get("dlt_bankDelList")); + + List delBankList = null; + delBankList = (List) param.get("dlt_bankDelList"); + + String resultStr2 = "S"; + String resultStr1 = mypageService.updateBankinfoList((List) param.get("dlt_bankList")); + if (delBankList.size() > 0) { + resultStr2 = mypageService.deleteBankinfoList((List) param.get("dlt_bankDelList")); + } + + logger.info("resultStr1::" + resultStr1); + logger.info("resultStr2::" + resultStr2); + + if ("S".equals(resultStr1) && "S".equals(resultStr2)) { + result.setData("SUCESS", "S"); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 적용되었습니다."); + } else { + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다.", re); + } catch (Exception e) { + result.setData("SUCESS", "F"); + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "적용시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 제로페이 계좌정보 List 삭제처리 + @RequestMapping(value = "/mypage/deleteBankinfoList.do", method = RequestMethod.POST) + public @ResponseBody + Map deleteBankinfoList(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== deleteBankinfoList POST ======="); + logger.info("Param Data : " + param.get("dlt_bankDelList")); + + String resultStr = mypageService.deleteBankinfoList((List) param.get("dlt_bankDelList")); + logger.info("resultStr: " + resultStr); + + if ("S".equals(resultStr)) { + result.setData("SUCESS", "S"); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 삭제 처리되었습니다."); + } else { + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "삭제 처리시 에러가 발생하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setData("SUCESS", "F"); + result.setMsg(Result.STATUS_ERROR, "삭제 처리시 에러가 발생하였습니다.", re); + } catch (Exception e) { + result.setData("SUCESS", "F"); + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "삭제 처리시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 나의 등록된 쿠콘계좌정보에 주민번호 조회 + @RequestMapping(value = "/mypage/getMyAcctNo.do", method = RequestMethod.POST) + public @ResponseBody + Map getMyAcctNo(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== MypageController getMyAcctNo POST ======="); + logger.info("Param Data : " + param); + + //Map dbParam = (Map) param.get("dma_searchParm"); + String resultStr = mypageService.getMyAcctNo(param); + logger.info("resultStr : " + resultStr); + result.setData("BIRTH_YMD", resultStr); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 다자녀 감면조회 + @RequestMapping(value = "/mypage/getMnychRdcxptInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getMnychRdcxptInfo(@RequestBody Map param) { + Result result = new Result(); + String errorMsg = ""; + try { + logger.info("====#####== MypageController getMnychRdcxptInfo POST ======="); + logger.info("Param searchNm : " + param.get("searchNm") + ", Param vhcleNo : " + param.get("vhcleNo")); + + Map params = (Map) param.get("param"); + String mberSeNo = (String) params.get("searchNiNo1") + (String) params.get("searchNiNo2"); + params.put("mberSeNo", mberSeNo); + Map ciData = caCheckService.interopService((String) params.get("mberSeNo")); + if (!ciData.get("iRtnCI").equals(1)) { + errorMsg = ciData.get("iRtnCI_MSG").toString(); + throw new RuntimeException(ciData.get("iRtnCI_MSG").toString()); + } + String searchCi = (String) ciData.get("CI"); + + logger.info("searchCi:: " + searchCi); + if (!searchCi.equals(userInfo.getUserCi())) { + errorMsg = "본인과 동일하지 않은 주민등록번호입니다.
    확인 후 다시 입력바랍니다."; + throw new SystemException("본인과 동일하지 않은 주민등록번호입니다.
    확인 후 다시 입력바랍니다."); + } + + String vhcleOwnerCi = ""; + Map vhcleConfirm = mypageService.vhcleConfirm(params); + + if(vhcleConfirm != null) { + vhcleOwnerCi = (String) vhcleConfirm.get("VHCLE_OWNER_CI"); + + if(!vhcleOwnerCi.equals(userInfo.getUserCi())) { + errorMsg = "본인 소유의 차량이 아닙니다.
    확인 후 다시 입력바랍니다."; + throw new SystemException("본인 소유의 차량이 아닙니다.
    확인 후 다시 입력바랍니다."); + } + } else if(vhcleConfirm == null) { + errorMsg = "회원님이 등록하신 차량이 아닙니다.
    확인 후 다시 입력바랍니다."; + throw new SystemException("회원님이 등록하신 차량이 아닙니다.
    확인 후 다시 입력바랍니다."); + } + + // 거주지 행정코드 조회 api + Map resReside = mypageService.getResideInsttCnfirm(params); + logger.debug("resReside:" + resReside); + if (resReside.get("resultCode").equals("0000")) { + Map data = (Map) resReside.get("data"); + resReside.put("id", data.get("id")); + resReside.put("name", data.get("name")); + resReside.put("hangkikCd", data.get("hangkikCd")); + resReside.put("serviceResult", data.get("serviceResult")); + + switch ((String) data.get("serviceResult")) { + case "1": + result.setMsg(result.STATUS_SUCESS, "정상적으로 조회가 완료되었습니다."); + break; + case "2": + result.setMsg(result.STATUS_WARNING, "거주지 코드 조회 실패(주민등록번호 오류)"); + case "3": + result.setMsg(result.STATUS_WARNING, "거주지 코드 조회 실패(성명 오류)"); + case "4": + result.setMsg(result.STATUS_WARNING, "거주지 코드 조회 실패(거주자아님)"); + break; + case "9": + result.setMsg(result.STATUS_WARNING, "시스템 오류가 발생하였습니다."); + case "99": + result.setMsg(result.STATUS_WARNING, "등록된 이용기관이 오류가 발생하였습니다. 관리자에게 문의바랍니다."); + default: + errorMsg = "거주지 조회 중 시스템 오류가 발생하였습니다."; + throw new SystemException("거주지 조회 중 시스템 오류가 발생하였습니다."); + } + // 서울시 거주자 아니면 다자녀 감면 대상 X + String hangKikCd = (String) resReside.get("hangkikCd"); + logger.debug("hangKikCd sub -> " + hangKikCd.substring(0, 2)); + if("11".equals(hangKikCd.substring(0, 2))) { + // 다자녀 조회 api + Map resData = mypageService.getRdcxptInfoAllChldrn(params); + logger.info("resData:" + resData); + if (resData.get("rspnsResult").equals("S")) { + Map data2 = (Map) resData.get("data"); + /* + serviceResult 전체자녀수확인결과 (2) + "1: 성공 + 2: 주민등록번호 오류 + 3: 성명 오류 + 4: 거주자아님 + 5: 대상자아님 (세대주,배우자) + 9: 시스템 오류 + 99: 등록된 이용기관이 아님" + * */ + resData.put("childrenCnt", data2.get("childrenCnt")); + resData.put("childrenBirthday", data2.get("birthDay")); + resData.put("serviceResult", data2.get("serviceResult")); + logger.debug("serviceResult:" + (String) data2.get("serviceResult")); + switch ((String) data2.get("serviceResult")) { + case "1": + resData.put("mnychRdcxptAt", "Y"); + result.setMsg(result.STATUS_SUCESS, "정상적으로 조회가 완료되었습니다."); + break; + case "2": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(주민등록번호 오류)"); + case "3": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(성명 오류)"); + case "4": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(거주자아님)"); + break; + case "5": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "다둥이 대상이 아닙니다.(대상자아님 (세대주,배우자))"); + break; + case "9": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "시스템 오류가 발생하였습니다."); + case "99": + resData.put("mnychRdcxptAt", "N"); + result.setMsg(result.STATUS_WARNING, "등록된 이용기관이 오류가 발생하였습니다. 관리자에게 문의바랍니다."); + default: + errorMsg = "다자녀 조회 중 시스템 오류가 발생하였습니다."; + throw new SystemException("다자녀 조회 중 시스템 오류가 발생하였습니다."); + } + result.setData("data", resData); + + // int uCnt = mypageService.updateMnychRdcxptInfo(params); + /* if (uCnt == 0) { + result.setMsg(result.STATUS_WARNING, "시스템 오류가 발생하였습니다."); + }*/ + } else { + errorMsg = "다자녀 조회 요청 연결 오류가 발생하였습니다."; + result.setMsg(result.STATUS_WARNING, errorMsg); + } + } else { + result.setMsg(result.STATUS_WARNING, "서울시 거주자가 아니므로 다자녀 감면 서비스 이용대상이 아닙니다."); + } + } else { + errorMsg = "거주지 조회 요청 연결 오류가 발생하였습니다."; + result.setMsg(result.STATUS_WARNING, errorMsg); + } +// Map resData = new HashMap<>(); +// resData.put("childrenCnt", "2"); +// resData.put("childrenBirthday", "20210101|20200101"); +// resData.put("serviceResult", "1"); +// result.setData("data", resData); +// logger.info("result ->" + result.getResult()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_WARNING, errorMsg, re); + } catch (SystemException se) { + logger.error("[process error::" + "se.getMessage()" + "]", se); + result.setMsg(result.STATUS_WARNING, errorMsg, se); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + //result.setMsg(result.STATUS_WARNING, e.getMessage(), e); + result.setMsg(result.STATUS_WARNING, result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } + + // 다자녀 테이블 감면차량 조회 + @RequestMapping(value = "/mypage/getMnychRdcxpt.do", method = RequestMethod.POST) + public @ResponseBody + Map getMnychRdcxpt() { + + Result result = new Result(); + try { + logger.info("====#####== getMnychRdcxpt POST ======="); + + Map dbParam = new HashMap<>(); + dbParam.put("MBER_NO", userInfo.getUserNo()); + result.setData("data", mypageService.getMnychRdcxpt(dbParam)); + result.setMsg(Result.STATUS_SUCESS, "정상적으로 조회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 다자녀 테이블 감면차량 업데이트 + @RequestMapping(value = "/mypage/setMnychRdcxptInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map setMnychRdcxptInfo(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== setMnychRdcxptInfo POST ======="); + logger.info("Param Data : " + param); + //ci 파라미터로 받고 차적 조회 후 본인 차량이면 다자녀 테이블에 업데이트 후 회원테이블 업데이트(머지문) + Map params = (Map) param.get("param"); + String vhcleOwnerCi = ""; + String mberCi = (String) params.get("PARAM_MBER_CI"); + String mnychRdcxptAt = (String) params.get("mnychRdcxptAt"); + String vhcleNo = (String) params.get("NEW_VHCLE_NO"); + Map data = new HashMap(); + if ("Y".equals(mnychRdcxptAt)) { + /** + * if(!vhcleOwnerCi.equals(mberCi)) { logger.info("car 여기는?"); + * result.setMsg(result.STATUS_ERROR, + * "본인 소유의 차량이 아니므로 다자녀 감면 차량으로 등록하실 수 없습니다."); return + * result.getResult(); } else { + */ + // 차량 삭제로 다자녀 차량 삭제 후 재등록하는 경우가 있을 수 있기 때문에 unique 오류가 뜰 경우를 + // 생각해서 회원번호로 된 감면차량 조회 후 로직 이행 + Map selMnychRdcxptInfo = mypageService.selMnychRdcxptInfo(params); + + if (selMnychRdcxptInfo == null) { + int instMnychRdcxptInfo = mypageService.instMnychRdcxptInfo(params); + + if (instMnychRdcxptInfo > 0) { + int updtMberInfo = mypageService.updtMberInfo(params); + + if (updtMberInfo > 0) { + result.setMsg(Result.STATUS_SUCESS, "정상적으로 등록되었습니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "회원 정보 수정 중 오류가 발생했습니다."); + } + } else { + result.setMsg(Result.STATUS_SUCESS, "다자녀 감면 등록에 실패하였습니다."); + } + } else if(selMnychRdcxptInfo != null) { + if (vhcleNo.equals(selMnychRdcxptInfo.get("VHCLE_NO"))) { + if ("Y".equals(selMnychRdcxptInfo.get("DELETE_AT"))) { + params.put("CHLDRN_BRTHDY", (String) selMnychRdcxptInfo.get("CHLDRN_BRTHDY")); + params.put("RECPTN_DT", (String) selMnychRdcxptInfo.get("RECPTN_DT")); + int updtMnychRdcxpt = mypageService.updateMnychRdcxptInfo(params); + + if (updtMnychRdcxpt > 0) { + int updtMberInfo = mypageService.updtMberInfo(params); + + if (updtMberInfo > 0) { + result.setMsg(Result.STATUS_SUCESS, "정상적으로 수정되었습니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "회원 정보 수정 중 오류가 발생했습니다."); + } + } else { + result.setMsg(Result.STATUS_SUCESS, "수정할 다자녀 감면 데이터가 없습니다."); + } + } else { + result.setMsg(Result.STATUS_SUCESS, "이미 등록하신 차량과 같은 차량 번호입니다."); + } + } else { + params.put("RECPTN_DT", (String) selMnychRdcxptInfo.get("RECPTN_DT")); + params.put("SEL_VHCLE_NO", (String) selMnychRdcxptInfo.get("VHCLE_NO")); + int updtMnychRdcxpt = mypageService.updateMnychRdcxptInfo2(params); + + if (updtMnychRdcxpt > 0) { + int updtMberInfo = mypageService.updtMberInfo(params); + + if (updtMberInfo > 0) { + result.setMsg(Result.STATUS_SUCESS, "정상적으로 수정되었습니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "회원 정보 수정 중 오류가 발생했습니다."); + } + } else { + result.setMsg(Result.STATUS_SUCESS, "수정할 다자녀 감면 데이터가 없습니다."); + } + } + } + // } + } else { + result.setMsg(Result.STATUS_SUCESS, "다자녀 감면 대상이 아닙니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + // 국가유공자 감면 조회 + @RequestMapping(value = "/mypage/getRdcxptInfoNtttn.do", method = RequestMethod.POST) + public @ResponseBody + Map getRdcxptInfoNtttn(@RequestBody Map param) { + Result result = new Result(); + String errorMsg = ""; + try { + logger.info("====#####== MypageController getRdcxptInfoNtttn POST ======="); + logger.info("Param Data : " + param); + + Map params = (Map) param.get("param"); + Map ciData = caCheckService.interopService((String) params.get("mberSeNo")); + if (!ciData.get("iRtnCI").equals(1)) { + errorMsg = ciData.get("iRtnCI_MSG").toString(); + throw new RuntimeException(ciData.get("iRtnCI_MSG").toString()); + } + String searchCi = (String) ciData.get("CI"); + logger.debug("searchCi:" + searchCi); + logger.debug("mberCi:" + params.get("mberCi")); + if (!searchCi.equals(params.get("mberCi"))) { + errorMsg = "본인과 동일하지 않은 주민등록번호입니다.
    확인후 다시 입력바랍니다."; + throw new SystemException("본인과 동일하지 않은 주민등록번호입니다.
    확인후 다시 입력바랍니다."); + } + Map resData = mypageService.getRdcxptInfoNtttn(params); + logger.debug("resData:" + resData); + if (resData.get("rspnsResult").equals("S")) { + if (resData.get("data") != null) { + List resDataList = (List) resData.get("data"); + for (Object obj : resDataList) { + Map data = (Map) obj; + if (params.get("searchNm").equals(data.get("resName"))) { + /* + resName 이름 (25) 보훈대상자 이름 + resSecrNum 주민등록번호 (13) 조회 값 리턴 + relCd 가족관계 (1) A:본인, B:배우자, C:유가족 + authoriPsnYn 수권자여부 (1) Y:해당, N:비해당 / 조회안할시에는 null + subjKbnCd 국가유공자 구분 (5) 공통코드표 참조 + wondClassCd 국가유공자 급수 (5) 공통코드표 참조 + inquRsltCd 조회결과 (1) "S: 정상, R: 제적자력, D: 사망, I: 무효가족, F: 조회불가" + validDate 조회일자 (17) yyyyMMdd24HMISS + * */ + resData.put("resName", data.get("resName")); + resData.put("relCd", data.get("relCd")); + resData.put("authoriPsnYn", data.get("authoriPsnYn")); + resData.put("subjKbnCd", data.get("subjKbnCd")); + resData.put("wondClassCd", data.get("wondClassCd")); + resData.put("inquRsltCd", data.get("inquRsltCd")); + switch ((String) data.get("inquRsltCd")) { + case "S": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_SUCESS, "정상적으로 조회가 완료되었습니다."); + break; + case "R": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "제적자력"); + case "D": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "사망"); + case "I": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "무효가족"); + break; + case "F": + resData.put("athzerAt", data.get("authoriPsnYn")); + result.setMsg(result.STATUS_WARNING, "조회불가"); + break; + default: + errorMsg = "시스템 오류가 발생하였습니다."; + throw new SystemException("시스템 오류가 발생하였습니다."); + } + result.setData("data", resData); + break; + } + } + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, "정상적으로 조회가 완료되었습니다."); + } + if (result.getResult().get("data") == null) { + result.setMsg(result.STATUS_SUCCESS_NODATA, "정상적으로 조회가 완료되었습니다."); + } + logger.info("data::" + result.getResult().get("data")); + } else if (resData.get("rspnsResult").equals("N")) { + result.setMsg(result.STATUS_SUCCESS_NODATA, "정상적으로 조회가 완료되었습니다."); + } else { + result.setMsg(result.STATUS_WARNING, result.STATUS_WARNING_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_WARNING, errorMsg, re); + } catch (SystemException se) { + logger.error("[process error::" + "se.getMessage()" + "]", se); + result.setMsg(result.STATUS_WARNING, errorMsg, se); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + //result.setMsg(result.STATUS_ERROR, e.getMessage(), e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } + + @RequestMapping(value = "/mypage/getMyInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getMyInfo(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== getMyInfo POST ======="); + logger.info("Param Data : " + param); + + Map params = (Map) param.get("dma_searchParam"); + result.setData("INFO", mypageService.getMyInfo(params)); + + result.setMsg(Result.STATUS_SUCESS, "정상적으로 죄회되었습니다."); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.setMsg(Result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", e); + } + + return result.getResult(); + } + + @RequestMapping(value = "/card/check/phone/main.do", method = RequestMethod.GET) + public @ResponseBody + Map cardCheckplus(HttpServletRequest request) { + Result result = caCheckService.cardCheckPlusMain(request, "M"); + return result.getResult(); + } + + @RequestMapping(value = "/card/check/phone/success.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void cardCheckplusSuccess(HttpServletRequest request, HttpServletResponse response) { + try { + Map data = caCheckService.checkPlusSuccess(request, "M"); + String sConnInfo = (String) data.get("sConnInfo"); + String sName = (String) data.get("sName"); + String sMessage = (String) data.get("sMessage"); + String sBirthDate = (String) data.get("sBirthDate"); + String sMobileNo = (String) data.get("sMobileNo"); + String sMobileCo = (String) data.get("sMobileCo"); + int iReturn = (Integer) data.get("iReturn"); + Map param = new HashMap(); + param.put("MBER_CI", sConnInfo); + param.put("MBER_TY", userInfo.getUserType()); + Map rsltMap = joinService.isMemberExsist(param); + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + if (rsltMap == null) { + sMessage = "사용자와 본인확인 정보가 일치하지 않습니다."; + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } else { + if(userInfo.getUserNo().equals(rsltMap.get("MBER_NO"))){ + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + }else{ + sMessage = "사용자와 본인확인 정보가 일치하지 않습니다."; + + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/card/check/phone/fail.do", method = {RequestMethod.GET, RequestMethod.POST}) + public void cardCheckplusFail(HttpServletRequest request, HttpServletResponse response) { + try { + Map data = caCheckService.checkPlusFail(request, "M"); + String sMessage = (String) data.get("sMessage"); + int iReturn = (Integer) data.get("iReturn"); + + response.setStatus(200); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + PrintWriter out = response.getWriter(); + out.println(""); + out.flush(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } + + @RequestMapping(value = "/mypage/getIpCheck.do", method = RequestMethod.POST) + public @ResponseBody + String getIpCheck(@RequestBody Map param) { + + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String userIP = getRemoteAddr(request); + String checkIP = "N"; + if("98.43.129.51".equals(userIP) || "98.43.129.50".equals(userIP) || "175.193.200.84".equals(userIP)){ + checkIP = "Y"; + } + return checkIP; + } + + public static String getRemoteAddr(HttpServletRequest request) { + String ip = null; + ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-RealIP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("REMOTE_ADDR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } +} diff --git a/src/main/java/gtpa/brs/payment/service/PreRegistPaymentService.java b/src/main/java/gtpa/brs/payment/service/PreRegistPaymentService.java new file mode 100644 index 0000000..cba9003 --- /dev/null +++ b/src/main/java/gtpa/brs/payment/service/PreRegistPaymentService.java @@ -0,0 +1,1084 @@ +package gtpa.brs.payment.service; + +import gtpa.brs.payment.service.impl.PreRegistPaymentMapper; +import gtpa.brs.security.KISA_SEED_CBC; +import com.raonsecure.transkey.TransKey; +import com.raonsecure.transkey.XSSValueExpection; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.util.SHA256Util; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 30/04/2019 + * TIME : 10:58 AM + * Project : BRSPW + * Class : PreRegistPaymentService + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service +public class PreRegistPaymentService { + + Logger logger = LoggerFactory.getLogger(PreRegistPaymentService.class); + + @Resource(name = "preRegistPaymentDao") + PreRegistPaymentMapper paymentMapper; + + @Resource(name = "globalsProperties") + Properties env; + + /*@Autowired + HttpClient httpClient;*/ + + public Map registPayment(Map param, HttpServletRequest request) { + Map result = new HashMap(); + try { + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpRegist"); + String terminalId = env.getProperty("Globals.PreRegistPayment.TerminalId"); + String pbszUserKey = env.getProperty("Globals.PreRegistPayment.UserKey"); + + String tranSerialNo = paymentMapper.getTranSerialNo(); + String priorOrdr = "1"; + String mBerCi; + String vhcleNo = ""; + String mberNo; + String vhcleManageNo = ""; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String cardNo1; + String cardNo2; + String cardNo3; + String cardNo4; + String expireDay; + String secureNo = ""; + String cvcNo = ""; + String niNo; + String carrier; + String phoneNo; + String isForeigner; + String stcmpNo; + String setleMnKnd; + String setleMnMno; + String ccmpCode; + + /* 22.08.08 서주희 - 웹접근성 작업(기능 추가) + * 22.08.29 서주희 - 웹접근성 작업(기능 제거) + * 23.07.20 김경민 - 웹접근성 작업(기능 복구) + */ + String cNo1 = (String) param.get("cardNo1"); + String cNo4 = (String) param.get("cardNo4"); + String decodeCardNo2 = (String) param.get("cardNo2"); + String decodeCardNo3 = (String) param.get("cardNo3"); + String cardNo = cNo1 + decodeCardNo2 + decodeCardNo3 + cNo4; + cvcNo = (String) param.get("cvcNo"); + secureNo = (String) param.get("secureNo"); + logger.info("cNo1:" + cNo1 + ",decodeCardNo2:" + decodeCardNo2 + ",decodeCardNo3:" + decodeCardNo3 + ",cNo4:" + cNo4); + logger.info("decodeInfo[ cardNo2:" + decodeCardNo2 + ",cardNo3:" + decodeCardNo3 + ",cvcNo:" + cvcNo + ",secureNo:" + secureNo + "]"); + + /* 22.08.08 서주희 - 웹접근성 작업(기능제거) + * 22.08.29 서주희 - 웹접근성 작업(기능 복구) + * 23.07.20 김경민 - 웹접근성 작업(가상 키패드 제거) + String cNo1 = (String) param.get("cardNo1"); + String cNo4 = (String) param.get("cardNo4"); + String decodeCardNo2 = TransKey.withoutSessionDecode(param.get("cardNo2_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("cardNo2_transkey_keyIndex").toString() + , param.get("cardNo2_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("cardNo2_transkey").toString() + , param.get("cardNo2_transkey_HM").toString() + , null); + String decodeCardNo3 = TransKey.withoutSessionDecode(param.get("cardNo3_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("cardNo3_transkey_keyIndex").toString() + , param.get("cardNo3_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("cardNo3_transkey").toString() + , param.get("cardNo3_transkey_HM").toString() + , null); + String cardNo = cNo1 + decodeCardNo2 + decodeCardNo3 + cNo4; + String decodeCvcNo = TransKey.withoutSessionDecode(param.get("cardNo2_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("cvcNo_transkey_keyIndex").toString() + , param.get("cvcNo_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("cvcNo_transkey").toString() + , param.get("cvcNo_transkey_HM").toString() + , null); + String decodeSecureNo = TransKey.withoutSessionDecode(param.get("secureNo_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("secureNo_transkey_keyIndex").toString() + , param.get("secureNo_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("secureNo_transkey").toString() + , param.get("secureNo_transkey_HM").toString() + , null); + secureNo = decodeSecureNo; + cvcNo = decodeCvcNo; + + logger.info("decodeInfo[ cardNo2:" + decodeCardNo2 + ",cardNo3:" + decodeCardNo3 + ",cvcNo:" + decodeCvcNo + ",secureNo:" + decodeSecureNo + "]"); + */ + + mBerCi = (String) param.get("mberCi"); + List carList = (ArrayList) param.get("cars"); + LinkedHashMap carInfo = carList.get(0); + //for (LinkedHashMap carInfo : carList) { + logger.info("registedCarInfo: " + carInfo); + vhcleNo = (String) carInfo.get("vhcleNo"); + vhcleManageNo = (String) carInfo.get("vhcleManageNo"); + + mberNo = (String) param.get("mberNo"); + //cardNo = (String) param.get("cardNo"); + logger.info("[" + cardNo + "]"); + logger.info("cNo1:" + cNo1 + ",decodeCardNo2:" + decodeCardNo2 + ",decodeCardNo3:" + decodeCardNo3 + ",cNo4:" + cNo4); + if (cardNo.length() == 14) { + cardNo1 = cardNo.substring(0, 2); + cardNo2 = cardNo.substring(2, 6); + cardNo3 = cardNo.substring(6, 10); + cardNo4 = cardNo.substring(10, 14); + } else if (cardNo.length() == 15) { + cardNo1 = cardNo.substring(0, 3); + cardNo2 = cardNo.substring(3, 7); + cardNo3 = cardNo.substring(7, 11); + cardNo4 = cardNo.substring(11, 15); + } else { + cardNo1 = cardNo.substring(0, 4); + cardNo2 = cardNo.substring(4, 8); + cardNo3 = cardNo.substring(8, 12); + cardNo4 = cardNo.substring(12, 16); + } + + logger.info("cardNo1:" + cardNo1 + ",cardNo2:" + cardNo2 + ",cardNo3:" + cardNo3 + ",cardNo4:" + cardNo4); + + expireDay = (String) param.get("expireDay"); + //secureNo = (String) param.get("secureNo"); + //cvcNo = (String) param.get("cvcNo"); + niNo = (String) param.get("niNo"); + carrier = (String) param.get("phoneCarrier"); + phoneNo = (String) param.get("phoneNo"); + isForeigner = (String) param.get("isForeigner"); + stcmpNo = (String) param.get("stcmpNo"); + setleMnKnd = (String) param.get("setleMnKnd"); + setleMnMno = (String) param.get("setleMnMno"); + ccmpCode = (String) param.get("ccmpCode"); + Map seedEncrypt = cardSeedEncrypt(terminalId, tranSerialNo, cardNo1, cardNo2 + , cardNo3 + , cardNo4, expireDay, secureNo, cvcNo, niNo, carrier, phoneNo + , isForeigner, vhcleNo + , pbszUserKey); + + logger.info("seedEncrypt::" + seedEncrypt); + + String trackData = (String) seedEncrypt.get("trackData"); + String authInfo = (String) seedEncrypt.get("authInfo"); + String custInfo = (String) seedEncrypt.get("custInfo"); + + String encryptNoData = SHA256Util.encryptSHA256(cardNo); + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("mberNo", mberNo); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("ccmpCode", ccmpCode); + reqData.put("requstDt", now); + reqData.put("tranSerialNo", tranSerialNo); + reqData.put("cardInfo", trackData); + reqData.put("authInfo", authInfo); + reqData.put("custInfo", custInfo); + reqData.put("mberCi", mBerCi); + reqData.put("vhcleNo", vhcleNo); + reqData.put("priorOrdr", priorOrdr); + reqData.put("registSe", "03"); + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + /*if(result.get("rspnsCode").equals("0000")){ + resultLlist.add(result); + }*/ + //} + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + logger.error("registPayment :[" + param + "]"); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9998"); + result.put("rspnsMssage", "잘못된 정보가 입력되었습니다. 다시 확인 후 입력바랍니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } + return result; + } + + public Map registTMPayment(Map param, HttpServletRequest request) { + Map result = new HashMap(); + try { + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpRegist"); + String terminalId = env.getProperty("Globals.PreRegistPayment.TerminalId"); + String pbszUserKey = env.getProperty("Globals.PreRegistPayment.UserKey"); + + String tranSerialNo = paymentMapper.getTranSerialNo(); + String priorOrdr = "1"; + String mBerCi; + String vhcleNo = ""; + String mberNo; + String vhcleManageNo = ""; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String secureNo = ""; + String niNo = ""; + String stcmpNo; + String setleMnKnd; + String setleMnMno; + String ccmpCode; + String ccmpKnd; + String decodeSecureNo = ""; + + mBerCi = (String) param.get("mberCi"); + List carList = (ArrayList) param.get("cars"); + LinkedHashMap carInfo = carList.get(0); + //for (LinkedHashMap carInfo : carList) { + logger.info("registedCarInfo: " + carInfo); + vhcleNo = (String) carInfo.get("vhcleNo"); + vhcleManageNo = (String) carInfo.get("vhcleManageNo"); + + mberNo = (String) param.get("mberNo"); + + stcmpNo = (String) param.get("stcmpNo"); + setleMnKnd = (String) param.get("setleMnKnd"); + setleMnMno = (String) param.get("setleMnMno"); + ccmpCode = (String) param.get("ccmpCode"); + ccmpKnd = (String) param.get("ccmpKnd"); + if("TP".equals(ccmpKnd)){ + niNo = (String) param.get("niNo"); + /*secureNo = (String) param.get("secureNo"); + 22.08.08 서주희 - 웹접근성 작업(기능제거) + * 22.08.29 서주희 - 웹접근성 작업(기능 복구) + * 23.07.20 김경민 - 웹접근성 작업(가상 키패드 제거) + */ + decodeSecureNo = TransKey.withoutSessionDecode(param.get("secureNo_transkeyID").toString() + , param.get("initTime").toString() + , "numberMobile" + , param.get("secureNo_transkey_keyIndex").toString() + , param.get("secureNo_transkey_fieldType").toString() + , param.get("seedKey").toString() + , param.get("secureNo_transkey").toString() + , param.get("secureNo_transkey_HM").toString() + , null); + secureNo = decodeSecureNo; + logger.info("decodeInfo[ secureNo:" + decodeSecureNo + "]"); + } + Map seedEncrypt = tMoneySeedEncrypt(terminalId, tranSerialNo, mberNo, ccmpKnd + , secureNo, niNo, vhcleNo, pbszUserKey); + + logger.info("seedEncrypt::" + seedEncrypt); + + String trackData = (String) seedEncrypt.get("trackData"); + String authInfo = ""; + + if("TP".equals(ccmpKnd)){ + authInfo = (String) seedEncrypt.get("authInfo"); + }else if("TB".equals(ccmpKnd)){ + authInfo = (String) param.get("authInfo"); + } + String custInfo = "NO_DATA"; + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("mberNo", mberNo); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("ccmpCode", ccmpCode); + reqData.put("requstDt", now); + reqData.put("tranSerialNo", tranSerialNo); + reqData.put("cardInfo", trackData); + reqData.put("authInfo", authInfo); + reqData.put("custInfo", custInfo); + reqData.put("mberCi", mBerCi); + reqData.put("vhcleNo", vhcleNo); + reqData.put("priorOrdr", priorOrdr); + reqData.put("registSe", "03"); + reqData.put("ccmpKnd", ccmpKnd); + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + logger.error("registPayment :[" + param + "]"); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9998"); + result.put("rspnsMssage", "잘못된 정보가 입력되었습니다. 다시 확인 후 입력바랍니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } + return result; + } + + /** + * Terminate payment map. + * + * @param param the param + * @return the map + */ + public Map terminatePayment(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpTerminate"); + String mberNo = (String) param.get("mberNo"); + logger.info("terminatePayment mberNo -> " + mberNo); + List carList = (ArrayList) param.get("cars"); + logger.info("carList -> " + carList); + //LinkedHashMap carInfo = carList.get(0); + Map carInfo = carList.get(0); + logger.info("carInfo -> " + carInfo); + //LinkedHashMap payInfo = (LinkedHashMap)param.get("pay"); + Map payInfo = (Map) param.get("pay"); + logger.info("payInfo -> " + payInfo); + String vhcleManageNo = (String) carInfo.get("VHCLE_MANAGE_NO"); + String vkeyIssuSeqNo = (String) payInfo.get("VKEY_ISSU_SEQ_NO"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String stcmpNo = (String) payInfo.get("STCMP_NO"); + String setleMnKnd = (String) payInfo.get("SETLE_MN_KND"); + String setleMnMno = (String) payInfo.get("SETLE_MN_MNO"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "002"); + reqData.put("vhcleManageNo", vhcleManageNo); + reqData.put("mberNo", mberNo); + reqData.put("stcmpNo", stcmpNo); + reqData.put("setleMnKnd", setleMnKnd); + reqData.put("setleMnMno", setleMnMno); + reqData.put("requstDt", now); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo); + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + return result; + } + + public List completePayment(Map param) { + List resultLlist = new ArrayList(); + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpComplete"); + String mberNo = (String) param.get("mberNo"); + List pays = (ArrayList) param.get("credits"); + for (LinkedHashMap payInfo : pays) { + String vkeyIssuSeqNo = (String) payInfo.get("vkeyIssuSeqNo"); + String priorOrdr = (String) payInfo.get("priorOrdr"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0100001"); + reqData.put("insttCntcJobSe", "008"); + reqData.put("mberNo", mberNo); + reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo); + reqData.put("requstDt", now); + reqData.put("priorOrdr", priorOrdr); + reqData.put("registSe", "00"); + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + if (result.get("rspnsCode").equals("0000")) { + resultLlist.add(result); + } + } + return resultLlist; + } + + public Map approvalPayment(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpApproval"); + String insttDelngNo = (String) param.get("insttDelngNo"); + String vhcleNo = (String) param.get("vhcleNo"); + String vhcleTy = (String) param.get("vhcleTy"); + String vhcleOwnerCi = (String) param.get("vhcleOwnerCi"); + + String requstAmount = param.get("requstAmount").toString(); + String occrrncDate = (String) param.get("occrrncDate"); + String occrrncTime = (String) param.get("occrrncTime"); + String insttChrgeDetail = (String) param.get("insttChrgeDetail"); + String insttDetailCode = (String) param.get("insttDetailCode"); + String insttDetailNm = (String) param.get("insttDetailNm"); + String pasngSeCode = (String) param.get("pasngSeCode"); + String ffnlgTaxitm = (String) param.get("ffnlgTaxitm"); + String passivePaymentAt = (String) param.get("passivePaymentAt"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", param.get("insttNo")); + reqData.put("insttCntcJobSe", "003"); + reqData.put("vhcleNo", vhcleNo); + reqData.put("vhcleTy", vhcleTy); + reqData.put("vhcleOwnerCi", vhcleOwnerCi); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("requstDt", now); + reqData.put("requstAmount", requstAmount); + reqData.put("occrrncDate", occrrncDate); + reqData.put("occrrncTime", occrrncTime); + reqData.put("insttChrgeDetail", insttChrgeDetail); + reqData.put("insttDetailCode", insttDetailCode); + reqData.put("insttDetailNm", insttDetailNm); + reqData.put("pasngSeCode", pasngSeCode); + reqData.put("ffnlgTaxitm", ffnlgTaxitm); + reqData.put("passivePaymentAt", passivePaymentAt); + + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + + return result; + } + + public Map approvalReservePayment(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpApprovalResve"); + String insttDelngNo = (String) param.get("insttDelngNo"); + String vhcleNo = (String) param.get("vhcleNo"); + String vhcleTy = (String) param.get("vhcleTy"); + String vhcleOwnerCi = (String) param.get("vhcleOwnerCi"); + + String requstAmount = (String) param.get("requstAmount"); + String occrrncDate = (String) param.get("occrrncDate"); + String occrrncTime = (String) param.get("occrrncTime"); + String insttChrgeDetail = (String) param.get("insttChrgeDetail"); + String insttDetailCode = (String) param.get("insttDetailCode"); + String insttDetailNm = (String) param.get("insttDetailNm"); + String pasngSeCode = (String) param.get("pasngSeCode"); + String ffnlgTaxitm = (String) param.get("ffnlgTaxitm"); + String reserveDate = (String) param.get("reserveDate"); + String passivePaymentAt = (String) param.get("passivePaymentAt"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", param.get("insttNo")); + reqData.put("insttCntcJobSe", "003"); + reqData.put("vhcleNo", vhcleNo); + reqData.put("vhcleTy", vhcleTy); + reqData.put("vhcleOwnerCi", vhcleOwnerCi); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("requstDt", now); + reqData.put("requstAmount", requstAmount); + reqData.put("occrrncDate", occrrncDate); + reqData.put("occrrncTime", occrrncTime); + reqData.put("insttChrgeDetail", insttChrgeDetail); + reqData.put("insttDetailCode", insttDetailCode); + reqData.put("insttDetailNm", insttDetailNm); + reqData.put("pasngSeCode", pasngSeCode); + reqData.put("ffnlgTaxitm", ffnlgTaxitm); + reqData.put("passivePaymentAt", passivePaymentAt); + reqData.put("reserveDate", reserveDate); + + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + + return result; + } + + public Map approvalResult(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpApprovalResult"); + + String vhcleNo = (String) param.get("vhcleNo"); + String vhcleOwnerCi = (String) param.get("vhcleOwnerCi"); + String brsNo = (String) param.get("brsNo"); + String insttNo = (String) param.get("insttNo"); + String insttDelngNo = (String) param.get("insttDelngNo"); + String delngDate = (String) param.get("delngDate"); + String delngTime = (String) param.get("delngTime"); + String stcmpNm = (String) param.get("stcmpNm"); + String mrhstNo = (String) param.get("mrhstNo"); + String ffnlgTaxitm = (String) param.get("ffnlgTaxitm"); + String requstAmount = (String) param.get("requstAmount"); + String dscntRt = (String) param.get("dscntRt"); + String dscntAmount = (String) param.get("dscntAmount"); + String setleAmount = (String) param.get("setleAmount"); + String feeRt = (String) param.get("feeRt"); + String fee = (String) param.get("fee"); + String stcmpDelngNo = (String) param.get("stcmpDelngNo"); + String ccmpCode = (String) param.get("ccmpCode"); + String ccmpNm = (String) param.get("ccmpNm"); + String cardNo = (String) param.get("cardNo"); + String confmNo = (String) param.get("confmNo"); + String confmDt = (String) param.get("confmDt"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", "003"); + reqData.put("vhcleNo", vhcleNo); + reqData.put("brsNo", brsNo); + reqData.put("vhcleOwnerCi", vhcleOwnerCi); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("requstDt", now); + reqData.put("requstAmount", requstAmount); + reqData.put("delngDate", delngDate); + reqData.put("delngTime", delngTime); + reqData.put("stcmpNm", stcmpNm); + reqData.put("mrhstNo", mrhstNo); + reqData.put("dscntRt", dscntRt); + reqData.put("dscntAmount", dscntAmount); + reqData.put("setleAmount", setleAmount); + reqData.put("feeRt", feeRt); + reqData.put("fee", fee); + reqData.put("stcmpDelngNo", stcmpDelngNo); + reqData.put("ccmpCode", ccmpCode); + reqData.put("ccmpNm", ccmpNm); + reqData.put("cardNo", cardNo); + reqData.put("confmNo", confmNo); + reqData.put("confmDt", confmDt); + reqData.put("ffnlgTaxitm", ffnlgTaxitm); + + + logger.info("reqData::" + reqData); + result = requestPreRegistPayment(url, reqData); + logger.info("result::" + result); + + return result; + } + + public Map requestPreRegistPayment(String requestURL, + //Map param + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (data.get("rspnsCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("ccmpNm", data.get("ccmpNm")); + result.put("vkeyPblNo", data.get("vkeyPblNo")); + result.put("vkeyIssuSeqNo", data.get("vkeyIssuSeqNo")); + result.put("mberNo", data.get("mberNo")); + result.put("vkeyInfoSttus", data.get("vkeyInfoSttus")); + + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map cardSeedEncrypt( + String terminalId, String tranSerialNo, String cardNo1, String cardNo2, String cardNo3, String cardNo4 + , String expireDay, String secureNo, String cvcNo, String niNo, String phoneCarrier, String phoneNo + , String isForeigner, String carNo, String userKey) { + byte[] pbszUserKey = hexStringToByteArray(userKey); + Map result = new HashMap(); + String errLine = ""; + + logger.info("cardNo1:" + cardNo1 + ",cardNo2:" + cardNo2 + ",cardNo3:" + cardNo3 + ",cardNo4:" + cardNo4); + terminalId = terminalId.substring(terminalId.length() - 8, terminalId.length()); + errLine = "1"; + String cardBackNo = cardNo2 + cardNo3 + cardNo4; + cvcNo = padRightSpace(cvcNo, 4); + errLine = "2"; + phoneNo = padRightSpace(phoneNo, 12); + errLine = "3"; + carNo = carNo.substring(carNo.length() - 4, carNo.length()); + errLine = "4"; + byte[] fByte = new byte[3]; + fByte[0] = (byte) 0xFF; + fByte[1] = (byte) 0xFF; + fByte[2] = (byte) 0xFF; + + + ByteArrayOutputStream sourceData1 = new ByteArrayOutputStream(); + ByteArrayOutputStream bData1 = new ByteArrayOutputStream(); + ByteArrayOutputStream sourceData2 = new ByteArrayOutputStream(); + ByteArrayOutputStream bData2 = new ByteArrayOutputStream(); + ByteArrayOutputStream sourceData3 = new ByteArrayOutputStream(); + ByteArrayOutputStream bData3 = new ByteArrayOutputStream(); + try { + sourceData1.write(cardBackNo.getBytes()); + errLine = "5"; + sourceData1.write(expireDay.getBytes()); + errLine = "6"; + byte sourceDataByte1[] = sourceData1.toByteArray(); + bData1.write(terminalId.getBytes()); + bData1.write(tranSerialNo.getBytes()); + errLine = "7"; + byte bDataByte1[] = bData1.toByteArray(); + errLine = "8"; + byte[] seedCbcEncryptData1 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceDataByte1, bDataByte1, 0, 16); + errLine = "9"; + String hexString = byteArrayToHexString(seedCbcEncryptData1, 0, 32); + errLine = "10"; + String trackData = cardNo1 + hexString; + result.put("trackData", trackData); + /*print_hex("sourceDataByte1", sourceDataByte1, 16); + print_hex("bDataByte", bDataByte1, 16); + print_hex("seedCbcEncryptData1", seedCbcEncryptData1, 16);*/ + logger.info("hexString::" + hexString); + logger.info("trackData::" + trackData); + + sourceData2.write(secureNo.getBytes()); + sourceData2.write(niNo.getBytes()); + sourceData2.write(cvcNo.getBytes()); + sourceData2.write(fByte); + byte sourceData2Byte[] = sourceData2.toByteArray(); + bData2.write(carNo.getBytes()); + bData2.write(cardBackNo.getBytes()); + byte bData2Byte[] = bData2.toByteArray(); + byte[] seedCbcEncryptData2 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceData2Byte, bData2Byte, 0, 16); + String hexString2 = byteArrayToHexString(seedCbcEncryptData2, 0, 32); + result.put("authInfo", hexString2); + /*print_hex("sourceData2Byte", sourceData2Byte, 16); + print_hex("bData2", bData2Byte, 16); + print_hex("authDataSeedEncrypt", seedCbcEncryptData2, 16);*/ + logger.info("hexString2::" + hexString2); + + sourceData3.write(phoneCarrier.getBytes()); + sourceData3.write(phoneNo.getBytes()); + sourceData3.write(fByte); + byte sourceData3Byte[] = sourceData3.toByteArray(); + bData3.write(carNo.getBytes()); + bData3.write(cardBackNo.getBytes()); + byte bData3Byte[] = bData3.toByteArray(); + byte[] seedCbcEncryptData3 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceData3Byte, bData3Byte, 0, 16); + String hexText3 = byteArrayToHexString(seedCbcEncryptData3, 0, 32); + String custInfo = isForeigner + hexText3; + result.put("custInfo", custInfo); + /*print_hex("sourceData3Byte", sourceData3Byte, 16); + print_hex("bData3Byte", bData3Byte, 16); + print_hex("authDataSeedEncrypt", seedCbcEncryptData3, 16);*/ + logger.info("hexText3::" + hexText3); + logger.info("custInfo::" + custInfo); + result.put("rsMsg", "success"); + result.put("rsCd", "01"); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rsMsg", "시스템 처리 오류"); + result.put("rsCd", "02"); + if("".equals(errLine)){ + logger.info(errLine+":cardS:terminalId::" + terminalId); + }else if("1".equals(errLine)){ + logger.info(errLine+":cardS:cvcNo::" + cvcNo); + }else if("2".equals(errLine)){ + logger.info(errLine+":cardS:phoneNo::" + phoneNo); + }else if("3".equals(errLine)){ + logger.info(errLine+":cardS:carNo::" + carNo); + }else if("4".equals(errLine)){ + logger.info(errLine+":cardS:cardBackNo::" + cardBackNo); + }else if("5".equals(errLine)){ + logger.info(errLine+":cardS:expireDay::" + expireDay); + }else if("6".equals(errLine)){ + logger.info(errLine+":cardS:tranSerialNo::" + tranSerialNo); + }else if("7".equals(errLine)){ + logger.info(errLine+":cardS:bData1::" + bData1); + }else if("8".equals(errLine)){ + logger.info(errLine+":cardS:pbszUserKey::" + pbszUserKey); + }else if("9".equals(errLine)){ + logger.info(errLine+":cardS:"); + }else if("10".equals(errLine)){ + logger.info(errLine+":cardS:"); + } + } catch (IOException re) { + logger.error("[IOException::" + "" + "]", re); + result.put("rsMsg", "시스템 스트림처리 오류"); + result.put("rsCd", "02"); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rsMsg", "시스템 오류"); + result.put("rsCd", "02"); + } finally { + try { + if (sourceData1 != null) sourceData1.close(); + if (bData1 != null) bData1.close(); + if (sourceData2 != null) sourceData2.close(); + if (bData2 != null) bData2.close(); + if (sourceData3 != null) sourceData3.close(); + if (bData3 != null) bData3.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + } + return result; + } + + public Map tMoneySeedEncrypt( + String terminalId, String tranSerialNo, String mberNo, String ccmpKnd + , String secureNo, String niNo, String carNo, String userKey) { + byte[] pbszUserKey = hexStringToByteArray(userKey); + Map result = new HashMap(); + + terminalId = terminalId.substring(terminalId.length() - 8, terminalId.length()); + String cardBackNo = ""; + String expireDay = ""; + carNo = carNo.substring(carNo.length() - 4, carNo.length()); + String mberNo1 = mberNo.substring(0, mberNo.length() - 16); + String mberNoSub = mberNo.substring(mberNo.length() - 12, mberNo.length()); + mberNo = mberNo.substring(mberNo.length() - 16, mberNo.length()); + byte[] fByte = new byte[3]; + fByte[0] = (byte) 0xFF; + fByte[1] = (byte) 0xFF; + fByte[2] = (byte) 0xFF; + + ByteArrayOutputStream sourceData1 = new ByteArrayOutputStream(); + ByteArrayOutputStream bData1 = new ByteArrayOutputStream(); + ByteArrayOutputStream sourceData2 = new ByteArrayOutputStream(); + ByteArrayOutputStream bData2 = new ByteArrayOutputStream(); + try { + sourceData1.write(mberNo.getBytes()); + byte sourceDataByte1[] = sourceData1.toByteArray(); + bData1.write(terminalId.getBytes()); + bData1.write(tranSerialNo.getBytes()); + byte bDataByte1[] = bData1.toByteArray(); + byte[] seedCbcEncryptData1 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceDataByte1, bDataByte1, 0, 16); + String hexString = byteArrayToHexString(seedCbcEncryptData1, 0, 32); + String trackData = mberNo1+hexString; + result.put("trackData", trackData); + logger.info("trackData::" + trackData); + + if("TP".equals(ccmpKnd)){ + sourceData2.write(secureNo.getBytes()); + sourceData2.write(niNo.getBytes()); + sourceData2.write(fByte); + byte sourceData2Byte[] = sourceData2.toByteArray(); + bData2.write(carNo.getBytes()); + bData2.write(mberNoSub.getBytes()); + byte bData2Byte[] = bData2.toByteArray(); + byte[] seedCbcEncryptData2 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceData2Byte, bData2Byte, 0, 16); + String hexString2 = byteArrayToHexString(seedCbcEncryptData2, 0, 32); + result.put("authInfo", hexString2); + logger.info("hexString2::" + hexString2); + } + + result.put("rsMsg", "success"); + result.put("rsCd", "01"); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rsMsg", "시스템 처리 오류"); + result.put("rsCd", "02"); + } catch (IOException re) { + logger.error("[IOException::" + "" + "]", re); + result.put("rsMsg", "시스템 스트림처리 오류"); + result.put("rsCd", "02"); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rsMsg", "시스템 오류"); + result.put("rsCd", "02"); + } finally { + try { + if (sourceData1 != null) sourceData1.close(); + if (bData1 != null) bData1.close(); + if (sourceData2 != null) sourceData2.close(); + if (bData2 != null) bData2.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + } + return result; + } + + private byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i + 1), 16)); + } + return data; + } + + private String byteArrayToHexString(byte[] bytes, int offset, int length) { + + StringBuilder sb = new StringBuilder(); + + for (byte b : bytes) { + + sb.append(String.format("%02X", b & 0xff)); + } + + return sb.toString().substring(offset, length); + } + + private String padRightSpace(String str, int num) { + return String.format("%1$-" + num + "s", str).replace(' ', ' '); + } + + private String padLeftSpace(String inputString, int length) { + if (inputString.length() >= length) { + return inputString; + } + StringBuilder sb = new StringBuilder(); + while (sb.length() < length - inputString.length()) { + sb.append(' '); + } + sb.append(inputString); + + return sb.toString(); + } + + private void print_hex(String valName, byte[] data, int dataLen) { + int i = 0; + + //System.out.printf("%s [%dbyte] :", valName, dataLen); + for (i = 0; i < dataLen; i++) { + if ((i & 0x0F) == 0) + logger.info(""); + + //System.out.printf(" %02X", data[i]); + } + logger.info(""); + } + + public List getPaymentMngCd() { + return paymentMapper.getPaymentMngCd(); + } + + public List getPaymentCd(Map params) { + return paymentMapper.getPaymentCd(params); + } + + public Map getPaymentInfo(String userNo) { + return paymentMapper.getPaymentInfo(userNo); + } + + public Map checkNormalAcctNo(Map param) { + Map result; + + String url = env.getProperty("Globals.PreRegistPayment.acctnmRcms"); + String secrKey = env.getProperty("Globals.PreRegistPayment.secrKey"); + String key = env.getProperty("Globals.PreRegistPayment.key"); + + String trscSeqNo = paymentMapper.getTrscSeqNo(); + String bankCd = (String) param.get("bankCd"); + String searchAcctNo = (String) param.get("acctNo"); + String niNo1 = (String) param.get("niNo1"); + + JSONObject jsonData = new JSONObject(); + jsonData.put("SECR_KEY", secrKey); + jsonData.put("KEY", key); + JSONArray reqDatas = new JSONArray(); + JSONObject reqData = new JSONObject(); + reqData.put("BANK_CD", bankCd); + reqData.put("SEARCH_ACCT_NO", searchAcctNo); + reqData.put("ACNM_NO", niNo1); + reqData.put("ICHE_AMT", "0"); + reqData.put("TRSC_SEQ_NO", trscSeqNo); + reqDatas.add(reqData); + jsonData.put("REQ_DATA", reqDatas); + + logger.info("jsonData::" + jsonData); + result = requestAcctNmRcms(url, jsonData); + + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + result.put("reqDt", now); + result.put("TRSC_SEQ_NO", trscSeqNo); + result.put("BANK_CD", bankCd); + result.put("BANK_NM", param.get("bankNm")); + result.put("ACNUT_NO", searchAcctNo); + result.put("BSNM_REGIST_NO", param.get("bsnmRegistNo")); + result.put("NI_NO1", niNo1); + if (result.get("ACCT_NM") != null) { + result.put("ACCT_NM", result.get("ACCT_NM")); + } + result.put("rspnsCode", result.get("rspnsCode")); + result.put("rspnsMssage", result.get("rspnsMssage")); + logger.info("result::" + result); + + return result; + } + + public Map requestAcctNmRcms(String requestURL, + //Map param + JSONObject jsonData + ) { + Map result = new HashMap(); + try { + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + + List params = new ArrayList<>(); + params.add(new BasicNameValuePair("JSONData", jsonData.toString())); + + postRequest.setEntity(new UrlEncodedFormEntity(params)); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + body = body.replaceAll("\r\n", ""); + body = body.replaceAll("\r", ""); + body = body.replaceAll("\n", ""); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body.trim()); + JSONObject jsonObj = (JSONObject) obj; + JSONArray data = (JSONArray) jsonObj.get("RESP_DATA"); + logger.info(body.trim()); + if (jsonObj.get("RSLT_CD").equals("000")) { + JSONObject respData = (JSONObject) data.get(0); + result.put("ACCT_NM", respData.get("ACCT_NM")); + result.put("TRSC_SEQ_NO", respData.get("TRSC_SEQ_NO")); + result.put("rspnsCode", jsonObj.get("RSLT_CD")); + result.put("rspnsMssage", jsonObj.get("RSLT_MSG")); + } else { + result.put("rspnsResult", "E"); + //result.put("rspnsCode", jsonObj.get("RSLT_CD")); + result.put("rspnsCode", jsonObj.get("RSLT_CD")); + result.put("rspnsMssage", jsonObj.get("RSLT_MSG")); + } + + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return result; + } + + public List getBankCd(Map params) throws SQLException { + return paymentMapper.getBankCd(params); + } + + public void insertAcctHist(Map acctHistData) throws SQLException { + paymentMapper.insertAcctHist(acctHistData); + } + + public int insertAcctInfoComplete(List acctHistData) throws SQLException { + return paymentMapper.insertAcctInfoComplete(acctHistData); + } +} diff --git a/src/main/java/gtpa/brs/payment/service/impl/PreRegistPaymentMapper.java b/src/main/java/gtpa/brs/payment/service/impl/PreRegistPaymentMapper.java new file mode 100644 index 0000000..32317eb --- /dev/null +++ b/src/main/java/gtpa/brs/payment/service/impl/PreRegistPaymentMapper.java @@ -0,0 +1,85 @@ +package gtpa.brs.payment.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Repository("preRegistPaymentDao") +public class PreRegistPaymentMapper extends EgovAbstractMapper { + + private String NAMESPACE = "PreRegistPaymentDAO"; + + public String getTranSerialNo() { + String tranSerialNo = ""; + try { + tranSerialNo = padLeftZero(selectOne(NAMESPACE + ".getTranSerialNo"), 8); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + tranSerialNo = padLeftZero("1", 8); + } + return tranSerialNo; + } + + private String padLeftZero(String inputString, int length) { + if (inputString.length() >= length) { + return inputString; + } + StringBuilder sb = new StringBuilder(); + while (sb.length() < length - inputString.length()) { + sb.append('0'); + } + sb.append(inputString); + + return sb.toString(); + } + + public List getPaymentMngCd() { + return selectList(NAMESPACE + ".getPaymentMngCd"); + } + + public List getPaymentCd(Map params) { + return selectList(NAMESPACE + ".getPaymentCd", params); + } + + public Map getPaymentInfo(String userNo) { + return selectOne(NAMESPACE + ".getPaymentInfo", userNo); + } + + public String getTrscSeqNo() { + String tranSerialNo = ""; + Date date = new Date(); + int day = date.getDay(); + try { + tranSerialNo = padLeftZero(selectOne(NAMESPACE + ".getTrscSeqNo"), 6); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + tranSerialNo = padLeftZero("1", 6); + } finally { + tranSerialNo = day + "" + tranSerialNo; + } + return tranSerialNo; + } + + public List getBankCd(Map params) { + return selectList(NAMESPACE + ".getBankCd", params); + } + + public void insertAcctHist(Map acctHistData) { + insert(NAMESPACE + ".insertAcctHist", acctHistData); + } + + public int insertAcctInfoComplete(List acctHistData) { + int rsltCnt = 0; + rsltCnt += insert(NAMESPACE + ".insertAcctInfoComplete", acctHistData); + rsltCnt += insert(NAMESPACE + ".insertAcctInfoCompleteHist", acctHistData); + return rsltCnt; + } + +} diff --git a/src/main/java/gtpa/brs/penalty/service/PenaltyService.java b/src/main/java/gtpa/brs/penalty/service/PenaltyService.java new file mode 100644 index 0000000..6696b45 --- /dev/null +++ b/src/main/java/gtpa/brs/penalty/service/PenaltyService.java @@ -0,0 +1,49 @@ +package gtpa.brs.penalty.service; + +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 17/05/2019 + * TIME : 5:26 PM + * Project : BRSPW + * Class : PenaltyService + * Desc : + * ///////////////////////////////////////////////////// + */ +public interface PenaltyService { + + Map getFfnlgInfo(Map param); + + Map getFfnlgInfoDetail(Map param); + + Map getFfnlgInfoByFee(Map param); + + Map getFfnlgInfoDetailByFee(Map param); + + Map payAPenalty(Map param); + + + Map getPenaltyCivilAcceptList(Map param); + + Map getPenaltyCivilAcceptDetail(Map param); + + Map penaltyCivilAcceptInsert(Map param1, Map param2, List files); + + Map penaltyCivilAcceptUpdate(Map param1, Map param2, List files); + + Map getPenaltyByFeeCivilAcceptList(Map param); + + Map getPenaltyByFeeCivilAcceptDetail(Map param); + + Map penaltyByFeeCivilAcceptInsert(Map param1, Map param2, List files); + + Map penaltyByFeeCivilAcceptUpdate(Map param1, Map param2, List files); + + Map opinionPrivachCheckApi(Map param, List files); + + Map problemPrivachCheckApi(Map param); +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/penalty/service/impl/PenaltyMapper.java b/src/main/java/gtpa/brs/penalty/service/impl/PenaltyMapper.java new file mode 100644 index 0000000..ddda6e5 --- /dev/null +++ b/src/main/java/gtpa/brs/penalty/service/impl/PenaltyMapper.java @@ -0,0 +1,20 @@ +package gtpa.brs.penalty.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 27/05/2019 + * TIME : 11:17 AM + * Project : BRSPW + * Class : PenaltyMapper + * Desc : + * ///////////////////////////////////////////////////// + */ +@Repository("penaltyDao") +public class PenaltyMapper extends EgovAbstractMapper { + private String NAMESPACE = "PenaltyDAO"; +} diff --git a/src/main/java/gtpa/brs/penalty/service/impl/PenaltyServiceImpl.java b/src/main/java/gtpa/brs/penalty/service/impl/PenaltyServiceImpl.java new file mode 100644 index 0000000..7beff46 --- /dev/null +++ b/src/main/java/gtpa/brs/penalty/service/impl/PenaltyServiceImpl.java @@ -0,0 +1,2030 @@ +package gtpa.brs.penalty.service.impl; + +import gtpa.brs.fee.service.impl.FeeMapper; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.penalty.service.PenaltyService; +import gtpa.brs.penalty.service.impl.PenaltyMapper; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.BrsIdGnrUtil; +import gtpa.brs.util.CommonUtil; +import gtpa.brs.util.Http; +import gtpa.brs.util.Result; +import gtpa.brs.vehicle.service.VehicleService; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 17/05/2019 + * TIME : 5:28 PM + * Project : BRSPW + * Class : PenaltyServiceImpl + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service("PenaltyService") +public class PenaltyServiceImpl implements PenaltyService { + + private Logger logger = LoggerFactory.getLogger(PenaltyServiceImpl.class); + + @Resource(name = "globalsProperties") + private Properties env; + + @Resource(name = "penaltyDao") + private PenaltyMapper penaltyMapper; + + @Resource(name = "feeDao") + FeeMapper feeMapper; + + @Resource(name = "fileGenIDService") + private BrsIdGnrUtil fileGenIDService; + + @Autowired + private PreRegistPaymentService preRegistPaymentService; + + @Autowired + private VehicleService vehicleService; + + @Autowired + private UserInfo userInfo; + + /*@Autowired + HttpClient httpClient;*/ + @Override + public Map getFfnlgInfo(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.ffnlgInfo"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String vhcleNo = (String) param.get("vhcleNum"); + String userCi = (String) param.get("mberCi"); + String uniqueID = UUID.randomUUID().toString(); + /* + * sysId 시스템 ID (6) + tranDate 전송일시 (14) + transId 트랜잭션ID(요청 원문 식별 값) (40) + sci CI + loop 반복 구간 (array) + vhrno 차량번호(선택) + * */ + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("startDt", param.get("startDate")); + reqData.put("endDt", param.get("endDate")); + reqData.put("sci", userCi); + reqData.put("vhrno", vhcleNo); + + logger.info("reqData::" + reqData); + result = requestFfnlgInfo(url, reqData); + logger.info("result::" + result); + return result; + } + + @Override + public Map getFfnlgInfoDetail(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.elctrnNticInfo"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String regltId = (String) param.get("regltId"); + String uniqueID = UUID.randomUUID().toString(); + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("inputGb", "2"); + reqData.put("regltId", regltId); + + logger.info("reqData::" + reqData); + result = requestFfnlgInfoDetail(url, reqData); + logger.info("result::" + result); + + return result; + } + + /** + * 혼잡과태료 목록조회 + * + * @param param the param + * @return the ffnlg info by fee + */ + @Override + public Map getFfnlgInfoByFee(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPenaltyList"); + String insttNo = " "; + String insttCntcJobSe = " "; + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNum = (String) param.get("vhcleNum"); + String status = (String) param.get("status"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + reqData.put("status", status); + + logger.info("reqData::" + reqData); + result = getPenaltyList(url, reqData); + logger.info("result::" + result); + + return result; + } + + /** + * 혼잡과태료상세조회 + * + * @param param the param + * @return the ffnlg info detail by fee + */ + @Override + public Map getFfnlgInfoDetailByFee(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPenaltyDetailList"); + String insttCntcJobSe = " "; + String insttNo = (String) param.get("insttNo"); + String insttDelngNo = (String) param.get("insttDelngNo"); + String civilNo = param.get("civilNo").toString(); + /*insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + insttDelngNo 기관 거래 번호 (50)*/ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("civilNo", civilNo); + logger.info("reqData::" + reqData); + result = getPenaltyDetailList(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map payAPenalty(Map param) { + Result result = new Result(); + List resultList = new ArrayList(); + /* + * "insttNo":"BRSMC0000002", (고정) + "insttCntcJobSe":"003", (고정) + "vhcleNo":"12가1234", (차량번호) + "vhcleTy":"60", (차량유형 > 60:일반 / 61:경차 / 62:감면(요일제, 저공해 감면차량)) + "vhcleOwnerCi":"1122334455667788", (차량 소유자 CI) + "insttDelngNo":"TEST20190515153540", (거래 주문번호 유니크값으로 요청) + "requstDt":"20190509112530", (요청일시) + "requstAmount":"1250", (결제요청금액) + "occrrncDate":"20190507", (과금발생일자) + "occrrncTime":"112045", (과금발생시간) + "insttChrgeSe":"01", (01:통행료(이용료) 02:주차장 03:과태료) + "insttDetailCode":"009", (과금세부코드) + "insttDetailNm":"남산999호", (과금세부명) + "pasngSeCode":"1", (1:진입 / 2:진출) + "ffnlgTaxitm":null (insttChrgeSe의 값이 “03”이면 세목값 입력 필수) + * */ + List penaltyList = (List) param.get("penaltyList"); + LinkedHashMap specPaymentDate = (LinkedHashMap) param.get("specPaymentDate"); + String resrvDate = (String) specPaymentDate.get("specPaymentDate"); + + logger.info("penaltyList::" + penaltyList); + logger.info("specPaymentDate::" + specPaymentDate); + Map response = new LinkedHashMap(); + if (resrvDate.equals("")) { + for (Object obj : penaltyList) { + Map data = new LinkedHashMap(); + Map penaltyInfo = (LinkedHashMap) obj; + data.put("vhcleNo", penaltyInfo.get("vhcleNum")); + Map searchParam = new HashMap(); + searchParam.put("MBER_NO", userInfo.getUserNo()); + searchParam.put("VHCLE_NO", penaltyInfo.get("vhcleNum")); + Map vhcleInfo = vehicleService.getVhcleInfo(searchParam); + if (vhcleInfo != null) { + data.put("vhcleTy", penaltyInfo.get("carType")); + data.put("vhcleOwnerCi", vhcleInfo.get("VHCLE_OWNER_CI")); + data.put("insttNo", penaltyInfo.get("insttNo")); + data.put("insttDelngNo", penaltyInfo.get("taxNo")); + data.put("requstAmount", penaltyInfo.get("fineAmount")); + String checkDate = penaltyInfo.get("violatDt").toString(); + data.put("occrrncDate", checkDate.substring(0, 8)); + data.put("occrrncTime", checkDate.substring(8, 14)); + //혼잡: 01, 공영:02 분기처리, 과태료:03 + data.put("insttChrgeDetail", "03"); + data.put("insttChrgeSe", penaltyInfo.get("insttChrgeSe")); + data.put("insttDetailCode", penaltyInfo.get("insttDetailCode")); + data.put("insttDetailNm", penaltyInfo.get("violatContents")); + data.put("pasngSeCode", penaltyInfo.get("pasngSeCode")); + data.put("ffnlgTaxitm", penaltyInfo.get("ffnlgTaxitm")); + data.put("passivePaymentAt", "Y"); + response = preRegistPaymentService.approvalPayment(data); + if (response.get("rspnsCode").equals("0000")) { + resultList.add(response); + } + } + } + } else { + for (Object obj : penaltyList) { + Map data = new LinkedHashMap(); + Map penaltyInfo = (LinkedHashMap) obj; + data.put("vhcleNo", penaltyInfo.get("vhcleNum")); + Map searchParam = new HashMap(); + searchParam.put("MBER_NO", userInfo.getUserNo()); + searchParam.put("VHCLE_NO", penaltyInfo.get("vhcleNum")); + Map vhcleInfo = vehicleService.getVhcleInfo(searchParam); + if (vhcleInfo != null) { + data.put("vhcleTy", penaltyInfo.get("carType")); + data.put("vhcleOwnerCi", vhcleInfo.get("VHCLE_OWNER_CI")); + data.put("insttNo", penaltyInfo.get("insttNo")); + data.put("insttDelngNo", penaltyInfo.get("taxNo")); + data.put("requstAmount", penaltyInfo.get("fineAmount")); + String checkDate = penaltyInfo.get("violatDt").toString(); + data.put("occrrncDate", checkDate.substring(0, 8)); + data.put("occrrncTime", checkDate.substring(8, 14)); + //혼잡: 01, 공영:02 분기처리, 과태료:03 + data.put("insttChrgeDetail", "03"); + data.put("insttChrgeSe", penaltyInfo.get("insttChrgeSe")); + data.put("insttDetailCode", penaltyInfo.get("insttDetailCode")); + data.put("insttDetailNm", penaltyInfo.get("violatContents")); + data.put("pasngSeCode", penaltyInfo.get("pasngSeCode")); + data.put("ffnlgTaxitm", penaltyInfo.get("ffnlgTaxitm")); + data.put("passivePaymentAt", "Y"); + data.put("reserveDate", resrvDate); + response = preRegistPaymentService.approvalReservePayment(data); + if (response.get("rspnsCode").equals("0000")) { + resultList.add(response); + } + } + } + } + if (penaltyList.size() != resultList.size()) { + result.setMsg(result.STATUS_ERROR, "총 " + penaltyList.size() + "건 중 " + resultList.size() + "건 처리되었습니다."); + } else { + result.setMsg(result.STATUS_SUCESS, "총 " + penaltyList.size() + "건 중 " + resultList.size() + "건 처리되었습니다."); + } + return result.getResult(); + } + + @Override + public Map getPenaltyCivilAcceptList(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.fis.getPenaltyCivilAcceptList"); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNo = (String) param.get("vhcleNum"); + String penaltyStep = (String) param.get("penaltyStep"); + String status = (String) param.get("status"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("insttNo", "BRSMC0300001"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + reqData.put("penaltyStep", penaltyStep); //의견제출-이의제기 구분값 + reqData.put("status", status); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = requestPenaltyCivilAcceptList(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getPenaltyCivilAcceptDetail(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.fis.getPenaltyCivilAcceptDetail"); + String insttNo = (String) param.get("insttNo"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String civilNo = String.valueOf(param.get("civilNo")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", "001"); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("civilNo", civilNo); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = getPenaltyCivilAcceptDetail(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map penaltyCivilAcceptInsert(Map param1, Map param2, List files) { + Map result; + Map filesMap = null; + for (String key : param2.keySet()) { + param2.put(key, CommonUtil.cleanCode(param2.get(key) == null ? "" : param2.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.fis.getInsertPenaltyCivilAccept"); + String insttNo = (String) param1.get("insttNo"); + String insttCntcJobSe = (String) param2.get("insttCntcJobSe"); + String regltId = (String) param2.get("regltId"); + String insttDelngNo = String.valueOf(param1.get("insttDelngNo")); + String penaltyStep = (String) param1.get("penaltyStep"); + String civilTitle = (String) param2.get("civilTitle"); + civilTitle = "의견제출등록"; + String civilContents = (String) param2.get("civilContents"); + String vhcleNum = (String) param2.get("vhcleNum"); + String zipCode = (String) param2.get("zipCode"); + String addr = (String) param2.get("addr"); + String addrDetail = (String) param2.get("addrDetail"); + String email = (String) param2.get("email"); + String cellphone = (String) param2.get("cellphone"); + String carOwnerRelation = (String) param2.get("carOwnerRelation"); + String memNm = (String) param2.get("memNm"); + String violatDt = (String) param2.get("violatDt"); + String fineAmount = String.valueOf(param2.get("fineAmount")); + String blckChainFileNm = String.valueOf(param2.get("blckChainFileNm")); + String vhcleTy = "60"; + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String fileId = ""; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + + if (files != null && files.size() > 0) { + fileId = fileGenIDService.makeGnrID(); + int idx = 1; + for (Object file : files) { + // API 호출용 + if (filesMap == null) filesMap = new HashMap(); + //int idx = files.indexOf(file); + filesMap.put("addFile" + idx, file); + idx++; + } + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + //addFile1 = filesMap.get("addFile1").toString(); + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + //addFile2 = filesMap.get("addFile2").toString(); + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + //addFile3 = filesMap.get("addFile2").toString(); + } + } + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", "126"); + reqData.put("regltId", regltId); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("vhcleNum", vhcleNum); + reqData.put("violatDt", violatDt); + reqData.put("fineAmount", fineAmount); + reqData.put("penaltyStep", penaltyStep); + reqData.put("civilPerson", memNm); + reqData.put("civilTitle", civilTitle); + reqData.put("civilContents", civilContents); + reqData.put("addFile1", addFile1); + reqData.put("addFile2", addFile2); + reqData.put("addFile3", addFile3); + reqData.put("zipCode", zipCode); + reqData.put("addr", addr); + reqData.put("addrDetail", addrDetail); + reqData.put("email", email); + reqData.put("cellphone", cellphone); + reqData.put("carOwnerRelation", carOwnerRelation); + reqData.put("vhcleTy", vhcleTy); + reqData.put("blckChainFileNm", blckChainFileNm); + String mberNo = (String) param2.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param2.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + result = getInsertPenaltyCivilAccept(url, reqData); + logger.info("result::" + result); + /*if (result.get("rspnsResult").equals("S")) { + if(files != null && files.size() > 0) { + int fileSeq = 0; + for (Object file:files) { + // 대민 파일정보 DB저장용 + Map fileInfo = (Map) file; + fileInfo.put("fileId", fileId); + fileInfo.put("fileSeq", fileSeq); + fileInfo.put("atchFileTy", "03"); + String fileNm = fileInfo.get("localFileName").toString(); + int pos = fileNm.lastIndexOf("."); + String ext = fileNm.substring(pos + 1); + fileInfo.put("fileExtsnNm", ext); + + if(fileSeq == 0) { + feeMapper.submitAComplaintFileMap(fileInfo); + } + fileSeq++; + } + + if (files.size() > 0) { + feeMapper.submitAComplaintFileDetail(files); + } + } + }*/ + + return result; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map penaltyCivilAcceptUpdate(Map param1, Map param2, List files) { + Map resultMap; + Map filesMap = null; + for (String key : param2.keySet()) { + param2.put(key, CommonUtil.cleanCode(param2.get(key) == null ? "" : param2.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.fis.getUpdatePenaltyCivilAccept"); + String insttNo = (String) param1.get("insttNo"); + String insttCntcJobSe = (String) param2.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param1.get("insttDelngNo")); + String penaltyStep = (String) param1.get("penaltyStep"); + String civilNo = String.valueOf(param1.get("civilNo")); + String civilTitle = (String) param2.get("civilTitle"); + civilTitle = "의견제출수정"; + String civilContents = (String) param2.get("civilContents"); + String vhcleNum = (String) param2.get("vhcleNum"); + String zipCode = (String) param2.get("zipCode"); + String addr = (String) param2.get("addr"); + String addrDetail = (String) param2.get("addrDetail"); + String email = (String) param2.get("email"); + String cellphone = (String) param2.get("cellphone"); + String carOwnerRelation = (String) param2.get("carOwnerRelation"); + String memNm = (String) param2.get("memNm"); + String blckChainFileNm = String.valueOf(param2.get("blckChainFileNm")); + String blckChainDocId = (String) param2.get("blckChainDocId"); + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String fileId = ""; + String fileIdNew = ""; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + + if (files != null && files.size() > 0) { + int idx = 1; + for (Object file : files) { + Map fileInfo = (Map) file; + if (filesMap == null) filesMap = new HashMap(); + if ("C".equals(fileInfo.get("fileStatus"))) { + filesMap.put("addFile" + idx, file); + idx++; + } + } + + fileId = param2.get("addFile1").toString(); + fileIdNew = fileGenIDService.makeGnrID(); + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + //addFile1 = filesMap.get("addFile1").toString(); + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + //addFile2 = filesMap.get("addFile2").toString(); + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + //addFile3 = filesMap.get("addFile2").toString(); + } + } + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("insttNo", insttNo); + //reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttCntcJobSe", "126"); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("penaltyStep", penaltyStep); + reqData.put("civilNo", civilNo); + reqData.put("civilPerson", memNm); + reqData.put("civilTitle", civilTitle); + reqData.put("civilContents", civilContents); + reqData.put("addFile1", addFile1); + reqData.put("addFile2", addFile2); + reqData.put("addFile3", addFile3); + reqData.put("zipCode", zipCode); + reqData.put("addr", addr); + reqData.put("addrDetail", addrDetail); + reqData.put("email", email); + reqData.put("cellphone", cellphone); + reqData.put("carOwnerRelation", carOwnerRelation); + reqData.put("blckChainFileNm", blckChainFileNm); + reqData.put("blckChainDocId", blckChainDocId); + String mberNo = (String) param2.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param2.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + resultMap = setUpdatePenaltyCivilAccept(url, reqData); + resultMap.put("fileIdOld", fileId); + resultMap.put("fileIdNew", fileIdNew); + logger.info("resultMap::" + resultMap); + + return resultMap; + } + + @Override + public Map getPenaltyByFeeCivilAcceptList(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPenaltyCivilAcceptList"); + String startDt = (String) param.get("startDate"); + String endDt = (String) param.get("endDate"); + String vhcleNo = (String) param.get("vhcleNum"); + String penaltyStep = (String) param.get("penaltyStep"); + String status = (String) param.get("status"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0300001"); + reqData.put("insttCntcJobSe", "001"); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNo); + reqData.put("penaltyStep", penaltyStep); //의견제출-이의제기 구분값 + reqData.put("status", status); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = getPenaltyCivilAcceptList(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + public Map getPenaltyByFeeCivilAcceptDetail(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPenaltyCivilAcceptDetail"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String insttNo = (String) param.get("insttNo"); + String insttDelngNo = String.valueOf(param.get("insttDelngNo")); + String civilNo = String.valueOf(param.get("civilNo")); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", "001"); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("civilNo", civilNo); + String mberNo = (String) param.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("url::" + url); + logger.info("reqData::" + reqData); + result = getPenaltyCivilAcceptDetail(url, reqData); + logger.info("result::" + result); + + return result; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map penaltyByFeeCivilAcceptInsert(Map param1, Map param2, List files) { + Map result; + Map filesMap = null; + for (String key : param2.keySet()) { + param2.put(key, CommonUtil.cleanCode(param2.get(key) == null ? "" : param2.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getInsertPenaltyCivilAccept"); + String insttNo = (String) param1.get("insttNo"); + String insttCntcJobSe = (String) param2.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param1.get("insttDelngNo")); + String penaltyStep = (String) param1.get("penaltyStep"); + String civilTitle = (String) param2.get("civilTitle"); + String civilContents = (String) param2.get("civilContents"); + String vhcleNum = (String) param2.get("vhcleNum"); + String zipCode = (String) param2.get("zipCode"); + String addr = (String) param2.get("addr"); + String addrDetail = (String) param2.get("addrDetail"); + String email = (String) param2.get("email"); + String cellphone = (String) param2.get("cellphone"); + String carOwnerRelation = (String) param2.get("carOwnerRelation"); + String memNm = (String) param2.get("memNm"); + String violatDt = (String) param2.get("violatDt"); + String fineAmount = String.valueOf(param2.get("fineAmount")); + //String vhcleTy = String.valueOf(param2.get("vhcleTy")); + String vhcleTy = "60"; + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String fileId = ""; + + if (files != null && files.size() > 0) { + fileId = fileGenIDService.makeGnrID(); + int idx = 1; + for (Object file : files) { + // API 호출용 + if (filesMap == null) filesMap = new HashMap(); + //int idx = files.indexOf(file); + filesMap.put("addFile" + idx, file); + idx++; + } + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + //addFile1 = fileId; + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + //addFile2 = fileId; + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + //addFile3 = fileId; + } + } + + /* + * insttNo insttNo + insttCntcJobSe 기관 연계 업무 구분 + insttDelngNo 기관 거래 번호 (50) + vhcleNum 차량번호 (20) + violatDt 위반일시 (14) + fineAmount 과태료 (5) + penaltyStep 과태료 단계 (1) + civilPerson 의견제출자이름 (50) + civilTitle 의견제출제목 (50) + civilContents 의견제출내용 (200) + addFile1 첨부파일1 + addFile2 첨부파일2 + addFile3 첨부파일3 + zipCode 우편번호 + addr 주소 + addrDetail 상세주소 + email 이메일 + cellphone 휴대전화 + carOwnerRelation 차주와의관계 + vhcleTy 차량유형 + * */ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", "126"); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("vhcleNum", vhcleNum); + reqData.put("violatDt", violatDt); + reqData.put("fineAmount", fineAmount); + reqData.put("penaltyStep", penaltyStep); + reqData.put("civilPerson", memNm); + reqData.put("civilTitle", civilTitle); + reqData.put("civilContents", civilContents); + reqData.put("addFile1", addFile1); + reqData.put("addFile2", addFile2); + reqData.put("addFile3", addFile3); + reqData.put("zipCode", zipCode); + reqData.put("addr", addr); + reqData.put("addrDetail", addrDetail); + reqData.put("email", email); + reqData.put("cellphone", cellphone); + //carOwnerRelation = "테스트"; + reqData.put("carOwnerRelation", carOwnerRelation); + reqData.put("vhcleTy", vhcleTy); + String mberNo = (String) param2.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param2.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + result = getInsertPenaltyCivilAccept(url, reqData); + logger.info("result::" + result); + /*if (result.get("rspnsResult").equals("S")) { + if(files != null && files.size() > 0) { + int fileSeq = 0; + for (Object file:files) { + // 대민 파일정보 DB저장용 + Map fileInfo = (Map) file; + fileInfo.put("fileId", fileId); + fileInfo.put("fileSeq", fileSeq); + fileInfo.put("atchFileTy", "03"); + String fileNm = fileInfo.get("localFileName").toString(); + int pos = fileNm.lastIndexOf("."); + String ext = fileNm.substring(pos + 1); + fileInfo.put("fileExtsnNm", ext); + + if(fileSeq == 0) { + feeMapper.submitAComplaintFileMap(fileInfo); + } + fileSeq++; + } + + if (files.size() > 0) { + feeMapper.submitAComplaintFileDetail(files); + } + } + }*/ + + return result; + } + + @Override + //@Transactional(propagation = Propagation.REQUIRED) //이메소드를 트랜잭션처리 + public Map penaltyByFeeCivilAcceptUpdate(Map param1, Map param2, List files) { + Map resultMap; + Map filesMap = null; + for (String key : param2.keySet()) { + param2.put(key, CommonUtil.cleanCode(param2.get(key) == null ? "" : param2.get(key).toString())); + } + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.setUpdatePenaltyCivilAccept"); + String insttNo = (String) param1.get("insttNo"); + String insttCntcJobSe = (String) param2.get("insttCntcJobSe"); + String insttDelngNo = String.valueOf(param1.get("insttDelngNo")); + String penaltyStep = (String) param1.get("penaltyStep"); + String civilNo = String.valueOf(param1.get("civilNo")); + String civilTitle = (String) param2.get("civilTitle"); + String civilContents = (String) param2.get("civilContents"); + String vhcleNum = (String) param2.get("vhcleNum"); + String zipCode = (String) param2.get("zipCode"); + String addr = (String) param2.get("addr"); + String addrDetail = (String) param2.get("addrDetail"); + String email = (String) param2.get("email"); + String cellphone = (String) param2.get("cellphone"); + String carOwnerRelation = (String) param2.get("carOwnerRelation"); + String memNm = (String) param2.get("memNm"); + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String fileId = ""; + String fileIdNew = ""; + + if (files != null && files.size() > 0) { + int idx = 1; + for (Object file : files) { + // API 호출용 + if (filesMap == null) filesMap = new HashMap(); + filesMap.put("addFile" + idx, file); + idx++; + } + + //fileId = param2.get("addFile1").toString(); + //fileIdNew = fileGenIDService.makeGnrID(); + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + //addFile1 = fileIdNew; + } + if (filesMap != null && filesMap.get("addFile2") != null) { + //addFile2 = fileIdNew; + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + } + if (filesMap != null && filesMap.get("addFile3") != null) { + //addFile3 = fileIdNew; + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + } + } + + /* + * 당일 신청하고 처리상태가 접수인 경우만 수정 가능 + * insttNo insttNo + insttCntcJobSe 기관 연계 업무 구분 + insttDelngNo 기관 거래 번호 (50) + penaltyStep 과태료 단계 (1) + civilNo 의견제출번호 (20) + civilTitle 의견제출제목 (50) + civilContents 의견제출내용 (200) + addFile1 첨부파일1 + addFile2 첨부파일2 + addFile3 첨부파일3 + zipCode 우편번호 + addr 주소 + addrDetail 상세주소 + email 이메일 + cellphone 휴대전화 + carOwnerRelation 차주와의관계 + * */ + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + //reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("insttCntcJobSe", "126"); + reqData.put("insttDelngNo", insttDelngNo); + reqData.put("penaltyStep", penaltyStep); + reqData.put("civilNo", civilNo); + reqData.put("civilTitle", civilTitle); + reqData.put("civilContents", civilContents); + reqData.put("addFile1", addFile1); + reqData.put("addFile2", addFile2); + reqData.put("addFile3", addFile3); + reqData.put("zipCode", zipCode); + reqData.put("addr", addr); + reqData.put("addrDetail", addrDetail); + reqData.put("email", email); + reqData.put("cellphone", cellphone); + reqData.put("carOwnerRelation", carOwnerRelation); + //reqData.put("civilPerson", memNm); + String mberNo = (String) param2.get("mberNo"); + reqData.put("mberNo", mberNo); + String mberCi = (String) param2.get("mberCi"); + reqData.put("mberCi", mberCi); + logger.info("reqData::" + reqData); + resultMap = setUpdatePenaltyCivilAccept(url, reqData); + resultMap.put("fileIdOld", fileId); + resultMap.put("fileIdNew", fileIdNew); + logger.info("resultMap::" + resultMap); + + return resultMap; + } + + @Override + public Map opinionPrivachCheckApi(Map param, List files) { + Map result; + String apiUrl = env.getProperty("Globals.Uprivacy.ApiUrl"); + String hostUrl = env.getProperty("Globals.Uprivacy.RealHostUrl"); + String hostIp = env.getProperty("Globals.Uprivacy.RealHostIp"); + String returnUrl = env.getProperty("Globals.Uprivacy.RealHostUrl") + "fee/opinionPrivachCheckApi.do"; + String memNm = StringUtils.defaultIfBlank(param.get("memNm").toString(), ""); + String cellphone = StringUtils.defaultIfBlank(param.get("cellphone").toString(), ""); + String zipCode = StringUtils.defaultIfBlank(param.get("zipCode").toString(), ""); + String addr = StringUtils.defaultIfBlank(param.get("addr").toString(), ""); + String addrDetail = StringUtils.defaultIfBlank(param.get("addrDetail").toString(), ""); + String email = StringUtils.defaultIfBlank(param.get("email").toString(), ""); + String civilContents = StringUtils.defaultIfBlank(param.get("civilContents").toString(), ""); + String content = ""; + String userIP = ""; + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + userIP = getRemoteAddr(request); + + Map reqData = new LinkedHashMap(); + reqData.put("hostUrl", hostUrl); + reqData.put("hostIP", hostIp); + reqData.put("returnURL", returnUrl); + reqData.put("userIP", userIP); + content = memNm + "," + cellphone + "," + zipCode + "," + addr + "," + addrDetail + "," + email + "," + civilContents; + reqData.put("content", content); + + logger.info("reqData::" + reqData); + result = setPrivachCheckApi(apiUrl, reqData, files, request); + logger.info("result privachCheckApi::" + result); + + return result; + } + + @Override + public Map problemPrivachCheckApi(Map param) { + Map result; + String apiUrl = env.getProperty("Globals.Uprivacy.ApiUrl"); + String hostUrl = env.getProperty("Globals.Uprivacy.RealHostUrl"); + String hostIp = env.getProperty("Globals.Uprivacy.RealHostIp"); + String returnUrl = env.getProperty("Globals.Uprivacy.RealHostUrl") + "fee/problemPrivachCheckApi.do"; + String memNm = StringUtils.defaultIfBlank(param.get("memNm").toString(), ""); + String cellphone = StringUtils.defaultIfBlank(param.get("cellphone").toString(), ""); + String zipCode = StringUtils.defaultIfBlank(param.get("zipCode").toString(), ""); + String addr = StringUtils.defaultIfBlank(param.get("addr").toString(), ""); + String addrDetail = StringUtils.defaultIfBlank(param.get("addrDetail").toString(), ""); + String email = StringUtils.defaultIfBlank(param.get("email").toString(), ""); + String carOwnerRelation = StringUtils.defaultIfBlank(param.get("carOwnerRelation").toString(), ""); + String civilContents = StringUtils.defaultIfBlank(param.get("civilContents").toString(), ""); + String content = ""; + String userIP = ""; + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + userIP = getRemoteAddr(request); + + Map reqData = new LinkedHashMap(); + reqData.put("hostUrl", hostUrl); + reqData.put("hostIP", hostIp); + reqData.put("returnURL", returnUrl); + reqData.put("userIP", userIP); + content = memNm + "," + cellphone + "," + zipCode + "," + addr + "," + addrDetail + "," + email + "," + civilContents + "," + carOwnerRelation; + reqData.put("content", content); + + logger.info("reqData::" + reqData); + result = setRefundPrivachCheckApi(apiUrl, reqData); + logger.info("result privachCheckApi::" + result); + + return result; + } + + public static String getRemoteAddr(HttpServletRequest request) { + String ip = null; + ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-RealIP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("REMOTE_ADDR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param files the files + * @param reqData the req data + * @return the update refund accept + */ + public Map setPrivachCheckApi(String requestURL, Map reqData, List files, HttpServletRequest req) { + Map resultMap = new HashMap(); + + try { + String addFile1 = ""; + String addFile2 = ""; + String addFile3 = ""; + String realUrl = env.getProperty("Globals.Url"); + String fsl = File.separator; + String root = req.getSession().getServletContext().getRealPath(fsl); + Map filesMap = null; + + if (files != null && files.size() > 0) { + int idx = 1; + for (Object file : files) { + Map fileInfo = (Map) file; + if (filesMap == null) filesMap = new HashMap(); + if ("C".equals(fileInfo.get("fileStatus"))) { + filesMap.put("addFile" + idx, file); + idx++; + } + } + if (filesMap != null && filesMap.get("addFile1") != null) { + Map addFile1Info = (HashMap) filesMap.get("addFile1"); + addFile1 = addFile1Info.get("serverFilePath") + "/" + addFile1Info.get("serverFileName"); + } + if (filesMap != null && filesMap.get("addFile2") != null) { + Map addFile2Info = (HashMap) filesMap.get("addFile2"); + addFile2 = addFile2Info.get("serverFilePath") + "/" + addFile2Info.get("serverFileName"); + } + if (filesMap != null && filesMap.get("addFile3") != null) { + Map addFile3Info = (HashMap) filesMap.get("addFile3"); + addFile3 = addFile3Info.get("serverFilePath") + "/" + addFile3Info.get("serverFileName"); + } + } + + logger.info("addFile1::" + addFile1); + logger.info("addFile2::" + addFile2); + logger.info("addFile3::" + addFile3); + + logger.info("====== Http api 호출 Start ========================="); + Http http = new Http(requestURL); + resultMap = http.addParam("returnURL", reqData.get("returnURL").toString()) + .addParam("hostIP", reqData.get("hostIP").toString()) + .addParam("hostUrl", reqData.get("hostUrl").toString()) + .addParam("userIP", reqData.get("userIP").toString()) + .addParam("content", reqData.get("content").toString()) + .addParam("upload_file1", new File(addFile1)) + .addParam("upload_file2", new File(addFile2)) + .addParam("upload_file3", new File(addFile3)) + .submit(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[setPrivachCheckApi process error::" + "e.getMessage()" + "]", e); + } + + return resultMap; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param files the files + * @param reqData the req data + * @return the update refund accept + */ + public Map setPrivachCheckApiTmp(String requestURL, Map reqData, List files) { + Map result = new HashMap(); + Map resultData = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("privacy"); + /* + * 개인정보 점점결과 Return 항목 및 코드 설명 + * isPriv -> 개인정보 유무(0:개인정보 없음, 1:개인정보 있음) + * privType -> 검출된 개인정보 유형(1:주민(외국인)번호, 2:카드번호, 3:여권번호, 4:운전면허번호, 5:휴대폰번호, + * 6:일반전화번호, 7:이메일, 8:건강보험번호, 9:은행계좌번호, 10:금칙어) + * privContent -> 검출된 개인정보 내용 + * hostIP -> 요청받을때 전달받은 HostIP 값 + * hostUrl -> 요청받을때 전달받은 HostUrl 값 + * userIP -> 요청받을때 전달받은 userIP 값 + * checkType -> 검출위치 표시(C: 본문내용, F:첨부파일) + */ + resultData = (Map) datas.get(0); + result.put("rspnsResult", "S"); + result.put("data", resultData); + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + //e.printStackTrace(); + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("io ErrorMessage::" + "io.getMessage()", io); + } + + } + return result; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update refund accept + */ + public Map setRefundPrivachCheckApi(String requestURL, Map reqData) { + Map resultMap = new HashMap(); + + try { + logger.info("====== Http api 호출 Start ========================="); + Http http = new Http(requestURL); + resultMap = http.addParam("returnURL", reqData.get("returnURL").toString()) + .addParam("hostIP", reqData.get("hostIP").toString()) + .addParam("hostUrl", reqData.get("hostUrl").toString()) + .addParam("userIP", reqData.get("userIP").toString()) + .addParam("content", reqData.get("content").toString()) + .submit(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[setRefundPrivachCheckApi process error::" + "e.getMessage()" + "]", e); + } + + return resultMap; + } + + /** + * 서울시 개인정보 보호시스템 API 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update refund accept + */ + public Map setRefundPrivachCheckApiTmp(String requestURL, Map reqData) { + Map result = new HashMap(); + Map resultData = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("privacy"); + /* + * 개인정보 점점결과 Return 항목 및 코드 설명 + * isPriv -> 개인정보 유무(0:개인정보 없음, 1:개인정보 있음) + * privType -> 검출된 개인정보 유형(1:주민(외국인)번호, 2:카드번호, 3:여권번호, 4:운전면허번호, 5:휴대폰번호, + * 6:일반전화번호, 7:이메일, 8:건강보험번호, 9:은행계좌번호, 10:금칙어) + * privContent -> 검출된 개인정보 내용 + * hostIP -> 요청받을때 전달받은 HostIP 값 + * hostUrl -> 요청받을때 전달받은 HostUrl 값 + * userIP -> 요청받을때 전달받은 userIP 값 + * checkType -> 검출위치 표시(C: 본문내용, F:첨부파일) + */ + resultData = (Map) datas.get(0); + result.put("rspnsResult", "S"); + result.put("data", resultData); + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + //e.printStackTrace(); + logger.error("errorMessage::" + "", e); + result.put("rspnsResult", "E"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("io ErrorMessage::" + "io.getMessage()", io); + } + + } + return result; + } + + /** + * 과태료 의견제출 및 이의제기 신청 목록 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept list + */ + public Map getPenaltyCivilAcceptList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료 의견제출 및 이의제기 신청 상세 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the default civil accept detail + */ + public Map getPenaltyCivilAcceptDetail(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { +/* if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + result.put("data", data); + result.put("rspnsResult", "S"); + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료조회 + * + * @param requestURL the request url + * @param reqData the req data + * @return the map + */ + public Map requestFfnlgInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + JSONArray reqs = (JSONArray) data.get("reqs"); + result.put("data", reqs); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료 상세조회 + * + * @param requestURL the request url + * @param reqData the req data + * @return the map + */ + public Map requestFfnlgInfoDetail(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + data.put("gubun", "P"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 혼잡과태료 목록 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the penalty list + */ + public Map getPenaltyList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", datas); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 혼잡과태료 상세 조회 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the penalty detail list + */ + public Map getPenaltyDetailList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + data.put("gubun", "T"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료민원 등록 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the insert penalty civil accept + */ + public Map getInsertPenaltyCivilAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + + result.put("rspnsResult", "S"); + //result.put("data", data); + //result.put("rspnsCode", data.get("rspnsCode")); + //result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + /** + * 과태료민원 수정 요청 수신 + * + * @param requestURL the request url + * @param reqData the req data + * @return the update penalty civil accept + */ + public Map setUpdatePenaltyCivilAccept(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + /*if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + }*/ + + result.put("rspnsResult", "S"); + //result.put("data", data); + //result.put("rspnsCode", data.get("rspnsCode")); + //result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map requestPenaltyCivilAcceptList(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + JSONArray reqs = (JSONArray) data.get("resp"); + result.put("data", reqs); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", jsonObj.get("resultCode")); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/penalty/web/PenaltyController.java b/src/main/java/gtpa/brs/penalty/web/PenaltyController.java new file mode 100644 index 0000000..be5229b --- /dev/null +++ b/src/main/java/gtpa/brs/penalty/web/PenaltyController.java @@ -0,0 +1,1016 @@ +package gtpa.brs.penalty.web; + +import com.clipsoft.clipreport.export.option.PDFOption; +import com.clipsoft.clipreport.oof.OOFDocument; +import com.clipsoft.clipreport.oof.OOFFile; +import com.clipsoft.clipreport.server.service.ClipReportExport; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import gtpa.brs.fee.service.FeeService; +import gtpa.brs.login.service.LoginService; +import gtpa.brs.payment.service.PreRegistPaymentService; +import gtpa.brs.penalty.service.PenaltyService; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.util.Result; +import gtpa.brs.vehicle.service.VehicleService; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import eu.bitwalker.useragentutils.DeviceType; +import eu.bitwalker.useragentutils.OperatingSystem; +import eu.bitwalker.useragentutils.UserAgent; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; + +import javax.activation.MimetypesFileTypeMap; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 16/04/2019 + * TIME : 10:55 AM + * Project : BRSPW + * Class : FeeController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class PenaltyController { + + private Logger logger = LoggerFactory.getLogger(PenaltyController.class); + + /** + * The User info. + */ + @Autowired + UserInfo userInfo; + + /** + * The Penalty service. + */ + @Autowired + PenaltyService penaltyService; + + /** + * The Vehicle service. + */ + @Autowired + VehicleService vehicleService; + + @Autowired + FeeService feeService; + + /** + * The Pre regist payment service. + */ + @Autowired + PreRegistPaymentService preRegistPaymentService; + + @Autowired + LoginService loginService; + + @Resource(name = "globalsProperties") + Properties env; + + @Value("#{globalsProperties['Globals.FilePath']}") + String globalsFilePath; + + /** + * Gets vehicles. + * + * @return the vehicles + */ + @RequestMapping(value = "/penalty/getVehicles.do", method = RequestMethod.POST) + public @ResponseBody + Map getVehicles() { + Result result = new Result(); + Map params = new HashMap(); + params.put("MBER_NO", userInfo.getUserNo()); + params.put("SEARCHTYPE", "P"); + List carInfos = vehicleService.getVhclesInfo(params); + if (carInfos.size() > 0) { + result.setData("vhcleList", carInfos); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCESS, "본인 명의의 차량등록이 필요합니다."); + } + return result.getResult(); + } + + /** + * Gets penalty list. + * + * @param param the param + * @return the penalty list + */ + @RequestMapping(value = "/penalty/getPenaltyList.do", method = RequestMethod.POST) + public @ResponseBody + Map getPenaltyList(@RequestBody Map param) { + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + Map userData = loginService.isMemberNoMap(userInfo.getUserNo()); + Result result = new Result(); + // List feeList = new ArrayList(); + params.put("mberCi", userInfo.getUserCi()); + params.put("mberNo", userInfo.getUserNo()); + params.put("myCar", "Y"); + Map rtnVhcles = new HashMap(); + if (userInfo.isTempMber()) { + rtnVhcles.put("VHCLES_NUM", params.get("vhcleNum")); + userData = new HashMap(); + userData.put("PENALTY_AGRE_AT","N"); + userData.put("TUNNEL_PENALTY_AGRE_AT","N"); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(params); + } + logger.info("rtnVhcles : " + rtnVhcles); + + /** if("57두0626".equals(params.get("vhcleNum"))) { + try { + String test = "{\"data\":" + +"[" +"{" +"\"gubun\":\"T\"," +"\"procContents\":\"\"," +"\"vhcleTy\":\"60\"," +"\"civilNo\":\"\"," +"\"ffnlgTaxitm\":\"001\"," +"\"checkDate\":\"20230730111701\"," +"\"opinion\":\"1\"," +"\"violatFareOfi\":\"남산01터널\"," +"\"regltId\":\"01062023007347\"," +"\"civilTitle\":\"\"," +"\"violatLocation\":\"남산01터널 06차로\"," +"\"procDt\":\"\"," +"\"payNo\":\"01062023099999\"," +"\"insttNo\":\"BRSMC0300004\"," +"\"virtualAcc\":\"\"," +"\"requDt\":\"\"," +"\"violatBooth\":\"06차로\"," +"\"insttDelngNo\":\"0300840304202307301614240000000223\","+"\"status_nm\":\"미신청\"," +"\"vhcleNum\":\"36우2523\"," +"\"violatDt\":\"20230730161424\"," +"\"violatContents\":\"혼잡통행료 미납\"," +"\"fineAmount\":\"2000\"," +"\"status\":\"00\"," +"\"taxNo\":\"0000473428800120230622111701\"," +"\"receiptCd\":\"2\"," +"\"carType\":\"60\"," +"\"occrrncDate\":\"20230730\"," +"\"occrrncTime\":\"161424\"," +"\"insttDetailCode\":\"001\"," +"\"pasngSeCode\":\"2\"," +"\"penaltyStep\":\"1\"," +"\"usePay\":\"Y\"," +"}" +"]" + +"}"; + JSONParser jpa = new JSONParser(); + JSONObject job = (JSONObject)jpa.parse(test); + Map testInfo = new ObjectMapper().readValue(job.toString(), HashMap.class); + List testList = (List) testInfo.get("data"); + for(int i=0; i 0) { + penaltyList.addAll(penaltyInfoList); + } + + } + if (penaltyByFee.get("data") != null) { + List penaltyByFeeList = (List) penaltyByFee.get("data"); + for (Object penaltyObj : penaltyByFeeList) { + Map penaltyInfo = (Map) penaltyObj; + penaltyInfo.put("gubun", "T"); + penaltyInfo.put("usePay", userData.get("TUNNEL_PENALTY_AGRE_AT") == null ? 'N' : userData.get("TUNNEL_PENALTY_AGRE_AT")); + penaltyInfo.put("carType", "60"); + } + if (penaltyByFeeList.size() > 0) { + penaltyList.addAll(penaltyByFeeList); + } + } + if (penaltyList.size() > 0) { + Collections.sort(penaltyList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("violatDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("violatDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + result.setData("penaltyList", penaltyList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + } + return result.getResult(); + } + + /* + * @RequestMapping(value = "/penalty/getPenaltyList.do", method = RequestMethod.POST) + public @ResponseBody + Map getPenaltyList(@RequestBody Map param) { + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + Map userData = loginService.isMemberNoMap(userInfo.getUserNo()); + Result result = new Result(); + params.put("mberCi", userInfo.getUserCi()); + params.put("mberNo", userInfo.getUserNo()); + //params.put("myCar", "Y"); + Map rtnVhcles = new HashMap(); + if(userInfo.isTempMber()){ + rtnVhcles.put("VHCLES_NUM",params.get("vhcleNum")); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(params); + } + logger.info("rtnVhcles : " + rtnVhcles); + if (rtnVhcles == null || "".equals(rtnVhcles.get("VHCLES_NUM")) || rtnVhcles.get("VHCLES_NUM") == null) { + result.setMsg(result.STATUS_ERROR, "조회할 차량이 존재하지 않습니다."); + } else { + params.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + String[] vhcles = rtnVhcles.get("VHCLES_NUM").toString().split(","); + String[] isMines = rtnVhcles.get("IS_MINE").toString().split(","); + Map penalty = penaltyService.getFfnlgInfo(params); + Map penaltyByFee = penaltyService.getFfnlgInfoByFee(params); + List penaltyList = new ArrayList(); + if (penalty.get("data") != null) { + List penaltyInfoList = (List) penalty.get("data"); + for (Object penaltyObj : penaltyInfoList) { + Map penaltyInfo = (Map) penaltyObj; + penaltyInfo.put("gubun", "P"); + penaltyInfo.put("usePay", userData.get("PENALTY_AGRE_AT")); + for (int i = 0; i < vhcles.length; i++) { + if(vhcles[i].equals(penaltyInfo.get("vhcleNum"))){ + penaltyInfo.put("isMine", isMines[i]); + break; + } + } + penaltyInfo.put("carType", "60"); + } + if (penaltyInfoList.size() > 0) { + penaltyList.addAll(penaltyInfoList); + } + + } + if (penaltyByFee.get("data") != null) { + List penaltyByFeeList = (List) penaltyByFee.get("data"); + for (Object penaltyObj : penaltyByFeeList) { + Map penaltyInfo = (Map) penaltyObj; + penaltyInfo.put("gubun", "T"); + penaltyInfo.put("usePay", userData.get("TUNNEL_PENALTY_AGRE_AT")); + for (int i = 0; i < vhcles.length; i++) { + if(vhcles[i].equals(penaltyInfo.get("vhcleNum"))){ + penaltyInfo.put("isMine", isMines[i]); + break; + } + } + penaltyInfo.put("carType", "60"); + } + if (penaltyByFeeList.size() > 0) { + penaltyList.addAll(penaltyByFeeList); + } + } + if (penaltyList.size() > 0) { + Collections.sort(penaltyList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("violatDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("violatDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + result.setData("penaltyList", penaltyList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + } + return result.getResult(); + } + * */ + + /** + * Gets penalty info. + * + * @param param the param + * @return the penalty info + */ + @RequestMapping(value = "/penalty/getPenaltyInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getPenaltyInfo(@RequestBody Map param) { + Map params = (Map) param.get("param"); + logger.info("Param Data : " + params); + Map userData = loginService.isMemberNoMap(userInfo.getUserNo()); + Result result = new Result(); + Map penalty; + if (userInfo.isTempMber()) { + userData.put("PENALTY_AGRE_AT","N"); + userData.put("TUNNEL_PENALTY_AGRE_AT","N"); + } + if (params.get("gubun").equals("P")) { + penalty = penaltyService.getFfnlgInfoDetail(params); + penalty.put("usePay", userData.get("PENALTY_AGRE_AT") == null ? 'N' : userData.get("PENALTY_AGRE_AT")); + } else { + penalty = penaltyService.getFfnlgInfoDetailByFee(params); + penalty.put("usePay", userData.get("TUNNEL_PENALTY_AGRE_AT") == null ? 'N' : userData.get("TUNNEL_PENALTY_AGRE_AT")); + } + penalty.put("carType", "60"); + if (penalty.get("rspnsResult").equals("S")) { + result.setData("penaltyInfo", (Map) penalty.get("data")); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_WARNING, penalty.get("rspnsMssage").toString()); + } + + return result.getResult(); + } + + /** + * Gets pay info. + * + * @return the pay info + */ + @RequestMapping(value = "/penalty/getPayInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getPayInfo() { + Result result = new Result(); + + Map payInfo = preRegistPaymentService.getPaymentInfo(userInfo.getUserNo()); + + result.setData("payInfo", payInfo); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + + return result.getResult(); + } + + /** + * Pay a penalty map. + * + * @param param the param + * @return the map + */ + @RequestMapping(value = "/penalty/payAPenalty.do", method = RequestMethod.POST) + public @ResponseBody + Map payAPenalty(@RequestBody Map param) { + logger.info("Param Data : " + param); + Map response = penaltyService.payAPenalty(param); + return response; + } + + /** + * Gets file download. + */ + @RequestMapping(value = "/penalty/fileDownload.do", method = RequestMethod.GET) + public @ResponseBody + ResponseEntity getFileDownload(@RequestParam(value = "filePath") String filePath) { + InputStream inputStream = null; + HttpHeaders responseHeaders = new HttpHeaders(); + byte[] out = new byte[0]; + try { + if (filePath == null || "".equals(filePath)) { + logger.error("filePath null ::" + filePath); + return ResponseEntity.badRequest().contentLength(0).build(); + } else { + filePath = filePath.replaceAll("\\\\", ""); + filePath = filePath.replaceAll("\\.\\.", ""); + } + String fileDir = globalsFilePath; + /*if (filePath.substring(0, filePath.lastIndexOf(File.separator)).indexOf(fileDir) < 0) { + logger.error("Client force input abnormal path ::" + filePath); + return ResponseEntity.badRequest().contentLength(0).build(); + }*/ + String extension = FilenameUtils.getExtension(filePath); + String path = FilenameUtils.getPrefix(filePath) + FilenameUtils.getPath(filePath); + String name = FilenameUtils.getBaseName(filePath); + + File file = new File(path, name + "." + extension); + if (file.exists()) { + inputStream = new FileInputStream(path + name + "." + extension); + MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap(); + String type = mimeTypesMap.getContentType(file); + out = IOUtils.toByteArray(inputStream); + responseHeaders.add("content-disposition", "attachment; filename=" + file.getName()); + responseHeaders.add("Content-Type", type); + return new ResponseEntity(out, responseHeaders, HttpStatus.OK); + } else { + logger.error("file not exsist ::" + filePath); + return ResponseEntity.noContent().build(); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + return ResponseEntity.notFound().build(); + } catch (Exception e) { + logger.error("Exception ::" + filePath); + return ResponseEntity.notFound().build(); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException io) { + logger.warn("inputStream close error"); + } + return new ResponseEntity(out, responseHeaders, HttpStatus.OK); + } + } + + /** + * Gets image. + * + * @param fileName the file name + * @return the image + */ + @RequestMapping(value = "/penalty/imageView.do", method = RequestMethod.GET, produces = {MediaType.IMAGE_PNG_VALUE, MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_JPEG_VALUE}) + public @ResponseBody + ResponseEntity getImage(@RequestParam("filePath") String fileName) { + InputStream inputStream = null; + HttpHeaders responseHeaders = new HttpHeaders(); + byte[] out = new byte[0]; + try { + if (fileName == null || "".equals(fileName)) { + logger.error("fileName null ::" + fileName); + return ResponseEntity.badRequest().contentLength(0).build(); + } else { + fileName = fileName.replaceAll("\\\\", ""); + fileName = fileName.replaceAll("\\.\\.", ""); + } + String extension = FilenameUtils.getExtension(fileName); + String path = FilenameUtils.getPrefix(fileName) + FilenameUtils.getPath(fileName); + String name = FilenameUtils.getBaseName(fileName); + + File file = new File(path, name + "." + extension); + //File file = new File("/"+FilenameUtils.getPath(fileName),FilenameUtils.getName(fileName)); //Fix + //File file = new File(env.getProperty("Globals.FilePath"),FilenameUtils.getName(fileName)); //Fix + if (file.exists()) { + inputStream = new FileInputStream(path + name + "." + extension); + MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap(); + String type = mimeTypesMap.getContentType(file); + out = IOUtils.toByteArray(inputStream); + responseHeaders.add("Content-Type", type); + } else { + logger.error("file not exsist ::" + fileName); + return ResponseEntity.ok().contentLength(0).build(); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + return ResponseEntity.notFound().build(); + } catch (Exception e) { + logger.error("Exception ::" + fileName); + return ResponseEntity.notFound().build(); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException io) { + logger.warn("inputStream close error"); + } + return new ResponseEntity(out, responseHeaders, HttpStatus.OK); + } + } + + /** + * Penalty recipt string. + * + * @param model the model + * @param request the request + * @return the string + */ + @RequestMapping(value = "/penalty/penaltyRecipt.do", method = RequestMethod.GET) + public String penaltyRecipt(ModelMap model, HttpServletRequest request) { + ArrayList list = new ArrayList(); + model.addAttribute("PARAMS", list); + return "report/penalty/test"; + } + + /** + * Juso pop string. + * + * @param model the model + * @param request the request + * @return the string + */ + @RequestMapping(value = "/penalty/jusoPop.do", method = RequestMethod.GET) + public String jusoPop(ModelMap model, HttpServletRequest request) { + String confmKey = ""; + String device = ""; + UserAgent agent = UserAgent.parseUserAgentString(request.getHeader("user-agent")); + // operating system + OperatingSystem os = agent.getOperatingSystem(); + // device type + DeviceType deviceType = os.getDeviceType(); + logger.info("*Device: " + deviceType.getName()); + if (deviceType.getName() != null && deviceType.getName().indexOf("Computer") > -1) { + confmKey = env.getProperty("Globals.searchAddr.pc.confmKey"); + device = "pc"; + } else { + confmKey = env.getProperty("Globals.searchAddr.mobile.confmKey"); + device = "mobile"; + } + model.addAttribute("confmKey", confmKey); + model.addAttribute("deviceType", device); + return "juso/jusoPopup"; + } + + /** + * Juso pop proc string. + * + * @return the string + */ + @RequestMapping(value = "/penalty/jusoPop.do", method = RequestMethod.POST) + public String jusoPopProc() { + logger.info("success jusoPop process"); + return "juso/jusoPopup"; + } + + /** + * Gets penalty list. + * + * @param param the param + * @return the penalty list + */ + @RequestMapping(value = "/penalty/getPenaltyCivilAcceptList.do", method = RequestMethod.POST) + public @ResponseBody + Map getPenaltyCivilAcceptList(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== POST getPenaltyCivilAcceptList ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_param"); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("mberCi", userInfo.getUserCi()); + dbParam.put("myCar", "Y"); + Map rtnVhcles = new HashMap(); + if(userInfo.isTempMber()){ + rtnVhcles.put("VHCLES_NUM",dbParam.get("vhcleNum")); + } else { + rtnVhcles = vehicleService.rtnMyVhclesBySearchParam(dbParam); + } + logger.info("rtnVhcles : " + rtnVhcles); + if (rtnVhcles == null || "".equals(rtnVhcles.get("VHCLES_NUM")) || rtnVhcles.get("VHCLES_NUM") == null) { + result.setMsg(result.STATUS_ERROR, "조회할 차량이 존재하지 않습니다."); + } else { + dbParam.put("vhcleNum", rtnVhcles.get("VHCLES_NUM")); + Map penalty = penaltyService.getPenaltyCivilAcceptList(dbParam); + Map penaltyByFee = penaltyService.getPenaltyByFeeCivilAcceptList(dbParam); + List penaltyCivilAcceptList = new ArrayList(); + if (penalty.get("data") != null) { + List penaltyInfoList = (List) penalty.get("data"); + for (Object penaltyObj : penaltyInfoList) { + Map penaltyInfo = (Map) penaltyObj; + penaltyInfo.put("gubun", "P"); + } + if (penaltyInfoList.size() > 0) { + penaltyCivilAcceptList.addAll(penaltyInfoList); + } + + } + if (penaltyByFee.get("data") != null) { + List penaltyByFeeList = (List) penaltyByFee.get("data"); + for (Object penaltyObj : penaltyByFeeList) { + Map penaltyInfo = (Map) penaltyObj; + penaltyInfo.put("gubun", "T"); + } + if (penaltyByFeeList.size() > 0) { + penaltyCivilAcceptList.addAll(penaltyByFeeList); + } + } + if (penaltyCivilAcceptList.size() > 0) { + Collections.sort(penaltyCivilAcceptList, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + Long l1 = 0L; + Long l2 = 0L; + try { + Map m1 = (Map) o1; + Map m2 = (Map) o2; + String d1 = (String) m1.get("requDt"); + l1 = Long.parseLong(d1); + String d2 = (String) m2.get("requDt"); + l2 = Long.parseLong(d2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return l2.compareTo(l1); + } + }); + result.setData("dlt_resultList2", penaltyCivilAcceptList); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_SUCCESS_NODATA, result.STATUS_SUCCESS_NODATA_MESSAGE); + } + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + return result.getResult(); + } + + /** + * Gets penalty info. + * + * @param param the param + * @return the penalty info + */ + @RequestMapping(value = "/penalty/getPenaltyCivilAcceptDetail.do", method = RequestMethod.POST) + public @ResponseBody + Map getPenaltyCivilAcceptDetail(@RequestBody Map param) { + Result result = new Result(); + try { + logger.info("====#####== POST getPenaltyCivilAcceptDetail ======="); + logger.info("Param Data : " + param); + + Map dbParam = (Map) param.get("dma_param"); + dbParam.put("mberNo", userInfo.getUserNo()); + dbParam.put("mberCi", userInfo.getUserCi()); + Map resutMap; + if (dbParam.get("gubun").equals("P")) { + resutMap = penaltyService.getPenaltyCivilAcceptDetail(dbParam); + } else { + resutMap = penaltyService.getPenaltyByFeeCivilAcceptDetail(dbParam); + } + if (resutMap.get("rspnsResult").equals("S")) { + Map data = (Map) resutMap.get("data"); + List fileList = new ArrayList(); + data.put("memNm", userInfo.getUserName()); + data.put("memNm", data.get("civilPerson")); + String addrInfo = (data.get("zipCode") == null ? "" : data.get("zipCode")) + + "/" + (data.get("addr") == null ? "" : data.get("addr")) + + "/" + (data.get("addrDetail") == null ? "" : data.get("addrDetail")); + data.put("addrInfo", addrInfo); + + String fileId = ""; + /*if (data.get("addFile1") != null) { + fileId = data.get("addFile1").toString(); + fileParam.put("ATCH_FILE_ID", fileId); + fileList = feeService.getComplaintFileInfo(fileParam); + }*/ + + if (data.get("addFile1") != null) { + String file = data.get("addFile1").toString(); + /*info.fileId = o.ATCH_FILE_ID; + info.localFileName = o.ORGINL_FILE_NM; + info.fileSeq = o.FILE_SEQ_NO;*/ + Map fileParam = new HashMap(); + fileParam.put("ATCH_FILE_ID", file); + fileParam.put("ORGINL_FILE_NM", FilenameUtils.getName(file)); + fileParam.put("FILE_SEQ_NO", 1); + fileList.add(fileParam); + } + if (data.get("addFile2") != null) { + String file = data.get("addFile2").toString(); + /*info.fileId = o.ATCH_FILE_ID; + info.localFileName = o.ORGINL_FILE_NM; + info.fileSeq = o.FILE_SEQ_NO;*/ + Map fileParam = new HashMap(); + fileParam.put("ATCH_FILE_ID", file); + fileParam.put("ORGINL_FILE_NM", FilenameUtils.getName(file)); + fileParam.put("FILE_SEQ_NO", 2); + fileList.add(fileParam); + } + if (data.get("addFile3") != null) { + String file = data.get("addFile3").toString(); + /*info.fileId = o.ATCH_FILE_ID; + info.localFileName = o.ORGINL_FILE_NM; + info.fileSeq = o.FILE_SEQ_NO;*/ + Map fileParam = new HashMap(); + fileParam.put("ATCH_FILE_ID", file); + fileParam.put("ORGINL_FILE_NM", FilenameUtils.getName(file)); + fileParam.put("FILE_SEQ_NO", 3); + fileList.add(fileParam); + } + + result.setData("dma_result", data); + result.setData("fileList", fileList); + + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, resutMap.get("rspnsMssage").toString()); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "조회시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Gets penalty Insert Map. + * + * @param param the param + * @return the penalty Map + */ + @RequestMapping(value = "/penalty/penaltyCivilAcceptInsert.do", method = RequestMethod.POST) + public @ResponseBody + Map penaltyCivilAcceptInsert(@RequestBody Map param) { + + Result result = new Result(); + try { + logger.info("====#####== POST penaltyCivilAcceptInsert ======="); + logger.info("Param Data : " + param); + + Map dbParam1 = (Map) param.get("dma_param"); + Map dbParam2 = (Map) param.get("dma_result"); + dbParam2.put("mberNo", userInfo.getUserNo()); + dbParam2.put("mberCi", userInfo.getUserCi()); + List files = (List) param.get("fileList"); + Map resutMap; + if (dbParam1.get("gubun").equals("P")) { + resutMap = penaltyService.penaltyCivilAcceptInsert(dbParam1, dbParam2, files); + resutMap.put("gubun","P"); + } else { + resutMap = penaltyService.penaltyByFeeCivilAcceptInsert(dbParam1, dbParam2, files); + resutMap.put("gubun","T"); + } + if (resutMap.get("rspnsResult").equals("S")) { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + String rspnsMssage = ""; + rspnsMssage = resutMap.get("rspnsMssage").toString(); + if (!"".equals(rspnsMssage)) { + result.setMsg(result.STATUS_ERROR, rspnsMssage); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_SUCESS_MESSAGE); + } + } + + Map resultMap2 = penaltyService.opinionPrivachCheckApi(dbParam2, files); + //} else { + //resultMap2 = penaltyService.problemPrivachCheckApi(dbParam2); + //} + result.setData("dma_result", resultMap2); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "처리시 에러가 발생하였습니다.", ex); + } + + return result.getResult(); + } + + /** + * Gets penalty Update Map. + * + * @param param the param + * @return the penalty Map + */ + @RequestMapping(value = "/penalty/penaltyCivilAcceptUpdate.do", method = RequestMethod.POST) + public @ResponseBody + Map penaltyCivilAcceptUpdate(@RequestBody Map param) { + + logger.info("====#####== POST penaltyCivilAcceptUpdate ======="); + logger.info("Param Data : " + param); + + Map dbParam1 = (Map) param.get("dma_param"); + Map dbParam2 = (Map) param.get("dma_result"); + dbParam2.put("mberNo", userInfo.getUserNo()); + dbParam2.put("mberCi", userInfo.getUserCi()); + List files = (List) param.get("fileList"); + + Map resultMap = new HashMap(); + Map resultMap1; + if (dbParam1.get("gubun").equals("P")) { + resultMap1 = penaltyService.penaltyCivilAcceptUpdate(dbParam1, dbParam2, files); + } else { + resultMap1 = penaltyService.penaltyByFeeCivilAcceptUpdate(dbParam1, dbParam2, files); + } + if (resultMap1.get("rspnsResult").equals("S")) { + resultMap.put("rspnsResult", "S"); + } else { + resultMap.put("rspnsResult", "E"); + } + + Map resultMap2 = penaltyService.opinionPrivachCheckApi(dbParam2, files); + //} else { + //resultMap2 = penaltyService.problemPrivachCheckApi(dbParam2); + //} + resultMap.putAll(resultMap2); + + return resultMap; + } + + /** + * Gets U-PRIVACY CHECK API Map. + * + * @param param the param + * @return the penalty Map + */ + @RequestMapping(value = "/penalty/opinionPrivachCheckApi.do", method = RequestMethod.POST) + public @ResponseBody + Map opinionPrivachCheckApi(@RequestBody Map param) { + + Result result = new Result(); + Map resutMap = new HashMap<>(); + try { + logger.info("====#####== POST privachCheckApi ======="); + logger.info("Param Data : " + param); + + Map inputData = (Map) param.get("inputData"); + List files = (List) param.get("fileList"); + + resutMap = penaltyService.opinionPrivachCheckApi(inputData, files); + + if (resutMap.get("rspnsResult").equals("S")) { + result.setData("dma_result", resutMap); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + + /** + * Gets U-PRIVACY CHECK API Map. + * + * @param param the param + * @return the penalty Map + */ + @RequestMapping(value = "/penalty/problemPrivachCheckApi.do", method = RequestMethod.POST) + public @ResponseBody + Map problemPrivachCheckApi(@RequestBody Map param) { + + Result result = new Result(); + Map resutMap = new HashMap<>(); + try { + logger.info("====#####== POST privachCheckApi ======="); + logger.info("Param Data : " + param); + + Map inputData = (Map) param.get("inputData"); + resutMap = penaltyService.problemPrivachCheckApi(inputData); + + if (resutMap.get("rspnsResult").equals("S")) { + result.setData("dma_result", resutMap); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + + /** + * Block chain map. + * + * @param param the param + * @param request the request + * @return the map + */ + @RequestMapping(value = "/penalty/blockChain.do", method = RequestMethod.POST) + public @ResponseBody + Map blockChain(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + Map params = (Map) param.get("dma_result"); + logger.info("Param Data : " + params); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + + OOFDocument oof = OOFDocument.newOOF(); + OOFFile file = oof.addFile("crf.root", "%root%/crf/penalty/blockchain_test.crf"); + //oof.addField("INSTTNO", request.getParameter("PARAM")); + oof.addField("INSTTNO", (params.get("insttNo") == null ? "" : params.get("insttNo").toString())); + oof.addField("INSTTDELNGNO", (params.get("insttDelngNo") == null ? "" : params.get("insttDelngNo").toString())); + oof.addField("CIVILNO", (params.get("civilNo") == null ? "" : params.get("civilNo").toString())); + oof.addField("REQUDT", (params.get("requDt") == null ? "" : params.get("requDt").toString())); + oof.addField("VHCLENUM", (params.get("vhcleNum") == null ? "" : params.get("vhcleNum").toString())); + oof.addField("VHCLETY", (params.get("vhcleTy") == null ? "" : params.get("vhcleTy").toString())); + oof.addField("TAXNO", (params.get("taxNo") == null ? "" : params.get("taxNo").toString())); + oof.addField("VIOLATDT", (params.get("violatDt") == null ? "" : params.get("violatDt").toString())); + oof.addField("VIOLATLOCATION", (params.get("violatLocation") == null ? "" : params.get("violatLocation").toString())); + oof.addField("VIOLATFAREOFI", (params.get("violatFareOfi") == null ? "" : params.get("violatFareOfi").toString())); + oof.addField("VIOLATBOOTH", (params.get("violatBooth") == null ? "" : params.get("violatBooth").toString())); + oof.addField("FINEAMOUNT", (params.get("fineAmount") == null ? "" : params.get("fineAmount").toString())); + oof.addField("CIVILTITLE", (params.get("civilTitle") == null ? "" : params.get("civilTitle").toString())); + oof.addField("CIVILCONTENTS", (params.get("civilContents") == null ? "" : params.get("civilContents").toString())); + oof.addField("ADDFILE1", (params.get("addFile1") == null ? "" : params.get("addFile1").toString())); + oof.addField("ADDFILE2", (params.get("addFile2") == null ? "" : params.get("addFile2").toString())); + oof.addField("ADDFILE3", (params.get("addFile3") == null ? "" : params.get("addFile3").toString())); + oof.addField("OPINION", (params.get("opinion") == null ? "" : params.get("opinion").toString())); + oof.addField("RECEIPTCD", (params.get("receiptCd") == null ? "" : params.get("receiptCd").toString())); + oof.addField("STATUS", (params.get("status") == null ? "" : params.get("status").toString())); + oof.addField("STATUS_NM", (params.get("status_nm") == null ? "" : params.get("status_nm").toString())); + oof.addField("PROCDT", (params.get("procDt") == null ? "" : params.get("procDt").toString())); + oof.addField("PROCCONTENTS", (params.get("procContents") == null ? "" : params.get("procContents").toString())); + oof.addField("ZIPCODE", (params.get("zipCode") == null ? "" : params.get("zipCode").toString())); + oof.addField("ADDR", (params.get("addr") == null ? "" : params.get("addr").toString())); + oof.addField("ADDRDETAIL", (params.get("addrDetail") == null ? "" : params.get("addrDetail").toString())); + oof.addField("EMAIL", (params.get("email") == null ? "" : params.get("email").toString())); + oof.addField("CELLPHONE", (params.get("cellphone") == null ? "" : params.get("cellphone").toString())); + oof.addField("CAROWNERRELATION", (params.get("carOwnerRelation") == null ? "" : params.get("carOwnerRelation").toString())); + oof.addField("MEMNM", (params.get("memNm") == null ? "" : params.get("memNm").toString())); + oof.addField("ADDRINFO", (params.get("addrInfo") == null ? "" : params.get("addrInfo").toString())); + oof.addField("UIGUBUN", (params.get("uiGubun") == null ? "" : params.get("uiGubun").toString())); + String fileName = globalsFilePath + "/blockchain/" + now + "_의견제출_BlockChain" + ".pdf"; + OutputStream fileStream = null; + try { + File localFileSave = new File(fileName); + fileStream = new FileOutputStream(localFileSave); + PDFOption option = null; + String propertyPath = request.getSession().getServletContext().getRealPath("/") + File.separator + "WEB-INF" + File.separator + "clipreport4" + File.separator + "clipreport4.properties"; + int statusType = ClipReportExport.createExportForPDF(request, fileStream, propertyPath, oof, option); + //fileName = "/was_data/BRS/upload/blockchain/test.pdf"; + result.setData("blockChain_file", fileName); + if (statusType == 0) { + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg(result.STATUS_ERROR, "민원신청 파일생성에 실패하였습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "민원신청 파일생성에 실패하였습니다.", re); + } catch (Exception e) { + //e.printStackTrace(); + logger.error("[process error::" + "" + "]", e); + result.setMsg(result.STATUS_ERROR, "민원신청 파일생성에 실패하였습니다.", e); + } finally { + if (fileStream != null) { + fileStream.close(); + } + } + //return "report/penalty/exportForPDF"; + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + //e.printStackTrace(); + logger.error("[blockChain Exception::" + param.get("dma_result") + "]", e); + } + return result.getResult(); + } +} diff --git a/src/main/java/gtpa/brs/scheduler/HelthCheckScheduler.java b/src/main/java/gtpa/brs/scheduler/HelthCheckScheduler.java new file mode 100644 index 0000000..b0ccdc0 --- /dev/null +++ b/src/main/java/gtpa/brs/scheduler/HelthCheckScheduler.java @@ -0,0 +1,60 @@ +package gtpa.brs.scheduler; + +import gtpa.brs.scheduler.service.HealthCheckService; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.net.InetAddress; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +@SuppressFBWarnings +@Service +public class HelthCheckScheduler { + private Logger logger = LoggerFactory.getLogger(HelthCheckScheduler.class); + + @Autowired + HealthCheckService healthCheckService; + + @Resource(name = "globalsProperties") + private Properties env; + + @Async + @Scheduled(cron = "0 0/4 * * * *") + public void healthCheck() { + try { + Map param = new HashMap(); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + param.put("COLCT_DT", now); + String hostname = InetAddress.getLocalHost().getHostName(); + String colctId = ""; + if (env.getProperty("Globals.Was1.Hostname") != null && env.getProperty("Globals.Was1.Hostname").equals(hostname)) { + colctId = "14"; + } else if (env.getProperty("Globals.Was2.Hostname") != null && env.getProperty("Globals.Was2.Hostname").equals(hostname)) { + colctId = "15"; + } + param.put("COLCT_ID", colctId); + if (!colctId.equals("")) { + healthCheckService.insertStatus(param); + logger.info("helthCheckScheduler ::::" + now); + } else { + logger.info("helthCheckScheduler error ::::" + now + "::" + colctId); + } + logger.info(InetAddress.getLocalHost().getHostName()); + logger.info(InetAddress.getLocalHost().getHostAddress()); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + } +} diff --git a/src/main/java/gtpa/brs/scheduler/service/HealthCheckService.java b/src/main/java/gtpa/brs/scheduler/service/HealthCheckService.java new file mode 100644 index 0000000..46c6e9a --- /dev/null +++ b/src/main/java/gtpa/brs/scheduler/service/HealthCheckService.java @@ -0,0 +1,7 @@ +package gtpa.brs.scheduler.service; + +import java.util.Map; + +public interface HealthCheckService { + void insertStatus(Map param); +} diff --git a/src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckMapper.java b/src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckMapper.java new file mode 100644 index 0000000..1da6939 --- /dev/null +++ b/src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckMapper.java @@ -0,0 +1,15 @@ +package gtpa.brs.scheduler.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +import java.util.Map; + +@Repository("healthCheckDao") +public class HealthCheckMapper extends EgovAbstractMapper { + private String NAMESPACE = "HealthCheckDAO"; + + public void insertStatus(Map param) { + insert(NAMESPACE + ".insertStatus", param); + } +} diff --git a/src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckServiceImpl.java b/src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckServiceImpl.java new file mode 100644 index 0000000..c43f2fb --- /dev/null +++ b/src/main/java/gtpa/brs/scheduler/service/impl/HealthCheckServiceImpl.java @@ -0,0 +1,21 @@ +package gtpa.brs.scheduler.service.impl; + +import gtpa.brs.scheduler.service.HealthCheckService; +import gtpa.brs.scheduler.service.impl.HealthCheckMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class HealthCheckServiceImpl implements HealthCheckService { + + @Resource(name = "healthCheckDao") + HealthCheckMapper healthCheckMapper; + + @Override + public void insertStatus(Map param) { + healthCheckMapper.insertStatus(param); + } + +} diff --git a/src/main/java/gtpa/brs/security/CACHECK.java b/src/main/java/gtpa/brs/security/CACHECK.java new file mode 100644 index 0000000..64a964e --- /dev/null +++ b/src/main/java/gtpa/brs/security/CACHECK.java @@ -0,0 +1,700 @@ +package gtpa.brs.security; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 18/06/2019 + * TIME : 10:21 AM + * Project : BRSPW + * Class : CACHECK + * Desc : + * ///////////////////////////////////////////////////// + */ + +import com.sun.crypto.provider.SunJCE; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.net.ConnectException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketException; +import java.net.URL; +import java.net.UnknownHostException; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +@SuppressFBWarnings +public class CACHECK { + final int PROC_OK = 0; + final int PROCESS_ERR = -1; + final int ENC_PROC_ERR = -2; + final int ENC_DATA_ERR = -3; + final int DEC_PROC_ERR = -4; + final int DEC_HASH_ERR = -5; + final int DEC_DATA_ERR = -6; + final int CIPHER_VERSION_MISMATCH = -7; + final int CIPHER_VERSION_ERR = -8; + final int INPUT_DATA_ERR = -9; + final int PWD_MISMATCH_ERR = -12; + final int RECV_DATA_ERR = -18; + final int SVR_CONN_ERR = -18; + static final short CIPHER_HEADER_LEN = 3; + static final short CIPHER_DATETIME_LEN = 13; + static final short CIPHER_IPADDRESS_LEN = 16; + static final short AES128_CIPHER_KEYLEN = 16; + static final short SHA256_DIGEST_VALUELEN = 32; + static final short SECRET_KEY_CIPHER_LEN = 48; + static final byte CRYPT_VERSION_MAJOR = 2; + static final byte CRYPT_VERSION_MINOR = 0; + final int LEN_REQUEST_TYPE = 1; + final int LEN_SNUMBER = 10; + final int LEN_BNUMBER = 13; + final int LEN_COMPNAME_MAX = 40; + final int LEN_REPNAME_MAX = 40; + final String AUTH_SERVER_ADDR = "https://oksign.seoul.go.kr/cacheck.asp"; + final int AUTH_SERVER_PORT = 81; + static final short AUTH_RETURN_DATA_CNT = 4; + private String m_strPlainData = ""; + private String m_strCipherData = ""; + private String m_strCipherDateTime = ""; + private String m_strCipherIPAddress = ""; + private String m_strReturnCode = ""; + private String m_strReturnCompName = ""; + private String m_strReturnRepName = ""; + private String m_strStatusCode = ""; + private static byte[] mBase64EncMap; + private static byte[] mBase64DecMap; + + public CACHECK() { + Security.addProvider(new SunJCE()); + } + + private String base64Encode(byte[] var1) throws Exception { + if (var1 != null && var1.length != 0) { + byte[] var2 = new byte[(var1.length + 2) / 3 * 4]; + int var3 = 0; + + int var4; + for(var4 = 0; var3 < var1.length - 2; var3 += 3) { + var2[var4++] = mBase64EncMap[var1[var3] >>> 2 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 1] >>> 4 & 15 | var1[var3] << 4 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 2] >>> 6 & 3 | var1[var3 + 1] << 2 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 2] & 63]; + } + + if (var3 < var1.length) { + var2[var4++] = mBase64EncMap[var1[var3] >>> 2 & 63]; + if (var3 < var1.length - 1) { + var2[var4++] = mBase64EncMap[var1[var3 + 1] >>> 4 & 15 | var1[var3] << 4 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 1] << 2 & 63]; + } else { + var2[var4++] = mBase64EncMap[var1[var3] << 4 & 63]; + } + } + + while(var4 < var2.length) { + var2[var4] = 61; + ++var4; + } + + String var5 = new String(var2, "euc-kr"); + return var5; + } else { + throw new IllegalArgumentException("Can not encode NULL or empty byte array."); + } + } + + private byte[] base64Decode(String var1) throws Exception { + if (var1 != null && var1.length() != 0) { + byte[] var2 = var1.getBytes("euc-kr"); + + int var3; + for(var3 = var2.length; var2[var3 - 1] == 61; --var3) { + ; + } + + byte[] var4 = new byte[var3 - var2.length / 4]; + + int var5; + for(var5 = 0; var5 < var2.length; ++var5) { + var2[var5] = mBase64DecMap[var2[var5]]; + } + + var5 = 0; + + int var6; + for(var6 = 0; var6 < var4.length - 2; var6 += 3) { + var4[var6] = (byte)(var2[var5] << 2 & 255 | var2[var5 + 1] >>> 4 & 3); + var4[var6 + 1] = (byte)(var2[var5 + 1] << 4 & 255 | var2[var5 + 2] >>> 2 & 15); + var4[var6 + 2] = (byte)(var2[var5 + 2] << 6 & 255 | var2[var5 + 3] & 63); + var5 += 4; + } + + if (var6 < var4.length) { + var4[var6] = (byte)(var2[var5] << 2 & 255 | var2[var5 + 1] >>> 4 & 3); + } + + ++var6; + if (var6 < var4.length) { + var4[var6] = (byte)(var2[var5 + 1] << 4 & 255 | var2[var5 + 2] >>> 2 & 15); + } + + return var4; + } else { + throw new IllegalArgumentException("Can not decode NULL or empty string."); + } + } + + public String getReturnCode() { + return this.m_strReturnCode; + } + + public String getReturnCompName() { + return this.m_strReturnCompName; + } + + public String getReturnRepName() { + return this.m_strReturnRepName; + } + + public String getStatusCode() { + return this.m_strStatusCode; + } + + public int fnRequest(String var1, String var2, String var3, String var4, String var5, String var6, String var7) { + if (var1.length() > 20) { + return -9; + } else if (var2.length() > 127) { + return -9; + } else if (var3.length() != 1) { + return -9; + } else if (var4.length() > 10) { + return -9; + } else if (var5.length() > 13) { + return -9; + } else if (var6.length() > 40) { + return -9; + } else if (var7.length() > 40) { + return -9; + } else { + boolean var8 = false; + int var9 = Math.abs((new Long(System.currentTimeMillis())).intValue()); + int var10 = 81 + var9 % 5; + StringBuffer var11 = new StringBuffer(); + this.m_strPlainData = ""; + this.m_strCipherData = ""; + this.m_strReturnCode = ""; + this.m_strReturnCompName = ""; + this.m_strReturnRepName = ""; + this.m_strStatusCode = ""; + + try { + var11.append(var1); + var11.append("|"); + var11.append(var2); + var11.append("|"); + var11.append(var3); + var11.append("|"); + var11.append(var4); + var11.append("|"); + var11.append(var5); + var11.append("|"); + var11.append(var6); + var11.append("|"); + var11.append(var7); + int var27 = this.fnEncode(var1, var2, var11.toString()); + if (var27 == 0) { + String var12 = ""; + var11.delete(0, var11.capacity()); + //URL var13 = new URL("http://121.162.155.81/cacheck.asp"); + URL var13 = new URL("http://175.193.201.51/cacheck.asp"); + String var14 = var13.getHost(); + String var15 = var13.getFile(); + Socket var16 = new Socket(); + var16.connect(new InetSocketAddress(var14, 80), 5000); + var16.setSoTimeout(5000); + PrintWriter var17 = new PrintWriter(var16.getOutputStream(), false); + InputStream var18 = var16.getInputStream(); + var11.append("POST " + var15 + " HTTP/1.1\n"); + var11.append("Accept: */*\n"); + var11.append("Content-Type: application/x-www-form-urlencoded\n"); + var11.append("Host: " + var14 + ":" + var10 + "\n"); + var11.append("Content-Length: " + (this.m_strCipherData.length() + 9) + "\n"); + var11.append("Connection: close\n"); + var11.append("Cache-Control: no-cache\r\n\r\n"); + var11.append("enc_data="); + var11.append(this.m_strCipherData); + var17.print(var11.toString()); + var17.flush(); + byte[] var19 = new byte[1024]; + var18.read(var19); + String var20 = new String(var19); + String var21 = ""; + int var22 = var20.indexOf("\r\n\r\n"); + if (var22 > 0) { + var21 = var20.substring(var22 + 4).trim(); + } else if (var22 < 0 && var20.indexOf("100 Continue") > 0) { + var17.print(var11.toString()); + var17.flush(); + var18.read(var19); + var20 = new String(var19); + var22 = var20.indexOf("\r\n\r\n"); + if (var22 > 0) { + var21 = var20.substring(var22 + 4).trim(); + } else { + var27 = -18; + } + } else { + var27 = -18; + } + + var11.setLength(0); + var17.close(); + var18.close(); + var16.close(); + var16 = null; + var18 = null; + var17 = null; + if (var27 == 0) { + var27 = this.fnDecode(var1, var2, var21); + if (var27 == 0) { + String[] var23 = null; + var23 = this.m_strPlainData.split("\\|", 4); + if (var23.length < 4) { + var27 = -18; + } else { + this.m_strReturnCode = var23[0]; + this.m_strStatusCode = var23[1]; + this.m_strReturnCompName = var23[2]; + this.m_strReturnRepName = var23[3]; + } + } + } + } + + return var27; + } catch (ConnectException var24) { + return -18; + } catch (SocketException var25) { + return -18; + } catch (Exception var26) { + return -1; + } + } + } + + private int fnEncode(String var1, String var2, String var3) { + this.m_strCipherData = ""; + if (var1.trim().length() != 0 && var1.trim().length() <= 127 && var2.trim().length() != 0) { + byte var4 = 0; + boolean var5 = false; + boolean var6 = false; + boolean var7 = false; + byte var8 = 0; + boolean var9 = false; + Object var10 = null; + Object var11 = null; + Object var12 = null; + Object var13 = null; + Object var14 = null; + Object var15 = null; + Object var16 = null; + Object var17 = null; + Object var18 = null; + Object var19 = null; + Object var20 = null; + Object var21 = null; + Object var22 = null; + Date var23 = new Date(System.currentTimeMillis()); + SimpleDateFormat var24 = new SimpleDateFormat("yyMMddHHmmss"); + String var25 = var24.format(var23); + String var26 = var1.trim(); + String var27 = var2.trim(); + StringBuffer var28 = new StringBuffer(); + + try { + byte[] var37 = var26.getBytes(); + int var33 = var37.length; + byte[] var36 = new byte[]{2, 0, (new Integer(var33)).byteValue()}; + int var34 = var8 + 3; + var34 += var33; + var28.append(var25); + var28.append("^"); + var28.append(getLocalIPAddr()); + var28.append("^"); + var28.append(var3); + byte[] var39 = getHashValue(var28.toString()); + var34 += 32; + byte[] var38 = getHashValue(var26 + var27); + var34 += 32; + byte[] var40 = getHashValue(var27); + byte[] var41 = new byte[16]; + byte[] var42 = new byte[16]; + + int var31; + for(var31 = 0; var31 < 16; ++var31) { + var41[var31] = var40[var31]; + var42[var31] = var40[16 + var31]; + } + + byte[] var44 = getHashValue((new Integer(getRandomValue())).toString()); + byte[] var43 = getEncodeValue(var41, var42, var44); + if (var43 != null) { + var34 += 48; + byte[] var45 = new byte[16]; + byte[] var46 = new byte[16]; + + for(var31 = 0; var31 < 16; ++var31) { + var45[var31] = var44[var31]; + var46[var31] = var44[16 + var31]; + } + + byte[] var47 = getEncodeValue(var45, var46, var28.toString().getBytes("euc-kr")); + if (var47 != null) { + int var35 = var47.length; + var34 += var35; + byte[] var48 = new byte[var34]; + int var32 = 0; + + for(var31 = 0; var31 < 3; ++var31) { + var48[var32] = var36[var31]; + ++var32; + } + + for(var31 = 0; var31 < var33; ++var31) { + var48[var32] = var37[var31]; + ++var32; + } + + for(var31 = 0; var31 < 32; ++var31) { + var48[var32] = var39[var31]; + ++var32; + } + + for(var31 = 0; var31 < 32; ++var31) { + var48[var32] = var38[var31]; + ++var32; + } + + for(var31 = 0; var31 < 48; ++var31) { + var48[var32] = var43[var31]; + ++var32; + } + + for(var31 = 0; var31 < var35; ++var31) { + var48[var32] = var47[var31]; + ++var32; + } + + this.m_strCipherData = this.base64Encode(var48); + } else { + var4 = -2; + } + } else { + var4 = -2; + } + } catch (IOException var30) { + var4 = -2; + } catch (Exception var30) { + var4 = -2; + } + + return var4; + } else { + return -9; + } + } + + private int fnDecode(String var1, String var2, String var3) { + this.m_strPlainData = ""; + this.m_strCipherDateTime = ""; + this.m_strCipherIPAddress = ""; + if (var1.trim().length() != 0 && var1.trim().length() <= 127 && var2.trim().length() != 0) { + byte var5 = 0; + boolean var6 = false; + byte var7 = 0; + boolean var8 = false; + boolean var9 = false; + boolean var10 = false; + Object var11 = null; + Object var12 = null; + Object var13 = null; + Object var14 = null; + Object var15 = null; + Object var16 = null; + Object var17 = null; + Object var18 = null; + Object var19 = null; + Object var20 = null; + Object var21 = null; + Object var22 = null; + Object var23 = null; + Object var24 = null; + String var25 = var1.trim(); + String var26 = var2.trim(); + String var27 = null; + + try { + byte[] var35 = this.base64Decode(var3); + if (var35 != null && this.checkCipherVersion(var35) == 0) { + int var33 = var35.length; + Byte var4 = new Byte(var35[2]); + int var32 = var4.intValue(); + int var31 = var7 + 3; + var31 += var32; + if (var33 > 3 + var32 + 32 + 32 + 48) { + byte[] var37 = new byte[32]; + + int var30; + for(var30 = 0; var30 < 32; ++var30) { + var37[var30] = var35[var31]; + ++var31; + } + + byte[] var36 = new byte[32]; + + for(var30 = 0; var30 < 32; ++var30) { + var36[var30] = var35[var31]; + ++var31; + } + + byte[] var40 = new byte[48]; + + for(var30 = 0; var30 < 48; ++var30) { + var40[var30] = var35[var31]; + ++var31; + } + + byte[] var38 = getHashValue(var25 + var26); + if (var36 != null && var38 != null && compareHashValue(var36, var38)) { + byte[] var41 = getHashValue(getHashValue(var26)); + byte[] var42 = new byte[16]; + byte[] var43 = new byte[16]; + + for(var30 = 0; var30 < 16; ++var30) { + var42[var30] = var41[var30]; + var43[var30] = var41[16 + var30]; + } + + byte[] var44 = getDecodeValue(var42, var43, var40); + if (var44 != null) { + int var34 = var33 - var31; + byte[] var47 = new byte[var34]; + + for(var30 = 0; var30 < var34; ++var30) { + var47[var30] = var35[var31]; + ++var31; + } + + byte[] var45 = new byte[16]; + byte[] var46 = new byte[16]; + + for(var30 = 0; var30 < 16; ++var30) { + var45[var30] = var44[var30]; + var46[var30] = var44[16 + var30]; + } + + byte[] var48 = getDecodeValue(var45, var46, var47); + if (var48 != null) { + byte[] var39 = getHashValue(var48); + if (compareHashValue(var37, var39)) { + var27 = new String(var48, "euc-kr"); + if (var48.length >= 29 && var27.charAt(12) == '^' && var27.charAt(28) == '^') { + this.m_strCipherDateTime = var27.substring(0, 12); + this.m_strCipherIPAddress = var27.substring(13, 28); + this.m_strPlainData = var27.substring(29); + } else { + var5 = -6; + } + } else { + var5 = -5; + } + } else { + var5 = -4; + } + } else { + var5 = -6; + } + } else { + var5 = -12; + } + } else { + var5 = -6; + } + } else { + var5 = -6; + } + } catch (IOException var29) { + var5 = -4; + } catch (Exception var29) { + var5 = -4; + } + + return var5; + } else { + return -9; + } + } + + private static int getRandomValue() { + Random var0 = new Random(System.currentTimeMillis()); + return Math.abs(var0.nextInt()); + } + + private static byte[] getHashValue(String var0) throws Exception { + return getHashValue(var0.getBytes("euc-kr")); + } + + private static byte[] getHashValue(byte[] var0) { + boolean var1 = true; + MessageDigest var2 = null; + byte[] var3 = null; + + try { + var2 = MessageDigest.getInstance("SHA-256"); + var2.reset(); + var2.update(var0); + var3 = new byte[32]; + var3 = var2.digest(); + } catch (NoSuchAlgorithmException var5) { + var1 = false; + } + + return var1 ? var3 : null; + } + + private static boolean compareHashValue(byte[] var0, byte[] var1) { + boolean var2 = false; + boolean var3 = true; + if (var0.length == 32 && var1.length == 32) { + for(int var4 = 0; var4 < 32; ++var4) { + if (var0[var4] != var1[var4]) { + var3 = false; + break; + } + } + + return var3; + } else { + return false; + } + } + + private static byte[] getEncodeValue(byte[] var0, byte[] var1, byte[] var2) { + boolean var3 = true; + SecretKeySpec var4 = null; + Cipher var5 = null; + byte[] var6 = null; + + try { + var4 = new SecretKeySpec(var0, "AES"); + var5 = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE"); + var5.init(1, var4, new IvParameterSpec(var1)); + var6 = var5.doFinal(var2); + } catch (GeneralSecurityException var8) { + var3 = false; + } + + return var3 ? var6 : null; + } + + private static byte[] getDecodeValue(byte[] var0, byte[] var1, byte[] var2) { + boolean var3 = true; + SecretKeySpec var4 = null; + Cipher var5 = null; + byte[] var6 = null; + + try { + var4 = new SecretKeySpec(var0, "AES"); + var5 = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE"); + var5.init(2, var4, new IvParameterSpec(var1)); + var6 = var5.doFinal(var2); + } catch (GeneralSecurityException var8) { + var3 = false; + } + + return var3 ? var6 : null; + } + + private int checkCipherVersion(byte[] var1) { + boolean var2 = true; + + byte var7; + try { + if (var1 != null && var1.length >= 3) { + Byte var3 = new Byte(var1[0]); + Byte var4 = new Byte(var1[1]); + if (var3.compareTo(new Byte((byte)2)) == 0 && var4.compareTo(new Byte((byte)0)) == 0) { + var7 = 0; + } else { + var7 = -7; + } + } else { + var7 = -8; + } + } catch (RuntimeException var6) { + var7 = -8; + } + + return var7; + } + + private static String getLocalIPAddr() { + boolean var0 = false; + boolean var1 = false; + String var2 = ""; + + try { + var2 = InetAddress.getLocalHost().getHostAddress(); + } catch (IOException var4) { + var2 = "UNKNOWN_ADDRESS"; + } + + int var6 = 16 - var2.length() - 1; + if (var6 > 0) { + for(int var5 = 0; var5 < var6; ++var5) { + var2 = var2 + " "; + } + } + + return var2.substring(0, 15); + } + + private static boolean checkNumber(String var0) { + int var1 = var0.length(); + boolean var2 = false; + + for(int var3 = 0; var3 < var1; ++var3) { + char var4 = var0.charAt(var3); + if (var4 < '0' || var4 > '9') { + return false; + } + } + + return true; + } + + static { + byte[] var0 = new byte[]{65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47}; + mBase64EncMap = var0; + mBase64DecMap = new byte[128]; + + for(int var1 = 0; var1 < mBase64EncMap.length; ++var1) { + mBase64DecMap[mBase64EncMap[var1]] = (byte)var1; + } + + } +} diff --git a/src/main/java/gtpa/brs/security/KISA_SEED.java b/src/main/java/gtpa/brs/security/KISA_SEED.java new file mode 100644 index 0000000..2156c07 --- /dev/null +++ b/src/main/java/gtpa/brs/security/KISA_SEED.java @@ -0,0 +1,329 @@ +package gtpa.brs.security; + +public class KISA_SEED +{ + private static final int KC0 = 0x9e3779b9; + private static final int KC1 = 0x3c6ef373; + private static final int KC2 = 0x78dde6e6; + private static final int KC3 = 0xf1bbcdcc; + private static final int KC4 = 0xe3779b99; + private static final int KC5 = 0xc6ef3733; + private static final int KC6 = 0x8dde6e67; + private static final int KC7 = 0x1bbcdccf; + private static final int KC8 = 0x3779b99e; + private static final int KC9 = 0x6ef3733c; + private static final int KC10 = 0xdde6e678; + private static final int KC11 = 0xbbcdccf1; + private static final int KC12 = 0x779b99e3; + private static final int KC13 = 0xef3733c6; + private static final int KC14 = 0xde6e678d; + private static final int KC15 = 0xbcdccf1b; + + private static final int SS0[] = + { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }; + + private static final int SS1[] = + { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }; + + private static final int SS2[] = + { + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }; + + private static final int SS3[] = + { + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + }; + + private static final byte GetB0(int A) { return (byte)( A & 0x0FF); } + private static final byte GetB1(int A) { return (byte)((A>> 8) & 0x0FF); } + private static final byte GetB2(int A) { return (byte)((A>>16) & 0x0FF); } + private static final byte GetB3(int A) { return (byte)((A>>24) & 0x0FF); } + + private static final void RoundKeyUpdate0(int T[], int[] K, int K_offset, int ABCD[], int KC) + { + T[0] = ABCD[0] + ABCD[2] - KC; + T[1] = ABCD[1] + KC - ABCD[3]; + + K[K_offset+0] = SS0[GetB0(T[0]) & 0x0FF] ^ SS1[GetB1(T[0]) & 0x0FF] ^ + SS2[GetB2(T[0]) & 0x0FF] ^ SS3[GetB3(T[0]) & 0x0FF]; + K[K_offset+1] = SS0[GetB0(T[1]) & 0x0FF] ^ SS1[GetB1(T[1]) & 0x0FF] ^ + SS2[GetB2(T[1]) & 0x0FF] ^ SS3[GetB3(T[1]) & 0x0FF]; + + T[0] = ABCD[0]; + + ABCD[0] = ((ABCD[0]>>8)&0x00ffffff) ^ (ABCD[1]<<24); + ABCD[1] = ((ABCD[1]>>8)&0x00ffffff) ^ (T[0]<<24); + } + + private static final void RoundKeyUpdate1(int T[], int []K, int K_offset, int ABCD[], int KC) + { + T[0] = ABCD[0] + ABCD[2] - KC; + T[1] = ABCD[1] + KC - ABCD[3]; + + K[K_offset+0] = SS0[GetB0(T[0]) & 0x0FF] ^ SS1[GetB1(T[0]) & 0x0FF] ^ + SS2[GetB2(T[0]) & 0x0FF] ^ SS3[GetB3(T[0]) & 0x0FF]; + K[K_offset+1] = SS0[GetB0(T[1]) & 0x0FF] ^ SS1[GetB1(T[1]) & 0x0FF] ^ + SS2[GetB2(T[1]) & 0x0FF] ^ SS3[GetB3(T[1]) & 0x0FF]; + + T[0] = ABCD[2]; + + ABCD[2] = (ABCD[2]<<8) ^ ((ABCD[3]>>24)&0x000000ff); + ABCD[3] = (ABCD[3]<<8) ^ ((T[0]>>24)&0x000000ff); + } + + private static final void SeedRound(int[] T, int LR[], int L0, int L1, int R0, int R1, int[] K, int K_offset) + { + T[0] = LR[R0] ^ K[K_offset + 0]; + T[1] = LR[R1] ^ K[K_offset + 1]; + + T[1] ^= T[0]; + T[1] = SS0[GetB0(T[1]) & 0x0FF] ^ SS1[GetB1(T[1]) & 0x0FF] ^ + SS2[GetB2(T[1]) & 0x0FF] ^ SS3[GetB3(T[1]) & 0x0FF]; + + T[0] += T[1]; + T[0] = SS0[GetB0(T[0]) & 0x0FF] ^ SS1[GetB1(T[0]) & 0x0FF] ^ + SS2[GetB2(T[0]) & 0x0FF] ^ SS3[GetB3(T[0]) & 0x0FF]; + + T[1] += T[0]; + T[1] = SS0[GetB0(T[1]) & 0x0FF] ^ SS1[GetB1(T[1]) & 0x0FF] ^ + SS2[GetB2(T[1]) & 0x0FF] ^ SS3[GetB3(T[1]) & 0x0FF]; + + T[0] += T[1]; + LR[L0] ^= T[0]; LR[L1] ^= T[1]; + } + + private static int Byte2Word(byte[] src, int src_offset) + { + return ((src[src_offset] & 0x0FF) << 24) | ((src[src_offset + 1] & 0x0FF) << 16) | ((src[src_offset + 2] & 0x0FF) << 8) | ((src[src_offset + 3] & 0x0FF)); + } + + public void SEED_KeySched(byte[] mKey, int[] rKey) + { + int ABCD[] = new int[4]; + int T[] = new int[2]; + + ABCD[0] = Byte2Word(mKey, 0); + ABCD[1] = Byte2Word(mKey, 4); + ABCD[2] = Byte2Word(mKey, 8); + ABCD[3] = Byte2Word(mKey,12); + + RoundKeyUpdate0(T, rKey, 0, ABCD, KC0 ); + RoundKeyUpdate1(T, rKey, 2, ABCD, KC1 ); + RoundKeyUpdate0(T, rKey, 4, ABCD, KC2 ); + RoundKeyUpdate1(T, rKey, 6, ABCD, KC3 ); + RoundKeyUpdate0(T, rKey, 8, ABCD, KC4 ); + RoundKeyUpdate1(T, rKey, 10, ABCD, KC5 ); + RoundKeyUpdate0(T, rKey, 12, ABCD, KC6 ); + RoundKeyUpdate1(T, rKey, 14, ABCD, KC7 ); + RoundKeyUpdate0(T, rKey, 16, ABCD, KC8 ); + RoundKeyUpdate1(T, rKey, 18, ABCD, KC9 ); + RoundKeyUpdate0(T, rKey, 20, ABCD, KC10); + RoundKeyUpdate1(T, rKey, 22, ABCD, KC11); + RoundKeyUpdate0(T, rKey, 24, ABCD, KC12); + RoundKeyUpdate1(T, rKey, 26, ABCD, KC13); + RoundKeyUpdate0(T, rKey, 28, ABCD, KC14); + + T[0] = ABCD[0] + ABCD[2] - KC15; + T[1] = ABCD[1] - ABCD[3] + KC15; + + rKey[30] = SS0[GetB0(T[0]) & 0x0FF] ^ SS1[GetB1(T[0]) & 0x0FF] ^ + SS2[GetB2(T[0]) & 0x0FF] ^ SS3[GetB3(T[0]) & 0x0FF]; + rKey[31] = SS0[GetB0(T[1]) & 0x0FF] ^ SS1[GetB1(T[1]) & 0x0FF] ^ + SS2[GetB2(T[1]) & 0x0FF] ^ SS3[GetB3(T[1]) & 0x0FF]; + } + + public void SEED_Encrypt(int[] pOut, int[] pIn, int[] rKey) + { + int LR[] = new int[4]; + int T[] = new int[2]; + + LR[0] = pIn[0]; + LR[1] = pIn[1]; + LR[2] = pIn[2]; + LR[3] = pIn[3]; + + SeedRound(T, LR, 0, 1, 2, 3, rKey, 0); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 2); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 4); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 6); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 8); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 10); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 12); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 14); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 16); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 18); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 20); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 22); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 24); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 26); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 28); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 30); + + pOut[0] = LR[2]; + pOut[1] = LR[3]; + pOut[2] = LR[0]; + pOut[3] = LR[1]; + } + + public void SEED_Decrypt(int[] pOut, int[] pIn, int[] rKey) + { + int LR[] = new int[4]; + int T[] = new int[2]; + + LR[0] = pIn[0]; + LR[1] = pIn[1]; + LR[2] = pIn[2]; + LR[3] = pIn[3]; + + SeedRound(T, LR, 0, 1, 2, 3, rKey, 30); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 28); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 26); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 24); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 22); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 20); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 18); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 16); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 14); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 12); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 10); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 8); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 6); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 4); + SeedRound(T, LR, 0, 1, 2, 3, rKey, 2); + SeedRound(T, LR, 2, 3, 0, 1, rKey, 0); + + pOut[0] = LR[2]; + pOut[1] = LR[3]; + pOut[2] = LR[0]; + pOut[3] = LR[1]; + } +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/security/KISA_SEED_CBC.java b/src/main/java/gtpa/brs/security/KISA_SEED_CBC.java new file mode 100644 index 0000000..5b23144 --- /dev/null +++ b/src/main/java/gtpa/brs/security/KISA_SEED_CBC.java @@ -0,0 +1,970 @@ +package gtpa.brs.security; +/** + * @author Copyright (c) 2013 by KISA + * @file KISA_SEED_CBC.java + * @brief SEED CBC 암호 알고리즘 + * @remarks http://seed.kisa.or.kr/ + */ + +public class KISA_SEED_CBC { + + // DEFAULT : JAVA = BIG_ENDIAN + private static int ENDIAN = Common.BIG_ENDIAN; + + // S-BOX + private static final int SS0[] = + { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }; + + private static final int SS1[] = + { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }; + + private static final int SS2[] = + { + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }; + + private static final int SS3[] = + { + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + }; + + private static final int BLOCK_SIZE_SEED = 16; + private static final int BLOCK_SIZE_SEED_INT = 4; + + private static final byte GetB0(int A) { + return (byte) (A & 0x0ff); + } + + private static final byte GetB1(int A) { + return (byte) ((A >> 8) & 0x0ff); + } + + private static final byte GetB2(int A) { + return (byte) ((A >> 16) & 0x0ff); + } + + private static final byte GetB3(int A) { + return (byte) ((A >> 24) & 0x0ff); + } + + // Round function F and adding output of F to L. + // L0, L1 : left input values at each round + // R0, R1 : right input values at each round + // K : round keys at each round + private static final void SeedRound(int[] T, int LR[], int L0, int L1, int R0, int R1, int[] K, int K_offset) { + T[0] = LR[R0] ^ K[K_offset + 0]; + T[1] = LR[R1] ^ K[K_offset + 1]; + T[1] ^= T[0]; + T[1] = SS0[GetB0(T[1]) & 0x0ff] ^ SS1[GetB1(T[1]) & 0x0ff] ^ + SS2[GetB2(T[1]) & 0x0ff] ^ SS3[GetB3(T[1]) & 0x0ff]; + T[0] += T[1]; + T[0] = SS0[GetB0(T[0]) & 0x0ff] ^ SS1[GetB1(T[0]) & 0x0ff] ^ + SS2[GetB2(T[0]) & 0x0ff] ^ SS3[GetB3(T[0]) & 0x0ff]; + T[1] += T[0]; + T[1] = SS0[GetB0(T[1]) & 0x0ff] ^ SS1[GetB1(T[1]) & 0x0ff] ^ + SS2[GetB2(T[1]) & 0x0ff] ^ SS3[GetB3(T[1]) & 0x0ff]; + T[0] += T[1]; + LR[L0] ^= T[0]; + LR[L1] ^= T[1]; + } + + + private static final int EndianChange(int dwS) { + return ((/*ROTL(dwS,8)*/(((dwS) << (8)) | (((dwS) >> (32 - (8))) & 0x000000ff)) & 0x00ff00ff) | (/*ROTL(dwS,24)*/(((dwS) << (24)) | (((dwS) >> (32 - (24))) & 0x00ffffff)) & 0xff00ff00)); + } + + /************************ Constants for Key schedule **************************/ + private static final int KC0 = 0x9e3779b9; + private static final int KC1 = 0x3c6ef373; + private static final int KC2 = 0x78dde6e6; + private static final int KC3 = 0xf1bbcdcc; + private static final int KC4 = 0xe3779b99; + private static final int KC5 = 0xc6ef3733; + private static final int KC6 = 0x8dde6e67; + private static final int KC7 = 0x1bbcdccf; + private static final int KC8 = 0x3779b99e; + private static final int KC9 = 0x6ef3733c; + private static final int KC10 = 0xdde6e678; + private static final int KC11 = 0xbbcdccf1; + private static final int KC12 = 0x779b99e3; + private static final int KC13 = 0xef3733c6; + private static final int KC14 = 0xde6e678d; + private static final int KC15 = 0xbcdccf1b; + + + private static final int ABCD_A = 0; + private static final int ABCD_B = 1; + private static final int ABCD_C = 2; + private static final int ABCD_D = 3; + + private static final void RoundKeyUpdate0(int T[], int[] K, int K_offset, int ABCD[], int KC) { + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC; + T[1] = ABCD[ABCD_B] + KC - ABCD[ABCD_D]; + K[K_offset + 0] = SS0[GetB0(T[0]) & 0x0ff] ^ SS1[GetB1(T[0]) & 0x0ff] ^ SS2[GetB2(T[0]) & 0x0ff] ^ SS3[GetB3(T[0]) & 0x0ff]; + K[K_offset + 1] = SS0[GetB0(T[1]) & 0x0ff] ^ SS1[GetB1(T[1]) & 0x0ff] ^ SS2[GetB2(T[1]) & 0x0ff] ^ SS3[GetB3(T[1]) & 0x0ff]; + T[0] = ABCD[ABCD_A]; + ABCD[ABCD_A] = ((ABCD[ABCD_A] >> 8) & 0x00ffffff) ^ (ABCD[ABCD_B] << 24); + ABCD[ABCD_B] = ((ABCD[ABCD_B] >> 8) & 0x00ffffff) ^ (T[0] << 24); + } + + private static final void RoundKeyUpdate1(int T[], int[] K, int K_offset, int ABCD[], int KC) { + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC; + T[1] = ABCD[ABCD_B] + KC - ABCD[ABCD_D]; + K[K_offset + 0] = SS0[GetB0(T[0]) & 0x0ff] ^ SS1[GetB1(T[0]) & 0x0ff] ^ SS2[GetB2(T[0]) & 0x0ff] ^ SS3[GetB3(T[0]) & 0x0ff]; + K[K_offset + 1] = SS0[GetB0(T[1]) & 0x0ff] ^ SS1[GetB1(T[1]) & 0x0ff] ^ SS2[GetB2(T[1]) & 0x0ff] ^ SS3[GetB3(T[1]) & 0x0ff]; + T[0] = ABCD[ABCD_C]; + ABCD[ABCD_C] = (ABCD[ABCD_C] << 8) ^ ((ABCD[ABCD_D] >> 24) & 0x000000ff); + ABCD[ABCD_D] = (ABCD[ABCD_D] << 8) ^ ((T[0] >> 24) & 0x000000ff); + } + + private static void BLOCK_XOR_CBC(int[] OUT_VALUE, int out_value_offset, int[] IN_VALUE1, int in_value1_offset, int[] IN_VALUE2, int in_value2_offset) { + OUT_VALUE[out_value_offset + 0] = (in_value1_offset < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 0] : 0) ^ (in_value2_offset < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 0] : 0); + OUT_VALUE[out_value_offset + 1] = (in_value1_offset + 1 < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 1] : 0) ^ (in_value2_offset + 1 < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 1] : 0); + OUT_VALUE[out_value_offset + 2] = (in_value1_offset + 2 < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 2] : 0) ^ (in_value2_offset + 2 < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 2] : 0); + OUT_VALUE[out_value_offset + 3] = (in_value1_offset + 3 < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 3] : 0) ^ (in_value2_offset + 3 < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 3] : 0); + } + + private static final int LR_L0 = 0; + private static final int LR_L1 = 1; + private static final int LR_R0 = 2; + private static final int LR_R1 = 3; + + private static void KISA_SEED_Encrypt_Block_forCBC(int[] in, int in_offset, int[] out, int out_offset, KISA_SEED_KEY ks) { + int LR[] = new int[4]; // Iuput/output values at each rounds + int T[] = new int[2]; // Temporary variables for round function F + int K[] = ks.key_data; // Pointer of round keys + + // Set up input values for first round + LR[LR_L0] = in[in_offset + 0]; + LR[LR_L1] = in[in_offset + 1]; + LR[LR_R0] = in[in_offset + 2]; + LR[LR_R1] = in[in_offset + 3]; + + // Reorder for big endian + // Because SEED use little endian order in default + if (Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 0); // Round 1 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 2); // Round 2 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 4); // Round 3 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 6); // Round 4 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 8); // Round 5 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 10); // Round 6 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 12); // Round 7 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 14); // Round 8 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 16); // Round 9 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 18); // Round 10 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 20); // Round 11 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 22); // Round 12 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 24); // Round 13 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 26); // Round 14 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 28); // Round 15 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 30); // Round 16 + + if (Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + // Copying output values from last round to pbData + out[out_offset + 0] = LR[LR_R0]; + out[out_offset + 1] = LR[LR_R1]; + out[out_offset + 2] = LR[LR_L0]; + out[out_offset + 3] = LR[LR_L1]; + + } + + private static void KISA_SEED_Decrypt_Block_forCBC(int[] in, int in_offset, int[] out, int out_offset, KISA_SEED_KEY ks) { + int LR[] = new int[4]; // Iuput/output values at each rounds + int T[] = new int[2]; // Temporary variables for round function F + int K[] = ks.key_data; // Pointer of round keys + + // Set up input values for first round + LR[LR_L0] = in[in_offset + 0]; + LR[LR_L1] = in[in_offset + 1]; + LR[LR_R0] = in[in_offset + 2]; + LR[LR_R1] = in[in_offset + 3]; + + // Reorder for big endian + if (Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 30); // Round 1 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 28); // Round 2 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 26); // Round 3 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 24); // Round 4 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 22); // Round 5 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 20); // Round 6 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 18); // Round 7 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 16); // Round 8 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 14); // Round 9 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 12); // Round 10 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 10); // Round 11 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 8); // Round 12 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 6); // Round 13 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 4); // Round 14 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 2); // Round 15 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 0); // Round 16 + + if (Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + // Copy output values from last round to pbData + out[out_offset + 0] = LR[LR_R0]; + out[out_offset + 1] = LR[LR_R1]; + out[out_offset + 2] = LR[LR_L0]; + out[out_offset + 3] = LR[LR_L1]; + + } + + + public static int[] chartoint32_for_SEED_CBC(byte[] in, int inLen) { + int[] data; + int len, i; + + if (inLen % 4 > 0) + len = (inLen / 4) + 1; + else + len = (inLen / 4); + + data = new int[len]; + + for (i = 0; i < len; i++) { + Common.byte_to_int(data, i, in, i * 4, ENDIAN); + } + + return data; + } + + + public static byte[] int32tochar_for_SEED_CBC(int in[], int inLen) { + byte[] data; + int i; + + data = new byte[inLen]; + if (ENDIAN != Common.BIG_ENDIAN) { + for (i = 0; i < inLen; i++) { + data[i] = (byte) (in[i / 4] >> ((i % 4) * 8)); + } + } else { + for (i = 0; i < inLen; i++) { + data[i] = (byte) (in[i / 4] >> ((3 - (i % 4)) * 8)); + } + } + + return data; + } + + + public static int SEED_CBC_init(KISA_SEED_INFO pInfo, KISA_ENC_DEC enc, byte[] pbszUserKey, byte[] pbszIV) { + int ABCD[] = new int[4]; // Iuput/output values at each rounds(각 라운드 입/출력) + int T[] = new int[2]; // Temporary variable + int K[]; + + if (null == pInfo || + null == pbszUserKey || + null == pbszIV) + return 0; + + K = pInfo.seed_key.key_data; // Pointer of round keys + pInfo.encrypt = enc.value; // + Common.memcpy(pInfo.ivec, pbszIV, 16, ENDIAN); + pInfo.last_block_flag = pInfo.buffer_length = 0; + + // Set up input values for Key Schedule + ABCD[ABCD_A] = Common.byte_to_int(pbszUserKey, 0 * 4, ENDIAN); + ABCD[ABCD_B] = Common.byte_to_int(pbszUserKey, 1 * 4, ENDIAN); + ABCD[ABCD_C] = Common.byte_to_int(pbszUserKey, 2 * 4, ENDIAN); + ABCD[ABCD_D] = Common.byte_to_int(pbszUserKey, 3 * 4, ENDIAN); + + // Reorder for big endian + if (Common.BIG_ENDIAN != ENDIAN) { + ABCD[ABCD_A] = EndianChange(ABCD[ABCD_A]); + ABCD[ABCD_B] = EndianChange(ABCD[ABCD_B]); + ABCD[ABCD_C] = EndianChange(ABCD[ABCD_C]); + ABCD[ABCD_D] = EndianChange(ABCD[ABCD_D]); + } + + // i-th round keys( K_i,0 and K_i,1 ) are denoted as K[2*(i-1)] and K[2*i-1], respectively + RoundKeyUpdate0(T, K, 0, ABCD, KC0); // K_1,0 and K_1,1 + RoundKeyUpdate1(T, K, 2, ABCD, KC1); // K_2,0 and K_2,1 + RoundKeyUpdate0(T, K, 4, ABCD, KC2); // K_3,0 and K_3,1 + RoundKeyUpdate1(T, K, 6, ABCD, KC3); // K_4,0 and K_4,1 + RoundKeyUpdate0(T, K, 8, ABCD, KC4); // K_5,0 and K_5,1 + RoundKeyUpdate1(T, K, 10, ABCD, KC5); // K_6,0 and K_6,1 + RoundKeyUpdate0(T, K, 12, ABCD, KC6); // K_7,0 and K_7,1 + RoundKeyUpdate1(T, K, 14, ABCD, KC7); // K_8,0 and K_8,1 + RoundKeyUpdate0(T, K, 16, ABCD, KC8); // K_9,0 and K_9,1 + RoundKeyUpdate1(T, K, 18, ABCD, KC9); // K_10,0 and K_10,1 + RoundKeyUpdate0(T, K, 20, ABCD, KC10); // K_11,0 and K_11,1 + RoundKeyUpdate1(T, K, 22, ABCD, KC11); // K_12,0 and K_12,1 + RoundKeyUpdate0(T, K, 24, ABCD, KC12); // K_13,0 and K_13,1 + RoundKeyUpdate1(T, K, 26, ABCD, KC13); // K_14,0 and K_14,1 + RoundKeyUpdate0(T, K, 28, ABCD, KC14); // K_15,0 and K_15,1 + + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC15; + T[1] = ABCD[ABCD_B] - ABCD[ABCD_D] + KC15; + + K[30] = SS0[GetB0(T[0]) & 0x0ff] ^ SS1[GetB1(T[0]) & 0x0ff] ^ // K_16,0 + SS2[GetB2(T[0]) & 0x0ff] ^ SS3[GetB3(T[0]) & 0x0ff]; + K[31] = SS0[GetB0(T[1]) & 0x0ff] ^ SS1[GetB1(T[1]) & 0x0ff] ^ // K_16,1 + SS2[GetB2(T[1]) & 0x0ff] ^ SS3[GetB3(T[1]) & 0x0ff]; + + return 1; + + + } + + + public static int SEED_CBC_Process(KISA_SEED_INFO pInfo, int[] in, int inLen, int[] out, int[] outLen) { + int nCurrentCount = BLOCK_SIZE_SEED; + int[] pdwXOR = null; + int in_offset = 0; + int out_offset = 0; + int pdwXOR_offset = 0; + + if (null == pInfo || + null == in || + null == out || + 0 > inLen) + return 0; + + + if (KISA_ENC_DEC._KISA_ENCRYPT == pInfo.encrypt) { + pdwXOR = pInfo.ivec; + in_offset = 0; + out_offset = 0; + pdwXOR_offset = 0; + + + while (nCurrentCount <= inLen) { + BLOCK_XOR_CBC(out, out_offset, in, in_offset, pdwXOR, pdwXOR_offset); + + KISA_SEED_Encrypt_Block_forCBC(out, out_offset, out, out_offset, pInfo.seed_key); + + pdwXOR = out; + pdwXOR_offset = out_offset; + + nCurrentCount += BLOCK_SIZE_SEED; + in_offset += BLOCK_SIZE_SEED_INT; + out_offset += BLOCK_SIZE_SEED_INT; + } + + outLen[0] = nCurrentCount - BLOCK_SIZE_SEED; + pInfo.buffer_length = (inLen - outLen[0]); + + Common.memcpy(pInfo.ivec, pdwXOR, pdwXOR_offset, BLOCK_SIZE_SEED); + Common.memcpy(pInfo.cbc_buffer, in, in_offset, pInfo.buffer_length); + } else { + pdwXOR = pInfo.ivec; + in_offset = 0; + out_offset = 0; + pdwXOR_offset = 0; + + while (nCurrentCount <= inLen) { + KISA_SEED_Decrypt_Block_forCBC(in, in_offset, out, out_offset, pInfo.seed_key); + + BLOCK_XOR_CBC(out, out_offset, out, out_offset, pdwXOR, pdwXOR_offset); + + pdwXOR = in; + pdwXOR_offset = in_offset; + + nCurrentCount += BLOCK_SIZE_SEED; + in_offset += BLOCK_SIZE_SEED_INT; + out_offset += BLOCK_SIZE_SEED_INT; + } + + outLen[0] = nCurrentCount - BLOCK_SIZE_SEED; + + + Common.memcpy(pInfo.ivec, pdwXOR, pdwXOR_offset, BLOCK_SIZE_SEED); + Common.memcpy(pInfo.cbc_last_block, out, out_offset - BLOCK_SIZE_SEED_INT, BLOCK_SIZE_SEED); + + + } + + return 1; + + } + + + public static int SEED_CBC_Close(KISA_SEED_INFO pInfo, int[] out, int out_offset, int[] outLen) { + int nPaddngLeng; + int i; + + outLen[0] = 0; + + if (null == out) + return 0; + + if (KISA_ENC_DEC._KISA_ENCRYPT == pInfo.encrypt) { + nPaddngLeng = BLOCK_SIZE_SEED - pInfo.buffer_length; + + for (i = pInfo.buffer_length; i < BLOCK_SIZE_SEED; i++) { + Common.set_byte_for_int(pInfo.cbc_buffer, i, (byte) nPaddngLeng, ENDIAN); + } + BLOCK_XOR_CBC(pInfo.cbc_buffer, 0, pInfo.cbc_buffer, 0, pInfo.ivec, 0); + + KISA_SEED_Encrypt_Block_forCBC(pInfo.cbc_buffer, 0, out, out_offset, pInfo.seed_key); + + outLen[0] = BLOCK_SIZE_SEED; + + return 1; + } else { + nPaddngLeng = Common.get_byte_for_int(pInfo.cbc_last_block, BLOCK_SIZE_SEED - 1, ENDIAN); + + + if (nPaddngLeng > 0 && nPaddngLeng <= BLOCK_SIZE_SEED) { + for (i = nPaddngLeng; i > 0; i--) { + Common.set_byte_for_int(out, out_offset - i, (byte) 0x00, ENDIAN); + } + + outLen[0] = nPaddngLeng; + } else + return 0; + + + } + return 1; + + + } + + + public static byte[] SEED_CBC_Encrypt(byte[] pbszUserKey, byte[] pbszIV, byte[] message, int message_offset, int message_length) { + KISA_SEED_INFO info = new KISA_SEED_INFO(); + int[] outbuf; + int[] data; + byte[] cdata; + int outlen; + int nRetOutLeng[] = new int[]{0}; + int nPaddingLeng[] = new int[]{0}; + + byte[] pbszPlainText = new byte[message_length]; + System.arraycopy(message, message_offset, pbszPlainText, 0, message_length); + int nPlainTextLen = pbszPlainText.length; + + + int nPlainTextPadding = BLOCK_SIZE_SEED - (nPlainTextLen % BLOCK_SIZE_SEED); + byte[] newpbszPlainText = new byte[nPlainTextLen + nPlainTextPadding]; + Common.arraycopy(newpbszPlainText, pbszPlainText, nPlainTextLen); + + byte[] pbszCipherText = new byte[newpbszPlainText.length]; + + + SEED_CBC_init(info, KISA_ENC_DEC.KISA_ENCRYPT, pbszUserKey, pbszIV); + + outlen = ((newpbszPlainText.length / BLOCK_SIZE_SEED)) * BLOCK_SIZE_SEED_INT; + outbuf = new int[outlen]; + data = chartoint32_for_SEED_CBC(newpbszPlainText, nPlainTextLen); + + SEED_CBC_Process(info, data, nPlainTextLen, outbuf, nRetOutLeng); + SEED_CBC_Close(info, outbuf, (nRetOutLeng[0] / 4), nPaddingLeng); + + cdata = int32tochar_for_SEED_CBC(outbuf, nRetOutLeng[0] + nPaddingLeng[0]); + Common.arraycopy(pbszCipherText, cdata, nRetOutLeng[0] + nPaddingLeng[0]); + + data = null; + cdata = null; + outbuf = null; + + return pbszCipherText; + } + + + public static byte[] SEED_CBC_Decrypt(byte[] pbszUserKey, byte[] pbszIV, byte[] message, int message_offset, int message_length) { + KISA_SEED_INFO info = new KISA_SEED_INFO(); + int[] outbuf; + int[] data; + byte[] cdata; + int outlen; + int nRetOutLeng[] = new int[]{0}; + int nPaddingLeng[] = new int[]{0}; + + + byte[] pbszCipherText = new byte[message_length]; + System.arraycopy(message, message_offset, pbszCipherText, 0, message_length); + int nCipherTextLen = pbszCipherText.length; + + if ((nCipherTextLen % BLOCK_SIZE_SEED) != 0) { + byte result[] = null; + return result; + } + + + byte[] newpbszCipherText = new byte[nCipherTextLen]; + Common.arraycopy(newpbszCipherText, pbszCipherText, nCipherTextLen); + + nCipherTextLen = newpbszCipherText.length; + + + SEED_CBC_init(info, KISA_ENC_DEC.KISA_DECRYPT, pbszUserKey, pbszIV); + + outlen = ((nCipherTextLen / 16)) * 4; + outbuf = new int[outlen]; + data = chartoint32_for_SEED_CBC(newpbszCipherText, nCipherTextLen); + + SEED_CBC_Process(info, data, nCipherTextLen, outbuf, nRetOutLeng); + + + if (SEED_CBC_Close(info, outbuf, (nRetOutLeng[0]), nPaddingLeng) == 1) { + cdata = int32tochar_for_SEED_CBC(outbuf, nRetOutLeng[0] - nPaddingLeng[0]); + + byte[] pbszPlainText = new byte[nRetOutLeng[0] - nPaddingLeng[0]]; + + Common.arraycopy(pbszPlainText, cdata, nRetOutLeng[0] - nPaddingLeng[0]); + + int pdmessage_length = nRetOutLeng[0] - nPaddingLeng[0]; + byte[] result = new byte[pdmessage_length]; + System.arraycopy(pbszPlainText, 0, result, 0, pdmessage_length); + + data = null; + cdata = null; + outbuf = null; + + return result; + + } else { + byte result[] = null; + return result; + } + + + } + + + public static final class KISA_ENC_DEC { + public static final int _KISA_DECRYPT = 0; + public static final int _KISA_ENCRYPT = 1; + + public int value; + + public KISA_ENC_DEC(int value) { + this.value = value; + } + + public static final KISA_ENC_DEC KISA_ENCRYPT = new KISA_ENC_DEC(_KISA_ENCRYPT); + public static final KISA_ENC_DEC KISA_DECRYPT = new KISA_ENC_DEC(_KISA_DECRYPT); + + } + + public static final class KISA_SEED_KEY { + public int[] key_data = new int[32]; + + public void init() { + for (int i = 0; i < key_data.length; i++) { + key_data[i] = 0; + } + } + } + + public static final class KISA_SEED_INFO { + public int encrypt; + public int ivec[] = new int[4]; + public KISA_SEED_KEY seed_key = new KISA_SEED_KEY(); + public int cbc_buffer[] = new int[4]; + public int buffer_length; + public int[] cbc_last_block = new int[4]; + public int last_block_flag; + + public KISA_SEED_INFO() { + encrypt = 0; + ivec[0] = ivec[1] = ivec[2] = ivec[3] = 0; + seed_key.init(); + cbc_buffer[0] = cbc_buffer[1] = cbc_buffer[2] = cbc_buffer[3] = 0; + buffer_length = 0; + cbc_last_block[0] = cbc_last_block[1] = cbc_last_block[2] = cbc_last_block[3] = 0; + last_block_flag = 0; + } + + + } + + + public static class Common { + + public static final int BIG_ENDIAN = 0; + public static final int LITTLE_ENDIAN = 1; + + public static void arraycopy(byte[] dst, byte[] src, int length) { + for (int i = 0; i < length; i++) { + dst[i] = src[i]; + } + } + + public static void arraycopy_offset(byte[] dst, int dst_offset, byte[] src, int src_offset, int length) { + for (int i = 0; i < length; i++) { + dst[dst_offset + i] = src[src_offset + i]; + } + } + + public static void arrayinit(byte[] dst, byte value, int length) { + for (int i = 0; i < length; i++) { + dst[i] = value; + } + } + + public static void arrayinit_offset(byte[] dst, int dst_offset, byte value, int length) { + for (int i = 0; i < length; i++) { + dst[dst_offset + i] = value; + } + } + + public static void memcpy(int[] dst, byte[] src, int length, int ENDIAN) { + int iLen = length / 4; + for (int i = 0; i < iLen; i++) { + byte_to_int(dst, i, src, i * 4, ENDIAN); + } + } + + public static void memcpy(int[] dst, int[] src, int src_offset, int length) { + int iLen = length / 4 + ((length % 4 != 0) ? 1 : 0); + for (int i = 0; i < iLen; i++) { + dst[i] = src[src_offset + i]; + } + } + + public static void set_byte_for_int(int[] dst, int b_offset, byte value, int ENDIAN) { + if (ENDIAN == BIG_ENDIAN) { + int shift_value = (3 - b_offset % 4) * 8; + int mask_value = 0x0ff << shift_value; + int mask_value2 = ~mask_value; + int value2 = (value & 0x0ff) << shift_value; + dst[b_offset / 4] = (dst[b_offset / 4] & mask_value2) | (value2 & mask_value); + } else { + int shift_value = (b_offset % 4) * 8; + int mask_value = 0x0ff << shift_value; + int mask_value2 = ~mask_value; + int value2 = (value & 0x0ff) << shift_value; + dst[b_offset / 4] = (dst[b_offset / 4] & mask_value2) | (value2 & mask_value); + } + } + + public static byte get_byte_for_int(int[] src, int b_offset, int ENDIAN) { + if (ENDIAN == BIG_ENDIAN) { + int shift_value = (3 - b_offset % 4) * 8; + int mask_value = 0x0ff << shift_value; + int value = (src[b_offset / 4] & mask_value) >> shift_value; + return (byte) value; + } else { + int shift_value = (b_offset % 4) * 8; + int mask_value = 0x0ff << shift_value; + int value = (src[b_offset / 4] & mask_value) >> shift_value; + return (byte) value; + } + + } + + public static byte[] get_bytes_for_ints(int[] src, int offset, int ENDIAN) { + int iLen = src.length - offset; + byte[] result = new byte[(iLen) * 4]; + for (int i = 0; i < iLen; i++) { + int_to_byte(result, i * 4, src, offset + i, ENDIAN); + } + + return result; + } + + public static void byte_to_int(int[] dst, int dst_offset, byte[] src, int src_offset, int ENDIAN) { + if (ENDIAN == BIG_ENDIAN) { + dst[dst_offset] = ((0x0ff & src[src_offset]) << 24) | ((0x0ff & src[src_offset + 1]) << 16) | ((0x0ff & src[src_offset + 2]) << 8) | ((0x0ff & src[src_offset + 3])); + } else { + dst[dst_offset] = ((0x0ff & src[src_offset])) | ((0x0ff & src[src_offset + 1]) << 8) | ((0x0ff & src[src_offset + 2]) << 16) | ((0x0ff & src[src_offset + 3]) << 24); + } + } + + public static int byte_to_int(byte[] src, int src_offset, int ENDIAN) { + if (ENDIAN == BIG_ENDIAN) { + return ((0x0ff & src[src_offset]) << 24) | ((0x0ff & src[src_offset + 1]) << 16) | ((0x0ff & src[src_offset + 2]) << 8) | ((0x0ff & src[src_offset + 3])); + } else { + return ((0x0ff & src[src_offset])) | ((0x0ff & src[src_offset + 1]) << 8) | ((0x0ff & src[src_offset + 2]) << 16) | ((0x0ff & src[src_offset + 3]) << 24); + } + } + + public static int byte_to_int_big_endian(byte[] src, int src_offset) { + return ((0x0ff & src[src_offset]) << 24) | ((0x0ff & src[src_offset + 1]) << 16) | ((0x0ff & src[src_offset + 2]) << 8) | ((0x0ff & src[src_offset + 3])); + } + + public static void int_to_byte(byte[] dst, int dst_offset, int[] src, int src_offset, int ENDIAN) { + int_to_byte_unit(dst, dst_offset, src[src_offset], ENDIAN); + } + + public static void int_to_byte_unit(byte[] dst, int dst_offset, int src, int ENDIAN) { + if (ENDIAN == BIG_ENDIAN) { + dst[dst_offset] = (byte) ((src >> 24) & 0x0ff); + dst[dst_offset + 1] = (byte) ((src >> 16) & 0x0ff); + dst[dst_offset + 2] = (byte) ((src >> 8) & 0x0ff); + dst[dst_offset + 3] = (byte) ((src) & 0x0ff); + } else { + dst[dst_offset] = (byte) ((src) & 0x0ff); + dst[dst_offset + 1] = (byte) ((src >> 8) & 0x0ff); + dst[dst_offset + 2] = (byte) ((src >> 16) & 0x0ff); + dst[dst_offset + 3] = (byte) ((src >> 24) & 0x0ff); + } + + } + + public static void int_to_byte_unit_big_endian(byte[] dst, int dst_offset, int src) { + dst[dst_offset] = (byte) ((src >> 24) & 0x0ff); + dst[dst_offset + 1] = (byte) ((src >> 16) & 0x0ff); + dst[dst_offset + 2] = (byte) ((src >> 8) & 0x0ff); + dst[dst_offset + 3] = (byte) ((src) & 0x0ff); + } + + public static int URShift(int x, int n) { + if (n == 0) + return x; + if (n >= 32) + return 0; + int v = x >> n; + int v_mask = ~(0x80000000 >> (n - 1)); + return v & v_mask; + } + + public static final long INT_RANGE_MAX = (long) Math.pow(2, 32); + + public static long intToUnsigned(int x) { + if (x >= 0) + return x; + return x + INT_RANGE_MAX; + } + + //Padding : PKSC #7 + //출력 : PADDING 후 길이(바이트단위) + public static int Padding(byte[] pbData, byte[] padData, int length) { + int i; + int padvalue = 16 - (length % 16); + Common.arraycopy(padData, pbData, length); + i = length; + do { + padData[i] = (byte) (padvalue); + i++; + } while ((i % 16) != 0); + return i; + } + + + //1블럭(128비트 XOR) + public static void BLOCK_XOR_PROPOSAL(int[] OUT_VALUE, int out_value_offset, int[] IN_VALUE1, int in_value1_offset, int[] IN_VALUE2, int in_value2_offset) { + OUT_VALUE[out_value_offset + 0] = (in_value1_offset < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 0] : 0) ^ (in_value2_offset < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 0] : 0); + OUT_VALUE[out_value_offset + 1] = (in_value1_offset + 1 < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 1] : 0) ^ (in_value2_offset + 1 < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 1] : 0); + OUT_VALUE[out_value_offset + 2] = (in_value1_offset + 2 < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 2] : 0) ^ (in_value2_offset + 2 < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 2] : 0); + OUT_VALUE[out_value_offset + 3] = (in_value1_offset + 3 < IN_VALUE1.length ? IN_VALUE1[in_value1_offset + 3] : 0) ^ (in_value2_offset + 3 < IN_VALUE2.length ? IN_VALUE2[in_value2_offset + 3] : 0); + } + + + } + + + public static int SeedRoundKey(KISA_SEED_INFO pInfo, KISA_ENC_DEC enc, byte[] pbszUserKey, byte[] pbszIV) { + int ABCD[] = new int[4]; // Iuput/output values at each rounds(각 라운드 입/출력) + int T[] = new int[2]; // Temporary variable + int K[]; + + if (null == pInfo || + null == pbszUserKey || + null == pbszIV) + return 0; + + K = pInfo.seed_key.key_data; // Pointer of round keys + pInfo.encrypt = enc.value; // + Common.memcpy(pInfo.ivec, pbszIV, 16, ENDIAN); + pInfo.last_block_flag = pInfo.buffer_length = 0; + + // Set up input values for Key Schedule + ABCD[ABCD_A] = Common.byte_to_int(pbszUserKey, 0 * 4, ENDIAN); + ABCD[ABCD_B] = Common.byte_to_int(pbszUserKey, 1 * 4, ENDIAN); + ABCD[ABCD_C] = Common.byte_to_int(pbszUserKey, 2 * 4, ENDIAN); + ABCD[ABCD_D] = Common.byte_to_int(pbszUserKey, 3 * 4, ENDIAN); + + // Reorder for big endian + if (Common.BIG_ENDIAN != ENDIAN) { + ABCD[ABCD_A] = EndianChange(ABCD[ABCD_A]); + ABCD[ABCD_B] = EndianChange(ABCD[ABCD_B]); + ABCD[ABCD_C] = EndianChange(ABCD[ABCD_C]); + ABCD[ABCD_D] = EndianChange(ABCD[ABCD_D]); + } + + // i-th round keys( K_i,0 and K_i,1 ) are denoted as K[2*(i-1)] and K[2*i-1], respectively + RoundKeyUpdate0(T, K, 0, ABCD, KC0); // K_1,0 and K_1,1 + RoundKeyUpdate1(T, K, 2, ABCD, KC1); // K_2,0 and K_2,1 + RoundKeyUpdate0(T, K, 4, ABCD, KC2); // K_3,0 and K_3,1 + RoundKeyUpdate1(T, K, 6, ABCD, KC3); // K_4,0 and K_4,1 + RoundKeyUpdate0(T, K, 8, ABCD, KC4); // K_5,0 and K_5,1 + RoundKeyUpdate1(T, K, 10, ABCD, KC5); // K_6,0 and K_6,1 + RoundKeyUpdate0(T, K, 12, ABCD, KC6); // K_7,0 and K_7,1 + RoundKeyUpdate1(T, K, 14, ABCD, KC7); // K_8,0 and K_8,1 + RoundKeyUpdate0(T, K, 16, ABCD, KC8); // K_9,0 and K_9,1 + RoundKeyUpdate1(T, K, 18, ABCD, KC9); // K_10,0 and K_10,1 + RoundKeyUpdate0(T, K, 20, ABCD, KC10); // K_11,0 and K_11,1 + RoundKeyUpdate1(T, K, 22, ABCD, KC11); // K_12,0 and K_12,1 + RoundKeyUpdate0(T, K, 24, ABCD, KC12); // K_13,0 and K_13,1 + RoundKeyUpdate1(T, K, 26, ABCD, KC13); // K_14,0 and K_14,1 + RoundKeyUpdate0(T, K, 28, ABCD, KC14); // K_15,0 and K_15,1 + + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC15; + T[1] = ABCD[ABCD_B] - ABCD[ABCD_D] + KC15; + + K[30] = SS0[GetB0(T[0]) & 0x0ff] ^ SS1[GetB1(T[0]) & 0x0ff] ^ // K_16,0 + SS2[GetB2(T[0]) & 0x0ff] ^ SS3[GetB3(T[0]) & 0x0ff]; + K[31] = SS0[GetB0(T[1]) & 0x0ff] ^ SS1[GetB1(T[1]) & 0x0ff] ^ // K_16,1 + SS2[GetB2(T[1]) & 0x0ff] ^ SS3[GetB3(T[1]) & 0x0ff]; + + return 1; + + + } +} + + + + + + + + + + diff --git a/src/main/java/gtpa/brs/security/KISA_SEED_CCM.java b/src/main/java/gtpa/brs/security/KISA_SEED_CCM.java new file mode 100644 index 0000000..2098906 --- /dev/null +++ b/src/main/java/gtpa/brs/security/KISA_SEED_CCM.java @@ -0,0 +1,343 @@ +package gtpa.brs.security; + +import gtpa.brs.security.KISA_SEED; + +public class KISA_SEED_CCM +{ + private static int BLOCK_SIZE_SEED = 16; + + private static void SHIFTR8(int[] x) + { + x[3] = ((x[3] >> 8) & 0x00FFFFFF) ^ ((x[2] << 24) & 0xFF000000); + x[2] = ((x[2] >> 8) & 0x00FFFFFF) ^ ((x[1] << 24) & 0xFF000000); + x[1] = ((x[1] >> 8) & 0x00FFFFFF) ^ ((x[0] << 24) & 0xFF000000); + x[0] = ((x[0] >> 8) & 0x00FFFFFF); + } + + private static void SHIFTR16(int[] x) + { + x[3] = ((x[3] >> 16) & 0x0000FFFF) ^ ((x[2] << 16) & 0xFFFF0000); + x[2] = ((x[2] >> 16) & 0x0000FFFF) ^ ((x[1] << 16) & 0xFFFF0000); + x[1] = ((x[1] >> 16) & 0x0000FFFF) ^ ((x[0] << 16) & 0xFFFF0000); + x[0] = ((x[0] >> 16) & 0x0000FFFF); + } + + private static void XOR128(int[] R, int[] A, int[] B) + { + R[0] = A[0] ^ B[0]; + R[1] = A[1] ^ B[1]; + R[2] = A[2] ^ B[2]; + R[3] = A[3] ^ B[3]; + } + + private static void INCREASE(int[] ctr) + { + if (ctr[3] == 0xFFFFFFFF) + { + ctr[2]++; + ctr[3] = 0; + } + else + { + ctr[3]++; + } + } + private static void ZERO128(int[] a) { a[0] = 0x00000000; a[1] = 0x00000000; a[2] = 0x00000000; a[3] = 0x00000000; } + + private static void Byte2Word(int[] dst, byte[] src, int src_offset, int srcLen) + { + int i = 0; + int remain = 0; + + for (i = 0; i < srcLen; i++) + { + remain = i & 3; + + if (remain == 0) + dst[i >> 2] = ((src[src_offset + i] & 0x0FF) << 24); + else if (remain == 1) + dst[i >> 2] ^= ((src[src_offset + i] & 0x0FF) << 16); + else if (remain == 2) + dst[i >> 2] ^= ((src[src_offset + i] & 0x0FF) << 8); + else + dst[i >> 2] ^= ( src[src_offset + i] & 0x0FF); + } + } + + private static void Word2Byte(byte[] dst, int dst_offset, int[] src, int srcLen) + { + int i = 0; + int remain = 0; + + for (i = 0; i < srcLen; i++) + { + remain = i & 3; + + if (remain == 0) + dst[dst_offset + i] = (byte)(src[i >> 2] >> 24); + else if (remain == 1) + dst[dst_offset + i] = (byte)(src[i >> 2] >> 16); + else if (remain == 2) + dst[dst_offset + i] = (byte)(src[i >> 2] >> 8); + else + dst[dst_offset + i] = (byte) src[i >> 2]; + } + } + + public int SEED_CCM_Encryption( + byte[] ct, + byte[] pt, int ptLen, + int macLen, + byte[] nonce, int nonceLen, + byte[] aad, int aadLen, + byte[] mKey) + { + int[] CTR_in = new int[4]; + int[] CTR_out = new int[4]; + int[] CBC_in = new int[4]; + int[] CBC_out = new int[4]; + int[] MAC = new int[4]; + int[] tmp = new int[8]; + int[] rKey = new int[100]; + int i, flag, tmpLen = 0; + gtpa.brs.security.KISA_SEED seed = new gtpa.brs.security.KISA_SEED(); + + if (macLen > BLOCK_SIZE_SEED) + return 1; + + seed.SEED_KeySched(mKey, rKey); + + Byte2Word(CTR_in, nonce, 0, nonceLen); + SHIFTR8(CTR_in); + + flag = 14 - nonceLen; + + CTR_in[0] ^= (flag << 24); + + seed.SEED_Encrypt(MAC, CTR_in, rKey); + + for (i = 0; i < ptLen; i += BLOCK_SIZE_SEED) + { + INCREASE(CTR_in); + + ZERO128(tmp); + + if ((ptLen - i) < BLOCK_SIZE_SEED) + Byte2Word(tmp, pt, i, ptLen - i); + else + Byte2Word(tmp, pt, i, BLOCK_SIZE_SEED); + + seed.SEED_Encrypt(CTR_out, CTR_in, rKey); + + XOR128(tmp, CTR_out, tmp); + + if ((ptLen - i) < BLOCK_SIZE_SEED) + Word2Byte(ct, i, tmp, ptLen - i); + else + Word2Byte(ct, i, tmp, BLOCK_SIZE_SEED); + } + + Byte2Word(CBC_in, nonce, 0, nonceLen); + SHIFTR8(CBC_in); + + if (aadLen > 0) + flag = 0x00000040; + else + flag = 0x00000000; + flag ^= ((macLen - 2) >> 1) << 3; + flag ^= 14 - nonceLen; + + CBC_in[0] ^= (flag << 24); + CBC_in[3] ^= ptLen; + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + + if (aadLen > 0) + { + if (aadLen > 14) + tmpLen = 14; + else + tmpLen = aadLen; + + ZERO128(CBC_in); + + Byte2Word(CBC_in, aad, 0, tmpLen); + SHIFTR16(CBC_in); + + CBC_in[0] ^= ((aadLen << 16) & 0xFFFF0000); + + XOR128(CBC_in, CBC_in, CBC_out); + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + + for (i = tmpLen; i < aadLen; i += BLOCK_SIZE_SEED) + { + ZERO128(CBC_in); + + if ((aadLen - i) < BLOCK_SIZE_SEED) + Byte2Word(CBC_in, aad, i, aadLen - i); + else + Byte2Word(CBC_in, aad, i, BLOCK_SIZE_SEED); + + XOR128(CBC_in, CBC_in, CBC_out); + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + } + } + + for (i = 0; i < ptLen; i += BLOCK_SIZE_SEED) + { + ZERO128(tmp); + + if ((ptLen - i) < BLOCK_SIZE_SEED) + Byte2Word(tmp, pt, i, ptLen - i); + else + Byte2Word(tmp, pt, i, BLOCK_SIZE_SEED); + + XOR128(CBC_in, tmp, CBC_out); + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + } + + XOR128(MAC, MAC, CBC_out); + + Word2Byte(ct, ptLen, MAC, macLen); + + return ptLen + macLen; + } + + public int SEED_CCM_Decryption( + byte[] pt, + byte[] ct, int ctLen, + int macLen, + byte[] nonce, int nonceLen, + byte[] aad, int aadLen, + byte[] mKey) + { + int[] CTR_in = new int[4]; + int[] CTR_out = new int[4]; + int[] CBC_in = new int[4]; + int[] CBC_out = new int[4]; + int[] MAC = new int[4]; + byte[] tMAC = new byte[16]; + int[] tmp = new int[8]; + int[] rKey = new int[32]; + int i, j, flag, tmpLen = 0; + gtpa.brs.security.KISA_SEED seed = new KISA_SEED(); + + if (macLen > BLOCK_SIZE_SEED) + return 1; + + seed.SEED_KeySched(mKey, rKey); + + Byte2Word(CTR_in, nonce, 0, nonceLen); + SHIFTR8(CTR_in); + + flag = 14 - nonceLen; + + CTR_in[0] ^= (flag << 24); + + seed.SEED_Encrypt(MAC, CTR_in, rKey); + + for (i = 0; i < ctLen - macLen; i += BLOCK_SIZE_SEED) + { + INCREASE(CTR_in); + + ZERO128(tmp); + + if ((ctLen - macLen - i) < BLOCK_SIZE_SEED) + Byte2Word(tmp, ct, i, ctLen - macLen - i); + else + Byte2Word(tmp, ct, i, BLOCK_SIZE_SEED); + + seed.SEED_Encrypt(CTR_out, CTR_in, rKey); + + XOR128(tmp, CTR_out, tmp); + + if ((ctLen - macLen - i) < BLOCK_SIZE_SEED) + Word2Byte(pt, i, tmp, ctLen - macLen - i); + else + Word2Byte(pt, i, tmp, BLOCK_SIZE_SEED); + } + + Byte2Word(CBC_in, nonce, 0, nonceLen); + SHIFTR8(CBC_in); + + if (aadLen > 0) + flag = 0x00000040; + else + flag = 0x00000000; + + flag ^= ((macLen - 2) >> 1) << 3; + flag ^= 14 - nonceLen; + + CBC_in[0] ^= (flag << 24); + CBC_in[3] ^= ctLen - macLen; + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + + if (aadLen > 0) + { + if (aadLen > 14) + tmpLen = 14; + else + tmpLen = aadLen; + + ZERO128(CBC_in); + + Byte2Word(CBC_in, aad, 0, tmpLen); + SHIFTR16(CBC_in); + + CBC_in[0] ^= (aadLen << 16); + + XOR128(CBC_in, CBC_in, CBC_out); + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + + for (i = tmpLen; i < aadLen; i += BLOCK_SIZE_SEED) + { + ZERO128(CBC_in); + + if ((aadLen - i) < BLOCK_SIZE_SEED) + Byte2Word(CBC_in, aad, i, aadLen - i); + else + Byte2Word(CBC_in, aad, i, BLOCK_SIZE_SEED); + + XOR128(CBC_in, CBC_in, CBC_out); + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + } + } + + for (i = 0; i < ctLen - macLen; i += BLOCK_SIZE_SEED) + { + ZERO128(tmp); + + if ((ctLen - macLen - i) < BLOCK_SIZE_SEED) + Byte2Word(tmp, pt, i, ctLen - macLen - i); + else + Byte2Word(tmp, pt, i, BLOCK_SIZE_SEED); + + XOR128(CBC_in, tmp, CBC_out); + + seed.SEED_Encrypt(CBC_out, CBC_in, rKey); + } + + XOR128(MAC, MAC, CBC_out); + + Word2Byte(tMAC, 0, MAC, macLen); + + for (i = 0; i < macLen; i++) + { + if (tMAC[i] != ct[ctLen - macLen + i]) + { + for (j = 0; j < ctLen - macLen; j++) + pt[j] = 0; + + return 1; + } + } + + return ctLen - macLen; + } +} diff --git a/src/main/java/gtpa/brs/security/KISA_SEED_CTR.java b/src/main/java/gtpa/brs/security/KISA_SEED_CTR.java new file mode 100644 index 0000000..646f02e --- /dev/null +++ b/src/main/java/gtpa/brs/security/KISA_SEED_CTR.java @@ -0,0 +1,762 @@ +package gtpa.brs.security; + +/** +@file KISA_SEED_CTR.java +@brief SEED CTR ��ȣ �˰��� +@author Copyright (c) 2013 by KISA +@remarks http://seed.kisa.or.kr/ +*/ + + +public class KISA_SEED_CTR { + + // DEFAULT : JAVA = BIG_ENDIAN + private static int ENDIAN = Common.BIG_ENDIAN; + + // S-BOX + private static final int SS0[] = { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }; + + private static final int SS1[] = { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }; + + private static final int SS2[] = { + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }; + + private static final int SS3[] = { + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + }; + + private static final int BLOCK_SIZE_CTR = 16; + private static final int BLOCK_SIZE_CTR_INT = 4; + + /* Constants for key schedule: + KC0 = golden ratio; KCi = ROTL(KCi-1, 1) */ + private static final int KC0 = 0x9e3779b9; + private static final int KC1 = 0x3c6ef373; + private static final int KC2 = 0x78dde6e6; + private static final int KC3 = 0xf1bbcdcc; + private static final int KC4 = 0xe3779b99; + private static final int KC5 = 0xc6ef3733; + private static final int KC6 = 0x8dde6e67; + private static final int KC7 = 0x1bbcdccf; + private static final int KC8 = 0x3779b99e; + private static final int KC9 = 0x6ef3733c; + private static final int KC10 = 0xdde6e678; + private static final int KC11 = 0xbbcdccf1; + private static final int KC12 = 0x779b99e3; + private static final int KC13 = 0xef3733c6; + private static final int KC14 = 0xde6e678d; + private static final int KC15 = 0xbcdccf1b; + + private static final int ABCD_A = 0; + private static final int ABCD_B = 1; + private static final int ABCD_C = 2; + private static final int ABCD_D = 3; + + private static final void RoundKeyUpdate0(int T[], int[] K, int K_offset, int ABCD[], int KC) { + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC; + T[1] = ABCD[ABCD_B] + KC - ABCD[ABCD_D]; + K[K_offset+0] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + K[K_offset+1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] = ABCD[ABCD_A]; + ABCD[ABCD_A] = ((ABCD[ABCD_A]>>8)&0x00ffffff) ^ (ABCD[ABCD_B]<<24); + ABCD[ABCD_B] = ((ABCD[ABCD_B]>>8)&0x00ffffff) ^ (T[0]<<24); + } + + private static final void RoundKeyUpdate1(int T[], int []K, int K_offset, int ABCD[], int KC) { + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC; + T[1] = ABCD[ABCD_B] + KC - ABCD[ABCD_D]; + K[K_offset+0] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + K[K_offset+1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] = ABCD[ABCD_C]; + ABCD[ABCD_C] = (ABCD[ABCD_C]<<8) ^ ((ABCD[ABCD_D]>>24)&0x000000ff); + ABCD[ABCD_D] = (ABCD[ABCD_D]<<8) ^ ((T[0]>>24)&0x000000ff); + } + + + private static final int EndianChange(int dwS) { return ( (/*ROTL(dwS,8)*/(((dwS) << (8)) | (((dwS) >> (32-(8)))&0x000000ff)) & 0x00ff00ff) | (/*ROTL(dwS,24)*/(((dwS) << (24)) | (((dwS) >> (32-(24)))&0x00ffffff)) & 0xff00ff00) ); } + + private static final byte GetB0(int A) { return (byte)(A & 0x0ff); } + private static final byte GetB1(int A) { return (byte)((A>>8) & 0x0ff); } + private static final byte GetB2(int A) { return (byte)((A>>16) & 0x0ff); } + private static final byte GetB3(int A) { return (byte)((A>>24) & 0x0ff); } + + + private static final int LR_L0 = 0; + private static final int LR_L1 = 1; + private static final int LR_R0 = 2; + private static final int LR_R1 = 3; + + private static void SeedRound(int[] T, int LR[], int L0, int L1, int R0, int R1, int[] K, int K_offset) { + T[0] = LR[R0] ^ K[K_offset+0]; + T[1] = LR[R1] ^ K[K_offset+1]; + T[1] ^= T[0]; + T[1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] += T[1]; + T[0] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + T[1] += T[0]; + T[1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] += T[1]; + LR[L0] ^= T[0]; LR[L1] ^= T[1]; + } + + private static void BLOCK_XOR_SEED(int[] OUT_VALUE, int out_value_offset, int[] IN_VALUE1, int in_value1_offset, int[] IN_VALUE2, int in_value2_offset) { + OUT_VALUE[out_value_offset+0] = (in_value1_offset nMin ) + return ; + + if( 0 < nMin ) { + byte b = Common.get_byte_for_int(pbOUT, pbOUT_offset*4+nMin, ENDIAN); + bszBackup = b & 0x0ff; + Common.set_byte_for_int(pbOUT, pbOUT_offset*4+nMin, (byte)(b + nIncreaseValue), ENDIAN); + } + + for( i=nMin; i>1; --i ) + { + if( bszBackup <= (((int)Common.get_byte_for_int(pbOUT, pbOUT_offset*4+i, ENDIAN)) & 0x0ff) ) { + return; + } + else { + byte b = Common.get_byte_for_int(pbOUT, pbOUT_offset*4+i-1, ENDIAN); + bszBackup = b & 0x0ff; + Common.set_byte_for_int(pbOUT, pbOUT_offset*4+i-1, (byte)(b + 1), ENDIAN); + } + } + + byte b = Common.get_byte_for_int(pbOUT, pbOUT_offset*4+0, ENDIAN); + bszBackup = b & 0x0ff; + Common.set_byte_for_int(pbOUT, pbOUT_offset*4+0, (byte)(b + nIncreaseValue), ENDIAN); + } + + /** + @brief byte �迭�� int �迭�� ��ȯ�Ѵ�. + @param in :��ȯ�� byte ������ + @param nLen : ��ȯ�� byte �迭 ���� + @return ���ڷ� ���� byte �迭�� int�� ��ȯ�� �����͸� ��ȯ�Ѵ�. + */ + public static int[] chartoint32_for_SEED_CTR(byte[] in, int inLen) { + int[] data; + int len, i; + + if(inLen % 4 > 0) + len = (inLen/4)+1; + else + len = (inLen/4); + + data = new int[len]; + + for(i=0;i> ((i%4)*8)); + } + } else { + for(i=0;i> ((3-(i%4))*8)); + } + } + + return data; + } + + private static void KISA_SEED_Encrypt_Block_forCTR( int[] in, int in_offset, int[] out, int out_offset, KISA_SEED_KEY ks ) { + int LR[] = new int[4]; // Iuput/output values at each rounds + int T[] = new int[2]; // Temporary variables for round function F + int K[] = ks.key_data; // Pointer of round keys + + // Set up input values for first round + LR[LR_L0] = in[in_offset+0]; + LR[LR_L1] = in[in_offset+1]; + LR[LR_R0] = in[in_offset+2]; + LR[LR_R1] = in[in_offset+3]; + + // Reorder for big endian + // Because SEED use little endian order in default + if(Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 0); // Round 1 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 2); // Round 2 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 4); // Round 3 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 6); // Round 4 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 8); // Round 5 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 10); // Round 6 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 12); // Round 7 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 14); // Round 8 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 16); // Round 9 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 18); // Round 10 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 20); // Round 11 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 22); // Round 12 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 24); // Round 13 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 26); // Round 14 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 28); // Round 15 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 30); // Round 16 + + if(Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + // Copying output values from last round to pbData + out[out_offset+0] = LR[LR_R0]; + out[out_offset+1] = LR[LR_R1]; + out[out_offset+2] = LR[LR_L0]; + out[out_offset+3] = LR[LR_L1]; + + } + + + public static int SEED_CTR_init( KISA_SEED_INFO pInfo, KISA_ENC_DEC enc, byte[] pszUserKey, byte[] pbszCTR ) { + int ABCD[] = new int[4]; + int T[] = new int[2]; + int K[]; + + if( null == pInfo || + null == pszUserKey || + null == pbszCTR ) + return 0; + + K = pInfo.seed_key.key_data; // Pointer of round keys + pInfo.encrypt = enc.value; + Common.memcpy(pInfo.ivec, pbszCTR, 16, ENDIAN); + pInfo.last_block_flag = pInfo.buffer_length = 0; + + ABCD[ABCD_A] = Common.byte_to_int(pszUserKey, 0*4, ENDIAN); + ABCD[ABCD_B] = Common.byte_to_int(pszUserKey, 1*4, ENDIAN); + ABCD[ABCD_C] = Common.byte_to_int(pszUserKey, 2*4, ENDIAN); + ABCD[ABCD_D] = Common.byte_to_int(pszUserKey, 3*4, ENDIAN); + + + // Reorder for big endian + if(Common.BIG_ENDIAN != ENDIAN) { + ABCD[ABCD_A] = EndianChange(ABCD[ABCD_A]); + ABCD[ABCD_B] = EndianChange(ABCD[ABCD_B]); + ABCD[ABCD_C] = EndianChange(ABCD[ABCD_C]); + ABCD[ABCD_D] = EndianChange(ABCD[ABCD_D]); + } + + // i-th round keys( K_i,0 and K_i,1 ) are denoted as K[2*(i-1)] and K[2*i-1], respectively + RoundKeyUpdate0(T, K, 0, ABCD, KC0 ); // K_1,0 and K_1,1 + RoundKeyUpdate1(T, K, 2, ABCD, KC1 ); // K_2,0 and K_2,1 + RoundKeyUpdate0(T, K, 4, ABCD, KC2 ); // K_3,0 and K_3,1 + RoundKeyUpdate1(T, K, 6, ABCD, KC3 ); // K_4,0 and K_4,1 + RoundKeyUpdate0(T, K, 8, ABCD, KC4 ); // K_5,0 and K_5,1 + RoundKeyUpdate1(T, K, 10, ABCD, KC5 ); // K_6,0 and K_6,1 + RoundKeyUpdate0(T, K, 12, ABCD, KC6 ); // K_7,0 and K_7,1 + RoundKeyUpdate1(T, K, 14, ABCD, KC7 ); // K_8,0 and K_8,1 + RoundKeyUpdate0(T, K, 16, ABCD, KC8 ); // K_9,0 and K_9,1 + RoundKeyUpdate1(T, K, 18, ABCD, KC9 ); // K_10,0 and K_10,1 + RoundKeyUpdate0(T, K, 20, ABCD, KC10); // K_11,0 and K_11,1 + RoundKeyUpdate1(T, K, 22, ABCD, KC11); // K_12,0 and K_12,1 + RoundKeyUpdate0(T, K, 24, ABCD, KC12); // K_13,0 and K_13,1 + RoundKeyUpdate1(T, K, 26, ABCD, KC13); // K_14,0 and K_14,1 + RoundKeyUpdate0(T, K, 28, ABCD, KC14); // K_15,0 and K_15,1 + + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC15; + T[1] = ABCD[ABCD_B] - ABCD[ABCD_D] + KC15; + + K[30] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ // K_16,0 + SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + K[31] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ // K_16,1 + SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + + return 1; + + } + + + + + public static int SEED_CTR_Process( KISA_SEED_INFO pInfo, int[] in, int inLen, int[] out, int[] outLen ) { + int[] pdwCounter; + int nCurrentCount = 0; + int in_offset = 0; + int out_offset = 0; + int pbszCounter_offset = 0; + + if( null == pInfo || + null == in || + null == out || + 0 > inLen ) + return 0; + + pdwCounter = pInfo.ivec; + + while( nCurrentCount < inLen ) + { + KISA_SEED_Encrypt_Block_forCTR( pdwCounter, pbszCounter_offset, out, out_offset, pInfo.seed_key ); + BLOCK_XOR_SEED( out, out_offset, in, in_offset, out, out_offset ); + + + UpdateCounter_for_SEED( pdwCounter, pbszCounter_offset, 1, (BLOCK_SIZE_CTR-1) ); + + nCurrentCount += BLOCK_SIZE_CTR; + in_offset += BLOCK_SIZE_CTR_INT; + out_offset += BLOCK_SIZE_CTR_INT; + } + + outLen[0] = nCurrentCount; + pInfo.buffer_length = inLen - outLen[0]; + return 1; + } + + + public static int SEED_CTR_Close( KISA_SEED_INFO pInfo, int[] out, int out_offset, int[] outLen ) { + int nPaddngLeng = -(pInfo.buffer_length); + int i; + + for (i = nPaddngLeng; i>0; i--) + { + Common.set_byte_for_int(out, out_offset - i, (byte)0x00, ENDIAN); + } + outLen[0] = nPaddngLeng; + return 1; + } + + + + + + public static byte[] SEED_CTR_Encrypt( byte[] pbszUserKey, byte[] pbszCTR, byte[] message, int message_offset, int message_length ) { + int nOutLeng[] = { 0 }; + int nPaddingLeng[] = new int[] { 0 }; + KISA_SEED_INFO info = new KISA_SEED_INFO(); + int[] outbuf; + int[] data; + int outlen; + byte[] cdata; + + int nInputTextPadding = (BLOCK_SIZE_CTR - (message_length % BLOCK_SIZE_CTR)) % BLOCK_SIZE_CTR; + byte []newmessage = new byte[message_length + nInputTextPadding]; + System.arraycopy(message, message_offset, newmessage, 0, message_length); + + byte[] pbszOutputText = new byte[message_length]; + + SEED_CTR_init( info, KISA_ENC_DEC.KISA_ENCRYPT, pbszUserKey, pbszCTR ); + + outlen = ((newmessage.length/BLOCK_SIZE_CTR)) * BLOCK_SIZE_CTR_INT; + outbuf = new int[outlen]; + data = chartoint32_for_SEED_CTR(newmessage, message_length ); + + SEED_CTR_Process( info, data, message_length, outbuf, nOutLeng ); + SEED_CTR_Close( info, outbuf, nOutLeng[0], nPaddingLeng ); + cdata = int32tochar_for_SEED_CTR(outbuf, nOutLeng[0] - nPaddingLeng[0] ); + Common.arraycopy(pbszOutputText, cdata, nOutLeng[0] - nPaddingLeng[0] ); + + data = null; + cdata = null; + outbuf = null; + + return pbszOutputText; + } + + + + public static byte[] SEED_CTR_Decrypt( byte[] pbszUserKey, byte[] pbszCTR, byte[] message, int message_offset, int message_length ) { + int nOutLeng[] = { 0 }; + int nPaddingLeng[] = new int[] { 0 }; + KISA_SEED_INFO info = new KISA_SEED_INFO(); + int[] outbuf; + int[] data; + int outlen; + byte[] cdata; + + int nInputTextPadding = (BLOCK_SIZE_CTR - (message_length % BLOCK_SIZE_CTR)) % BLOCK_SIZE_CTR; + byte []newmessage = new byte[message_length + nInputTextPadding]; + System.arraycopy(message, message_offset, newmessage, 0, message_length); + + byte[] pbszOutputText = new byte[message_length]; + + SEED_CTR_init( info, KISA_ENC_DEC.KISA_ENCRYPT, pbszUserKey, pbszCTR ); + + outlen = ((newmessage.length/16)) * 4; + outbuf = new int[outlen]; + data = chartoint32_for_SEED_CTR(newmessage, message_length ); + + SEED_CTR_Process( info, data, message_length, outbuf, nOutLeng ); + SEED_CTR_Close( info, outbuf, nOutLeng[0], nPaddingLeng ); + cdata = int32tochar_for_SEED_CTR(outbuf, nOutLeng[0] - nPaddingLeng[0] ); + Common.arraycopy(pbszOutputText, cdata, nOutLeng[0] - nPaddingLeng[0] ); + + data = null; + cdata = null; + outbuf = null; + + return pbszOutputText; + } + + + + + + + + + public static final class KISA_ENC_DEC { + public static final int _KISA_DECRYPT = 0; + public static final int _KISA_ENCRYPT = 1; + + public int value; + + public KISA_ENC_DEC(int value ) { + this.value = value; + } + + public static final KISA_ENC_DEC KISA_ENCRYPT = new KISA_ENC_DEC(_KISA_ENCRYPT); + public static final KISA_ENC_DEC KISA_DECRYPT = new KISA_ENC_DEC(_KISA_DECRYPT); + + } + + public static final class KISA_SEED_KEY { + public int[] key_data = new int[32]; + + public void init() { + for(int i=0; i> shift_value; + return (byte)value; + } else { + int shift_value = (b_offset%4)*8; + int mask_value = 0x0ff << shift_value; + int value = (src[b_offset/4] & mask_value) >> shift_value; + return (byte)value; + } + + } + + public static byte[] get_bytes_for_ints(int[] src, int offset, int ENDIAN) { + int iLen = src.length-offset; + byte[] result = new byte[(iLen)*4]; + for(int i=0; i> 24) & 0x0ff); + dst[dst_offset+1] = (byte)((src >> 16) & 0x0ff); + dst[dst_offset+2] = (byte)((src >> 8) & 0x0ff); + dst[dst_offset+3] = (byte)((src) & 0x0ff); + } else { + dst[dst_offset] = (byte)((src) & 0x0ff); + dst[dst_offset+1] = (byte)((src >> 8) & 0x0ff); + dst[dst_offset+2] = (byte)((src >> 16) & 0x0ff); + dst[dst_offset+3] = (byte)((src >> 24) & 0x0ff); + } + + } + + public static void int_to_byte_unit_big_endian(byte[] dst, int dst_offset, int src) { + dst[dst_offset] = (byte)((src>> 24) & 0x0ff); + dst[dst_offset+1] = (byte)((src >> 16) & 0x0ff); + dst[dst_offset+2] = (byte)((src >> 8) & 0x0ff); + dst[dst_offset+3] = (byte)((src) & 0x0ff); + } + + public static int URShift(int x, int n) { + if(n == 0) + return x; + if(n >= 32) + return 0; + int v = x >> n; + int v_mask = ~(0x80000000 >> (n-1)); + return v & v_mask; + } + + public static final long INT_RANGE_MAX = (long)Math.pow(2, 32); + + public static long intToUnsigned(int x) { + if(x >= 0) + return x; + return x + INT_RANGE_MAX; + } + } +} + + + + + + + + + diff --git a/src/main/java/gtpa/brs/security/KISA_SEED_ECB.java b/src/main/java/gtpa/brs/security/KISA_SEED_ECB.java new file mode 100644 index 0000000..c1c0174 --- /dev/null +++ b/src/main/java/gtpa/brs/security/KISA_SEED_ECB.java @@ -0,0 +1,903 @@ +package gtpa.brs.security; + +/** +@file KISA_SEED_ECB.java +@brief SEED CBC ��ȣ �˰��� +@author Copyright (c) 2013 by KISA +@remarks http://seed.kisa.or.kr/ +*/ + + +public class KISA_SEED_ECB { + + + + + + // DEFAULT : JAVA = BIG_ENDIAN + private static int ENDIAN = Common.BIG_ENDIAN; + + + + private static final int EndianChange(int dwS) { return ( (/*ROTL(dwS,8)*/(((dwS) << (8)) | (((dwS) >> (32-(8)))&0x000000ff)) & 0x00ff00ff) | (/*ROTL(dwS,24)*/(((dwS) << (24)) | (((dwS) >> (32-(24)))&0x00ffffff)) & 0xff00ff00) ); } + + private static final int SS0[] = { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124, + 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, + 0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec, + 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, + 0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8, + 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, + 0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4, + 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, + 0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8, + 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, + 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264, + 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, + 0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038, + 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, + 0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4, + 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, + 0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040, + 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, + 0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8, + 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, + 0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330, + 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298 + }; + + private static final int SS1[] = { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0, + 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, + 0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43, + 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, + 0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3, + 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, + 0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430, + 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, + 0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1, + 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171, + 0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0, + 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, + 0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62, + 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, + 0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901, + 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, + 0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971, + 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, + 0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1, + 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, + 0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783, + 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3 + }; + + private static final int SS2[] = { + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505, + 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, + 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece, + 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, + 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9, + 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, + 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5, + 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, + 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b, + 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, + 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646, + 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, + 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808, + 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, + 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4, + 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, + 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040, + 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, + 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca, + 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, + 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303, + 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a + }; + + private static final int SS3[] = { + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838, + 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, + 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b, + 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, + 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f, + 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, + 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434, + 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, + 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031, + 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031, + 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010, + 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, + 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e, + 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, + 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809, + 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, + 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839, + 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, + 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d, + 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, + 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407, + 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437 + }; + + + private static final byte GetB0(int A) { return (byte)(A & 0x0ff); } + private static final byte GetB1(int A) { return (byte)((A>>8) & 0x0ff); } + private static final byte GetB2(int A) { return (byte)((A>>16) & 0x0ff); } + private static final byte GetB3(int A) { return (byte)((A>>24) & 0x0ff); } + + // TODO : check + // Round function F and adding output of F to L. + // L0, L1 : left input values at each round + // R0, R1 : right input values at each round + // K : round keys at each round + private static final void SeedRound(int[] T, int LR[], int L0, int L1, int R0, int R1, int[] K, int K_offset) { + T[0] = LR[R0] ^ K[K_offset+0]; + T[1] = LR[R1] ^ K[K_offset+1]; + T[1] ^= T[0]; + T[1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ + SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] += T[1]; + T[0] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ + SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + T[1] += T[0]; + T[1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ + SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] += T[1]; + LR[L0] ^= T[0]; LR[L1] ^= T[1]; + } + + private static final int LR_L0 = 0; + private static final int LR_L1 = 1; + private static final int LR_R0 = 2; + private static final int LR_R1 = 3; + + private static final int BLOCK_SIZE_SEED = 16; + private static final int BLOCK_SIZE_SEED_INT = 4; + + /********************************* Encryption *********************************/ + + + private static void KISA_SEED_Encrypt_Block_forECB( int[] in, int in_offset, int[] out, int out_offset, KISA_SEED_KEY ks ) { + int LR[] = new int[4]; // Iuput/output values at each rounds + int T[] = new int[2]; // Temporary variables for round function F + int K[] = ks.key_data; // Pointer of round keys + + // Set up input values for first round + LR[LR_L0] = in[in_offset+0]; + LR[LR_L1] = in[in_offset+1]; + LR[LR_R0] = in[in_offset+2]; + LR[LR_R1] = in[in_offset+3]; + + // Reorder for big endian + // Because SEED use little endian order in default + if(Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 0); // Round 1 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 2); // Round 2 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 4); // Round 3 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 6); // Round 4 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 8); // Round 5 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 10); // Round 6 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 12); // Round 7 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 14); // Round 8 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 16); // Round 9 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 18); // Round 10 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 20); // Round 11 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 22); // Round 12 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 24); // Round 13 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 26); // Round 14 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 28); // Round 15 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 30); // Round 16 + + if(Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + // Copying output values from last round to pbData + out[out_offset+0] = LR[LR_R0]; + out[out_offset+1] = LR[LR_R1]; + out[out_offset+2] = LR[LR_L0]; + out[out_offset+3] = LR[LR_L1]; + + } + + + public static int[] chartoint32_for_SEED_ECB(byte[] in, int inLen) { + int[] data; + int len, i; + + if(inLen % 4 > 0) + len = (inLen/4)+1; + else + len = (inLen/4); + + data = new int[len]; + + for(i=0;i> ((i%4)*8)); + } + } else { + for(i=0;i> ((3-(i%4))*8)); + } + } + + return data; + } + + + + + public static byte[] SEED_ECB_Encrypt(byte[] pbszUserKey, byte[] pbData, int offset, int length) { + KISA_SEED_INFO info = new KISA_SEED_INFO(); + int[] outbuf; + int[] data; + byte[] cdata; + int outlen; + int nRetOutLeng[] = new int[] { 0 }; + int nPaddingLeng[] = new int[] { 0 }; + + byte[] pbszPlainText = pbData; + int nPlainTextLen = length; + + int nPlainTextPadding = (BLOCK_SIZE_SEED - (nPlainTextLen) % BLOCK_SIZE_SEED); + byte[] newpbszPlainText = new byte[nPlainTextLen + nPlainTextPadding]; + Common.arraycopy(newpbszPlainText, pbszPlainText, nPlainTextLen); + + byte[] pbszCipherText = new byte[nPlainTextLen + nPlainTextPadding]; + + + SEED_ECB_init( info, KISA_ENC_DEC.KISA_ENCRYPT, pbszUserKey); + + outlen =((newpbszPlainText.length/BLOCK_SIZE_SEED) )*BLOCK_SIZE_SEED_INT ; + + outbuf = new int[outlen]; + + data = chartoint32_for_SEED_ECB(newpbszPlainText, nPlainTextLen); + SEED_ECB_Process( info, data, nPlainTextLen, outbuf, nRetOutLeng ); + SEED_ECB_Close( info, outbuf, nRetOutLeng[0], nPaddingLeng ); + + cdata = int32tochar_for_SEED_ECB(outbuf, nRetOutLeng[0] + nPaddingLeng[0]); + Common.arraycopy(pbszCipherText, cdata, nRetOutLeng[0] + nPaddingLeng[0]); + + data = null; + cdata = null; + outbuf = null; + + return pbszCipherText; + } + + + + /********************************* Decryption *********************************/ + + /** + @brief Data�� ���� Decrypt + @param pbData : ��ȣȭ�� ������ : 16 byte���� �� + @param pdwRoundKey : SeedRoundKey()�� ���� ������� Ű + */ + // Same as encrypt, except that round keys are applied in reverse order + + + public static void KISA_SEED_Decrypt_Block_forECB( int[] in, int in_offset, int[] out, int out_offset, KISA_SEED_KEY ks ) { + int LR[] = new int[4]; // Iuput/output values at each rounds + int T[] = new int[2]; // Temporary variables for round function F + int K[] = ks.key_data; // Pointer of round keys + + // Set up input values for first round + LR[LR_L0] = in[in_offset+0]; + LR[LR_L1] = in[in_offset+1]; + LR[LR_R0] = in[in_offset+2]; + LR[LR_R1] = in[in_offset+3]; + + // Reorder for big endian + if(Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 30); // Round 1 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 28); // Round 2 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 26); // Round 3 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 24); // Round 4 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 22); // Round 5 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 20); // Round 6 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 18); // Round 7 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 16); // Round 8 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 14); // Round 9 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 12); // Round 10 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 10); // Round 11 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 8); // Round 12 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 6); // Round 13 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 4); // Round 14 + SeedRound(T, LR, LR_L0, LR_L1, LR_R0, LR_R1, K, 2); // Round 15 + SeedRound(T, LR, LR_R0, LR_R1, LR_L0, LR_L1, K, 0); // Round 16 + + if(Common.BIG_ENDIAN != ENDIAN) { + LR[LR_L0] = EndianChange(LR[LR_L0]); + LR[LR_L1] = EndianChange(LR[LR_L1]); + LR[LR_R0] = EndianChange(LR[LR_R0]); + LR[LR_R1] = EndianChange(LR[LR_R1]); + } + + // Copy output values from last round to pbData + out[out_offset+0] = LR[LR_R0]; + out[out_offset+1] = LR[LR_R1]; + out[out_offset+2] = LR[LR_L0]; + out[out_offset+3] = LR[LR_L1]; + + } + + + + public static byte[] SEED_ECB_Decrypt(byte[] pbszUserKey, byte[] pbData, int offset, int length) { + + KISA_SEED_INFO info = new KISA_SEED_INFO(); + int[] outbuf; + int[] data; + byte[] cdata; + int outlen = 0; + int nRetOutLeng[] = new int[] { 0 }; + int nPaddingLeng[] = new int[] { 0 }; + + byte[] pbszCipherText = pbData; + int nCipherTextLen = length; + + if (nCipherTextLen % BLOCK_SIZE_SEED > 0) + { + byte[] result = null; + return result; + } + + byte []newpbszCipherText = new byte[nCipherTextLen]; + Common.arraycopy(newpbszCipherText, pbszCipherText, nCipherTextLen); + + byte[] pbszPlainText = new byte[nCipherTextLen]; + + + SEED_ECB_init( info, KISA_ENC_DEC.KISA_DECRYPT, pbszUserKey); + + outlen = (nCipherTextLen/16)*4 ; + outbuf = new int[outlen]; + data = chartoint32_for_SEED_ECB(newpbszCipherText, nCipherTextLen); + SEED_ECB_Process( info, data, nCipherTextLen, outbuf, nRetOutLeng ); + if (SEED_ECB_Close( info, outbuf, nRetOutLeng[0], nPaddingLeng ) > 0 ) + { + cdata = int32tochar_for_SEED_ECB( outbuf, nRetOutLeng[0] - nPaddingLeng[0] ); + Common.arraycopy(pbszPlainText, cdata, nRetOutLeng[0] - nPaddingLeng[0]); + int message_length = nRetOutLeng[0] - nPaddingLeng[0]; + + if(message_length < 0) + { + message_length = 0; + } + byte[] result = new byte[message_length]; + System.arraycopy(pbszPlainText, 0, result, 0, message_length); + + data = null; + cdata = null; + outbuf = null; + return result; + } + else + { + byte[] result = null; + return result; + } + } + + + + public static final class KISA_SEED_INFO { + public int encrypt; + public int ivec[] = new int[4]; + public KISA_SEED_KEY seed_key = new KISA_SEED_KEY(); + public int ecb_buffer[] = new int[4]; + public int buffer_length; + public int[] ecb_last_block = new int[4]; + public int last_block_flag; + + public KISA_SEED_INFO() { + encrypt = 0; + ivec[0] = ivec[1] = ivec[2] = ivec[3] = 0; + seed_key.init(); + ecb_buffer[0] = ecb_buffer[1] = ecb_buffer[2] = ecb_buffer[3] = 0; + buffer_length = 0; + ecb_last_block[0] = ecb_last_block[1] = ecb_last_block[2] = ecb_last_block[3] = 0; + last_block_flag = 0; + } + + + } + + public static final class KISA_ENC_DEC { + public static final int _KISA_DECRYPT = 0; + public static final int _KISA_ENCRYPT = 1; + + public int value; + + public KISA_ENC_DEC(int value ) { + this.value = value; + } + + public static final KISA_ENC_DEC KISA_ENCRYPT = new KISA_ENC_DEC(_KISA_ENCRYPT); + public static final KISA_ENC_DEC KISA_DECRYPT = new KISA_ENC_DEC(_KISA_DECRYPT); + + } + + public static final class KISA_SEED_KEY { + public int[] key_data = new int[32]; + + public void init() { + for(int i=0; i inLen ) + return 0; + + if( KISA_ENC_DEC._KISA_ENCRYPT == pInfo.encrypt ) { + in_offset = 0; + out_offset = 0; + + while( nCurrentCount <= inLen ) + { + KISA_SEED_Encrypt_Block_forECB( in, in_offset, out, out_offset, pInfo.seed_key ); + nCurrentCount += BLOCK_SIZE_SEED; + in_offset += BLOCK_SIZE_SEED_INT; + out_offset += BLOCK_SIZE_SEED_INT; + } + + outLen[0] = nCurrentCount - BLOCK_SIZE_SEED; + pInfo.buffer_length = inLen - outLen[0]; + + Common.memcpy( pInfo.ecb_buffer, in, in_offset, pInfo.buffer_length ); + } + else { + in_offset = 0; + out_offset = 0; + + while( nCurrentCount <= inLen ) + { + KISA_SEED_Decrypt_Block_forECB( in, in_offset, out, out_offset, pInfo.seed_key ); + nCurrentCount += BLOCK_SIZE_SEED; + in_offset += BLOCK_SIZE_SEED_INT; + out_offset += BLOCK_SIZE_SEED_INT; + } + outLen[0] = nCurrentCount - BLOCK_SIZE_SEED; + Common.memcpy( pInfo.ecb_last_block, out, out_offset - 4, BLOCK_SIZE_SEED ); + } + + return 1; + + } + + public static int SEED_ECB_Close( KISA_SEED_INFO pInfo, int[] out, int out_offset, int[] outLen ) { + int nPaddngLeng; + int i; + outLen[0] = 0; + + if( null == out ) + return 0; + + if( KISA_ENC_DEC._KISA_ENCRYPT == pInfo.encrypt ) { + nPaddngLeng = BLOCK_SIZE_SEED - pInfo.buffer_length; + for( i = pInfo.buffer_length; i 0 && nPaddngLeng <= BLOCK_SIZE_SEED ) + { + for( i = nPaddngLeng; i > 0; i--) + { + Common.set_byte_for_int(out, out_offset - i, (byte)0x00, ENDIAN); + } + outLen[0] = nPaddngLeng; + } + else + { + return 0; + } + } + return 1; + } + + + + + + + + + + /************************ Constants for Key schedule **************************/ + // KC0 = golden ratio; KCi = ROTL(KCi-1, 1) + private static final int KC0 = 0x9e3779b9; + private static final int KC1 = 0x3c6ef373; + private static final int KC2 = 0x78dde6e6; + private static final int KC3 = 0xf1bbcdcc; + private static final int KC4 = 0xe3779b99; + private static final int KC5 = 0xc6ef3733; + private static final int KC6 = 0x8dde6e67; + private static final int KC7 = 0x1bbcdccf; + private static final int KC8 = 0x3779b99e; + private static final int KC9 = 0x6ef3733c; + private static final int KC10 = 0xdde6e678; + private static final int KC11 = 0xbbcdccf1; + private static final int KC12 = 0x779b99e3; + private static final int KC13 = 0xef3733c6; + private static final int KC14 = 0xde6e678d; + private static final int KC15 = 0xbcdccf1b; + + /************************** Macros for Key schedule ***************************/ + private static final void RoundKeyUpdate0(int T[], int[] K, int K_offset, int ABCD[], int KC) { + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC; + T[1] = ABCD[ABCD_B] + KC - ABCD[ABCD_D]; + K[K_offset+0] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + K[K_offset+1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] = ABCD[ABCD_A]; + ABCD[ABCD_A] = ((ABCD[ABCD_A]>>8)&0x00ffffff) ^ (ABCD[ABCD_B]<<24); + ABCD[ABCD_B] = ((ABCD[ABCD_B]>>8)&0x00ffffff) ^ (T[0]<<24); + } + + private static final void RoundKeyUpdate1(int T[], int []K, int K_offset, int ABCD[], int KC) { + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC; + T[1] = ABCD[ABCD_B] + KC - ABCD[ABCD_D]; + K[K_offset+0] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; + K[K_offset+1] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; + T[0] = ABCD[ABCD_C]; + ABCD[ABCD_C] = (ABCD[ABCD_C]<<8) ^ ((ABCD[ABCD_D]>>24)&0x000000ff); + ABCD[ABCD_D] = (ABCD[ABCD_D]<<8) ^ ((T[0]>>24)&0x000000ff); + } + + + /******************************** Key Schedule ********************************/ + private static final int ABCD_A = 0; + private static final int ABCD_B = 1; + private static final int ABCD_C = 2; + private static final int ABCD_D = 3; + + /** + @brief UserKey�� �̿��Ͽ� RoundKey ���� + @param pbUserKey : RoundKey�� ������ �⺻ Ű + @param pdwRoundKey : pbUserKey�� �����Ǵ� ��� pdwRoundKey (32*4 byte) + */ + public static void SeedRoundKey(int[] pdwRoundKey /* [out] round keys for encryption or decryption */, byte[] pbUserKey/* [in] secret user key*/) { + int ABCD[] = new int[4]; // Iuput/output values at each rounds + int T[] = new int[2]; // Temporary variable + int K[] = pdwRoundKey; // Pointer of round keys + + // Set up input values for Key Schedule + ABCD[ABCD_A] = Common.byte_to_int(pbUserKey, 0*4, ENDIAN); + ABCD[ABCD_B] = Common.byte_to_int(pbUserKey, 1*4, ENDIAN); + ABCD[ABCD_C] = Common.byte_to_int(pbUserKey, 2*4, ENDIAN);; + ABCD[ABCD_D] = Common.byte_to_int(pbUserKey, 3*4, ENDIAN);; + + // Reorder for big endian + if(Common.BIG_ENDIAN != ENDIAN) { + ABCD[ABCD_A] = EndianChange(ABCD[ABCD_A]); + ABCD[ABCD_B] = EndianChange(ABCD[ABCD_B]); + ABCD[ABCD_C] = EndianChange(ABCD[ABCD_C]); + ABCD[ABCD_D] = EndianChange(ABCD[ABCD_D]); + } + + + // i-th round keys( K_i,0 and K_i,1 ) are denoted as K[2*(i-1)] and K[2*i-1], respectively + RoundKeyUpdate0(T, K, 0, ABCD, KC0 ); // K_1,0 and K_1,1 + RoundKeyUpdate1(T, K, 2, ABCD, KC1 ); // K_2,0 and K_2,1 + RoundKeyUpdate0(T, K, 4, ABCD, KC2 ); // K_3,0 and K_3,1 + RoundKeyUpdate1(T, K, 6, ABCD, KC3 ); // K_4,0 and K_4,1 + RoundKeyUpdate0(T, K, 8, ABCD, KC4 ); // K_5,0 and K_5,1 + RoundKeyUpdate1(T, K, 10, ABCD, KC5 ); // K_6,0 and K_6,1 + RoundKeyUpdate0(T, K, 12, ABCD, KC6 ); // K_7,0 and K_7,1 + RoundKeyUpdate1(T, K, 14, ABCD, KC7 ); // K_8,0 and K_8,1 + RoundKeyUpdate0(T, K, 16, ABCD, KC8 ); // K_9,0 and K_9,1 + RoundKeyUpdate1(T, K, 18, ABCD, KC9 ); // K_10,0 and K_10,1 + RoundKeyUpdate0(T, K, 20, ABCD, KC10); // K_11,0 and K_11,1 + RoundKeyUpdate1(T, K, 22, ABCD, KC11); // K_12,0 and K_12,1 + RoundKeyUpdate0(T, K, 24, ABCD, KC12); // K_13,0 and K_13,1 + RoundKeyUpdate1(T, K, 26, ABCD, KC13); // K_14,0 and K_14,1 + RoundKeyUpdate0(T, K, 28, ABCD, KC14); // K_15,0 and K_15,1 + + T[0] = ABCD[ABCD_A] + ABCD[ABCD_C] - KC15; + T[1] = ABCD[ABCD_B] - ABCD[ABCD_D] + KC15; + K[30] = SS0[GetB0(T[0])&0x0ff] ^ SS1[GetB1(T[0])&0x0ff] ^ SS2[GetB2(T[0])&0x0ff] ^ SS3[GetB3(T[0])&0x0ff]; // K_16,0 + K[31] = SS0[GetB0(T[1])&0x0ff] ^ SS1[GetB1(T[1])&0x0ff] ^ SS2[GetB2(T[1])&0x0ff] ^ SS3[GetB3(T[1])&0x0ff]; // K_16,1 + } + + public static class Common { + + public static final int BIG_ENDIAN = 0; + public static final int LITTLE_ENDIAN = 1; + + public static void arraycopy(byte[] dst, byte[] src, int length) { + for(int i=0; i> shift_value; + return (byte)value; + } else { + int shift_value = (b_offset%4)*8; + int mask_value = 0x0ff << shift_value; + int value = (src[b_offset/4] & mask_value) >> shift_value; + return (byte)value; + } + + } + + public static byte[] get_bytes_for_ints(int[] src, int offset, int ENDIAN) { + int iLen = src.length-offset; + byte[] result = new byte[(iLen)*4]; + for(int i=0; i> 24) & 0x0ff); + dst[dst_offset+1] = (byte)((src >> 16) & 0x0ff); + dst[dst_offset+2] = (byte)((src >> 8) & 0x0ff); + dst[dst_offset+3] = (byte)((src) & 0x0ff); + } else { + dst[dst_offset] = (byte)((src) & 0x0ff); + dst[dst_offset+1] = (byte)((src >> 8) & 0x0ff); + dst[dst_offset+2] = (byte)((src >> 16) & 0x0ff); + dst[dst_offset+3] = (byte)((src >> 24) & 0x0ff); + } + + } + + public static void int_to_byte_unit_big_endian(byte[] dst, int dst_offset, int src) { + dst[dst_offset] = (byte)((src>> 24) & 0x0ff); + dst[dst_offset+1] = (byte)((src >> 16) & 0x0ff); + dst[dst_offset+2] = (byte)((src >> 8) & 0x0ff); + dst[dst_offset+3] = (byte)((src) & 0x0ff); + } + + public static int URShift(int x, int n) { + if(n == 0) + return x; + if(n >= 32) + return 0; + int v = x >> n; + int v_mask = ~(0x80000000 >> (n-1)); + return v & v_mask; + } + + public static final long INT_RANGE_MAX = (long)Math.pow(2, 32); + + public static long intToUnsigned(int x) { + if(x >= 0) + return x; + return x + INT_RANGE_MAX; + } + } +} diff --git a/src/main/java/gtpa/brs/security/KISA_SEED_GCM.java b/src/main/java/gtpa/brs/security/KISA_SEED_GCM.java new file mode 100644 index 0000000..b9fe0aa --- /dev/null +++ b/src/main/java/gtpa/brs/security/KISA_SEED_GCM.java @@ -0,0 +1,460 @@ +package gtpa.brs.security; + +import gtpa.brs.security.KISA_SEED; + +public class KISA_SEED_GCM +{ + private static int BLOCK_SIZE_SEED = 16; + + private static void SHIFTR1(int[] R) + { + R[3] = ((R[3] >> 1) & 0x7FFFFFFF) ^ ((R[2] << 31) & 0x80000000); + R[2] = ((R[2] >> 1) & 0x7FFFFFFF) ^ ((R[1] << 31) & 0x80000000); + R[1] = ((R[1] >> 1) & 0x7FFFFFFF) ^ ((R[0] << 31) & 0x80000000); + R[0] = ((R[0] >> 1) & 0x7FFFFFFF); + } + + private static void SHIFTR8(int[] R) + { + R[3] = ((R[3] >> 8) & 0x00FFFFFF) ^ ((R[2] << 24) & 0xFF000000); + R[2] = ((R[2] >> 8) & 0x00FFFFFF) ^ ((R[1] << 24) & 0xFF000000); + R[1] = ((R[1] >> 8) & 0x00FFFFFF) ^ ((R[0] << 24) & 0xFF000000); + R[0] = ((R[0] >> 8) & 0x00FFFFFF); + } + + private static void XOR128(int[] R, int[] A, int[] B) + { + R[0] = A[0] ^ B[0]; + R[1] = A[1] ^ B[1]; + R[2] = A[2] ^ B[2]; + R[3] = A[3] ^ B[3]; + } + + private static void INCREASE(int[] ctr) + { + if (ctr[3] == 0xFFFFFFFF) + { + ctr[2]++; + ctr[3] = 0; + } + else + { + ctr[3]++; + } + } + + private static void ZERO128(int[] a) { a[0] = 0x00000000; a[1] = 0x00000000; a[2] = 0x00000000; a[3] = 0x00000000; } + + private static void Byte2Word(int[] dst, byte[] src, int src_offset, int srcLen) + { + int i = 0; + int remain = 0; + + for (i = 0; i < srcLen; i++) + { + remain = i & 3; + + if (remain == 0) + dst[i >> 2] = ((src[src_offset + i] & 0x0FF) << 24); + else if (remain == 1) + dst[i >> 2] ^= ((src[src_offset + i] & 0x0FF) << 16); + else if (remain == 2) + dst[i >> 2] ^= ((src[src_offset + i] & 0x0FF) << 8); + else + dst[i >> 2] ^= ( src[src_offset + i] & 0x0FF); + } + } + + private static void Word2Byte(byte[] dst, int dst_offset, int[] src, int srcLen) + { + int i = 0; + int remain = 0; + + for (i = 0; i < srcLen; i++) + { + remain = i & 3; + + if (remain == 0) + dst[dst_offset + i] = (byte)(src[i >> 2] >> 24); + else if (remain == 1) + dst[dst_offset + i] = (byte)(src[i >> 2] >> 16); + else if (remain == 2) + dst[dst_offset + i] = (byte)(src[i >> 2] >> 8); + else + dst[dst_offset + i] = (byte) src[i >> 2]; + } + } + + private static final int R8[] = + { + 0x00000000, 0x01c20000, 0x03840000, 0x02460000, 0x07080000, 0x06ca0000, 0x048c0000, 0x054e0000, + 0x0e100000, 0x0fd20000, 0x0d940000, 0x0c560000, 0x09180000, 0x08da0000, 0x0a9c0000, 0x0b5e0000, + 0x1c200000, 0x1de20000, 0x1fa40000, 0x1e660000, 0x1b280000, 0x1aea0000, 0x18ac0000, 0x196e0000, + 0x12300000, 0x13f20000, 0x11b40000, 0x10760000, 0x15380000, 0x14fa0000, 0x16bc0000, 0x177e0000, + 0x38400000, 0x39820000, 0x3bc40000, 0x3a060000, 0x3f480000, 0x3e8a0000, 0x3ccc0000, 0x3d0e0000, + 0x36500000, 0x37920000, 0x35d40000, 0x34160000, 0x31580000, 0x309a0000, 0x32dc0000, 0x331e0000, + 0x24600000, 0x25a20000, 0x27e40000, 0x26260000, 0x23680000, 0x22aa0000, 0x20ec0000, 0x212e0000, + 0x2a700000, 0x2bb20000, 0x29f40000, 0x28360000, 0x2d780000, 0x2cba0000, 0x2efc0000, 0x2f3e0000, + 0x70800000, 0x71420000, 0x73040000, 0x72c60000, 0x77880000, 0x764a0000, 0x740c0000, 0x75ce0000, + 0x7e900000, 0x7f520000, 0x7d140000, 0x7cd60000, 0x79980000, 0x785a0000, 0x7a1c0000, 0x7bde0000, + 0x6ca00000, 0x6d620000, 0x6f240000, 0x6ee60000, 0x6ba80000, 0x6a6a0000, 0x682c0000, 0x69ee0000, + 0x62b00000, 0x63720000, 0x61340000, 0x60f60000, 0x65b80000, 0x647a0000, 0x663c0000, 0x67fe0000, + 0x48c00000, 0x49020000, 0x4b440000, 0x4a860000, 0x4fc80000, 0x4e0a0000, 0x4c4c0000, 0x4d8e0000, + 0x46d00000, 0x47120000, 0x45540000, 0x44960000, 0x41d80000, 0x401a0000, 0x425c0000, 0x439e0000, + 0x54e00000, 0x55220000, 0x57640000, 0x56a60000, 0x53e80000, 0x522a0000, 0x506c0000, 0x51ae0000, + 0x5af00000, 0x5b320000, 0x59740000, 0x58b60000, 0x5df80000, 0x5c3a0000, 0x5e7c0000, 0x5fbe0000, + 0xe1000000, 0xe0c20000, 0xe2840000, 0xe3460000, 0xe6080000, 0xe7ca0000, 0xe58c0000, 0xe44e0000, + 0xef100000, 0xeed20000, 0xec940000, 0xed560000, 0xe8180000, 0xe9da0000, 0xeb9c0000, 0xea5e0000, + 0xfd200000, 0xfce20000, 0xfea40000, 0xff660000, 0xfa280000, 0xfbea0000, 0xf9ac0000, 0xf86e0000, + 0xf3300000, 0xf2f20000, 0xf0b40000, 0xf1760000, 0xf4380000, 0xf5fa0000, 0xf7bc0000, 0xf67e0000, + 0xd9400000, 0xd8820000, 0xdac40000, 0xdb060000, 0xde480000, 0xdf8a0000, 0xddcc0000, 0xdc0e0000, + 0xd7500000, 0xd6920000, 0xd4d40000, 0xd5160000, 0xd0580000, 0xd19a0000, 0xd3dc0000, 0xd21e0000, + 0xc5600000, 0xc4a20000, 0xc6e40000, 0xc7260000, 0xc2680000, 0xc3aa0000, 0xc1ec0000, 0xc02e0000, + 0xcb700000, 0xcab20000, 0xc8f40000, 0xc9360000, 0xcc780000, 0xcdba0000, 0xcffc0000, 0xce3e0000, + 0x91800000, 0x90420000, 0x92040000, 0x93c60000, 0x96880000, 0x974a0000, 0x950c0000, 0x94ce0000, + 0x9f900000, 0x9e520000, 0x9c140000, 0x9dd60000, 0x98980000, 0x995a0000, 0x9b1c0000, 0x9ade0000, + 0x8da00000, 0x8c620000, 0x8e240000, 0x8fe60000, 0x8aa80000, 0x8b6a0000, 0x892c0000, 0x88ee0000, + 0x83b00000, 0x82720000, 0x80340000, 0x81f60000, 0x84b80000, 0x857a0000, 0x873c0000, 0x86fe0000, + 0xa9c00000, 0xa8020000, 0xaa440000, 0xab860000, 0xaec80000, 0xaf0a0000, 0xad4c0000, 0xac8e0000, + 0xa7d00000, 0xa6120000, 0xa4540000, 0xa5960000, 0xa0d80000, 0xa11a0000, 0xa35c0000, 0xa29e0000, + 0xb5e00000, 0xb4220000, 0xb6640000, 0xb7a60000, 0xb2e80000, 0xb32a0000, 0xb16c0000, 0xb0ae0000, + 0xbbf00000, 0xba320000, 0xb8740000, 0xb9b60000, 0xbcf80000, 0xbd3a0000, 0xbf7c0000, 0xbebe0000 + }; + + private static void makeM8(int[][] M, int[] H) + { + int i = 64, j = 0; + int[] temp = new int[4]; + + M[128][0] = H[0]; + M[128][1] = H[1]; + M[128][2] = H[2]; + M[128][3] = H[3]; + + while (i > 0) + { + temp[0] = M[i << 1][0]; + temp[1] = M[i << 1][1]; + temp[2] = M[i << 1][2]; + temp[3] = M[i << 1][3]; + + if ((temp[3] & 0x01) == 1) + { + SHIFTR1(temp); + temp[0] ^= 0xE1000000; + } + else + { + SHIFTR1(temp); + } + + M[i][0] = temp[0]; + M[i][1] = temp[1]; + M[i][2] = temp[2]; + M[i][3] = temp[3]; + + i >>= 1; + } + + i = 2; + + while (i < 256) + { + for (j = 1; j < i; j++) + { + M[i + j][0] = M[i][0] ^ M[j][0]; + M[i + j][1] = M[i][1] ^ M[j][1]; + M[i + j][2] = M[i][2] ^ M[j][2]; + M[i + j][3] = M[i][3] ^ M[j][3]; + } + + i <<= 1; + } + + M[0][0] = 0; + M[0][1] = 0; + M[0][2] = 0; + M[0][3] = 0; + } + + private static void GHASH_8BIT(int[] out, int[] in, int[][] M, int[] R) + { + int[] W = new int[4]; + int[] Z= new int[4]; + int temp = 0, i = 0; + + XOR128(Z, out, in); + + for (i = 0; i < 15; i++) + { + temp = ((Z[3 - (i >> 2)] >> ((i & 3) << 3)) & 0x0FF); + + W[0] ^= M[temp][0]; + W[1] ^= M[temp][1]; + W[2] ^= M[temp][2]; + W[3] ^= M[temp][3]; + + temp = W[3] & 0x0FF; + + SHIFTR8(W); + W[0] ^= R[temp]; + } + + temp = (Z[0] >> 24) & 0xFF; + + out[0] = W[0] ^ M[temp][0]; + out[1] = W[1] ^ M[temp][1]; + out[2] = W[2] ^ M[temp][2]; + out[3] = W[3] ^ M[temp][3]; + } + + public int SEED_GCM_Encryption( + byte[] ct, + byte[] pt, int ptLen, + int macLen, + byte[] nonce, int nonceLen, + byte[] aad, int aadLen, + byte[] mKey) + { + int[] rKey = new int[100]; + int[] H = new int[4]; + int[] Z = new int[4]; + int[] tmp = new int[8]; + int[] GCTR_in = new int[4]; + int[] GCTR_out = new int[4]; + int[] GHASH_in = new int[4]; + int[] GHASH_out = new int[4]; + int[][] M8 = new int[256][4]; + int i = 0; + gtpa.brs.security.KISA_SEED seed = new gtpa.brs.security.KISA_SEED(); + + if (macLen > 16) + return 1; + + seed.SEED_KeySched(mKey, rKey); + + seed.SEED_Encrypt(H, H, rKey); + + makeM8(M8, H); + + if (nonceLen == 12) + { + Byte2Word(GCTR_in, nonce, 0, nonceLen); + + GCTR_in[3] = 1; + + seed.SEED_Encrypt(Z, GCTR_in, rKey); + } + else + { + for (i = 0; i < nonceLen; i += BLOCK_SIZE_SEED) + { + ZERO128(tmp); + + if ((nonceLen - i) < 16) + Byte2Word(tmp, nonce, i, nonceLen - i); + else + Byte2Word(tmp, nonce, i, BLOCK_SIZE_SEED); + + GHASH_8BIT(GCTR_in, tmp, M8, R8); + } + + ZERO128(tmp); + tmp[3] = (nonceLen << 3); + + GHASH_8BIT(GCTR_in, tmp, M8, R8); + + seed.SEED_Encrypt(Z, GCTR_in, rKey); + } + + for (i = 0; i < ptLen; i += BLOCK_SIZE_SEED) + { + ZERO128(tmp); + + INCREASE(GCTR_in); + + seed.SEED_Encrypt(GCTR_out, GCTR_in, rKey); + + if ((ptLen - i) < 16) + { + Byte2Word(tmp, pt, i, ptLen - i); + XOR128(GCTR_out, GCTR_out, tmp); + Word2Byte(ct, i, GCTR_out, ptLen - i); + } + else + { + Byte2Word(tmp, pt, i, BLOCK_SIZE_SEED); + XOR128(GCTR_out, GCTR_out, tmp); + Word2Byte(ct, i, GCTR_out, BLOCK_SIZE_SEED); + } + } + + for (i = 0; i < aadLen; i += BLOCK_SIZE_SEED) + { + ZERO128(GHASH_in); + + if ((aadLen - i) < 16) + Byte2Word(GHASH_in, aad, i, aadLen - i); + else + Byte2Word(GHASH_in, aad, i, BLOCK_SIZE_SEED); + + GHASH_8BIT(GHASH_out, GHASH_in, M8, R8); + } + + for (i = 0; i < ptLen; i += BLOCK_SIZE_SEED) + { + ZERO128(GHASH_in); + + if ((ptLen - i) < 16) + Byte2Word(GHASH_in, ct, i, ptLen - i); + else + Byte2Word(GHASH_in, ct, i, BLOCK_SIZE_SEED); + + GHASH_8BIT(GHASH_out, GHASH_in, M8, R8); + } + + ZERO128(GHASH_in); + + GHASH_in[1] ^= aadLen << 3; + GHASH_in[3] ^= ptLen << 3; + + GHASH_8BIT(GHASH_out, GHASH_in, M8, R8); + + XOR128(GHASH_out, GHASH_out, Z); + + Word2Byte(ct, ptLen, GHASH_out, macLen); + + return ptLen + macLen; + } + + public int SEED_GCM_Decryption( + byte[] pt, + byte[] ct, int ctLen, + int macLen, + byte[] nonce, int nonceLen, + byte[] aad, int aadLen, + byte[] mKey) + { + int[] rKey = new int[100]; + int[] H = new int[4]; + int[] Z = new int[4]; + int[] tmp = new int[8]; + int[] GCTR_in = new int[4]; + int[] GCTR_out = new int[4]; + int[] GHASH_in = new int[4]; + int[] GHASH_out = new int[4]; + byte[] MAC = new byte[16]; + int[][] M8 = new int[256][4]; + int i = 0, j = 0; + gtpa.brs.security.KISA_SEED seed = new KISA_SEED(); + + if (macLen > 16) + return 1; + + seed.SEED_KeySched(mKey, rKey); + + seed.SEED_Encrypt(H, H, rKey); + + makeM8(M8, H); + + if (nonceLen == 12) + { + Byte2Word(GCTR_in, nonce, 0, nonceLen); + + GCTR_in[3] = 1; + + seed.SEED_Encrypt(Z, GCTR_in, rKey); + } + else + { + for (i = 0; i < nonceLen; i += BLOCK_SIZE_SEED) + { + ZERO128(tmp); + + if ((nonceLen - i) < 16) + Byte2Word(tmp, nonce, i, nonceLen - i); + else + Byte2Word(tmp, nonce, i, BLOCK_SIZE_SEED); + + GHASH_8BIT(GCTR_in, tmp, M8, R8); + } + + ZERO128(tmp); + tmp[3] = (nonceLen << 3); + + GHASH_8BIT(GCTR_in, tmp, M8, R8); + + seed.SEED_Encrypt(Z, GCTR_in, rKey); + } + + for (i = 0; i < ctLen - macLen; i += BLOCK_SIZE_SEED) + { + ZERO128(tmp); + + INCREASE(GCTR_in); + + seed.SEED_Encrypt(GCTR_out, GCTR_in, rKey); + + if ((ctLen - macLen - i) < 16) + { + Byte2Word(tmp, ct, i, ctLen - macLen - i); + XOR128(GCTR_out, GCTR_out, tmp); + Word2Byte(pt, i, GCTR_out, ctLen - macLen - i); + } + else + { + Byte2Word(tmp, ct, i, BLOCK_SIZE_SEED); + XOR128(GCTR_out, GCTR_out, tmp); + Word2Byte(pt, i, GCTR_out, BLOCK_SIZE_SEED); + } + } + + for (i = 0; i < aadLen; i += BLOCK_SIZE_SEED) + { + ZERO128(GHASH_in); + + if ((aadLen - i) < 16) + Byte2Word(GHASH_in, aad, i, aadLen - i); + else + Byte2Word(GHASH_in, aad, i, BLOCK_SIZE_SEED); + + GHASH_8BIT(GHASH_out, GHASH_in, M8, R8); + } + + for (i = 0; i < ctLen - macLen; i += BLOCK_SIZE_SEED) + { + ZERO128(GHASH_in); + + if ((ctLen - macLen - i) < 16) + Byte2Word(GHASH_in, ct, i, ctLen - macLen - i); + else + Byte2Word(GHASH_in, ct, i, BLOCK_SIZE_SEED); + + GHASH_8BIT(GHASH_out, GHASH_in, M8, R8); + } + + ZERO128(GHASH_in); + + GHASH_in[1] = aadLen << 3; + GHASH_in[3] = (ctLen - macLen) << 3; + + GHASH_8BIT(GHASH_out, GHASH_in, M8, R8); + + XOR128(GHASH_out, GHASH_out, Z); + + Word2Byte(MAC, 0, GHASH_out, macLen); + + for (i = 0; i < macLen; i++) + { + if (ct[ctLen - macLen + i] != MAC[i]) + { + for (j = 0; j < ctLen - macLen;j++) + pt[j] = 0; + + return 1; + } + } + + return ctLen - macLen; + } +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/security/~VNOINTEROP.java_bak b/src/main/java/gtpa/brs/security/~VNOINTEROP.java_bak new file mode 100644 index 0000000..2b1538d --- /dev/null +++ b/src/main/java/gtpa/brs/security/~VNOINTEROP.java_bak @@ -0,0 +1,740 @@ +package gtpa.brs.security; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 18/06/2019 + * TIME : 10:22 AM + * Project : BRSPW + * Class : VNOINTEROP + * Desc : + * ///////////////////////////////////////////////////// + */ + +import com.sun.crypto.provider.SunJCE; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import java.io.InputStream; +import java.io.PrintWriter; +import java.net.InetSocketAddress; +import java.net.MalformedURLException; +import java.net.NoRouteToHostException; +import java.net.Socket; +import java.net.URL; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.Security; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.StringTokenizer; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +@SuppressFBWarnings +public class VNOINTEROP { + final int PROC_OK = 0; + final int AES_SYSTEM_ERR = -1; + final int ENC_PROC_ERR = -2; + final int ENC_DATA_ERR = -3; + final int DEC_PROC_ERR = -4; + final int DEC_HASH_ERR = -5; + final int DEC_DATA_ERR = -6; + final int INPUT_DATA_ERR = -9; + final int RECV_DATA_ERR = -21; + final int CONNECT_ERR = -31; + final int HTTP_SYSTEM_ERR = -34; + private String m_strDupInfo = ""; + private String m_strConnInfo1 = ""; + private String m_strConnInfo2 = ""; + private String m_strAGE = ""; + private String m_strSEX = ""; + private String m_strBirthDate = ""; + private String m_strNationalInfo = ""; + private String m_strEncodeData = ""; + private String m_strReceiveData = ""; + private static byte[] mBase64EncMap; + private static byte[] mBase64DecMap; + static final short HASH_COUNT_MAX = 33; + static final short SHARE_KEY_LEN = 16; + static final short SHA256_DIGEST_VALUELEN = 32; + static final short RETURN_DATA_LEN = 7; + static final short LEN_SITE_CODE = 4; + static final short LEN_SITE_PASSWORD = 8; + static final short LEN_PID = 13; + static final short LEN_PID_TYPE = 3; + static final byte[] clientKey; + + public VNOINTEROP() { + Security.addProvider(new SunJCE()); + } + + private String base64Encode(byte[] var1) { + if (var1 != null && var1.length != 0) { + byte[] var2 = new byte[(var1.length + 2) / 3 * 4]; + int var3 = 0; + + int var4; + for(var4 = 0; var3 < var1.length - 2; var3 += 3) { + var2[var4++] = mBase64EncMap[var1[var3] >>> 2 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 1] >>> 4 & 15 | var1[var3] << 4 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 2] >>> 6 & 3 | var1[var3 + 1] << 2 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 2] & 63]; + } + + if (var3 < var1.length) { + var2[var4++] = mBase64EncMap[var1[var3] >>> 2 & 63]; + if (var3 < var1.length - 1) { + var2[var4++] = mBase64EncMap[var1[var3 + 1] >>> 4 & 15 | var1[var3] << 4 & 63]; + var2[var4++] = mBase64EncMap[var1[var3 + 1] << 2 & 63]; + } else { + var2[var4++] = mBase64EncMap[var1[var3] << 4 & 63]; + } + } + + while(var4 < var2.length) { + var2[var4] = 61; + ++var4; + } + + String var5 = new String(var2); + return var5; + } else { + throw new IllegalArgumentException("Can not encode NULL or empty byte array."); + } + } + + private byte[] base64Decode(String var1) { + if (var1 != null && var1.length() != 0) { + byte[] var2 = var1.getBytes(); + + int var3; + for(var3 = var2.length; var2[var3 - 1] == 61; --var3) { + ; + } + + byte[] var4 = new byte[var3 - var2.length / 4]; + + int var5; + for(var5 = 0; var5 < var2.length; ++var5) { + var2[var5] = mBase64DecMap[var2[var5]]; + } + + var5 = 0; + + int var6; + for(var6 = 0; var6 < var4.length - 2; var6 += 3) { + var4[var6] = (byte)(var2[var5] << 2 & 255 | var2[var5 + 1] >>> 4 & 3); + var4[var6 + 1] = (byte)(var2[var5 + 1] << 4 & 255 | var2[var5 + 2] >>> 2 & 15); + var4[var6 + 2] = (byte)(var2[var5 + 2] << 6 & 255 | var2[var5 + 3] & 63); + var5 += 4; + } + + if (var6 < var4.length) { + var4[var6] = (byte)(var2[var5] << 2 & 255 | var2[var5 + 1] >>> 4 & 3); + } + + ++var6; + if (var6 < var4.length) { + var4[var6] = (byte)(var2[var5 + 1] << 4 & 255 | var2[var5 + 2] >>> 2 & 15); + } + + return var4; + } else { + throw new IllegalArgumentException("Can not decode NULL or empty string."); + } + } + + public String getDupInfo() { + return this.m_strDupInfo; + } + + public String getConnInfo() { + return this.m_strConnInfo1; + } + + public String getConnInfo2() { + return this.m_strConnInfo2; + } + + public String getAge() { + return this.m_strAGE; + } + + public String getGender() { + return this.m_strSEX; + } + + public String getBirthDate() { + return this.m_strBirthDate; + } + + public String getNationalInfo() { + return this.m_strNationalInfo; + } + + public int fnRequestDupInfo(String var1, String var2, String var3, String var4) { + this.m_strDupInfo = ""; + this.m_strConnInfo1 = ""; + this.m_strConnInfo2 = ""; + this.m_strAGE = ""; + this.m_strSEX = ""; + this.m_strBirthDate = ""; + this.m_strNationalInfo = ""; + this.m_strEncodeData = ""; + this.m_strReceiveData = ""; + boolean var5 = false; + if (var1.length() != 4) { + return -9; + } else if (var2.length() < 8) { + return -9; + } else if (var3.length() != 13) { + return -9; + } else if (var4.length() != 3) { + return -9; + } else if (!var4.equals("JID") && !var4.equals("SID") && !var4.equals("SNC") && !var4.equals("VNO")) { + return -9; + } else { + int var6 = this.fnEncode(var3, var2); + if (var6 != 0) { + return var6; + } else { + var6 = this.fnHTTPConn(var1, var4, "", this.m_strEncodeData, var4.equals("SNC")); + if (var6 != 0) { + return var6; + } else { + var6 = this.fnDecode(this.m_strReceiveData, ""); + return var6; + } + } + } + } + + public int fnRequestConnInfo(String var1, String var2, String var3, String var4) { + return this.fnRequestConnInfo(var1, var2, var3, var4, "CI1"); + } + + public int fnRequestConnInfo(String var1, String var2, String var3, String var4, String var5) { + this.m_strDupInfo = ""; + this.m_strConnInfo1 = ""; + this.m_strConnInfo2 = ""; + this.m_strAGE = ""; + this.m_strSEX = ""; + this.m_strBirthDate = ""; + this.m_strNationalInfo = ""; + this.m_strEncodeData = ""; + this.m_strReceiveData = ""; + boolean var6 = false; + if (var1.length() != 4) { + return -9; + } else if (var2.length() < 8) { + return -9; + } else if (var3.length() != 13) { + return -9; + } else if (var4.length() != 3) { + return -9; + } else if (!var4.equals("JID") && !var4.equals("SID") && !var4.equals("SNC") && !var4.equals("VNO")) { + return -9; + } else { + int var7 = this.fnEncode(var3, var2); + if (var7 != 0) { + return var7; + } else { + var7 = this.fnHTTPConn(var1, var4, var5, this.m_strEncodeData, var4.equals("SNC")); + if (var7 != 0) { + return var7; + } else { + var7 = this.fnDecode(this.m_strReceiveData, var5); + return var7; + } + } + } + } + + private int fnDecode(String var1, String var2) { + int var3 = 0; + boolean var4 = false; + boolean var5 = false; + boolean var6 = false; + boolean var7 = false; + int var8 = 0; + StringTokenizer var9 = null; + new StringBuffer(); + String[] var11 = null; + Object var12 = null; + Object var13 = null; + byte[] var14 = null; + Object var15 = null; + Object var16 = null; + Object var17 = null; + String var18 = ""; + String var19 = ""; + String var20 = ""; + MessageDigest var21 = null; + Object var22 = null; + Object var23 = null; + + try { + byte[] var32 = this.base64Decode(var1); + + int var28; + for(var28 = 0; var28 < var32.length; ++var28) { + if (var32[var28] == 95) { + ++var8; + if (var8 == 2) { + ++var28; + var8 = var28; + break; + } + } + } + + byte[] var31 = new byte[var8]; + + for(var28 = 0; var28 < var8; ++var28) { + var31[var28] = var32[var28]; + } + + var18 = new String(var31); + var9 = new StringTokenizer(var18, "_"); + if (var9.countTokens() < 2) { + return -6; + } + + var19 = var9.nextToken(); + if (!this.checkNumber(var19)) { + return -6; + } + + int var29 = Integer.parseInt(var19); + var19 = var9.nextToken(); + if (!this.checkNumber(var19)) { + return -6; + } + + int var30 = Integer.parseInt(var19); + var18 = "" + var29 + "_" + var30 + "_"; + if (var32.length < var8 + 32) { + return -6; + } + + if (var32.length > var8 + 32) { + byte[] var33 = clientKey; + var21 = MessageDigest.getInstance("SHA-256"); + + for(var28 = 0; var28 < var29; ++var28) { + var21.reset(); + var21.update(var33); + var14 = var21.digest(); + var33 = var14; + } + + byte[] var36 = new byte[16]; + byte[] var37 = new byte[16]; + + for(var28 = 0; var28 < 16; ++var28) { + var36[var28] = var33[var28]; + var37[var28] = var33[16 + var28]; + } + + int var27 = var8; + + for(var28 = 0; var28 < 32; ++var28) { + var14[var28] = var32[var27 + var28]; + } + + var27 += 32; + byte[] var34 = new byte[var32.length - var27]; + + for(var28 = 0; var28 < var32.length - var27; ++var28) { + var34[var28] = var32[var27 + var28]; + } + + SecretKeySpec var24 = new SecretKeySpec(var36, "AES"); + Cipher var25 = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE"); + var25.init(2, var24, new IvParameterSpec(var37)); + var32 = var25.doFinal(var34); + var20 = new String(var32, "euc-kr"); + var21.reset(); + var21.update(var20.getBytes()); + byte[] var35 = var21.digest(); + + for(var28 = 0; var28 < 32; ++var28) { + if (var35[var28] != var14[var28]) { + return -5; + } + } + + var11 = var20.split("\\^", 7); + var19 = var11[1]; + if (this.checkNumber(var19)) { + var3 = Integer.parseInt(var19); + if (var11.length >= 3) { + if (var2.equals("CI1")) { + this.m_strConnInfo1 = var11[2]; + } else if (var2.equals("CI2")) { + this.m_strConnInfo2 = var11[2]; + } else if (var2.equals("ALL")) { + this.m_strDupInfo = var11[2]; + this.m_strConnInfo1 = var11[3]; + } else { + this.m_strDupInfo = var11[2]; + } + + if (var11.length >= 7) { + if (var2.equals("ALL")) { + this.m_strAGE = var11[4]; + this.m_strSEX = var11[5]; + this.m_strBirthDate = var11[6]; + this.m_strNationalInfo = var11[7]; + } else { + this.m_strAGE = var11[3]; + this.m_strSEX = var11[4]; + this.m_strBirthDate = var11[5]; + this.m_strNationalInfo = var11[6]; + } + } + } + } else { + var3 = -6; + } + } + } catch (Exception var26) { + var3 = -4; + } + + return var3; + } + + private int fnEncode(String var1, String var2) { + this.m_strEncodeData = ""; + byte var3 = 0; + boolean var4 = false; + boolean var5 = false; + int var6 = (int)(Math.random() * 33.0D) + 1; + Date var7 = new Date(System.currentTimeMillis()); + SimpleDateFormat var8 = new SimpleDateFormat("yyMMddHHmmss"); + String var9 = var8.format(var7); + StringBuffer var10 = new StringBuffer(); + String var11 = ""; + Object var12 = null; + Object var13 = null; + Object var14 = null; + Object var15 = null; + Object var16 = null; + MessageDigest var17 = null; + Object var18 = null; + Object var19 = null; + + try { + byte[] var27 = clientKey; + var17 = MessageDigest.getInstance("SHA-256"); + + int var23; + byte[] var26; + for(var23 = 0; var23 < var6; ++var23) { + var17.reset(); + var17.update(var27); + var26 = var17.digest(); + var27 = var26; + } + + byte[] var31 = new byte[16]; + byte[] var32 = new byte[16]; + + for(var23 = 0; var23 < 16; ++var23) { + var31[var23] = var27[var23]; + var32[var23] = var27[16 + var23]; + } + + var10.append(var9); + var10.append("^"); + var10.append(var1); + var10.append("^"); + var10.append(var2); + SecretKeySpec var20 = new SecretKeySpec(var31, "AES"); + Cipher var21 = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE"); + var21.init(1, var20, new IvParameterSpec(var32)); + byte[] var28 = var21.doFinal(var10.toString().getBytes()); + int var24 = var28.length; + if (var24 <= 0) { + return -2; + } + + var17.reset(); + var17.update(var10.toString().getBytes()); + var26 = var17.digest(); + var11 = "" + var6 + "_" + var10.toString().getBytes().length + "_"; + byte[] var30 = var11.getBytes(); + var6 = var11.length() + 32 + var24; + byte[] var29 = new byte[var6]; + byte var25 = 0; + + for(var23 = 0; var23 < var11.length(); ++var23) { + var29[var25 + var23] = var30[var23]; + } + + var6 = var25 + var11.length(); + + for(var23 = 0; var23 < 32; ++var23) { + var29[var6 + var23] = var26[var23]; + } + + var6 += 32; + + for(var23 = 0; var23 < var24; ++var23) { + var29[var6 + var23] = var28[var23]; + } + + this.m_strEncodeData = this.base64Encode(var29); + } catch (Exception var22) { + var22.printStackTrace(); + var3 = -2; + } + + return var3; + } + + private boolean checkNumber(String var1) { + int var2 = var1.length(); + boolean var3 = false; + + for(int var4 = 0; var4 < var2; ++var4) { + char var5 = var1.charAt(var4); + if (var5 < '0' || var5 > '9') { + return false; + } + } + + return true; + } + + private int getRandom() { + return Math.abs((new Long(System.currentTimeMillis())).intValue()); + } + + private int fnHTTPConn(String var1, String var2, String var3, String var4, boolean var5) { + this.m_strReceiveData = ""; + boolean var6 = false; + Socket var7 = null; + InputStream var8 = null; + PrintWriter var9 = null; + + byte var69; + try { + int var10 = this.getRandom(); + //String var11 = var5 ? "http://203.234.219.72/snc2vno_interop.asp" : "http://203.234.219.72/cvm_interop.asp"; + String var11 = var5 ? "http://175.193.201.51/snc2vno_interop.asp" : "http://175.193.201.51/cvm_interop.asp"; + URL var12 = new URL(var11.toString()); + String var13 = var12.getHost(); + int var14 = 81 + var10 % 5; + //var14 = 80; + String var15 = var12.getFile(); + var7 = new Socket(); + var7.connect(new InetSocketAddress(var13, 80), 3000); + var7.setSoTimeout(3000); + var9 = new PrintWriter(var7.getOutputStream(), false); + var8 = var7.getInputStream(); + StringBuffer var16 = new StringBuffer(); + var16.append(URLEncoder.encode("p1", "euc-kr") + "=" + URLEncoder.encode(var1, "euc-kr") + "&"); + var16.append(URLEncoder.encode("p2", "euc-kr") + "=" + URLEncoder.encode(var4, "euc-kr") + "&"); + var16.append(URLEncoder.encode("p3", "euc-kr") + "=" + URLEncoder.encode(var2, "euc-kr") + "&"); + var16.append(URLEncoder.encode("p4", "euc-kr") + "=" + URLEncoder.encode(var3, "euc-kr")); + int var17 = var16.toString().length(); + StringBuffer var18 = new StringBuffer(); + var18.append("POST " + var15 + " HTTP/1.1\n"); + var18.append("Accept: */*\n"); + var18.append("Connection: close\n"); + //var18.append("Host: wtname.creditbank.co.kr\n"); + var18.append("Host: " + var13 + ":" + var14 + "\n"); + var18.append("Content-Type: application/x-www-form-urlencoded\n"); + var18.append("Content-Length: " + var17 + "\r\n"); + var18.append("\r\n"); + var18.append(var16.toString()); + var9.print(var18.toString()); + var9.flush(); + var18.setLength(0); + int var19 = 0; + + boolean var20; + for(var20 = true; var20 && var19 != -1; var20 = (var19 = var8.read()) == 73 ? ((var19 = var8.read()) == 78 ? ((var19 = var8.read()) == 84 ? ((var19 = var8.read()) == 69 ? ((var19 = var8.read()) == 82 ? ((var19 = var8.read()) == 79 ? ((var19 = var8.read()) == 80 ? ((var19 = var8.read()) == 95 ? ((var19 = var8.read()) == 82 ? ((var19 = var8.read()) == 84 ? ((var19 = var8.read()) == 78 ? (var19 = var8.read()) != 61 : true) : true) : true) : true) : true) : true) : true) : true) : true) : true) : true) { + ; + } + + if (var20 && var19 == -1) { + var69 = -21; + this.m_strReceiveData = ""; + } else { + byte[] var21 = new byte[1024]; + var8.read(var21); + this.m_strReceiveData = (new String(var21)).toString().trim(); + var69 = 0; + } + + var9.close(); + var8.close(); + var7.close(); + var7 = null; + var8 = null; + var9 = null; + } catch (MalformedURLException var65) { + if (var9 != null) { + try { + var9.close(); + var9 = null; + } catch (Exception var64) { + ; + } + } + + if (var8 != null) { + try { + var8.close(); + var8 = null; + } catch (Exception var63) { + ; + } + } + + if (var7 != null) { + try { + var7.close(); + var7 = null; + } catch (Exception var62) { + ; + } + } + + var69 = -31; + } catch (NoRouteToHostException var66) { + if (var9 != null) { + try { + var9.close(); + var9 = null; + } catch (Exception var61) { + ; + } + } + + if (var8 != null) { + try { + var8.close(); + var8 = null; + } catch (Exception var60) { + ; + } + } + + if (var7 != null) { + try { + var7.close(); + var7 = null; + } catch (Exception var59) { + ; + } + } + + var69 = -31; + } catch (Exception var67) { + var67.printStackTrace(); + if (var9 != null) { + try { + var9.close(); + var9 = null; + } catch (Exception var58) { + ; + } + } + + if (var8 != null) { + try { + var8.close(); + var8 = null; + } catch (Exception var57) { + ; + } + } + + if (var7 != null) { + try { + var7.close(); + var7 = null; + } catch (Exception var56) { + ; + } + } + + var69 = -34; + } finally { + if (var9 != null) { + try { + var9.close(); + var9 = null; + } catch (Exception var55) { + ; + } + } + + if (var8 != null) { + try { + var8.close(); + var8 = null; + } catch (Exception var54) { + ; + } + } + + if (var7 != null) { + try { + var7.close(); + var7 = null; + } catch (Exception var53) { + ; + } + } + + } + + return var69; + } + + public static String[] split(String var0, String var1) { + int var2 = 0; + int var3 = 0; + int var4 = 0; + boolean var5 = false; + + do { + ++var2; + ++var3; + var3 = var0.indexOf(var1, var3); + } while(var3 != -1); + + String[] var6 = new String[var2]; + + for(var3 = 0; var4 < var2; ++var4) { + int var7 = var0.indexOf(var1, var3); + if (var7 == -1) { + var6[var4] = var0.substring(var3).trim(); + } else { + var6[var4] = var0.substring(var3, var7).trim(); + } + + var3 = var7 + 1; + } + + return var6; + } + + static { + byte[] var0 = new byte[]{65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47}; + mBase64EncMap = var0; + mBase64DecMap = new byte[128]; + + for(int var1 = 0; var1 < mBase64EncMap.length; ++var1) { + mBase64DecMap[mBase64EncMap[var1]] = (byte)var1; + } + + clientKey = new byte[]{-126, 120, -11, -107, 16, -63, 66, 127, -31, -109, -122, 67, -97, 85, -85, -60}; + } +} diff --git a/src/main/java/gtpa/brs/user/dto/TempBankInfo.java b/src/main/java/gtpa/brs/user/dto/TempBankInfo.java new file mode 100644 index 0000000..6cb5bae --- /dev/null +++ b/src/main/java/gtpa/brs/user/dto/TempBankInfo.java @@ -0,0 +1,73 @@ +package gtpa.brs.user.dto; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 12/04/2019 + * TIME : 4:04 PM + * Project : BRSPW + * Class : TempCarInfo + * Desc : + * ///////////////////////////////////////////////////// + */ +public class TempBankInfo { + //결제수단 + String payOrd; + String payType; + String payComp; + String payName; + String payKey; + + public String getPayOrd() { + return payOrd; + } + + public void setPayOrd(String payOrd) { + this.payOrd = payOrd; + } + + public String getPayType() { + return payType; + } + + public void setPayType(String payType) { + this.payType = payType; + } + + public String getPayComp() { + return payComp; + } + + public void setPayComp(String payComp) { + this.payComp = payComp; + } + + public String getPayName() { + return payName; + } + + public void setPayName(String payName) { + this.payName = payName; + } + + public String getPayKey() { + return payKey; + } + + public void setPayKey(String payKey) { + this.payKey = payKey; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("TempPayInfo{"); + sb.append("payOrd='").append(payOrd).append('\''); + sb.append(", payType='").append(payType).append('\''); + sb.append(", payComp='").append(payComp).append('\''); + sb.append(", payName='").append(payName).append('\''); + sb.append(", payKey='").append(payKey).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/gtpa/brs/user/dto/TempCarInfo.java b/src/main/java/gtpa/brs/user/dto/TempCarInfo.java new file mode 100644 index 0000000..12de12b --- /dev/null +++ b/src/main/java/gtpa/brs/user/dto/TempCarInfo.java @@ -0,0 +1,123 @@ +package gtpa.brs.user.dto; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 12/04/2019 + * TIME : 4:04 PM + * Project : BRSPW + * Class : TempCarInfo + * Desc : + * ///////////////////////////////////////////////////// + */ +public class TempCarInfo { + //차량정보 + String mberNo = ""; + String vhcleManageNo = ""; + String vhclePosesnTy= ""; + String vhcleNo= ""; + String vhcleOwnerCi= ""; + String useBeginDt= ""; + String useEndDt= ""; + String vhcleSttusTy= ""; + String setleAgreTy= ""; + String penaltyAgreTy= ""; + + public String getMberNo() { + return mberNo; + } + + public void setMberNo(String mberNo) { + this.mberNo = mberNo; + } + + public String getVhcleManageNo() { + return vhcleManageNo; + } + + public void setVhcleManageNo(String vhcleManageNo) { + this.vhcleManageNo = vhcleManageNo; + } + + public String getVhclePosesnTy() { + return vhclePosesnTy; + } + + public void setVhclePosesnTy(String vhclePosesnTy) { + this.vhclePosesnTy = vhclePosesnTy; + } + + public String getVhcleNo() { + return vhcleNo; + } + + public void setVhcleNo(String vhcleNo) { + this.vhcleNo = vhcleNo; + } + + public String getVhcleOwnerCi() { + return vhcleOwnerCi; + } + + public void setVhcleOwnerCi(String vhcleOwnerCi) { + this.vhcleOwnerCi = vhcleOwnerCi; + } + + public String getUseBeginDt() { + return useBeginDt; + } + + public void setUseBeginDt(String useBeginDt) { + this.useBeginDt = useBeginDt; + } + + public String getUseEndDt() { + return useEndDt; + } + + public void setUseEndDt(String useEndDt) { + this.useEndDt = useEndDt; + } + + public String getVhcleSttusTy() { + return vhcleSttusTy; + } + + public void setVhcleSttusTy(String vhcleSttusTy) { + this.vhcleSttusTy = vhcleSttusTy; + } + + public String getSetleAgreTy() { + return setleAgreTy; + } + + public void setSetleAgreTy(String setleAgreTy) { + this.setleAgreTy = setleAgreTy; + } + + public String getPenaltyAgreTy() { + return penaltyAgreTy; + } + + public void setPenaltyAgreTy(String penaltyAgreTy) { + this.penaltyAgreTy = penaltyAgreTy; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("TempCarInfo{"); + sb.append("mberNo='").append(mberNo).append('\''); + sb.append(", vhcleManageNo='").append(vhcleManageNo).append('\''); + sb.append(", vhclePosesnTy='").append(vhclePosesnTy).append('\''); + sb.append(", vhcleNo='").append(vhcleNo).append('\''); + sb.append(", vhcleOwnerCi='").append(vhcleOwnerCi).append('\''); + sb.append(", useBeginDt='").append(useBeginDt).append('\''); + sb.append(", useEndDt='").append(useEndDt).append('\''); + sb.append(", vhcleSttusTy='").append(vhcleSttusTy).append('\''); + sb.append(", setleAgreTy='").append(setleAgreTy).append('\''); + sb.append(", penaltyAgreTy='").append(penaltyAgreTy).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/gtpa/brs/user/dto/TempCreditInfo.java b/src/main/java/gtpa/brs/user/dto/TempCreditInfo.java new file mode 100644 index 0000000..e0da701 --- /dev/null +++ b/src/main/java/gtpa/brs/user/dto/TempCreditInfo.java @@ -0,0 +1,73 @@ +package gtpa.brs.user.dto; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 12/04/2019 + * TIME : 4:04 PM + * Project : BRSPW + * Class : TempCarInfo + * Desc : + * ///////////////////////////////////////////////////// + */ +public class TempCreditInfo { + //결제수단 + String payOrd; + String payType; + String payComp; + String payName; + String payKey; + + public String getPayOrd() { + return payOrd; + } + + public void setPayOrd(String payOrd) { + this.payOrd = payOrd; + } + + public String getPayType() { + return payType; + } + + public void setPayType(String payType) { + this.payType = payType; + } + + public String getPayComp() { + return payComp; + } + + public void setPayComp(String payComp) { + this.payComp = payComp; + } + + public String getPayName() { + return payName; + } + + public void setPayName(String payName) { + this.payName = payName; + } + + public String getPayKey() { + return payKey; + } + + public void setPayKey(String payKey) { + this.payKey = payKey; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("TempPayInfo{"); + sb.append("payOrd='").append(payOrd).append('\''); + sb.append(", payType='").append(payType).append('\''); + sb.append(", payComp='").append(payComp).append('\''); + sb.append(", payName='").append(payName).append('\''); + sb.append(", payKey='").append(payKey).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/gtpa/brs/user/dto/TempPayInfo.java b/src/main/java/gtpa/brs/user/dto/TempPayInfo.java new file mode 100644 index 0000000..8db4f1f --- /dev/null +++ b/src/main/java/gtpa/brs/user/dto/TempPayInfo.java @@ -0,0 +1,73 @@ +package gtpa.brs.user.dto; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 12/04/2019 + * TIME : 4:04 PM + * Project : BRSPW + * Class : TempCarInfo + * Desc : + * ///////////////////////////////////////////////////// + */ +public class TempPayInfo { + //결제수단 + String payOrd; + String payType; + String payComp; + String payName; + String payKey; + + public String getPayOrd() { + return payOrd; + } + + public void setPayOrd(String payOrd) { + this.payOrd = payOrd; + } + + public String getPayType() { + return payType; + } + + public void setPayType(String payType) { + this.payType = payType; + } + + public String getPayComp() { + return payComp; + } + + public void setPayComp(String payComp) { + this.payComp = payComp; + } + + public String getPayName() { + return payName; + } + + public void setPayName(String payName) { + this.payName = payName; + } + + public String getPayKey() { + return payKey; + } + + public void setPayKey(String payKey) { + this.payKey = payKey; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("TempPayInfo{"); + sb.append("payOrd='").append(payOrd).append('\''); + sb.append(", payType='").append(payType).append('\''); + sb.append(", payComp='").append(payComp).append('\''); + sb.append(", payName='").append(payName).append('\''); + sb.append(", payKey='").append(payKey).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/gtpa/brs/user/dto/TempUserSessionInfoDTO.java b/src/main/java/gtpa/brs/user/dto/TempUserSessionInfoDTO.java new file mode 100644 index 0000000..0b71f4e --- /dev/null +++ b/src/main/java/gtpa/brs/user/dto/TempUserSessionInfoDTO.java @@ -0,0 +1,515 @@ +package gtpa.brs.user.dto; + +import gtpa.brs.util.SHA256Util; +import org.springframework.context.annotation.Scope; +import org.springframework.context.annotation.ScopedProxyMode; +import org.springframework.stereotype.Component; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 12/04/2019 + * TIME : 10:25 AM + * Project : BRSPW + * Class : TempUserSessionDTO + * Desc : + * ///////////////////////////////////////////////////// + */ +@Component +@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) +public class TempUserSessionInfoDTO implements Serializable { + + Date makeTime; + // 회원정보 + public String mberNo; + public String mberId; + public String mberty; + public String mberPw; + public String mberNm; + public String mberCi; + public String mberMobileNo; + public String mberBirthDt; + public String infoProvdAgreAt; + public String tunnelFeeAgreAt; + public String parkFeeAgreAt; + public String jmpTunnelFeeAgreAt; + public String ssmTunnelFeeAgreAt; + public String tunnelPenaltyAgreAt; + public String penaltyAgreAt; + public String trnsitDscntAt; + public String mnychRdcxptAt; + public String childrenCnt; + public String childrenBirthday; + public String serviceResult; + public String mnychRdcxptVhcle; + public String athzerAt; + public String resName; + public String relCd; + public String authoriPsnYn; + public String subjKbnCd; + public String wondClassCd; + public String inquRsltCd; + + // 사업자정보 + public String entrprsNm ; + public String bsnmRegistNo; + public String cprRegistNo; + public String chargerNm; + public String chargerCi; + public String chargerMobileNo; + + public Map tempUserInfo; + public List tempCarInfos; + public List tempCreditInfos; + public List tempBankInfos; + public Map mnychRdcxpt; + + //약관동의 + public String termsCheck1; + public String termsCheck2; + public String termsCheck3; + public String termsCheck4; + public String termsCheck5; + + //문자인증키 + public String phoneNum; + public String smsKey; + + public TempUserSessionInfoDTO() { + this.makeTime = new Date(); + } + + public long getMakeTime() { + return makeTime.getTime(); + } + + public Map getTempUserInfo() { + return tempUserInfo; + } + + public void setTempUserInfo(Map tempUserInfo) { + this.tempUserInfo = tempUserInfo; + } + + public Map getMnychRdcxpt() { + return mnychRdcxpt; + } + + public void setMnychRdcxpt(Map mnychRdcxpt) { + this.mnychRdcxpt = mnychRdcxpt; + } + + public String getMberNo() { + return mberNo; + } + + public void setMberNo(String mberNo) { + this.mberNo = mberNo; + } + + public String getMberId() { + return mberId; + } + + public void setMberId(String mberId) { + this.mberId = mberId; + } + + public String getMberty() { + return mberty; + } + + public void setMberty(String mberty) { + this.mberty = mberty; + } + + public String getMberPw() { + return mberPw; + } + + public void setMberPw(String mberPw) { + this.mberPw = SHA256Util.encryptSHA256(mberPw); + } + + public String getMberNm() { + return mberNm; + } + + public void setMberNm(String mberNm) { + this.mberNm = mberNm; + } + + public String getMberCi() { + return mberCi; + } + + public void setMberCi(String mberCi) { + this.mberCi = mberCi; + } + + public String getMberMobileNo() { + return mberMobileNo; + } + + public void setMberMobileNo(String mberMobileNo) { + this.mberMobileNo = mberMobileNo; + } + + public String getMberBirthDt() { + return mberBirthDt; + } + + public void setMberBirthDt(String mberBirthDt) { + this.mberBirthDt = mberBirthDt; + } + + public String getTrnsitDscntAt() { + return trnsitDscntAt; + } + + public void setTrnsitDscntAt(String trnsitDscntAt) { + this.trnsitDscntAt = trnsitDscntAt; + } + + public String getMnychRdcxptAt() { + return mnychRdcxptAt; + } + + public void setMnychRdcxptAt(String mnychRdcxptAt) { + this.mnychRdcxptAt = mnychRdcxptAt; + } + + public String getChildrenCnt() { + return childrenCnt; + } + + public void setChildrenCnt(String childrenCnt) { + this.childrenCnt = childrenCnt; + } + + public String getChildrenBirthday() { + return childrenBirthday; + } + + public void setChildrenBirthday(String childrenBirthday) { + this.childrenBirthday = childrenBirthday; + } + + public String getServiceResult() { + return serviceResult; + } + + public void setServiceResult(String serviceResult) { + this.serviceResult = serviceResult; + } + + public String getMnychRdcxptVhcle() { + return mnychRdcxptVhcle; + } + + public void setMnychRdcxptVhcle(String mnychRdcxptVhcle) { + this.mnychRdcxptVhcle = mnychRdcxptVhcle; + } + + public String getAthzerAt() { + return athzerAt; + } + + public void setAthzerAt(String athzerAt) { + this.athzerAt = athzerAt; + } + + public String getResName() { + return resName; + } + + public void setResName(String resName) { + this.resName = resName; + } + + public String getRelCd() { + return relCd; + } + + public void setRelCd(String relCd) { + this.relCd = relCd; + } + + public String getAuthoriPsnYn() { + return authoriPsnYn; + } + + public void setAuthoriPsnYn(String authoriPsnYn) { + this.authoriPsnYn = authoriPsnYn; + } + + public String getSubjKbnCd() { + return subjKbnCd; + } + + public void setSubjKbnCd(String subjKbnCd) { + this.subjKbnCd = subjKbnCd; + } + + public String getWondClassCd() { + return wondClassCd; + } + + public void setWondClassCd(String wondClassCd) { + this.wondClassCd = wondClassCd; + } + + public String getInquRsltCd() { + return inquRsltCd; + } + + public void setInquRsltCd(String inquRsltCd) { + this.inquRsltCd = inquRsltCd; + } + + public String getEntrprsNm() { + return entrprsNm; + } + + public void setEntrprsNm(String entrprsNm) { + this.entrprsNm = entrprsNm; + } + + public String getBsnmRegistNo() { + return bsnmRegistNo; + } + + public void setBsnmRegistNo(String bsnmRegistNo) { + this.bsnmRegistNo = bsnmRegistNo; + } + + public String getCprRegistNo() { + return cprRegistNo; + } + + public void setCprRegistNo(String cprRegistNo) { + this.cprRegistNo = cprRegistNo; + } + + public String getChargerNm() { + return chargerNm; + } + + public void setChargerNm(String chargerNm) { + this.chargerNm = chargerNm; + } + + public String getChargerCi() { + return chargerCi; + } + + public void setChargerCi(String chargerCi) { + this.chargerCi = chargerCi; + } + + public String getChargerMobileNo() { + return chargerMobileNo; + } + + public void setChargerMobileNo(String chargerMobileNo) { + this.chargerMobileNo = chargerMobileNo; + } + + public String getInfoProvdAgreAt() { + return infoProvdAgreAt; + } + + public void setInfoProvdAgreAt(String infoProvdAgreAt) { + this.infoProvdAgreAt = infoProvdAgreAt; + } + + public String getTunnelFeeAgreAt() { + return tunnelFeeAgreAt; + } + + public void setTunnelFeeAgreAt(String tunnelFeeAgreAt) { + this.tunnelFeeAgreAt = tunnelFeeAgreAt; + } + + public String getParkFeeAgreAt() { + return parkFeeAgreAt; + } + + public void setParkFeeAgreAt(String parkFeeAgreAt) { + this.parkFeeAgreAt = parkFeeAgreAt; + } + + public String getJmpTunnelFeeAgreAt() { + return jmpTunnelFeeAgreAt; + } + + public void setJmpTunnelFeeAgreAt(String jmpTunnelFeeAgreAt) { + this.jmpTunnelFeeAgreAt = jmpTunnelFeeAgreAt; + } + + public String getTunnelPenaltyAgreAt() { + return tunnelPenaltyAgreAt; + } + + public void setTunnelPenaltyAgreAt(String tunnelPenaltyAgreAt) { + this.tunnelPenaltyAgreAt = tunnelPenaltyAgreAt; + } + + public String getPenaltyAgreAt() { + return penaltyAgreAt; + } + + public void setPenaltyAgreAt(String penaltyAgreAt) { + this.penaltyAgreAt = penaltyAgreAt; + } + + public String getSsmTunnelFeeAgreAt() { + return ssmTunnelFeeAgreAt; + } + + public void setSsmTunnelFeeAgreAt(String ssmTunnelFeeAgreAt) { + this.ssmTunnelFeeAgreAt = ssmTunnelFeeAgreAt; + } + + public List getTempCarInfos() { + return tempCarInfos; + } + + public void setTempCarInfos(List tempCarInfos) { + for (Map carInfo: tempCarInfos) { + carInfo.put("mberNo",this.mberNo); + } + this.tempCarInfos = tempCarInfos; + } + + public List getTempCreditInfos() { + return tempCreditInfos; + } + + public void setTempCreditInfos(List tempCreditInfos) { + this.tempCreditInfos = tempCreditInfos; + } + + public List getTempBankInfos() { + return tempBankInfos; + } + + public void setTempBankInfos(List tempBankInfos) { + this.tempBankInfos = tempBankInfos; + } + + public String getTermsCheck1() { + return termsCheck1; + } + + public void setTermsCheck1(String termsCheck1) { + this.termsCheck1 = termsCheck1; + } + + public String getTermsCheck2() { + return termsCheck2; + } + + public void setTermsCheck2(String termsCheck2) { + this.termsCheck2 = termsCheck2; + } + + public String getTermsCheck3() { + return termsCheck3; + } + + public void setTermsCheck3(String termsCheck3) { + this.termsCheck3 = termsCheck3; + } + + public String getTermsCheck4() { + return termsCheck4; + } + + public void setTermsCheck4(String termsCheck4) { + this.termsCheck4 = termsCheck4; + } + + public String getTermsCheck5() { + return termsCheck5; + } + + public void setTermsCheck5(String termsCheck5) { + this.termsCheck5 = termsCheck5; + } + + public String getPhoneNum() { + return phoneNum; + } + + public void setPhoneNum(String phoneNum) { + this.phoneNum = phoneNum; + } + + public String getSmsKey() { + return smsKey; + } + + public void setSmsKey(String smsKey) { + this.smsKey = smsKey; + } + + @Override + public String toString() { + return "TempUserSessionInfoDTO{" + + "makeTime=" + makeTime + + ", mberNo='" + mberNo + '\'' + + ", mberId='" + mberId + '\'' + + ", mberty='" + mberty + '\'' + + ", mberPw='" + mberPw + '\'' + + ", mberNm='" + mberNm + '\'' + + ", mberCi='" + mberCi + '\'' + + ", mberMobileNo='" + mberMobileNo + '\'' + + ", mberBirthDt='" + mberBirthDt + '\'' + + ", infoProvdAgreAt='" + infoProvdAgreAt + '\'' + + ", tunnelFeeAgreAt='" + tunnelFeeAgreAt + '\'' + + ", parkFeeAgreAt='" + parkFeeAgreAt + '\'' + + ", jmpTunnelFeeAgreAt='" + jmpTunnelFeeAgreAt + '\'' + + ", ssmTunnelFeeAgreAt='" + ssmTunnelFeeAgreAt + '\'' + + ", tunnelPenaltyAgreAt='" + tunnelPenaltyAgreAt + '\'' + + ", penaltyAgreAt='" + penaltyAgreAt + '\'' + + ", trnsitDscntAt='" + trnsitDscntAt + '\'' + + ", mnychRdcxptAt='" + mnychRdcxptAt + '\'' + + ", childrenCnt='" + childrenCnt + '\'' + + ", childrenBirthday='" + childrenBirthday + '\'' + + ", serviceResult='" + serviceResult + '\'' + + ", mnychRdcxptVhcle='" + mnychRdcxptVhcle + '\'' + + ", athzerAt='" + athzerAt + '\'' + + ", resName='" + resName + '\'' + + ", relCd='" + relCd + '\'' + + ", authoriPsnYn='" + authoriPsnYn + '\'' + + ", subjKbnCd='" + subjKbnCd + '\'' + + ", wondClassCd='" + wondClassCd + '\'' + + ", inquRsltCd='" + inquRsltCd + '\'' + + ", entrprsNm='" + entrprsNm + '\'' + + ", bsnmRegistNo='" + bsnmRegistNo + '\'' + + ", cprRegistNo='" + cprRegistNo + '\'' + + ", chargerNm='" + chargerNm + '\'' + + ", chargerCi='" + chargerCi + '\'' + + ", chargerMobileNo='" + chargerMobileNo + '\'' + + ", tempUserInfo=" + tempUserInfo + + ", tempCarInfos=" + tempCarInfos + + ", mnychRdcxpt=" + mnychRdcxpt + + ", tempCreditInfos=" + tempCreditInfos + + ", tempBankInfos=" + tempBankInfos + + ", termsCheck1='" + termsCheck1 + '\'' + + ", termsCheck2='" + termsCheck2 + '\'' + + ", termsCheck3='" + termsCheck3 + '\'' + + ", termsCheck4='" + termsCheck4 + '\'' + + ", termsCheck5='" + termsCheck5 + '\'' + + ", phoneNum='" + phoneNum + '\'' + + ", smsKey='" + smsKey + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/user/dto/UserInfo.java b/src/main/java/gtpa/brs/user/dto/UserInfo.java new file mode 100644 index 0000000..88b28f6 --- /dev/null +++ b/src/main/java/gtpa/brs/user/dto/UserInfo.java @@ -0,0 +1,302 @@ +package gtpa.brs.user.dto; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Scope; +import org.springframework.context.annotation.ScopedProxyMode; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) +public class UserInfo implements Serializable { + + // MBER_No + private String userNo; + // MBER_ID + private String userId; + + // MBER_TY + private String userType; + + // MBER_NM + private String userName; + + private String userCi; + + // 시스템 관리자 여부 + private boolean isAdmin; + + private boolean isTempMber; + + // MAIN_LAYOUT_PAGE_CODE - 메인화면 layout + private String mainLayoutCode; + + // FAVORITE_STORAGE - 즐겨찾기 저장 위치 + private String favoriteStorage; + + private Date makeTime; + + public UserInfo() { + this.makeTime = new Date(); + } + + public long getMakeTime() { + return makeTime.getTime(); + } + + @Value("${main.setting.default.layout}") + private String defaultMainLayoutCode; + + @Value("${main.setting.default.favoriteLocation}") + private String defaultFavoriteStorage; + + public String getUserNo() { + return userNo; + } + + public void setUserNo(String userNo) { + this.userNo = userNo; + } + + public String getUserId() { + return userId; + } + + private void setUserId(String userId) { + this.userId = userId; + } + + public String getUserType() { + return userType; + } + + private void setUserType(String userType) { + this.userType = userType; + } + + public String getUserName() { + return userName; + } + + private void setUserName(String userName) { + this.userName = userName; + } + + public String getUserCi() { + return userCi; + } + + public void setUserCi(String userCi) { + this.userCi = userCi; + } + + public boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } + + public boolean isTempMber() { + return isTempMber; + } + + public void setIsTempMber(boolean tempMber) { + isTempMber = tempMber; + } + + public String getMainLayoutCode() { + return mainLayoutCode; + } + + public void setMainLayoutCode(String mainLayoutCode) { + if (mainLayoutCode == null || mainLayoutCode.equals("")) { + this.mainLayoutCode = this.defaultMainLayoutCode; + } else { + this.mainLayoutCode = mainLayoutCode; + } + } + + public String getFavoriteStorage() { + return favoriteStorage; + } + + public void setFavoriteStorage(String favoriteStorage) { + if (favoriteStorage == null || favoriteStorage.equals("")) { + this.mainLayoutCode = this.defaultFavoriteStorage; + } else { + this.favoriteStorage = favoriteStorage; + } + } + + public String getDefaultMainLayoutCode() { + return this.defaultMainLayoutCode; + } + + public String getDefaultFavoriteStorage() { + return this.defaultFavoriteStorage; + } + + public Map getUserInfo() { + Map userInfo = new HashMap(); + userInfo.put("MBER_NO", this.getUserNo()); + userInfo.put("MBER_ID", this.getUserId()); + userInfo.put("MBER_TY", this.getUserType()); + userInfo.put("MBER_NM", this.getUserName()); + userInfo.put("MBER_CI", this.getUserCi()); + userInfo.put("MAIN_LAYOUT", this.getMainLayoutCode()); + userInfo.put("FV_STORAGE", this.getFavoriteStorage()); + return userInfo; + } + + public Map getDeUserInfo() { + Map userInfo = new HashMap(); + userInfo.put("MBER_NO", this.getUserNo()); + userInfo.put("MBER_ID", this.getUserId()); + userInfo.put("MBER_TY", this.getUserType()); + userInfo.put("MBER_NM", this.getUserName()); + userInfo.put("MBER_CI", this.getUserCi()); + userInfo.put("MAIN_LAYOUT", this.getMainLayoutCode()); + userInfo.put("FV_STORAGE", this.getFavoriteStorage()); + return userInfo; + } + + public Map getUserInfoWithoutUserID() { + Map userInfo = new HashMap(); + userInfo.put("MBER_NM", this.getUserName()); + userInfo.put("MAIN_LAYOUT", this.getMainLayoutCode()); + userInfo.put("FV_STORAGE", this.getFavoriteStorage()); + return userInfo; + } + + /** + * Map객체에 사원번호만 담아서 return한다. + * + * @date 2016.08.22 + * @returns MBER_ID 담긴 map + * @author InswaveSystems + * @example 샘플 코드 + * @todo 추가해야 할 작업 + */ + public Map getUserInfoByBase() { + Map userInfo = new HashMap(); + userInfo.put("MBER_ID", this.getUserId()); + userInfo.put("MBER_NO", this.getUserNo()); + return userInfo; + } + + /** + * session 값을 참조하여 dataSetting + * + * @param session 사용자 정보가 담긴 session객체 + * @date 2016.08.19 + * @author InswaveSystems + * @example 샘플 코드 + * @todo 추가해야 할 작업 + */ + public void setUserInfo(HttpSession session) { + this.setUserNo((String) session.getAttribute("MBER_NO")); + this.setUserId((String) session.getAttribute("MBER_ID")); + this.setUserType((String) session.getAttribute("MBER_TY")); + this.setUserName((String) session.getAttribute("MBER_NM")); + this.setUserCi((String) session.getAttribute("MBER_CI")); + this.setIsAdmin((boolean) session.getAttribute("IS_ADMIN")); + this.setIsTempMber((boolean) session.getAttribute("IS_TEMPMBER")); + this.setMainLayoutCode((String) session.getAttribute("MAIN_LAYOUT_PAGE_CODE")); + } + + /** + * session 값을 참조하여 dataSetting + * + * @param session 사용자 정보가 담긴 session객체 + * @date 2016. 8. 19. + * @author InswaveSystems + * @example 샘플 코드 + * @todo 추가해야 할 작업 + */ + public void updateMainLayoutCode(HttpSession session, String mainLayoutPageCode) { + this.setMainLayoutCode(mainLayoutPageCode); + session.setAttribute("MAIN_LAYOUT_PAGE_CODE", this.getMainLayoutCode()); + } + + /** + * Map값을 참조하여 dataSetting + * + * @param memberInfo 사용자 정보가 담긴 map객체 + * @date 2016. 8. 19. + * @author InswaveSystems + * @example 샘플 코드 + * @todo 추가해야 할 작업 + */ + public void setUserInfo(Map memberInfo) { + this.setUserCi((String) memberInfo.get("MBER_CI")); + this.setUserNo((String) memberInfo.get("MBER_NO")); + this.setUserId((String) memberInfo.get("MBER_ID")); + this.setUserType((String) memberInfo.get("MBER_TY")); + this.setUserName((String) memberInfo.get("MBER_NM")); + this.setUserCi((String) memberInfo.get("MBER_CI")); + this.setMainLayoutCode((String) memberInfo.get("MAIN_LAYOUT_PAGE_CODE")); + this.setFavoriteStorage((String) memberInfo.get("FAVORITE_STORAGE")); + } + + /** + * data 초기화 + * + * @date 2016. 8. 19. + * @returns 반환 변수 및 객체 + * @author InswaveSystems + * @example 샘플 코드 + * @todo 추가해야 할 작업 + */ + public void init() { + this.setUserNo(null); + this.setUserId(null); + this.setUserName(null); + this.setUserCi(null); + this.setMainLayoutCode(null); + this.setFavoriteStorage(null); + } + + /** + * 사용자(로그인) 정보가 있는 경우 + * + * @date 2016. 8. 19. + * @returns 반환 변수 및 객체 + * @author InswaveSystems + * @example 샘플 코드 + * @todo 추가해야 할 작업 + */ + public Boolean isLogined() { + String userId = this.getUserId(); + if (userId == null || userId.equals("")) { + return false; + } + return true; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("UserInfo{"); + sb.append("userNo='").append(userNo).append('\''); + sb.append(", userId='").append(userId).append('\''); + sb.append(", userType='").append(userType).append('\''); + sb.append(", userName='").append(userName).append('\''); + sb.append(", userCi='").append(userCi).append('\''); + sb.append(", isAdmin=").append(isAdmin); + sb.append(", isTempMember=").append(isTempMber); + sb.append(", mainLayoutCode='").append(mainLayoutCode).append('\''); + sb.append(", favoriteStorage='").append(favoriteStorage).append('\''); + sb.append(", makeTime=").append(makeTime); + sb.append(", defaultMainLayoutCode='").append(defaultMainLayoutCode).append('\''); + sb.append(", defaultFavoriteStorage='").append(defaultFavoriteStorage).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/gtpa/brs/user/service/UserService.java b/src/main/java/gtpa/brs/user/service/UserService.java new file mode 100644 index 0000000..29540d3 --- /dev/null +++ b/src/main/java/gtpa/brs/user/service/UserService.java @@ -0,0 +1,142 @@ +package gtpa.brs.user.service; + +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 24/04/2019 + * TIME : 9:51 AM + * Project : BRSPW + * Class : UserService + * Desc : + * ///////////////////////////////////////////////////// + */ +public interface UserService { + + /** + * Update password int. + * + * @param userData the user data + * @return the int + */ + @Transactional + public int updatePassword(Map userData); + + /** + * Update comp charger info int. + * + * @param chargerData the charger data + * @return the int + */ + @Transactional + public int updateCompChargerInfo(Map chargerData); + + /** + * Update vhcle info int. + * + * @param vhcleData the vhcle data + * @return the int + */ + @Transactional + public int updateVhcleInfo(List vhcleData); + + /** + * Secession user int. + * + * @param userData the user data + * @return the int + */ + @Transactional + public int secessionUser(Map userData); + + /** + * 회원 이용료 집계조회 + * + * @param param the param + * @return the pass through summary + */ + public Map getPassThroughSummary(Map param); + + /** + * 회원 과태료 집계조회. + * + * @param param the param + * @return the penalty through summary + */ + public Map getPenaltyThroughSummary(Map param); + + /** + * 회원 혼잡과태료 집계조회 + * + * @param param the param + * @return the penalty civil accept summary + */ + public Map getPenaltyByFeeThroughSummary(Map param); + + /** + * 비회원 이용료 집계조회 + * + * @param param the param + * @return the pass through summary + */ + public Map getNoMemberPassThroughSummary(Map param); + + + /** + * Gets no member penalty through summary. + * + * @param param the param + * @return the no member penalty through summary + */ + public Map getNoMemberPenaltyThroughSummary(Map param); + + /** + * 비회원 혼잡과태료 집계조회 + * + * @param param the param + * @return the penalty civil accept summary + */ + public Map getNoMemberPenaltyByFeeThroughSummary(Map param); + + /** + * 회원 공용주차장 이용료 집계조회 + * + * @param param the param + * @return the pass through summary + */ + public ArrayList> getPublicParkingThroughSummary(Map param); + + /** + * 비회원 공용주차장 이용료 집계조회 + * + * @param param the param + * @return the pass through summary + */ + public ArrayList> getNoMemberPublicParkingThroughSummary(Map param); + + Map getJmpTunnelPassThroughSummary(Map userInfo); + + Map getNoMemberJmpTunnelPassThroughSummary(Map userInfo); + + Map getYdpParkPassThroughSummary(Map userInfo); + + Map getNoMemberYdpParkPassThroughSummary(Map userInfo); + + Map getJgParkPassThroughSummary(Map userInfo); + + Map getNoMemberJgParkPassThroughSummary(Map userInfo); + + Map getSbgRoadPassThroughSummary(Map userInfo); + + Map getNoMemberSbgRoadPassThroughSummary(Map userInfo); + + Map getScgParkPassThroughSummary(Map userInfo); + + Map getNoMemberScgParkPassThroughSummary(Map userInfo); +} diff --git a/src/main/java/gtpa/brs/user/service/impl/UserMapper.java b/src/main/java/gtpa/brs/user/service/impl/UserMapper.java new file mode 100644 index 0000000..7c95990 --- /dev/null +++ b/src/main/java/gtpa/brs/user/service/impl/UserMapper.java @@ -0,0 +1,43 @@ +package gtpa.brs.user.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 24/04/2019 + * TIME : 9:53 AM + * Project : BRSPW + * Class : UserMapper + * Desc : + * ///////////////////////////////////////////////////// + */ +@Repository("userDao") +public class UserMapper extends EgovAbstractMapper { + + private String NAMESPACE = "UserDAO"; + + public int updatePassword(Map userData) { + return update(NAMESPACE + ".updatePassword", userData); + } + + public int updateCompChargerInfo(Map chargerData) { + return update(NAMESPACE + ".updateCompChargerInfo", chargerData); + } + + public int updateVhcleInfo(List vhcleData) { + int rsltCnt = 0; + rsltCnt = update(NAMESPACE + ".updateVhcleInfo", vhcleData); + rsltCnt += update(NAMESPACE + ".insertVhcleInfo", vhcleData); + return rsltCnt; + } + + public int secessionUser(Map userData) { + return update(NAMESPACE + ".secessionUser", userData); + } +} diff --git a/src/main/java/gtpa/brs/user/service/impl/UserServiceImpl.java b/src/main/java/gtpa/brs/user/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..a2c23ef --- /dev/null +++ b/src/main/java/gtpa/brs/user/service/impl/UserServiceImpl.java @@ -0,0 +1,1596 @@ +package gtpa.brs.user.service.impl; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.UUID; + +import javax.annotation.Resource; + +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.mypage.service.impl.MypageMapper; +import gtpa.brs.user.service.UserService; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 24/04/2019 + * TIME : 9:52 AM + * Project : BRSPW + * Class : UserServiceImpl + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service +public class UserServiceImpl implements UserService { + + private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class); + + @Resource(name = "globalsProperties") + private Properties env; + + @Resource(name = "userDao") + UserMapper userMapper; + + @Resource(name = "MypageDAO") + private MypageMapper mypageMapper; + + @Override + public int updatePassword(Map userData) { + return userMapper.updatePassword(userData); + } + + @Override + public int updateCompChargerInfo(Map chargerData) { + return userMapper.updateCompChargerInfo(chargerData); + } + + @Override + public int updateVhcleInfo(List vhcleData) { + return userMapper.updateVhcleInfo(vhcleData); + } + + @Override + public int secessionUser(Map userData) { + return userMapper.secessionUser(userData); + } + + @Override + public Map getPassThroughSummary(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPassThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) param.get("vhcleNum"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(param); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getPenaltyThroughSummary(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.fis.getPenaltyThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + String vhcleNum = (String) param.get("vhcleNum"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + + // 차량정보 조회 + String cars = getCarNo(param); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPenaltyThroughSummary(url, reqData); + logger.info("reqPenaltyThroughSummary result::" + result); + + return result; + } + + @Override + public Map getPenaltyByFeeThroughSummary(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPenaltyThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) param.get("vhcleNum"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + + // 차량정보 조회 + String cars = getCarNo(param); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPenaltyByFeeThroughSummary(url, reqData); + logger.info("reqPenaltyThroughSummary result::" + result); + + return result; + } + + @Override + public ArrayList> getPublicParkingThroughSummary(Map param) { + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.recvPassThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) param.get("vhcleNum"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + + // 차량정보 조회 + List carList = null; + ArrayList> resultList = new ArrayList>(); + carList = getCarNoList(param); + for (int i = 0; i < carList.size(); i++) { + Map carMap = (Map) carList.get(i); + vhcleNum = (String) carMap.get("VHCLE_NO"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("url::" + url); + logger.info("reqData::" + reqData); + Map result = new HashMap(); + //if("mypage".equals(param.get("uiType"))) { + //result = reqPublicParkingPassThroughSummary(url, reqData); + //}else{ + result = reqPublicParkingPassThroughSummaryMain(url, reqData); + //} + resultList.add(i, result); + } + + return resultList; + } + + @Override + public ArrayList> getNoMemberPublicParkingThroughSummary(Map param) { + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.recvPassThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) param.get("vhcleNum"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + + // 차량정보 조회 + List carList = null; + ArrayList> resultList = new ArrayList>(); + carList = getCarNoList(param); + for (int i = 0; i < carList.size(); i++) { + Map carMap = (Map) carList.get(i); + vhcleNum = (String) carMap.get("VHCLE_NO"); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + Map result = new HashMap(); + result = reqPublicParkingPassThroughSummaryMain(url, reqData); + resultList.add(i, result); + } + + return resultList; + } + + @Override + public Map getJmpTunnelPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.jmpTunnel.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberJmpTunnelPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.jmpTunnel.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + return result; + } + + @Override + public Map getYdpParkPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.ydpPark.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberYdpParkPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.ydpPark.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + return result; + } + + @Override + public Map getJgParkPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.jgPark.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberJgParkPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.jgPark.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + return result; + } + + @Override + public Map getScgParkPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.scgPark.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberScgParkPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.scgPark.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + return result; + } + + @Override + public Map getSbgRoadPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.sbgRoad.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberSbgRoadPassThroughSummary(Map userInfo) { + Map result; + String url = env.getProperty("Globals.sbgRoad.getFeesStatistics"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) userInfo.get("vhcleNum"); + String startDt = (String) userInfo.get("startDt"); + String endDt = (String) userInfo.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + // 차량정보 조회 + String cars = getCarNo(userInfo); + + // Main 이용료/과태료 건수 API호출수 디폴트 날짜기간 셋팅 + if (startDt == null && endDt == null) { + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + } + + logger.info("cars::" + cars); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + String insttNo = "BRSMC0000002"; + String insttCntcJobSe = "126"; + vhcleNum = cars; + //TODD 테스트데이타 + //vhcleNum = "07두4193"; //48머4251,36누6881,18서0587 + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", insttNo); + reqData.put("insttCntcJobSe", insttCntcJobSe); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + return result; + } + + // 회원 차량정보 조회 + public String getCarNo(Map param) { + List carList = null; + carList = mypageMapper.getMyCarinfoList(param); + String cars = ""; + for (int i = 0; i < carList.size(); i++) { + Map carMap = (Map) carList.get(i); + if (i == 0) { + cars = (String) carMap.get("VHCLE_NO"); + } else { + cars += ',' + (String) carMap.get("VHCLE_NO"); + } + } + + return cars; + } + + // 회원 차량정보 조회 - 공용주차장용 + public List getCarNoList(Map param) { + List carList = null; + carList = mypageMapper.getMyCarinfoList(param); + return carList; + } + + @Override + public Map getNoMemberPassThroughSummary(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPassThroughSummary"); + //String url = env.getProperty("Globals.SmartPlatform.Url") + "/recvPassThroughSummary"; + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) param.get("VHCLE_NO"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + + logger.info("vhcleNum::" + vhcleNum); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", "126"); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPassThroughSummary(url, reqData); + logger.info("reqPassThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberPenaltyThroughSummary(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.fis.getPenaltyThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String uniqueID = UUID.randomUUID().toString(); + String vhcleNum = (String) param.get("VHCLE_NO"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + + logger.info("vhcleNum::" + vhcleNum); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", "126"); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPenaltyThroughSummary(url, reqData); + logger.info("reqPenaltyThroughSummary result::" + result); + + return result; + } + + @Override + public Map getNoMemberPenaltyByFeeThroughSummary(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.getPenaltyThroughSummary"); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + //String insttNo = (String) param.get("insttNo"); + //String insttCntcJobSe = (String) param.get("insttCntcJobSe"); + String vhcleNum = (String) param.get("VHCLE_NO"); + String startDt = (String) param.get("startDt"); + String endDt = (String) param.get("endDt"); + /* + * insttNo 기관 번호 + insttCntcJobSe 기관 연계 업무 구분 + startDt 조회시작일자 + endDt 조회끝일자 + vhcleNum 차량번호 + * */ + + //오늘 + Date today = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); + String toDay = date.format(today); + + //1년전 + Calendar mon = Calendar.getInstance(); + mon.add(Calendar.MONTH, -1); + String beforeMonth = new java.text.SimpleDateFormat("yyyyMMdd").format(mon.getTime()); + + startDt = beforeMonth; + endDt = toDay; + + logger.info("vhcleNum::" + vhcleNum); + logger.info("startDt ::" + startDt); + logger.info("endDt::" + endDt); + Map reqData = new LinkedHashMap(); + reqData.put("insttNo", "BRSMC0000002"); + reqData.put("insttCntcJobSe", "126"); + reqData.put("startDt", startDt); + reqData.put("endDt", endDt); + reqData.put("vhcleNum", vhcleNum); + + logger.info("reqData::" + reqData); + result = reqPenaltyByFeeThroughSummary(url, reqData); + logger.info("reqPenaltyThroughSummary result::" + result); + + return result; + } + + public Map reqPublicParkingPassThroughSummaryMain(String requestURL, Map reqData) { + Map result = new HashMap(); + Map resultData = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONArray datas = (JSONArray) jsonObj.get("data"); + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("ParkingPass data::" + data); + if (jsonObj.get("result").equals("SUCCESS")) { + result.put("rspnsResult", "S"); + result.put("data", data); + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + + //공영주차장 단건 메핑 + if (data != null) { + result.put("passNoPayAmountTotal", data.get("passNoPayAmountTotal")); + result.put("passNoPayCount", data.get("passNoPayCount")); + result.put("passAmountTotal", data.get("passAmountTotal")); + result.put("passCount", data.get("passCount")); + } else { + result.put("passNoPayAmountTotal", "0"); + result.put("passNoPayCount", "0"); + result.put("passAmountTotal", "0"); + result.put("passCount", "0"); + } + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + + return result; + } + + public Map reqPublicParkingPassThroughSummary(String requestURL, Map reqData) { + Map result = new HashMap(); + Map resultData = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONArray datas = (JSONArray) jsonObj.get("data"); + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("ParkingPass data::" + data); + if (jsonObj.get("result").equals("SUCCESS")) { + result.put("rspnsResult", "S"); + //result.put("data", datas); + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + + //공영주차장 단건 메핑 + if (data != null) { + result.put("passNoPayAmountTotal", data.get("passNoPayAmountTotal")); + result.put("passNoPayCount", data.get("passNoPayCount")); + result.put("rfnProcCount", data.get("rfnProcCount")); + result.put("passAmountTotal", data.get("passAmountTotal")); + result.put("passCount", data.get("passCount")); + result.put("civilDici", data.get("civilDici")); + result.put("rfnCont", data.get("rfnCont")); + result.put("civilAcep", data.get("civilAcep")); + result.put("rfnProcAmountTotal", data.get("rfnProcAmountTotal")); + result.put("civilReje", data.get("civilReje")); + result.put("civilReg", data.get("civilReg")); + result.put("rfnAmountTotal", data.get("rfnAmountTotal")); + } else { + result.put("passNoPayAmountTotal", "0"); + result.put("passNoPayCount", "0"); + result.put("rfnProcCount", "0"); + result.put("passAmountTotal", "0"); + result.put("passCount", "0"); + result.put("civilDici", "0"); + result.put("rfnCont", "0"); + result.put("civilAcep", "0"); + result.put("rfnProcAmountTotal", "0"); + result.put("civilReje", "0"); + result.put("civilReg", "0"); + result.put("rfnAmountTotal", "0"); + } + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + + return result; + } + + public Map reqPassThroughSummary(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONArray datas = (JSONArray) jsonObj.get("data"); + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else if (jsonObj.get("resultCode").equals("E0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map reqPenaltyThroughSummary(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONArray datas = (JSONArray) jsonObj.get("data"); + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } + + public Map reqPenaltyByFeeThroughSummary(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(10000) + .setConnectionRequestTimeout(10000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + //JSONArray datas = (JSONArray) jsonObj.get("data"); + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("")) { + result.put("rspnsResult", "S"); + result.put("data", data); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", "0000"); + result.put("rspnsMssage", jsonObj.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "연결 오류가 발생하였습니다."); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "" + "]", io); + } + + } + return result; + } +} diff --git a/src/main/java/gtpa/brs/user/web/UserController.java b/src/main/java/gtpa/brs/user/web/UserController.java new file mode 100644 index 0000000..a68453b --- /dev/null +++ b/src/main/java/gtpa/brs/user/web/UserController.java @@ -0,0 +1,598 @@ +package gtpa.brs.user.web; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.transaction.SystemException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import gtpa.brs.fee.service.FeeService; +import gtpa.brs.join.service.CACheckService; +import gtpa.brs.login.service.LoginService; +import gtpa.brs.penalty.service.PenaltyService; +import gtpa.brs.user.dto.UserInfo; +import gtpa.brs.user.service.UserService; +import gtpa.brs.util.Result; +import gtpa.brs.util.SHA256Util; +import gtpa.brs.vehicle.service.VehicleService; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 24/04/2019 + * TIME : 9:30 AM + * Project : BRSPW + * Class : UserController + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Controller +public class UserController { + + Logger logger = LoggerFactory.getLogger(UserController.class); + + /** + * The User info. + */ + @Autowired + UserInfo userInfo; + + /** + * The User service. + */ + @Autowired + UserService userService; + + /** + * The Login service. + */ + @Autowired + LoginService loginService; + + /** + * The Fee service. + */ + @Autowired + FeeService feeService; + + /** + * The Penalty service. + */ + @Autowired + PenaltyService penaltyService; + + @Autowired + VehicleService vehicleService; + + @Autowired + CACheckService caCheckService; + + /** + * 회원 Usage status map. + * + * @return the map + */ + @RequestMapping(value = "/common/usageStatus.do", method = RequestMethod.POST) + public @ResponseBody + Map usageStatus() { + Result result = new Result(); + try { + if (userInfo.isLogined()) { + // 이용료 집계 + Map fee = userService.getPassThroughSummary(userInfo.getUserInfo()); + + if (fee.get("data") == null) { + Map feeInfo = new HashMap(); + feeInfo.put("passCount", "0"); + feeInfo.put("passNoPayCount", "0"); + feeInfo.put("fineCount", "0"); + feeInfo.put("fineNoPayCount", "0"); + fee.put("data", feeInfo); + } + // 과태료 집계 + Map penalty = userService.getPenaltyThroughSummary(userInfo.getUserInfo()); + Map tPenalty = userService.getPenaltyByFeeThroughSummary(userInfo.getUserInfo()); + Map penaltyStatic = new HashMap(); + int fineNoPayCount = 0; + int fineCount = 0; + if (penalty.get("data") != null && tPenalty.get("data") != null) { + Map penaltyData = (Map) penalty.get("data"); + Map tPenaltyData = (Map) tPenalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()) + Integer.parseInt(tPenaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()) + Integer.parseInt(tPenaltyData.get("fineCount").toString()); + + } else if (penalty.get("data") == null && tPenalty.get("data") != null) { + Map penaltyData = (Map) tPenalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()); + } else if (penalty.get("data") != null && tPenalty.get("data") == null) { + Map penaltyData = (Map) penalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()); + } + penaltyStatic.put("fineNoPayCount", fineNoPayCount); + penaltyStatic.put("fineCount", fineCount); + + // 공용주차장 이용료 집계 + Map pFeeTmp = new HashMap(); + Map pFee = new HashMap(); + ArrayList> pFeeList = new ArrayList>(); + pFeeList = userService.getPublicParkingThroughSummary(userInfo.getUserInfo()); + logger.info("pFeeList::" + pFeeList); + + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + result.setData("today", today); + + int passNoPayAmountTotal = 0; + int passNoPayCount = 0; + int passAmountTotal = 0; + int passCount = 0; + if (pFeeList.size() > 0) { + for (Object parkFeesObj : pFeeList) { + //Map parkFees = (Map) ((HashMap) parkFeesObj).get("data"); + Map parkFees = (Map) parkFeesObj; + if (parkFees.get("data") != null) { + passNoPayAmountTotal += Integer.parseInt(parkFees.get("passNoPayAmountTotal").toString()); + passNoPayCount += Integer.parseInt(parkFees.get("passNoPayCount").toString()); + passAmountTotal += Integer.parseInt(parkFees.get("passAmountTotal").toString()); + passCount += Integer.parseInt(parkFees.get("passCount").toString()); + } + } + } + + pFeeTmp.put("passNoPayAmountTotal", passNoPayAmountTotal); + pFeeTmp.put("passNoPayCount", passNoPayCount); + pFeeTmp.put("passAmountTotal", passAmountTotal); + pFeeTmp.put("passCount", passCount); + + pFee.putAll(pFeeTmp); + + /* + * 21.11.03 서주희 + * 이용료 기관이 증가해서 각 서비스별로 try catch 적용 + * Exception일 경우 0값으로 셋팅하여 excepFee 적용 + * 데이터 없을 경우 feeInfo 적용 + */ + Map feeInfo = new HashMap(); + feeInfo.put("passCount", "0"); + feeInfo.put("passNoPayCount", "0"); + feeInfo.put("passAmountTotal", "0"); + feeInfo.put("passNoPayAmountTotal", "0"); + Map excepFee = new HashMap(); + excepFee.put("data", feeInfo); + + try{ + // 제물포이용료 집계 + Map jmpFee = userService.getJmpTunnelPassThroughSummary(userInfo.getUserInfo()); + + if (jmpFee.get("data") == null) { + jmpFee.put("data", feeInfo); + } + result.setData("jmpFee", jmpFee); + } catch (RuntimeException re) { + result.setData("jmpFee", excepFee); + logger.error("[jmpFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("jmpFee", excepFee); + logger.error("[jmpFee process error::" + "" + "]", e); + } + + try{ + // 영등포 주차장 이용료 집계 + Map ydpFee = userService.getYdpParkPassThroughSummary(userInfo.getUserInfo()); + + if (ydpFee.get("data") == null) { + ydpFee.put("data", feeInfo); + } + result.setData("ydpFee", ydpFee); + } catch (RuntimeException re) { + result.setData("ydpFee", excepFee); + logger.error("[ydpFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("ydpFee", excepFee); + logger.error("[ydpFee process error::" + "" + "]", e); + } + + + try{ + // 중구 주차장 이용료 집계 + Map jgFee = userService.getJgParkPassThroughSummary(userInfo.getUserInfo()); + + if (jgFee.get("data") == null) { + jgFee.put("data", feeInfo); + } + result.setData("jgFee", jgFee); + } catch (RuntimeException re) { + result.setData("jgFee", excepFee); + logger.error("[jgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("jgFee", excepFee); + logger.error("[jgFee process error::" + "" + "]", e); + } + + try{ + // 서초구 주차장 이용료 집계 + Map scgFee = userService.getScgParkPassThroughSummary(userInfo.getUserInfo()); + + if (scgFee.get("data") == null) { + scgFee.put("data", feeInfo); + } + result.setData("scgFee", scgFee); + } catch (RuntimeException re) { + result.setData("scgFee", excepFee); + logger.error("[scgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("scgFee", excepFee); + logger.error("[scgFee process error::" + "" + "]", e); + } + + try{ + // 서부간선도로 이용료 집계 + Map sbgFee = userService.getSbgRoadPassThroughSummary(userInfo.getUserInfo()); + + if (sbgFee.get("data") == null) { + sbgFee.put("data", feeInfo); + } + result.setData("sbgFee", sbgFee); + } catch (RuntimeException re) { + result.setData("sbgFee", excepFee); + logger.error("[sbgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("sbgFee", excepFee); + logger.error("[sbgFee process error::" + "" + "]", e); + } + + result.setData("fee", fee); + result.setData("totalPenalty", penaltyStatic); + result.setData("penalty", penalty); + result.setData("tpenalty", tPenalty); + result.setData("parkingFee", pFee); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg("L", result.STATUS_SUCESS_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + + /** + * 비회원 Usage status map. + * + * @return the map + */ + @RequestMapping(value = "/common/usageStatusNoMember.do", method = RequestMethod.POST) + public @ResponseBody + Map usageStatusNoMember(@RequestBody Map param) { + Result result = new Result(); + try { + if (userInfo.isLogined()) { + // 이용료 집계 + Map fee = userService.getNoMemberPassThroughSummary(userInfo.getUserInfo()); + + if (fee.get("data") == null) { + Map feeInfo = new HashMap(); + feeInfo.put("passCount", "0"); + feeInfo.put("passNoPayCount", "0"); + feeInfo.put("fineCount", "0"); + feeInfo.put("fineNoPayCount", "0"); + fee.put("data", feeInfo); + } + // 과태료 집계 + Map penalty = userService.getPenaltyThroughSummary(userInfo.getUserInfo()); + Map tPenalty = userService.getPenaltyByFeeThroughSummary(userInfo.getUserInfo()); + Map penaltyStatic = new HashMap(); + int fineNoPayCount = 0; + int fineCount = 0; + if (penalty.get("data") != null && tPenalty.get("data") != null) { + Map penaltyData = (Map) penalty.get("data"); + Map tPenaltyData = (Map) tPenalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()) + Integer.parseInt(tPenaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()) + Integer.parseInt(tPenaltyData.get("fineCount").toString()); + + } else if (penalty.get("data") == null && tPenalty.get("data") != null) { + Map penaltyData = (Map) tPenalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()); + } else if (penalty.get("data") != null && tPenalty.get("data") == null) { + Map penaltyData = (Map) penalty.get("data"); + fineNoPayCount = Integer.parseInt(penaltyData.get("fineNoPayCount").toString()); + fineCount = Integer.parseInt(penaltyData.get("fineCount").toString()); + } + penaltyStatic.put("fineNoPayCount", fineNoPayCount); + penaltyStatic.put("fineCount", fineCount); + + // 공용주차장 이용료 집계 + Map pFeeTmp = new HashMap(); + Map pFee = new HashMap(); + ArrayList> pFeeList = new ArrayList>(); + pFeeList = userService.getNoMemberPublicParkingThroughSummary(userInfo.getUserInfo()); + logger.info("pFeeList::" + pFeeList); + + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + result.setData("today", today); + + int passNoPayAmountTotal = 0; + int passNoPayCount = 0; + int passAmountTotal = 0; + int passCount = 0; + if (pFeeList.size() > 0) { + for (Object parkFeesObj : pFeeList) { + //Map parkFees = (Map) ((HashMap) parkFeesObj).get("data"); + Map parkFees = (Map) parkFeesObj; + if (parkFees.get("data") != null) { + passNoPayAmountTotal += Integer.parseInt(parkFees.get("passNoPayAmountTotal").toString()); + passNoPayCount += Integer.parseInt(parkFees.get("passNoPayCount").toString()); + passAmountTotal += Integer.parseInt(parkFees.get("passAmountTotal").toString()); + passCount += Integer.parseInt(parkFees.get("passCount").toString()); + } + } + } + + pFeeTmp.put("passNoPayAmountTotal", passNoPayAmountTotal); + pFeeTmp.put("passNoPayCount", passNoPayCount); + pFeeTmp.put("passAmountTotal", passAmountTotal); + pFeeTmp.put("passCount", passCount); + + pFee.putAll(pFeeTmp); + + /* + * 21.11.03 서주희 + * 이용료 기관이 증가해서 각 서비스별로 try catch 적용 + * Exception일 경우 0값으로 셋팅하여 excepFee 적용 + * 데이터 없을 경우 feeInfo 적용 + */ + Map feeInfo = new HashMap(); + feeInfo.put("passCount", "0"); + feeInfo.put("passNoPayCount", "0"); + feeInfo.put("passAmountTotal", "0"); + feeInfo.put("passNoPayAmountTotal", "0"); + Map excepFee = new HashMap(); + excepFee.put("data", feeInfo); + + try{ + // 제물포이용료 집계 + Map jmpFee = userService.getJmpTunnelPassThroughSummary(userInfo.getUserInfo()); + + if (jmpFee.get("data") == null) { + jmpFee.put("data", feeInfo); + } + result.setData("jmpFee", jmpFee); + } catch (RuntimeException re) { + result.setData("jmpFee", excepFee); + logger.error("[jmpFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("jmpFee", excepFee); + logger.error("[jmpFee process error::" + "" + "]", e); + } + + try{ + // 영등포 주차장 이용료 집계 + Map ydpFee = userService.getYdpParkPassThroughSummary(userInfo.getUserInfo()); + + if (ydpFee.get("data") == null) { + ydpFee.put("data", feeInfo); + } + result.setData("ydpFee", ydpFee); + } catch (RuntimeException re) { + result.setData("ydpFee", excepFee); + logger.error("[ydpFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("ydpFee", excepFee); + logger.error("[ydpFee process error::" + "" + "]", e); + } + + + try{ + // 중구 주차장 이용료 집계 + Map jgFee = userService.getJgParkPassThroughSummary(userInfo.getUserInfo()); + + if (jgFee.get("data") == null) { + jgFee.put("data", feeInfo); + } + result.setData("jgFee", jgFee); + } catch (RuntimeException re) { + result.setData("jgFee", excepFee); + logger.error("[jgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("jgFee", excepFee); + logger.error("[jgFee process error::" + "" + "]", e); + } + + + try{ + // 서부간선도로 이용료 집계 + Map sbgFee = userService.getSbgRoadPassThroughSummary(userInfo.getUserInfo()); + + if (sbgFee.get("data") == null) { + sbgFee.put("data", feeInfo); + } + result.setData("sbgFee", sbgFee); + } catch (RuntimeException re) { + result.setData("sbgFee", excepFee); + logger.error("[sbgFee RuntimeException::" + "" + "]", re); + } catch (Exception e) { + result.setData("sbgFee", excepFee); + logger.error("[sbgFee process error::" + "" + "]", e); + } + + result.setData("fee", fee); + result.setData("totalPenalty", penaltyStatic); + result.setData("penalty", penalty); + result.setData("tpenalty", tPenalty); + result.setData("parkingFee", pFee); + result.setMsg(result.STATUS_SUCESS, result.STATUS_SUCESS_MESSAGE); + } else { + result.setMsg("L", result.STATUS_SUCESS_MESSAGE); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, re); + } catch (Exception ex) { + logger.error("[process error::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, ex); + } + + return result.getResult(); + } + + /** + * 로그인한 사용자의 비밀번호를 변경한다. + * + * @param param the param (dma_password { PASSWORD: "현재 비밀번호", NEW_PASSWORD: "새로운 비밀번호", RETRY_PASSWORD: "새로운 비밀번호(재입력)" }) + * @return the map + * @date 2018.11.29 + * @returns mv dlt_result { FOCUS:"포커스를 이동할 컬럼 아이디" } + * @author InswaveSystems + * @example + */ + @RequestMapping(value = "/user/updatePassword.do", method = RequestMethod.POST) + public @ResponseBody + Map updatePassword(@RequestBody Map param) { + Result result = new Result(); + + try { + Map passwordMap = (Map) param.get("dma_password"); + boolean checkCurrPassword = false; + + // 시스템 관리자인 경우에는 현재 비밀번호 체크를 하지 않고 비밀번호를 변경한다. + if (userInfo.getIsAdmin()) { + checkCurrPassword = true; + + // 일반 사용자인 경우에는 현재 비밀번호를 체크하고 비밀번호를 변경한다. + } else { + Map memberMap = loginService.selectMemberInfoForLogin(passwordMap); + String status = (String) memberMap.get("LOGIN"); + + // 현재 비밀번호 정상 입력 여부 확인 + if (status.equals("success")) { + checkCurrPassword = true; + } else { + Map resultMap = new HashMap(); + resultMap.put("FOCUS", "PW"); + result.setData("dma_result", resultMap); + result.setMsg(result.STATUS_ERROR, "현재 비밀번호를 잘못 입력하셨습니다."); + return result.getResult(); + } + } + String newPassword = (String) passwordMap.get("newPw"); + String retryPassword = (String) passwordMap.get("newPwCnfm"); + newPassword = SHA256Util.encryptSHA256(newPassword); + retryPassword = SHA256Util.encryptSHA256(retryPassword); + passwordMap.put("newPw", newPassword); + passwordMap.put("newPwCnfm", retryPassword); + if (newPassword.equals(retryPassword)) { + loginService.updatePassword(passwordMap); + result.setMsg(result.STATUS_SUCESS, "비밀번호 변경에 성공했습니다."); + } else { + Map resultMap = new HashMap(); + resultMap.put("FOCUS", "newPw"); + result.setData("dma_result", resultMap); + result.setMsg(result.STATUS_ERROR, "신규 비밀번호와 신규 비밀번호(재입력) 항목의 비밀번호가 다르게 입력 되었습니다."); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "비밀번호 변경 중 오류가 발생했습니다.", re); + } catch (Exception ex) { + logger.error("[Exception::" + "" + "]", ex); + result.setMsg(result.STATUS_ERROR, "비밀번호 변경 중 오류가 발생했습니다.", ex); + } + return result.getResult(); + } + + /** + * 비회원 차량조회 + * + * @param param + * @return + */ + @RequestMapping(value = "/user/getCarInfo.do", method = RequestMethod.POST) + public @ResponseBody + Map getCarInfo(@RequestBody Map param, HttpServletRequest request) { + Result result = new Result(); + try { + Map params = (Map) param.get("param"); + String vhclePosesnTy = (String) params.get("SEARCH_CAR_POSESN_TY"); + String vhcleNo = (String) params.get("SEARCH_VHCLE_NO"); + String vhcleUser = (String) params.get("SEARCH_VHCLE_OWNER"); + params.put("vhcleNo", vhcleNo); + Map resData = vehicleService.vhcleInquiry(params); + if (resData.get("rspnsResult").equals("S")) { + Map data = caCheckService.interopService((String) resData.get("mberSeNo")); + if (!data.get("iRtnCI").equals(1)) { + throw new RuntimeException(data.get("iRtnCI_MSG").toString()); + } + logger.info("Param Data : " + param); + + Map car = new HashMap(); + car.put("VHCLE_OWNER_CI", data.get("CI")); + car.put("VHCLE_POSESN_TY", vhclePosesnTy); + car.put("VHCLE_NO", resData.get("vhrno")); + car.put("VHCLE_OWNER", resData.get("mberNm").toString().replaceAll("\n", "")); + car.put("VHCLE_STTUS_TY", "01"); + //car.put("CARS_TY_ID", resData.get("")); + car.put("CARS_TY_ID", "60"); + car.put("CARS_TY", resData.get("cnm")); + car.put("PRPOS_SE_CODE", resData.get("prposSeCode")); + car.put("VHCLE_KND_CODE", resData.get("vhctyAsortCode")); + car.put("VHCLE_CL_CODE", resData.get("vhctySeCode")); + car.put("VHCLE_TY_CODE", resData.get("vhctyTyCode")); + car.put("SPEC_REGIST_DETAIL_CODE", resData.get("spcfRegistSttusCode")); + car.put("REGIST_DETAIL_CODE", resData.get("registDetailCode")); + car.put("USE_FUEL_CODE", resData.get("useFuelCode")); + if (!"13".equals(resData.get("mberSeCode"))) { + if (vhcleUser.replaceAll(" ", "").equals(resData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + if (!data.get("CI").equals(userInfo.getUserCi())) { + result.setMsg(Result.STATUS_SUCESS, "본인 차량정보가 아닙니다. 본인 차량정보를 입력해 주십시오."); + } else { + car.put("VHCLE_OWNER_EQ", "Y"); + result.setData("data", car); + result.setMsg(Result.STATUS_SUCESS, "차량정보가 확인되었습니다."); + request.getSession().setAttribute("VHCLE_NO", car.get("VHCLE_NO")); + } + } else if (!vhcleUser.replaceAll(" ", "").equals(resData.get("mberNm").toString().replaceAll(" ", "").replaceAll("\n", ""))) { + result.setMsg(Result.STATUS_SUCESS, "차량번호와 소유자가 일치하지 않습니다."); + } else { + result.setMsg(Result.STATUS_SUCESS, "등록된 차량정보입니다. 등록된 차량의 아이디로 로그인 후 이용해 주십시오."); + } + } else { + result.setMsg(Result.STATUS_SUCESS, "개인명의 차량만 등록 가능합니다."); + } + } else { + throw new SystemException(resData.get("rspnsMssage").toString()); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "차량소유자 정보조회 오류가 발생하였습니다.", re); + } catch (SystemException re) { + logger.error("[SystemException::" + "" + "]", re); + result.setMsg(result.STATUS_ERROR, "차량 정보조회 오류가 발생하였습니다.", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + //result.setMsg(result.STATUS_ERROR, e.getMessage(), e); + result.setMsg(result.STATUS_ERROR, result.STATUS_ERROR_MESSAGE, e); + } + return result.getResult(); + } +} diff --git a/src/main/java/gtpa/brs/util/BrsIdGnrUtil.java b/src/main/java/gtpa/brs/util/BrsIdGnrUtil.java new file mode 100644 index 0000000..700b704 --- /dev/null +++ b/src/main/java/gtpa/brs/util/BrsIdGnrUtil.java @@ -0,0 +1,69 @@ +package gtpa.brs.util; + +import java.util.Date; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 11/04/2019 + * TIME : 4:14 PM + * Project : BRSPW + * Class : BrsIdGnrUtil + * Desc : + * ///////////////////////////////////////////////////// + */ + +public class BrsIdGnrUtil { + private String prefix; + private String group; + private int cipers; + private String fillChar; + private String gnrID; + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public int getCipers() { + return cipers; + } + + public void setCipers(int cipers) { + this.cipers = cipers; + } + + public String getFillChar() { + return fillChar; + } + + public void setFillChar(String fillChar) { + this.fillChar = fillChar; + } + + public String getGnrID() { + return gnrID; + } + + public void setGnrID() { + this.gnrID = makeGnrID(); + } + + public String makeGnrID() { + Date date = new Date(); + String generateID = this.getPrefix() + this.getGroup() + date.getTime(); + return generateID; + } +} diff --git a/src/main/java/gtpa/brs/util/CommonUtil.java b/src/main/java/gtpa/brs/util/CommonUtil.java new file mode 100644 index 0000000..c9ff000 --- /dev/null +++ b/src/main/java/gtpa/brs/util/CommonUtil.java @@ -0,0 +1,59 @@ +package gtpa.brs.util; + +import com.nhncorp.lucy.security.xss.LucyXssFilter; +import com.nhncorp.lucy.security.xss.XssSaxFilter; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Field; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 12/04/2019 + * TIME : 10:49 AM + * Project : BRSPW + * Class : CommonUtil + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +public class CommonUtil { + + private static Logger logger = LoggerFactory.getLogger(CommonUtil.class); + + public static String cleanXss(String value) { + StringBuffer sb = null; + String[] checkStr_arr = { + "", "", "", + "", "", "", + "", "", "", "", + "", "", "onclick", "onerror", + "onload", "onmouseover", "onstart" + }; + for (String checkStr : checkStr_arr) { + while (value.indexOf(checkStr) != -1) { + value = value.replaceAll(checkStr, ""); + } + while (value.toLowerCase().indexOf(checkStr) != -1) { + sb = new StringBuffer(value); + sb = sb.replace(value.toLowerCase().indexOf(checkStr), value.toLowerCase().indexOf(checkStr) + checkStr.length(), ""); + value = sb.toString(); + } + } + value = value.replaceAll("eval\\((.*)\\)", ""); + value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); + + return value; + } + + public static String cleanCode(String value) { + LucyXssFilter filter = XssSaxFilter.getInstance("lucy-xss-sax.xml"); + String clean = filter.doFilter(value); + logger.debug("cleanCode[" + clean + "]"); + return clean; + } +} diff --git a/src/main/java/gtpa/brs/util/EgovMultiLoginPreventor.java b/src/main/java/gtpa/brs/util/EgovMultiLoginPreventor.java new file mode 100644 index 0000000..5c58757 --- /dev/null +++ b/src/main/java/gtpa/brs/util/EgovMultiLoginPreventor.java @@ -0,0 +1,35 @@ +package gtpa.brs.util; + +import javax.servlet.http.HttpSession; +import java.util.Enumeration; +import java.util.concurrent.ConcurrentHashMap; + +/** + * ///////////////////////////////////////////////////// + * + * @CREATE BY : seunghyun + * @Company : Mqnic + * @PROJECT : BRSPW + * @PACKAGE : gtpa.brs.util + * @CREATE : 30/01/2020 6:17 오후 + * @DESC : + * ///////////////////////////////////////////////////// + */ +public class EgovMultiLoginPreventor { + public static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(EgovMultiLoginPreventor.class); + public static ConcurrentHashMap loginUsers = new ConcurrentHashMap(); + + public static boolean findByLoginId(String loginId) { + return loginUsers.containsKey(loginId); + } + + public static void invalidateByLoginId(String loginId) { + Enumeration e = loginUsers.keys(); + while (e.hasMoreElements()) { + String key = (String) e.nextElement(); + if (key.equals(loginId)) { + loginUsers.get(key).invalidate(); + } + } + } +} diff --git a/src/main/java/gtpa/brs/util/FileUploadDefinerImpl.java b/src/main/java/gtpa/brs/util/FileUploadDefinerImpl.java new file mode 100644 index 0000000..8455a83 --- /dev/null +++ b/src/main/java/gtpa/brs/util/FileUploadDefinerImpl.java @@ -0,0 +1,71 @@ +package gtpa.brs.util; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.Random; + +import javax.servlet.http.HttpServletRequest; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import websquare.http.MultiPartHttpServletRequest; +import websquare.http.WebSquareContext; +import websquare.upload.handl.AbstractUploadFileDefiner; +@SuppressFBWarnings +public class FileUploadDefinerImpl extends AbstractUploadFileDefiner { + + @Override + public String getFileName(String clientFileName, String originalFileName) { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + Calendar c1 = Calendar.getInstance(); + String strToday = sdf.format(c1.getTime()); + //System.out.println("today : [" + strToday + "]"); + + // 랜덤 8자리 + Random rand = new Random(); + String rst = Integer.toString(rand.nextInt(8) + 1); + for (int i = 0; i < 7; i++) { + rst += Integer.toString(rand.nextInt(9)); + } + + // 물리적파일명 = 날짜 14자리 + 랜덤 8자리 + originalFileName = strToday + rst; + + // 파일명에 대한 별도 변경 처리시 추가한다. + //System.out.println("clientFileName : [" + clientFileName + "]"); + //System.out.println("originalFileName : [" + originalFileName + "]"); + + return originalFileName; + } + + + @Override + public String getFilePath(String filePath) { + // 파일업로드는 WAS의 공유볼륨에 저장된다. 파일 저장위치는 {websquare_home}/config/websquare.xml 의 baseDir에 위치한다.) + // 업로드컴퍼넌트의 useDir 파라메타가 있을때 baseDir 하위에 폴더를 생성하고 저장한다. + HttpServletRequest request = WebSquareContext.getContext().getRequest(); + MultiPartHttpServletRequest multiPartRequest = (MultiPartHttpServletRequest) request; + + Map parmeterMap = multiPartRequest.getMultipartParameters(); + + String[] useDir = (String[]) parmeterMap.get("useDir"); + + String _filePath = filePath.substring(0, filePath.lastIndexOf(File.separator)); + StringBuffer rt = new StringBuffer(_filePath); + + if (useDir != null) { + int iCnt = useDir.length; + for (int idx = 0; idx < iCnt; idx++) { + if (idx == 0) rt.append(File.separator); + rt.append(useDir[idx]); + } + } + + //System.out.println("filePath : [" + _filePath + "]"); + //System.out.println("rt.toString() : [" + rt.toString() + "]"); + + return rt.toString(); + } +} diff --git a/src/main/java/gtpa/brs/util/Http.java b/src/main/java/gtpa/brs/util/Http.java new file mode 100644 index 0000000..8174bd4 --- /dev/null +++ b/src/main/java/gtpa/brs/util/Http.java @@ -0,0 +1,205 @@ +package gtpa.brs.util; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.FileBody; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : jackt + * Date : 2019-10-14 + * TIME : 15:47 + * Project : BRSPW + * Class : Http + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +public class Http { + private static final String DEFAULT_ENCODING = "UTF-8"; + + private String url; + private MultipartEntityBuilder params; + private Logger logger = LoggerFactory.getLogger(Http.class); + + /** + * @param url 접속할 url + */ + public Http(String url) { + this.url = url; + + params = MultipartEntityBuilder.create(); + } + + /** + * Map 으로 한꺼번에 파라메터 훅 추가하는 메소드 + * + * @param param 파라메터들이 담긴 맵, 파라메터들은 UTF-8로 인코딩 됨 + * @return + */ + public Http addParam(Map param) { + return addParam(param, DEFAULT_ENCODING); + } + + /** + * Map 으로 한꺼번에 파라메터 훅 추가하는 메소드 + * + * @param param 파라메터들이 담긴 맵 + * @param encoding 파라메터 encoding charset + * @return + */ + public Http addParam(Map param, String encoding) { + for (Map.Entry e : param.entrySet()) { + if (e.getValue() instanceof File) { + addParam(e.getKey(), (File) e.getValue(), encoding); + } else { + addParam(e.getKey(), (String) e.getValue(), encoding); + } + } + return this; + } + + /** + * 문자열 파라메터를 추가한다. + * + * @param name 추가할 파라메터 이름 + * @param value 파라메터 값 + * @return + */ + public Http addParam(String name, String value) { + return addParam(name, value, DEFAULT_ENCODING); + } + + public Http addParam(String name, String value, String encoding) { + params.addPart(name, new StringBody(value, ContentType.create("text/plain", encoding))); + + return this; + } + + /** + * 업로드할 파일 파라메터를 추가한다. + * + * @param name + * @param file + * @return + */ + public Http addParam(String name, File file) { + return addParam(name, file, DEFAULT_ENCODING); + } + + public Http addParam(String name, File file, String encoding) { + if (file.exists()) { + try { + params.addPart( + name, + new FileBody(file, ContentType.create("application/octet-stream"), + URLEncoder.encode(file.getName(), encoding))); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception ex) { + //ex.printStackTrace(); + logger.error("[Exception::" + "" + "]", ex); + } + + } + + return this; + } + + /** + * 타겟 URL 로 POST 요청을 보낸다. + * + * @return 요청결과 + * @throws Exception + */ + public Map submit() throws IOException { + CloseableHttpClient http = HttpClients.createDefault(); + StringBuffer result = new StringBuffer(); + String body = ""; + Map resultMap = new HashMap(); + Map resultData = new HashMap(); + BufferedReader br = null; + try { + HttpPost post = new HttpPost(url); + post.setEntity(params.build()); + + CloseableHttpResponse response = http.execute(post); + + try { + if (response.getStatusLine().getStatusCode() == 200) { + HttpEntity res = response.getEntity(); + br = new BufferedReader( + new InputStreamReader(res.getContent(), Charset.forName("UTF-8"))); + + String buffer = null; + while ((buffer = br.readLine()) != null) { + result.append(buffer).append("\r\n"); + } + body = result.toString().trim(); + logger.info("body::" + result.toString().trim()); + + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONArray datas = (JSONArray) jsonObj.get("privacy"); + /* + * 개인정보 점점결과 Return 항목 및 코드 설명 + * isPriv -> 개인정보 유무(0:개인정보 없음, 1:개인정보 있음) + * privType -> 검출된 개인정보 유형(1:주민(외국인)번호, 2:카드번호, 3:여권번호, 4:운전면허번호, 5:휴대폰번호, + * 6:일반전화번호, 7:이메일, 8:건강보험번호, 9:은행계좌번호, 10:금칙어) + * privContent -> 검출된 개인정보 내용 + * hostIP -> 요청받을때 전달받은 HostIP 값 + * hostUrl -> 요청받을때 전달받은 HostUrl 값 + * userIP -> 요청받을때 전달받은 userIP 값 + * checkType -> 검출위치 표시(C: 본문내용, F:첨부파일) + */ + resultData = (Map) datas.get(0); + resultMap.put("rspnsResult", "S"); + resultMap.put("data", resultData); + } else { + logger.error("HTTP response is error : " + response.getStatusLine().getStatusCode()); + resultMap.put("rspnsResult", "E"); + resultMap.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[HTTP process error::" + "e.getMessage()" + "]", e); + resultMap.put("rspnsResult", "E"); + resultMap.put("rspnsMssage", "처리도중 오류가 발생하였습니다."); + } finally { + if (br != null) br.close(); + response.close(); + } + } finally { + http.close(); + } + + logger.info("====== Http api 호출 End ========================="); + //return result.toString(); + return resultMap; + } +} diff --git a/src/main/java/gtpa/brs/util/HttpSessionRenew.java b/src/main/java/gtpa/brs/util/HttpSessionRenew.java new file mode 100644 index 0000000..91d1eaf --- /dev/null +++ b/src/main/java/gtpa/brs/util/HttpSessionRenew.java @@ -0,0 +1,64 @@ +package gtpa.brs.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.*; +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 15/05/2019 + * TIME : 10:37 AM + * Project : BRSPW + * Class : HttpSessionRenew + * Desc : + * ///////////////////////////////////////////////////// + */ +public class HttpSessionRenew implements HttpSessionListener, HttpSessionBindingListener, Serializable { + private Logger logger = LoggerFactory.getLogger(HttpSessionRenew.class); + + private SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + + public HttpSessionRenew() { + super(); + } + + public void sessionCreated(HttpSessionEvent event) { + HttpSession session = event.getSession(); + logger.info("TIME: " + session.getMaxInactiveInterval()); + logger.info("ID Session " + session.getId() + " create " + session.getCreationTime()); + } + + public void sessionDestroyed(HttpSessionEvent event) { + HttpSession session = event.getSession(); + + // print out the session id + if (session != null) { + logger.info("Session Id: " + session.getId()); + synchronized (session) { + // invalidating a session destroys it + session.invalidate(); + logger.info("DESTROYD SESSION"); + } + logger.info("ID Session " + session.getId() + " destroyd " + f.format(new Date())); + } + } + + @Override + public void valueBound(HttpSessionBindingEvent event) { + if (EgovMultiLoginPreventor.findByLoginId(event.getName())) { + EgovMultiLoginPreventor.invalidateByLoginId(event.getName()); + } + EgovMultiLoginPreventor.loginUsers.put(event.getName(), event.getSession()); + } + + @Override + public void valueUnbound(HttpSessionBindingEvent event) { + EgovMultiLoginPreventor.loginUsers.remove(event.getName(), event.getSession()); + } +} diff --git a/src/main/java/gtpa/brs/util/MessageType.java b/src/main/java/gtpa/brs/util/MessageType.java new file mode 100644 index 0000000..5ea8236 --- /dev/null +++ b/src/main/java/gtpa/brs/util/MessageType.java @@ -0,0 +1,6 @@ +package gtpa.brs.util; + +public final class MessageType { + public static final String VEHICLE_SEARCH_SUCCESS = ""; + public static final String VEHICLE_SEARCH_SUCCESS_CODE = ""; +} diff --git a/src/main/java/gtpa/brs/util/MessageUtils.java b/src/main/java/gtpa/brs/util/MessageUtils.java new file mode 100644 index 0000000..059ea88 --- /dev/null +++ b/src/main/java/gtpa/brs/util/MessageUtils.java @@ -0,0 +1,33 @@ +package gtpa.brs.util; + +import java.util.Locale; + +import org.springframework.context.support.MessageSourceAccessor; +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 30/04/2019 + * TIME : 4:16 PM + * Project : BRSPW + * Class : MessageUtils + * Desc : + * ///////////////////////////////////////////////////// + */ + + +public class MessageUtils { + private static MessageSourceAccessor msAcc; + + public void setMessageSourceAccessor(MessageSourceAccessor msAcc) { + MessageUtils.msAcc = msAcc; + } + + public static String getMessage(String code) { + return msAcc.getMessage(code, Locale.getDefault()); + } + + public static String getMessage(String code, Object[] objs) { + return msAcc.getMessage(code, objs, Locale.getDefault()); + } +} diff --git a/src/main/java/gtpa/brs/util/PageURIUtil.java b/src/main/java/gtpa/brs/util/PageURIUtil.java new file mode 100644 index 0000000..285231d --- /dev/null +++ b/src/main/java/gtpa/brs/util/PageURIUtil.java @@ -0,0 +1,60 @@ +package gtpa.brs.util; + +public class PageURIUtil { + private String INDEX_PAGE; + private String LOGIN_PAGE; + private String AUTH_CHECK; + + public void setIndexPage(String indexPage) { + this.INDEX_PAGE = indexPage; + } + + public void setLoginPage(String loginPage) { + LOGIN_PAGE = loginPage; + } + + public void setAuthCheck(String authCheck) { + AUTH_CHECK = authCheck; + } + + /** + * getIndexPageURI Main Layout URI 가져오기 + * + * @param {String} [default:def, tab, win, null]URI정보를 가지고 오기 위한 string. + * @date 2016. 08. 08 + * @returns {String} properties에 등록된 main layout URI정보를 가져온다. default값은 w5xml.defIndex에 등록된 값이다. + * @author InswaveSytems + * @example getIndexPageURI(" def "); return 예시 : "/test/test.xml" + */ + public String getIndexPageURI() { + return INDEX_PAGE; + } + + /** + * Default login page URI 가져오기 + * + * @date 2016. 08. 08 + * @returns {String} login page uri + * @author InswaveSystems + * @example getLoginPage(); return 예시 : "/test/test.xml" + */ + public String getLoginPage() { + return LOGIN_PAGE; + } + + public String getIndexPage() { + return INDEX_PAGE; + } + + /** + * 권한없는 페이지 호출시 보여주는 page url 가져오기 + * + * @date 2016. 09. 12 + * @returns {String} 권한없는 페이지 호출시 보여주는 page url + * @author InswaveSystems + * @example getLoginPage(); return 예시 : "/test/test.xml" + */ + public String getAuthCheck() { + return AUTH_CHECK; + } +} diff --git a/src/main/java/gtpa/brs/util/Result.java b/src/main/java/gtpa/brs/util/Result.java new file mode 100644 index 0000000..db05f69 --- /dev/null +++ b/src/main/java/gtpa/brs/util/Result.java @@ -0,0 +1,190 @@ +package gtpa.brs.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Result { + private Logger logger = LoggerFactory.getLogger(Result.class); + + public Map resultMap = new HashMap<>(); + + // 성공메세지 + public final static String STATUS_SUCESS = "S"; + + // 성공 메세지 + public final static String STATUS_SUCESS_MESSAGE = "정상 처리되었습니다."; + + // 오류메세지 + public final static String STATUS_ERROR = "E"; + + // 기본 에러 상세 코드 + public final static String STATUS_ERROR_DEFAULT_DETAIL_CODE = "E9999"; + + // 오류메세지 + public final static String STATUS_ERROR_MESSAGE = "처리 도중 오류가 발생되었습니다. 다시 시도 해주세요."; + + // 경고메세지 + public final static String STATUS_WARNING = "W"; + + // 경고메세지 + public final static String STATUS_WARNING_MESSAGE = "처리 도중 오류가 발생되었습니다. 다시 시도 해주세요."; + + // 경고메세지 + public final static String STATUS_SUCCESS_NODATA = "N"; + + // 경고메세지 + public final static String STATUS_SUCCESS_NODATA_MESSAGE = "조회된 결과가 없습니다."; + + // 기본(map 타입) 웹스퀘어 view + public final static String VIEW_DEFAULT = "wqView"; + + // 결과값에 대한 메세지 key명 + public final static String MESSAGE_KEY = "rsMsg"; + + // viewType이 VIEW_STRING 일 경우 참조하는 key + public final static String RESULT_KEY_DEFAULT = "result"; + + public void setData(String id, String data) { + resultMap.put(id, data); + } + + public void setData(String id, Map data) { + resultMap.put(id, data); + } + + public void setData(String id, List data) { + resultMap.put(id, data); + } + + public Map getResult() { + if (resultMap.get(MESSAGE_KEY) == null) { + setMsg(STATUS_SUCESS); + } + + return resultMap; + } + + /** + * 메세지 처리 - 상태 기본 메세지 처리 + * + * @param {} status : 메세지 상태 + * @date 2017.12.02 + * @memberOf + * @returns void + * @author Inswave + * @example WqModel.setMsg(STATUS_SUCCESS); + */ + public void setMsg(String status) { + String msg = ""; + if (status == STATUS_ERROR) { + msg = STATUS_ERROR_MESSAGE; + } else if (status == STATUS_SUCESS) { + msg = STATUS_SUCESS_MESSAGE; + } else if (status == STATUS_WARNING) { + msg = STATUS_WARNING_MESSAGE; + } else if (status == STATUS_SUCCESS_NODATA) { + msg = STATUS_SUCCESS_NODATA_MESSAGE; + } + setMsg(status, msg); + } + + /** + * 메세지 처리 + * + * @param {} status : 메세지 상태, message : 메세지 내용 + * @date 2017.12.02 + * @memberOf + * @returns void + * @author Inswave + * @example WqModel.setMsg(STATUS_SUCCESS, " 정상 처리되었습니다. "); + */ + public void setMsg(String status, String message) { + setMsg(status, message, null); + } + + /** + * 메세지 처리 + * + * @param {} status : 메세지 상태, message : 메세지 내용 + * @date 2017.12.02 + * @memberOf + * @returns void + * @author Inswave + * @example WqModel.setMsg(returnData, MsgUtil.STATUS_SUCCESS, " 정상 처리되었습니다. ", exception 객체); + */ + public void setMsg(String status, String message, Exception ex) { + Map result = new HashMap<>(); + if (status.equals(STATUS_SUCESS)) { + result.put("statusCode", STATUS_SUCESS); + result.put("message", getDefaultStatusMessage(message, STATUS_SUCESS_MESSAGE)); + } else if (status.equals(STATUS_SUCCESS_NODATA)) { + result.put("statusCode", STATUS_SUCCESS_NODATA); + result.put("message", getDefaultStatusMessage(message, STATUS_SUCCESS_NODATA_MESSAGE)); + } else if (status.equals(STATUS_WARNING)) { + result.put("statusCode", STATUS_WARNING); + result.put("message", getDefaultStatusMessage(message, STATUS_WARNING_MESSAGE)); + } else if (status.equals(STATUS_ERROR)) { + setErrorMsg(STATUS_ERROR_DEFAULT_DETAIL_CODE, message, ex); + return; + } else { + result.put("statusCode", status); + result.put("message", message); + } + if (ex != null) { + result.put("messageDetail", ex.getMessage()); + logger.error("Result Msg Log::" + status + "," + message + ",", ex); + } + + resultMap.put(MESSAGE_KEY, result); + } + + /** + * 오류 메세지 처리 + * + * @param {} errorCode : 오류코드, message : 메세지 내용 + * @date 2017.12.02 + * @memberOf + * @returns void + * @author Inswave + * @example WqModel.setErrorMsg(" E0001 ", " 세션이없습니다. "); + */ + public void setErrorMsg(String errorCode, String message) { + setErrorMsg(errorCode, message, null); + } + + /** + * 오류 메세지 처리 + * + * @param {} errorCode : 오류코드, message : 메세지 내용 + * @date 2017.12.02 + * @memberOf + * @returns void + * @author Inswave + * @example WqModel.setErrorMsg(" E0001 ", " 세션이없습니다. ", exception 객체); + */ + public void setErrorMsg(String errorCode, String message, Exception ex) { + Map result = new HashMap<>(); + + result.put("statusCode", STATUS_ERROR); + result.put("errorCode", errorCode); + result.put("message", getDefaultStatusMessage(message, STATUS_ERROR_MESSAGE)); + + if (ex != null) { + result.put("messageDetail", "" + ex.getMessage()); + } + resultMap.put(MESSAGE_KEY, result); + } + + public String getDefaultStatusMessage(String message, String defMessage) { + if (message == null) { + return defMessage; + } + return message; + } + + ; +} \ No newline at end of file diff --git a/src/main/java/gtpa/brs/util/SHA256Util.java b/src/main/java/gtpa/brs/util/SHA256Util.java new file mode 100644 index 0000000..3e2c81d --- /dev/null +++ b/src/main/java/gtpa/brs/util/SHA256Util.java @@ -0,0 +1,31 @@ +package gtpa.brs.util; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.security.MessageDigest; + +public class SHA256Util { + private static Logger logger = LoggerFactory.getLogger(SHA256Util.class); + + public static String encryptSHA256(String str) { + String result = ""; + try { + MessageDigest sh = MessageDigest.getInstance("SHA-256"); + sh.update(str.getBytes()); + byte[] byteData = sh.digest(); + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < byteData.length; i++) { + sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); + } + result = sb.toString(); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("SHA256Util Encrypt Error::" + "e.getMessage()", e); + } + return result; + } +} diff --git a/src/main/java/gtpa/brs/vehicle/service/VehicleService.java b/src/main/java/gtpa/brs/vehicle/service/VehicleService.java new file mode 100644 index 0000000..8a7a1d9 --- /dev/null +++ b/src/main/java/gtpa/brs/vehicle/service/VehicleService.java @@ -0,0 +1,218 @@ +package gtpa.brs.vehicle.service; + +import gtpa.brs.vehicle.service.impl.VehicleMapper; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 21/05/2019 + * TIME : 1:09 PM + * Project : BRSPW + * Class : VehicleService + * Desc : + * ///////////////////////////////////////////////////// + */ +@SuppressFBWarnings +@Service +public class VehicleService { + private Logger logger = LoggerFactory.getLogger(VehicleService.class); + + @Resource(name = "vehicleDao") + VehicleMapper vehicleMapper; + + @Resource(name = "globalsProperties") + private Properties env; + + /*@Autowired + HttpClient httpClient; +*/ + public List getVhclesInfo(Map param) { + List result = new ArrayList<>(); + try { + result = vehicleMapper.getVhclesInfo(param); + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + } + return result; + } + + public Map getVhcleInfo(Map param) { + return vehicleMapper.getVhcleInfo(param); + } + + public Map getVhcleInfoByCI(Map param) { + return vehicleMapper.getVhcleInfoByCI(param); + } + + public Map rtnMyVhclesBySearchParam(Map param) { + return vehicleMapper.rtnMyVhclesBySearchParam(param); + } + + public Map vhcleInquiry(Map param) { + Map result; + String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.vhcleRgistInfo"); + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + String sysId = env.getProperty("Globals.SmartPlatfom.SysId"); + String vhcleNo = (String) param.get("vhcleNo"); + String uniqueID = UUID.randomUUID().toString(); + /* + * sysId 시스템 ID (6) + tranDate 전송일시 (14) + transId 트랜잭션ID(요청 원문 식별 값) (40) + levyStdde 부과 기준일 (8) + inqireSeCode 조회 구분 코드 + vhrno 자동차등록번호 (16) + vin 차대번호 (17) + * */ + Map reqData = new LinkedHashMap(); + reqData.put("sysId", sysId); + reqData.put("transId", uniqueID); + reqData.put("tranDate", now); + reqData.put("levyStdde", today); + reqData.put("inqireSeCode", "3"); + reqData.put("vhrno", vhcleNo); + reqData.put("vin", ""); + + logger.info("reqData::" + reqData); + result = requestVhclInfo(url, reqData); + logger.info("result::" + result); + + return result; + } + + public Map requestVhclInfo(String requestURL, + Map reqData + ) { + Map result = new HashMap(); + //CloseableHttpClient client = HttpClients.createDefault(); + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(120000) + .setConnectTimeout(120000) + .setConnectionRequestTimeout(120000) + .setStaleConnectionCheckEnabled(true) + .build(); + CloseableHttpClient client = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) + .build(); + try { + String token = env.getProperty("Globals.SmartPlatform.token"); + HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성 + postRequest.setHeader("Accept", "application/json"); + postRequest.setHeader("BROKER_TOKEN", token); + List pairs = new ArrayList<>(); + Iterator keys = reqData.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + pairs.add(new BasicNameValuePair(key, (String) reqData.get(key))); + } + postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8")); + HttpResponse response = client.execute(postRequest); + //Response 출력 + if (response.getStatusLine().getStatusCode() == 200) { + ResponseHandler handler = new BasicResponseHandler(); + String body = handler.handleResponse(response); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(body); + JSONObject jsonObj = (JSONObject) obj; + JSONObject data = (JSONObject) jsonObj.get("data"); + logger.info("body::" + jsonObj.toJSONString()); + if (jsonObj.get("result").equals("SUCCESS")) { + if (jsonObj.get("resultCode").equals("0000")) { + result.put("rspnsResult", "S"); + result.put("data", data); + result.put("registDe", data.get("registDe")); + result.put("registDetailCode", data.get("registDetailCode")); + result.put("mberSeCode", data.get("mberSeCode")); + result.put("mberNm", data.get("mberNm")); + result.put("mberSeNo", data.get("mberSeNo")); + result.put("telno", data.get("telno")); + result.put("aftrVhrno", data.get("aftrVhrno")); + result.put("prposSeCode", data.get("prposSeCode")); + result.put("frntVhrno", data.get("frntVhrno")); + result.put("vhrno", data.get("vhrno")); + result.put("vin", data.get("vin")); + result.put("cnm", data.get("cnm")); + result.put("caagEndde", data.get("caagEndde")); + result.put("changeDe", data.get("changeDe")); + result.put("vhctyAsortCode", data.get("vhctyAsortCode")); + result.put("vhctyTyCode", data.get("vhctyTyCode")); + result.put("vhctySeCode", data.get("vhctySeCode")); + result.put("vhctyAsortNm", data.get("vhctyAsortNm")); + result.put("vhctyTyNm", data.get("vhctyTyNm")); + result.put("vhctySeNm", data.get("vhctySeNm")); + result.put("fomNm", data.get("fomNm")); + result.put("acqsDe", data.get("acqsDe")); + result.put("acqsEndDe", data.get("acqsEndDe")); + result.put("frstRegistDe", data.get("frstRegistDe")); + result.put("nmplCsdyRemnrDe", data.get("nmplCsdyRemnrDe")); + result.put("yblMd", data.get("yblMd")); + result.put("originSeCode", data.get("originSeCode")); + result.put("transrRegistDe", data.get("transrRegistDe")); + result.put("spcfRegistSttusCode", data.get("spcfRegistSttusCode")); + result.put("colorNm", data.get("colorNm")); + result.put("nmplStndrdCode", data.get("nmplStndrdCode")); + result.put("ownerLegaldongCode", data.get("ownerLegaldongCode")); + } else { + result.put("rspnsResult", "E"); + } + result.put("rspnsCode", data.get("rspnsCode")); + result.put("rspnsMssage", data.get("rspnsMssage")); + } else { + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", jsonObj.get("resultMessage")); + } + + } else { + logger.error("response is error : " + response.getStatusLine().getStatusCode()); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "response is error"); + } + } catch (RuntimeException re) { + logger.error("[RuntimeException::" + "" + "]", re); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "시스템 오류가 발생하였습니다."); + } catch (Exception e) { + logger.error("[process error::" + "" + "]", e); + result.put("rspnsResult", "E"); + result.put("rspnsCode", "9999"); + result.put("rspnsMssage", "국토교통부의 자동차관리시스템에 차량정보 확인 요청 시 연결 오류가 발생하였습니다. 잠시 후에 다시 시도하여 주십시오"); + } finally { + try { + client.close(); + } catch (IOException io) { + logger.error("[process error::" + "io.getMessage()" + "]", io); + } + + } + return result; + } +} diff --git a/src/main/java/gtpa/brs/vehicle/service/impl/VehicleMapper.java b/src/main/java/gtpa/brs/vehicle/service/impl/VehicleMapper.java new file mode 100644 index 0000000..d9dc1eb --- /dev/null +++ b/src/main/java/gtpa/brs/vehicle/service/impl/VehicleMapper.java @@ -0,0 +1,46 @@ +package gtpa.brs.vehicle.service.impl; + +import egovframework.rte.psl.dataaccess.EgovAbstractMapper; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * ///////////////////////////////////////////////////// + * Company : MQNIC + * Create : seunghyun + * Date : 21/05/2019 + * TIME : 1:11 PM + * Project : BRSPW + * Class : VehicleMapper + * Desc : + * ///////////////////////////////////////////////////// + */ +@Repository("vehicleDao") +public class VehicleMapper extends EgovAbstractMapper { + private String NAMESPACE = "VehicleDao"; + + public List getVhclesInfo(Map param) { + return selectList(NAMESPACE + ".getVhclesInfo", param); + } + + public Map getVhcleInfo(Map param) { + return selectOne(NAMESPACE + ".getVhcleInfo", param); + } + + public Map getVhcleInfoByCI(Map param) { + return selectOne(NAMESPACE + ".getVhcleInfoByCI", param); + } + + public Map rtnMyVhclesBySearchParam(Map param) { + String[] vhcles = param.get("vhcleNum").toString().split(","); + List vhclesList = new ArrayList<>(); + for (String item : vhcles) { + vhclesList.add(item); + } + param.put("vhclesNum", vhclesList); + return selectOne(NAMESPACE + ".rtnMyVhclesBySearchParam", param); + } +}