From 966bfcadb2d07b52a36f7123fa1909476104cc23 Mon Sep 17 00:00:00 2001 From: KNKIM Date: Fri, 13 Aug 2021 14:17:36 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B2=80=EC=83=89=EC=97=94=EC=A7=84=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=EA=B4=80=EB=A0=A8=20=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EB=B0=98=EC=9E=85=ED=95=98=EC=97=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 27 +- src/main/java/cmm/Constant.java | 207 ++ .../java/cmm/service/CmmActivityHstVO.java | 203 ++ .../cmm/service/CmmAmsAssetCouncilVO.java | 35 + .../cmm/service/CmmAmsAssetKeywordsVO.java | 46 + .../cmm/service/CmmAmsAssetMediaOcrVO.java | 82 + .../java/cmm/service/CmmAmsAssetMediaVO.java | 811 ++++++++ .../java/cmm/service/CmmAmsAssetTagsVO.java | 47 + src/main/java/cmm/service/CmmAmsAssetsVO.java | 500 +++++ .../service/CmmAmsDocTableOfContentsVO.java | 65 + src/main/java/cmm/service/CmmApiService.java | 25 + src/main/java/cmm/service/CmmBbsService.java | 26 + src/main/java/cmm/service/CmmBbsVO.java | 422 ++++ .../java/cmm/service/CmmBbsValidator.java | 23 + src/main/java/cmm/service/CmmCmsAssetsVO.java | 555 ++++++ .../java/cmm/service/CmmCmsContentsVO.java | 712 +++++++ .../cmm/service/CmmCmsCouncilsInfoVO.java | 192 ++ .../java/cmm/service/CmmCmsKeywordsVO.java | 31 + .../cmm/service/CmmCmsReferenceDataVO.java | 45 + .../java/cmm/service/CmmCmsRelatedDataVO.java | 37 + src/main/java/cmm/service/CmmCmsService.java | 18 + .../cmm/service/CmmCmsSupplementDataVO.java | 54 + src/main/java/cmm/service/CmmCmsTagsVO.java | 31 + .../java/cmm/service/CmmCmsUserGroupVO.java | 36 + src/main/java/cmm/service/CmmCmsVO.java | 571 ++++++ .../java/cmm/service/CmmCouncilInfoVO.java | 274 +++ .../cmm/service/CmmCulturePostContentVO.java | 143 ++ .../java/cmm/service/CmmCulturePostVO.java | 220 +++ .../cmm/service/CmmExtWebzineSubscribeVO.java | 61 + src/main/java/cmm/service/CmmFileService.java | 22 + .../cmm/service/CmmMenuManageService.java | 12 + src/main/java/cmm/service/CmmMetaVO.java | 90 + .../cmm/service/CmmPmsMapContentsService.java | 20 + .../java/cmm/service/CmmPmsMapContentsVO.java | 508 +++++ src/main/java/cmm/service/CmmScrapInfoVO.java | 162 ++ src/main/java/cmm/service/CmmService.java | 146 ++ src/main/java/cmm/service/CmmThemeVO.java | 111 ++ src/main/java/cmm/service/ExtService.java | 24 + src/main/java/cmm/service/FileDetailVO.java | 142 ++ .../java/cmm/service/FileManagementVO.java | 109 + src/main/java/cmm/service/FileMasterVO.java | 40 + .../java/cmm/service/SchedulerService.java | 95 + .../cmm/service/impl/CmmApiServiceImpl.java | 1409 +++++++++++++ src/main/java/cmm/service/impl/CmmBbsDAO.java | 66 + .../cmm/service/impl/CmmBbsServiceImpl.java | 132 ++ src/main/java/cmm/service/impl/CmmCmsDAO.java | 66 + .../cmm/service/impl/CmmCmsServiceImpl.java | 76 + src/main/java/cmm/service/impl/CmmDAO.java | 339 ++++ .../java/cmm/service/impl/CmmFileDAO.java | 79 + .../cmm/service/impl/CmmFileServiceImpl.java | 377 ++++ .../impl/CmmMenuManageServiceImpl.java | 31 + .../service/impl/CmmPmsMapContentsDAO.java | 59 + .../impl/CmmPmsMapContentsServiceImpl.java | 104 + .../java/cmm/service/impl/CmmServiceImpl.java | 559 ++++++ src/main/java/cmm/service/impl/ExtDAO.java | 79 + .../java/cmm/service/impl/ExtServiceImpl.java | 1210 ++++++++++++ src/main/java/cmm/taglibs/FunctionTag.java | 381 ++++ src/main/java/cmm/util/CmmCodeUtil.java | 70 + src/main/java/cmm/util/CmmCodeVO.java | 46 + src/main/java/cmm/util/CmmUtil.java | 1068 ++++++++++ src/main/java/cmm/util/CmmVO.java | 673 +++++++ src/main/java/cmm/util/DataMap.java | 196 ++ src/main/java/cmm/util/DateUtil.java | 355 ++++ src/main/java/cmm/util/ExcelUtil.java | 776 ++++++++ src/main/java/cmm/util/FileUtil.java | 193 ++ src/main/java/cmm/util/MailUtil.java | 156 ++ src/main/java/cmm/util/MessageAlertUtil.java | 701 +++++++ src/main/java/cmm/util/MyAuthentication.java | 20 + src/main/java/cmm/util/cxRovecat.java | 245 +++ src/main/java/cmm/web/CmmController.java | 1747 +++++++++++++++++ .../com/cmm/EgovMessageSource.java | 87 + .../com/cmm/service/CmmnDetailCode.java | 217 ++ .../com/cmm/service/EgovCmmUseService.java | 64 + .../cmm/service/EgovUserDetailsService.java | 26 + .../com/cmm/service/impl/CmmUseDAO.java | 62 + .../service/impl/EgovCmmUseServiceImpl.java | 91 + .../com/cmm/util/EgovUserDetailsHelper.java | 61 + .../kccf/res/service/ResourcesService.java | 50 + .../kccf/res/service/impl/ResourcesDAO.java | 183 ++ .../service/impl/ResourcesServiceImpl.java | 189 ++ .../kccf/res/web/ResourcesController.java | 489 +++++ .../java/kccf/sch/web/SearchController.java | 5 + .../kccf/ton/service/LocalToonService.java | 21 + .../java/kccf/ton/service/LocalToonVO.java | 251 +++ .../kccf/ton/service/impl/LocalToonDAO.java | 60 + .../service/impl/LocalToonServiceImpl.java | 67 + .../kccf/ton/web/LocalToonController.java | 242 +++ .../nlib/security/SpringSecurityConfig.java | 2 + .../user/service/impl/LoginServiceImpl.java | 2 +- .../java/nlib/user/web/LoginController.java | 2 + src/main/resources/nlib/nlib.properties | 18 + src/main/webapp/WEB-INF/lib/queryapi530.jar | Bin 0 -> 62492 bytes src/main/webapp/login/index.jsp | 2 + src/main/webapp/test/callback.html | 22 + src/main/webapp/test/naverLogin.html | 22 + 95 files changed, 20426 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cmm/Constant.java create mode 100644 src/main/java/cmm/service/CmmActivityHstVO.java create mode 100644 src/main/java/cmm/service/CmmAmsAssetCouncilVO.java create mode 100644 src/main/java/cmm/service/CmmAmsAssetKeywordsVO.java create mode 100644 src/main/java/cmm/service/CmmAmsAssetMediaOcrVO.java create mode 100644 src/main/java/cmm/service/CmmAmsAssetMediaVO.java create mode 100644 src/main/java/cmm/service/CmmAmsAssetTagsVO.java create mode 100644 src/main/java/cmm/service/CmmAmsAssetsVO.java create mode 100644 src/main/java/cmm/service/CmmAmsDocTableOfContentsVO.java create mode 100644 src/main/java/cmm/service/CmmApiService.java create mode 100644 src/main/java/cmm/service/CmmBbsService.java create mode 100644 src/main/java/cmm/service/CmmBbsVO.java create mode 100644 src/main/java/cmm/service/CmmBbsValidator.java create mode 100644 src/main/java/cmm/service/CmmCmsAssetsVO.java create mode 100644 src/main/java/cmm/service/CmmCmsContentsVO.java create mode 100644 src/main/java/cmm/service/CmmCmsCouncilsInfoVO.java create mode 100644 src/main/java/cmm/service/CmmCmsKeywordsVO.java create mode 100644 src/main/java/cmm/service/CmmCmsReferenceDataVO.java create mode 100644 src/main/java/cmm/service/CmmCmsRelatedDataVO.java create mode 100644 src/main/java/cmm/service/CmmCmsService.java create mode 100644 src/main/java/cmm/service/CmmCmsSupplementDataVO.java create mode 100644 src/main/java/cmm/service/CmmCmsTagsVO.java create mode 100644 src/main/java/cmm/service/CmmCmsUserGroupVO.java create mode 100644 src/main/java/cmm/service/CmmCmsVO.java create mode 100644 src/main/java/cmm/service/CmmCouncilInfoVO.java create mode 100644 src/main/java/cmm/service/CmmCulturePostContentVO.java create mode 100644 src/main/java/cmm/service/CmmCulturePostVO.java create mode 100644 src/main/java/cmm/service/CmmExtWebzineSubscribeVO.java create mode 100644 src/main/java/cmm/service/CmmFileService.java create mode 100644 src/main/java/cmm/service/CmmMenuManageService.java create mode 100644 src/main/java/cmm/service/CmmMetaVO.java create mode 100644 src/main/java/cmm/service/CmmPmsMapContentsService.java create mode 100644 src/main/java/cmm/service/CmmPmsMapContentsVO.java create mode 100644 src/main/java/cmm/service/CmmScrapInfoVO.java create mode 100644 src/main/java/cmm/service/CmmService.java create mode 100644 src/main/java/cmm/service/CmmThemeVO.java create mode 100644 src/main/java/cmm/service/ExtService.java create mode 100644 src/main/java/cmm/service/FileDetailVO.java create mode 100644 src/main/java/cmm/service/FileManagementVO.java create mode 100644 src/main/java/cmm/service/FileMasterVO.java create mode 100644 src/main/java/cmm/service/SchedulerService.java create mode 100644 src/main/java/cmm/service/impl/CmmApiServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/CmmBbsDAO.java create mode 100644 src/main/java/cmm/service/impl/CmmBbsServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/CmmCmsDAO.java create mode 100644 src/main/java/cmm/service/impl/CmmCmsServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/CmmDAO.java create mode 100644 src/main/java/cmm/service/impl/CmmFileDAO.java create mode 100644 src/main/java/cmm/service/impl/CmmFileServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/CmmMenuManageServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/CmmPmsMapContentsDAO.java create mode 100644 src/main/java/cmm/service/impl/CmmPmsMapContentsServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/CmmServiceImpl.java create mode 100644 src/main/java/cmm/service/impl/ExtDAO.java create mode 100644 src/main/java/cmm/service/impl/ExtServiceImpl.java create mode 100644 src/main/java/cmm/taglibs/FunctionTag.java create mode 100644 src/main/java/cmm/util/CmmCodeUtil.java create mode 100644 src/main/java/cmm/util/CmmCodeVO.java create mode 100644 src/main/java/cmm/util/CmmUtil.java create mode 100644 src/main/java/cmm/util/CmmVO.java create mode 100644 src/main/java/cmm/util/DataMap.java create mode 100644 src/main/java/cmm/util/DateUtil.java create mode 100644 src/main/java/cmm/util/ExcelUtil.java create mode 100644 src/main/java/cmm/util/FileUtil.java create mode 100644 src/main/java/cmm/util/MailUtil.java create mode 100644 src/main/java/cmm/util/MessageAlertUtil.java create mode 100644 src/main/java/cmm/util/MyAuthentication.java create mode 100644 src/main/java/cmm/util/cxRovecat.java create mode 100644 src/main/java/cmm/web/CmmController.java create mode 100644 src/main/java/egovframework/com/cmm/EgovMessageSource.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/EgovUserDetailsService.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/util/EgovUserDetailsHelper.java create mode 100644 src/main/java/kccf/res/service/ResourcesService.java create mode 100644 src/main/java/kccf/res/service/impl/ResourcesDAO.java create mode 100644 src/main/java/kccf/res/service/impl/ResourcesServiceImpl.java create mode 100644 src/main/java/kccf/res/web/ResourcesController.java create mode 100644 src/main/java/kccf/ton/service/LocalToonService.java create mode 100644 src/main/java/kccf/ton/service/LocalToonVO.java create mode 100644 src/main/java/kccf/ton/service/impl/LocalToonDAO.java create mode 100644 src/main/java/kccf/ton/service/impl/LocalToonServiceImpl.java create mode 100644 src/main/java/kccf/ton/web/LocalToonController.java create mode 100644 src/main/webapp/WEB-INF/lib/queryapi530.jar create mode 100644 src/main/webapp/login/index.jsp create mode 100644 src/main/webapp/test/callback.html create mode 100644 src/main/webapp/test/naverLogin.html diff --git a/pom.xml b/pom.xml index 115e6674..bdf6c4f5 100644 --- a/pom.xml +++ b/pom.xml @@ -83,6 +83,11 @@ egovframework.rte.fdl.property ${egovframework.rte.version} + + egovframework.rte + egovframework.rte.fdl.security + ${egovframework.rte.version} + javax.servlet @@ -120,6 +125,22 @@ egovframework.rte.fdl.crypto ${egovframework.rte.version} + + + org.apache.poi + poi + 5.0.0 + + + org.apache.poi + poi-ooxml + 3.9 + + + commons-httpclient + commons-httpclient + 3.1 + @@ -263,7 +284,11 @@ gson 2.8.7 - + + org.json + json + 20201115 + diff --git a/src/main/java/cmm/Constant.java b/src/main/java/cmm/Constant.java new file mode 100644 index 00000000..cc6c6fc5 --- /dev/null +++ b/src/main/java/cmm/Constant.java @@ -0,0 +1,207 @@ +package cmm; + + +/** + * 상수 정의 + * @author Kdmistrator + * + */ +public class Constant { + public static final String ENCODING_UTF8 = "UTF-8"; + //public static final String NAVER_API_CLIENT_ID = "8eXEekRgHTb5SgAJNqOT"; // server//사용하지 말것 + //public static final String NAVER_API_CLIENT_ID = "E2NR9PXuVJf6GHnnaGrs"; // local //사용하지 말것 + //public static final String GOOGLE_API_KEY = "AIzaSyBs9SeIzKKCM392GpdqxORkHDItauzm7WA"; // 사용하지 말것 + + // FCM Server key + public static final String FCM_SERVER_SEND_URL = "https://fcm.googleapis.com/fcm/send"; + public static final String FCM_SERVER_KEY = "AAAAYRjFhhA:APA91bHcWX8Uan5cc1MuXGvwPQdgcmmRwiuYlO_-FA_o-ysoHBvFlwiGUqApNIWCUbsbSTGbKwEVKqPu8WZV5GH7nbVjo5wWXtXyUzn9PfRdEjEsuhK_XhdLEJ5rH714pnBeu-KNgUxm"; + public static final String FCM_SEND_YN = "N"; + + // kccf home key + public static final String KCCF_HOME_KEY = "kccf.home"; + + // com/context-properties.xml 의 ams 서버관련 키값 + public static final String AMS_SERVER_KEY = "ams.server"; + public static final String AMS_FILE_PATH_KEY = "ams.file.url.path"; + public static final String AMS_ASSETS_PATH_KEY = "ams.assets.url.path"; + public static final String AMS_THUMBNAIL_PATH_KEY = "ams.thumbnail.url.path"; + public static final String NFS_DOC_KEY = "ams.doc.path"; + + // upload 경로 + public static final String UPLOAD_HOME_KEY = "file.upload.home"; // 서버경로 (upload폴더 상위경로) : 로컬 개발시 upload 파일이 로컬에 존재하지 않을 경우 사용 + + //pdfview + public static final String PDF_VIEW_KEY = "pdf.view.path"; + + // com/context-properties.xml 의 nas 서버관련 키값 + public static final String NFS_NAS_KEY = "ams.nas.path"; + + // 나클립스 동영상 플레이어 주소 + public static final String MEDIA_PLAYER_KEY = "naclips.server"; + public static final String MEDIA_PLAYER_VOD_KEY = "naclips.vod.path"; + public static final String MEDIA_PLAYER_AUDIO_KEY = "naclips.audio.path"; + + public static final String [] AREA_CODE_ARRAY = {"02", "051", "053", "032", "062", "042", "052", "044" , "031" , "033" , "043" , "041" , "063", "061" , "054" , "055" , "064" , "070", "0505"}; + public static final String [] MOBILE_CODE_ARRAY = {"010", "011", "016", "017", "018", "019"}; + + public static final String [] DF_SIDO_CODE_ARRAY = {"11","26","27","28","29","30","31","41","42","43","44","45","46","47","48","49"}; + public static final String [] DF_SIDO_NAME_ARRAY = {"서울","부산","대구","인천","광주","대전","울산","경기","강원","충북","충남","전북","전남","경북","경남","제주"}; + + public static final String [] AIS_SIDO_NAME_ARRAY = {"서울","부산","대구","인천","광주","대전","울산","경기","강원","충북","충남","전북","전남","경북","경남","제주","세종","북한","전국"}; + public static final String [] AIS_SIDO_PARAM_NAME_ARRAY = {"서울특별시","부산광역시","대구광역시","인천광역시","광주광역시","대전광역시","울산광역시","경기도","강원도","충청북도","충청남도","전라북도","전라남도","경상북도","경상남도","제주특별자치도","세종특별자치시","북한","전국"}; + + public static final String [] SIDO_NAME_ARRAY = {"서울특별시","부산광역시","대구광역시","인천광역시","광주광역시","대전광역시","울산광역시","경기도","강원도","충청북도","충청남도","전라북도","전라남도","경상북도","경상남도","세종특별자치시","제주특별자치도"}; + + public static final String [] DF_DISS_CODE_ARRAY = {"1","2","3","4","5"}; + public static final String [] DF_DISS_NAME_ARRAY = {"감기","눈병","식중독","천식","피부병"}; + + public static final String [] FCST_TIME_ARRAY = {"03","06","09","12","15","18","21","00"}; + public static final String [][] FCST_TIME_MAPPING_ARRAY = {{"01","02","03"}, {"04","05","06"},{"07","08","09"},{"10","11","12"},{"13","14","15"},{"16","17","18"},{"19","20","21"},{"22","23","00"}}; + + public static final String [] GIA_COTENT_TYPE_ID_ARRAY = {"12","14","15","25","28","32","38","39"}; + public static final String [] GIA_COTENT_TYPE_NAME_ARRAY = {"관광지","문화시설","축제/공연/행사","여행코스","레포츠","숙박","쇼핑","음식"}; + // 축제/공연/행사 -> 공연ㆍ행사 + + public static final String [] DF_COUNCIL_CODE_ARRAY = {"GW","GG","GB","GN","GJ","DG","DJ","BU","SU","SJ","US","IC","JB","JN","JJ","CB","CN"}; + public static final String [] AMS_ASSET_TYPE_ARRAY = {"이미지","동영상","오디오","문서","링크"}; + public static final String [] AMS_CATEGORY_ARRAY = {"A","B","C","D","E","F","G","H","I"}; + + public static final String USE_AT_Y = "Y"; + public static final String USE_AT_N = "N"; + + public static final String CMS_SERIES_DEFAULT = "마을신앙"; + + public static final String QNA_ANSW_N = "답변대기"; + public static final String QNA_ANSW_Y = "답변완료"; + public static final String QNA_PROC_P = "2"; + public static final String QNA_PROC_C = "3"; + + public static final String VIEW_TYPE_L = "L"; //목록 + public static final String VIEW_TYPE_D = "D"; //상세 + + + public static final String LOGIN_HIS_TYPE_I = "I"; + public static final String LOGIN_HIS_TYPE_O = "O"; + + public static final String CODE_ID_COM004 = "COM004"; // 게시판 + public static final String CODE_ID_COM013 = "COM013"; // 회원상태 + public static final String CODE_ID_COM034 = "COM034"; // 이용자 + public static final String CODE_ID_FMS004 = "FMS004"; // 테마 + public static final String CODE_ID_FMS005 = "FMS005"; // 시리즈 + public static final String CODE_ID_FMS006 = "FMS006"; // 시대 + public static final String CODE_ID_FMS007 = "FMS007"; // 자료유형 + public static final String CODE_ID_FMS008 = "FMS008"; // 콘텐츠유형 + public static final String CODE_ID_FMS009 = "FMS009"; // 지역 + public static final String CODE_ID_FMS012 = "FMS012"; // 자료유형(대분류) + public static final String CODE_ID_FMS013 = "FMS013"; // 자료유형(중분류) + public static final String CODE_ID_FMS014 = "FMS014"; // 주제분야(대주제) + public static final String CODE_ID_FMS015 = "FMS015"; // 주제분야(중주제) + public static final String CODE_ID_FMS016 = "FMS016"; // 지역문화정보 + public static final String CODE_ID_FMS017 = "FMS017"; // 배너위치 + public static final String CODE_ID_FMS018 = "FMS018"; // 문화원 지역 + public static final String CODE_ID_FMS019 = "FMS019"; // 지역문화 PICK(자산유형) + public static final String CODE_ID_FMS020 = "FMS020"; // 로고위치 + + public static final String [] ASSETS_CLASS_ARRAY = {"기획","일반","특화","기타"}; //콘텐츠유형 + public static final String [] ASSETS_CLASS_ARRAY_PICK = {"일반","특화"}; // 지역문화Pick 콘텐츠유형 + public static final String [] ASSETS_TYPE_ARRAY_PICK = {"문서", "이미지", "동영상", "오디오", "링크"}; // 지역문화Pick 자산유형 ("웹툰" 제외) + public static final String [] ASSETS_TYPE_ARRAY_PICK_ALL = {"문서", "이미지", "동영상", "오디오", "링크", "웹툰"}; + + public static final String RES_SEARCHTYPE = "문화원소장"; // 소장자료 검색조건 + + public static final String CODE_ID_COM013_P = "P"; // 회원 가입승인상태 + public static final String CODE_ID_COM013_D = "D"; // 회원삭제 상태 + + public static final String CODE_ID_FMS017_M01 = "M01"; // 배너위치 메인 + public static final String CODE_ID_FMS017_M02 = "M02"; // 배너위치 PICK + public static final String CODE_ID_FMS017_M99 = "M99"; // 배너위치 문화원 + + public static final int BBS_ID_NOTICE_MAIN_VIEW = 3; + public static final int BBS_ID_QNA_MAIN_VIEW = 4; + public static final int BBS_ID_CUL_MAIN_VIEW = 2; + + public static final String BASE_DISTANCE = "10"; + + public static final int CMM_CONTENTS_LIMIT_CNT = 6; // 지역문화Pick 목록 이미지 개수 변경 (2019.10.02) + public static final int CMM_TAGS_LIMIT_CNT = 9; + public static final int CMM_CONTENTS_SMALL_LIMIT_CNT = 2; + + public static final String RECOMMEND_YN_Y = "Y"; + public static final String RECOMMEND_YN_N = "N"; + + public static final String HAVE_DETAIL_CONDITION_Y = "Y"; + public static final String HAVE_DETAIL_CONDITION_N = "N"; + + public static final String SEARCH_TYPE_1 = "1"; + public static final String SEARCH_TYPE_2 = "2"; + + public static final String BBS_TOP_YN_Y = "Y"; + public static final int BBS_TOP_CNT = 4; + + public static final String PMS_CONT_TYPE_G = "EXT_GIA_INFO"; // 한국관광공사 + public static final String PMS_CONT_TYPE_C = "CMM_COUNCIL_INFO"; // 문화원 + + public static final String CONTENT_TYPE_A = "A"; // 지역문화 PICK + public static final String CONTENT_TYPE_B = "B"; // BBS + public static final String CONTENT_TYPE_C = "C"; // 지역문화이야기 + public static final String CONTENT_TYPE_G = "G"; // 지역문화체험 -한국관광공사 api + public static final String CONTENT_TYPE_I = "I"; // 문화원 + public static final String CONTENT_TYPE_P = "P"; // 지역문화포스트 + public static final String CONTENT_TYPE_T = "T"; // 지역문화툰 + + public static final String ACTIVITY_TYPE_B = "B"; // 스크랩 + public static final String ACTIVITY_TYPE_O = "O"; // 최근열람 + + public static final String[] M_TYPE_ARRAY = {"이미지","동영상","오디오","링크"}; + public static final String M_TYPE_I = "I"; // 이미지 + public static final String M_TYPE_V = "V"; // 비디오(동영상) + public static final String M_TYPE_A = "A"; // 오디오 + + // 사용 구분 + public static final String UA_TYPE_W = "W"; // 웹 + public static final String UA_TYPE_M = "M"; // 모바일웹 + public static final String UA_TYPE_A = "A"; // 앱 + public static final String UA_TYPE_R = "R"; // RIS + + + public static final String BBS_ID_NOTICE = "BBSMSTR_000000000001"; // 공지사항 + public static final String BBS_ID_FAQ = "BBSMSTR_000000000002"; // FAQ + public static final String BBS_ID_CUL = "BBSMSTR_000000000003"; // 문화원소식 + public static final String BBS_ID_OUR = "BBSMSTR_000000000004"; // 우리문화 + + public static final String [] BBS_ID_ARRAY = {BBS_ID_NOTICE,BBS_ID_FAQ,BBS_ID_CUL,BBS_ID_OUR}; + public static final String [] BBS_NAME_ARRAY = {"공지사항","FAQ","문화원소식","우리문화"}; + + public static final String [] BBS_MAIN_CUL_TYPE_ARRAY1 = {"공지","뉴스"}; + public static final String [] BBS_MAIN_CUL_TYPE_ARRAY2 = {"행사","축제"}; + + public static final String AUTH_GROUP_DEFAULT_ID = "GROUP_00000000000000"; + public static final String AUTH_ORGNZT_DEFAULT_ID = "ORGNZT_0000000000000"; + + public static final String AUTH_ROLE_ANONYMOUS = "ROLE_ANONYMOUS"; + public static final String AUTH_ROLE_KDM = "ROLE_KDM"; + public static final String AUTH_ROLE_KDM_URL = "/kdm/usr/kdmMgrList.do"; + public static final String AUTH_ROLE_SYM = "ROLE_SYM"; + public static final String AUTH_ROLE_SYM_URL = "/kdm/usr/kdmMgrList.do"; + + public static final String[] INTERCEPTOR_PASS_PATH_ARRAY = {"kdm"}; + + public static final String ANDROID = "android"; + public static final String IOS = "ios"; + public static final String PREFIX_M = "/m"; + + public static final String SCHEDULER_EXT_DF_INFO = "건강질병관리"; + public static final String SCHEDULER_EXT_FD_INFO = "문화정보"; + public static final String SCHEDULER_EXT_GIA_INFO = "관광정보"; + public static final String SCHEDULER_MAIN_A_INFO = "메인 지역문화PICK"; + public static final String SCHEDULER_MAIN_C_INFO = "메인 지역문화이야기"; + public static final String SCHEDULER_MAIN_G_INFO = "메인 지역문화정보"; + public static final String SCHEDULER_MAIN_P_INFO = "메인 지역문화포스트"; + public static final String SCHEDULER_MEDIA_HST_INFO = "월별 지방문화원 인기자료"; + + public static final String [] SCHEDULER_NAME_ARRAY = {SCHEDULER_EXT_DF_INFO,SCHEDULER_EXT_FD_INFO,SCHEDULER_EXT_GIA_INFO}; + + public static enum META_OG_TYPE { website, article }; + + public static final String [] NCULTURE_URL_ARRAY = {"www","www1","www2","cms","cms1","cms2","ams","ams1","ams2","vod","vod1","vod2","api","api1","api2","app","app1","app2","vr","cms-dev","ams-dev","kccf-jira","kccf-wiki","kccf-ci","cloud","kccf2019","doc","webzine","docs","minio","minio-dev","port-dev","app-dev","api-dev","vod-dev","newcms","ncms","ncms-dev","ncms-test","newcms-dev","ams-test","ci","local"}; +} diff --git a/src/main/java/cmm/service/CmmActivityHstVO.java b/src/main/java/cmm/service/CmmActivityHstVO.java new file mode 100644 index 00000000..9f9afcff --- /dev/null +++ b/src/main/java/cmm/service/CmmActivityHstVO.java @@ -0,0 +1,203 @@ +package cmm.service; + +import java.util.Date; + +import cmm.util.CmmUtil; +import cmm.util.CmmVO; + +@SuppressWarnings("serial") +public class CmmActivityHstVO extends CmmVO { + + private int Id; + private String jsessionId; + private int contentId; + private String contentType; + private String linkUrl; + private String mainImg = ""; + private String title = ""; + private String summary = ""; + private String theme = ""; + private String series = ""; + private String firstTopic = ""; + private String secondTopic = ""; + private String firstClass = ""; + private String secondClass = ""; + private String firstCategory = ""; + private String secondCategory = ""; + private String sidoName = ""; + private String sigunguName = ""; + private String couName = ""; + private String groupName = ""; + private String tags = ""; + private Date createDt; + private String useAt = ""; + private String uaType = ""; + private String copyright = ""; + private String zipCode = ""; + private String tel = ""; + public int getId() { + return Id; + } + public void setId(int id) { + Id = id; + } + public String getJsessionId() { + return jsessionId; + } + public void setJsessionId(String jsessionId) { + this.jsessionId = jsessionId; + } + public int getContentId() { + return contentId; + } + public void setContentId(int contentId) { + this.contentId = contentId; + } + public String getContentType() { + return contentType; + } + public void setContentType(String contentType) { + this.contentType = contentType; + } + public String getLinkUrl() { + return linkUrl; + } + public void setLinkUrl(String linkUrl) { + this.linkUrl = linkUrl; + } + public String getMainImg() { + return mainImg; + } + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getTheme() { + return theme; + } + public void setTheme(String theme) { + this.theme = theme; + } + public String getSeries() { + return series; + } + public void setSeries(String series) { + this.series = series; + } + public String getFirstTopic() { + return firstTopic; + } + public void setFirstTopic(String firstTopic) { + this.firstTopic = firstTopic; + } + public String getSecondTopic() { + return secondTopic; + } + public void setSecondTopic(String secondTopic) { + this.secondTopic = secondTopic; + } + public String getFirstClass() { + return firstClass; + } + public void setFirstClass(String firstClass) { + this.firstClass = firstClass; + } + public String getSecondClass() { + return secondClass; + } + public void setSecondClass(String secondClass) { + this.secondClass = secondClass; + } + public String getFirstCategory() { + return firstCategory; + } + public void setFirstCategory(String firstCategory) { + this.firstCategory = firstCategory; + } + public String getSecondCategory() { + return secondCategory; + } + public void setSecondCategory(String secondCategory) { + this.secondCategory = secondCategory; + } + public String getSidoName() { + return sidoName; + } + public void setSidoName(String sidoName) { + this.sidoName = sidoName; + } + public String getSigunguName() { + return sigunguName; + } + public void setSigunguName(String sigunguName) { + this.sigunguName = sigunguName; + } + public String getCouName() { + return couName; + } + public void setCouName(String couName) { + this.couName = couName; + } + public String getGroupName() { + return groupName; + } + public void setGroupName(String groupName) { + this.groupName = groupName; + } + public String getTags() { + return tags; + } + public void setTags(String tags) { + this.tags = tags; + } + public Date getCreateDt() { + return createDt; + } + public void setCreateDt(Date createDt) { + this.createDt = createDt; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + public String getUaType() { + return uaType; + } + public void setUaType(String uaType) { + this.uaType = uaType; + } + public String getCopyright() { + return copyright; + } + public void setCopyright(String copyright) { + this.copyright = copyright; + } + public String getZipCode() { + return zipCode; + } + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + public String getTel() { + return tel; + } + public void setTel(String tel) { + this.tel = tel; + } + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmAmsAssetCouncilVO.java b/src/main/java/cmm/service/CmmAmsAssetCouncilVO.java new file mode 100644 index 00000000..69317151 --- /dev/null +++ b/src/main/java/cmm/service/CmmAmsAssetCouncilVO.java @@ -0,0 +1,35 @@ +package cmm.service; + +import cmm.util.CmmUtil; +import cmm.util.CmmVO; + +@SuppressWarnings("serial") +public class CmmAmsAssetCouncilVO extends CmmVO { + + private String id = null; + private String mediaId = null; + private String couName = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getMediaId() { + return mediaId; + } + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + public String getCouName() { + return couName; + } + public void setCouName(String couName) { + this.couName = couName; + } + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmAmsAssetKeywordsVO.java b/src/main/java/cmm/service/CmmAmsAssetKeywordsVO.java new file mode 100644 index 00000000..aa311536 --- /dev/null +++ b/src/main/java/cmm/service/CmmAmsAssetKeywordsVO.java @@ -0,0 +1,46 @@ +package cmm.service; + + +public class CmmAmsAssetKeywordsVO{ + + private String id = null; + private String dataType =""; + private String refId = ""; + private String keyName = ""; + + private String mediaId = null; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getDataType() { + return dataType; + } + public void setDataType(String dataType) { + this.dataType = dataType; + } + public String getRefId() { + return refId; + } + public void setRefId(String refId) { + this.refId = refId; + } + public String getKeyName() { + return keyName; + } + public void setKeyName(String keyName) { + this.keyName = keyName; + } + public String getMediaId() { + return mediaId; + } + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + + + +} diff --git a/src/main/java/cmm/service/CmmAmsAssetMediaOcrVO.java b/src/main/java/cmm/service/CmmAmsAssetMediaOcrVO.java new file mode 100644 index 00000000..80d295ce --- /dev/null +++ b/src/main/java/cmm/service/CmmAmsAssetMediaOcrVO.java @@ -0,0 +1,82 @@ +package cmm.service; + +import java.util.Date; +import java.util.List; + +import cmm.util.CmmVO; + +/** + * @Class Name : CmmAmsAssetMediaOcrVO.java + * @author ecplaza + * @since 2019-10-14 + * @version 1.0 + */ + +@SuppressWarnings("serial") +public class CmmAmsAssetMediaOcrVO extends CmmVO { + + private String id=""; + private String mediaId = ""; + private String firstPageNum=""; + private String lastPageNum=""; + private String orderNum=""; + private String fileName=""; + private String ocrText=""; + private String createdAt = ""; + private String updatedAt = ""; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getMediaId() { + return mediaId; + } + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + public String getFirstPageNum() { + return firstPageNum; + } + public void setFirstPageNum(String firstPageNum) { + this.firstPageNum = firstPageNum; + } + public String getLastPageNum() { + return lastPageNum; + } + public void setLastPageNum(String lastPageNum) { + this.lastPageNum = lastPageNum; + } + public String getOrderNum() { + return orderNum; + } + public void setOrderNum(String orderNum) { + this.orderNum = orderNum; + } + public String getFileName() { + return fileName; + } + public void setFileName(String fileName) { + this.fileName = fileName; + } + public String getOcrText() { + return ocrText; + } + public void setOcrText(String ocrText) { + this.ocrText = ocrText; + } + public String getCreatedAt() { + return createdAt; + } + public void setCreatedAt(String createdAt) { + this.createdAt = createdAt; + } + public String getUpdatedAt() { + return updatedAt; + } + public void setUpdatedAt(String updatedAt) { + this.updatedAt = updatedAt; + } +} diff --git a/src/main/java/cmm/service/CmmAmsAssetMediaVO.java b/src/main/java/cmm/service/CmmAmsAssetMediaVO.java new file mode 100644 index 00000000..033f5769 --- /dev/null +++ b/src/main/java/cmm/service/CmmAmsAssetMediaVO.java @@ -0,0 +1,811 @@ +package cmm.service; + +import java.util.Date; +import java.util.List; + +import cmm.util.CmmVO; + +/** + * @Class Name : CmmAmsAssetMediaVO.java + * @author ecplaza + * @since 2018-05-11O + * @version 1.0 + */ + +@SuppressWarnings("serial") +public class CmmAmsAssetMediaVO extends CmmVO { + + private String id = ""; + private String assetId = ""; + private String interfaceId = ""; + private String mgntNo = ""; + private String assetType = ""; + private String title = ""; + private String firstClass = ""; + private String secondClass = ""; + private String firstClassNm = ""; + private String secondClassNm = ""; + private String subtitle = ""; + private String mainImg = ""; + private String mainImg2 = ""; + private String summary = ""; + private String addition = ""; + private String orignlFileName = ""; + private String streFileName = ""; + private String fileSize = ""; + private String width = ""; + private String height = ""; + private String imgAlt = ""; + private String mediaType = ""; + private String playerAt = ""; + private String playTime = ""; + private String volume = ""; + private String totalPage = ""; + private String isbn = ""; + private String linkData = ""; + private String websiteName = ""; + private String linkUseAt = ""; + private String makingDate = ""; + private String filmingLocation = ""; + private String subtitleAt = ""; + private String subtitleOrgFileName = ""; + private String subtitleStreFileName = ""; + private String subtitleDesc = ""; + private String publisher = ""; + private String genyear = ""; + private String author = ""; + private String provider = ""; + private String sourceAt = ""; + private String source = ""; + private String copyright = ""; + private String retentionPeriod = ""; + private String copyrightMgntDepart = ""; + private String thirdCopyright = ""; + private String cclType = ""; + private String orgOpenAt = ""; + private Date createdAt = null; + private Date updatedAt = null; + private Date deletedAt = null; + private String useAt = ""; + private String remarksDesc = ""; + private String recommendYn = ""; + private String sidoName = ""; + private String sigunguName = ""; + + private String mediaId = ""; + private String assetClass = ""; + private String firstCategoryNm = ""; + private String secondCategoryNm = ""; + private String couName = ""; + private String keyName = ""; + private String tags = ""; + private String tagsName = ""; + private String trsAge = ""; + private String age = ""; + private String chronologicalStart = ""; + private String chronologicalEnd = ""; + private String firstCategory = ""; + private String secondCategory = ""; + private String theme = ""; + private String series = ""; + private String sojangCouncil = ""; + private String sojangCouncilNm = ""; + private String sojangCouncilNmTot = ""; + private String sojangLocation = ""; + private String linkNm = ""; + + private String assetTypeNm = ""; + private String groupId = ""; + private String groupName = ""; + private String mcnt = ""; + private String ocrSplitNum = ""; + private List ocrList = null; + private String tableOfContents = ""; + private List tableOfContentsList = null; + private String contentId = ""; + private String linkUrl = ""; + private String orderIdx = ""; + + List sidoList = null; + List contentIdList; + private String [] codeIdList; + private String [] assetTypeList; + //private String [] userGroupList; + //private String [] ageList; + //private String [] assetClassList; + private String [] councilList; + private String [] categoryList; + private String [] classList; + private String [] assetClassArray; + private String [] pickAssetTypeArray; + private String reSearch; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getAssetId() { + return assetId; + } + public void setAssetId(String assetId) { + this.assetId = assetId; + } + public String getInterfaceId() { + return interfaceId; + } + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + public String getAssetType() { + return assetType; + } + public void setAssetType(String assetType) { + this.assetType = assetType; + } + + public String getMgntNo() { + return mgntNo; + } + public void setMgntNo(String mgntNo) { + this.mgntNo = mgntNo; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getFirstClass() { + return firstClass; + } + public void setFirstClass(String firstClass) { + this.firstClass = firstClass; + } + public String getSecondClass() { + return secondClass; + } + public void setSecondClass(String secondClass) { + this.secondClass = secondClass; + } + public String getFirstClassNm() { + return firstClassNm; + } + public void setFirstClassNm(String firstClassNm) { + this.firstClassNm = firstClassNm; + } + public String getSecondClassNm() { + return secondClassNm; + } + public void setSecondClassNm(String secondClassNm) { + this.secondClassNm = secondClassNm; + } + public String getSubtitle() { + return subtitle; + } + public void setSubtitle(String subtitle) { + this.subtitle = subtitle; + } + public String getMainImg() { + return mainImg; + } + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + public String getMainImg2() { + return mainImg2; + } + public void setMainImg2(String mainImg2) { + this.mainImg2 = mainImg2; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getAddition() { + return addition; + } + public void setAddition(String addition) { + this.addition = addition; + } + public String getOrignlFileName() { + return orignlFileName; + } + public void setOrignlFileName(String orignlFileName) { + this.orignlFileName = orignlFileName; + } + public String getStreFileName() { + return streFileName; + } + public void setStreFileName(String streFileName) { + this.streFileName = streFileName; + } + public String getFileSize() { + return fileSize; + } + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + public String getWidth() { + return width; + } + public void setWidth(String width) { + this.width = width; + } + public String getHeight() { + return height; + } + public void setHeight(String height) { + this.height = height; + } + public String getImgAlt() { + return imgAlt; + } + public void setImgAlt(String imgAlt) { + this.imgAlt = imgAlt; + } + public String getMediaType() { + return mediaType; + } + public void setMediaType(String mediaType) { + this.mediaType = mediaType; + } + public String getPlayerAt() { + return playerAt; + } + public void setPlayerAt(String playerAt) { + this.playerAt = playerAt; + } + public String getPlayTime() { + return playTime; + } + public void setPlayTime(String playTime) { + this.playTime = playTime; + } + public String getVolume() { + return volume; + } + public void setVolume(String volume) { + this.volume = volume; + } + public String getTotalPage() { + return totalPage; + } + public void setTotalPage(String totalPage) { + this.totalPage = totalPage; + } + public String getIsbn() { + return isbn; + } + public void setIsbn(String isbn) { + this.isbn = isbn; + } + public String getLinkData() { + return linkData; + } + public void setLinkData(String linkData) { + this.linkData = linkData; + } + public String getWebsiteName() { + return websiteName; + } + public void setWebsiteName(String websiteName) { + this.websiteName = websiteName; + } + public String getLinkUseAt() { + return linkUseAt; + } + public void setLinkUseAt(String linkUseAt) { + this.linkUseAt = linkUseAt; + } + public String getMakingDate() { + return makingDate; + } + public void setMakingDate(String makingDate) { + this.makingDate = makingDate; + } + public String getFilmingLocation() { + return filmingLocation; + } + public void setFilmingLocation(String filmingLocation) { + this.filmingLocation = filmingLocation; + } + public String getSubtitleAt() { + return subtitleAt; + } + public void setSubtitleAt(String subtitleAt) { + this.subtitleAt = subtitleAt; + } + public String getSubtitleOrgFileName() { + return subtitleOrgFileName; + } + public void setSubtitleOrgFileName(String subtitleOrgFileName) { + this.subtitleOrgFileName = subtitleOrgFileName; + } + public String getSubtitleStreFileName() { + return subtitleStreFileName; + } + public void setSubtitleStreFileName(String subtitleStreFileName) { + this.subtitleStreFileName = subtitleStreFileName; + } + public String getSubtitleDesc() { + return subtitleDesc; + } + public void setSubtitleDesc(String subtitleDesc) { + this.subtitleDesc = subtitleDesc; + } + public String getPublisher() { + return publisher; + } + public void setPublisher(String publisher) { + this.publisher = publisher; + } + public String getGenyear() { + return genyear; + } + public void setGenyear(String genyear) { + this.genyear = genyear; + } + public String getAuthor() { + return author; + } + public void setAuthor(String author) { + this.author = author; + } + public String getProvider() { + return provider; + } + public void setProvider(String provider) { + this.provider = provider; + } + public String getSourceAt() { + return sourceAt; + } + public void setSourceAt(String sourceAt) { + this.sourceAt = sourceAt; + } + public String getSource() { + return source; + } + public void setSource(String source) { + this.source = source; + } + public String getCopyright() { + return copyright; + } + public void setCopyright(String copyright) { + this.copyright = copyright; + } + public String getRetentionPeriod() { + return retentionPeriod; + } + public void setRetentionPeriod(String retentionPeriod) { + this.retentionPeriod = retentionPeriod; + } + public String getCopyrightMgntDepart() { + return copyrightMgntDepart; + } + public void setCopyrightMgntDepart(String copyrightMgntDepart) { + this.copyrightMgntDepart = copyrightMgntDepart; + } + public String getThirdCopyright() { + return thirdCopyright; + } + public void setThirdCopyright(String thirdCopyright) { + this.thirdCopyright = thirdCopyright; + } + public String getCclType() { + return cclType; + } + public void setCclType(String cclType) { + this.cclType = cclType; + } + public String getOrgOpenAt() { + return orgOpenAt; + } + public void setOrgOpenAt(String orgOpenAt) { + this.orgOpenAt = orgOpenAt; + } + public Date getCreatedAt() { + return createdAt; + } + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + public Date getUpdatedAt() { + return updatedAt; + } + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + public Date getDeletedAt() { + return deletedAt; + } + public void setDeletedAt(Date deletedAt) { + this.deletedAt = deletedAt; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + public String getRemarksDesc() { + return remarksDesc; + } + public void setRemarksDesc(String remarksDesc) { + this.remarksDesc = remarksDesc; + } + public String getRecommendYn() { + return recommendYn; + } + public void setRecommendYn(String recommendYn) { + this.recommendYn = recommendYn; + } + public String getSidoName() { + return sidoName; + } + public void setSidoName(String sidoName) { + this.sidoName = sidoName; + } + public String getSigunguName() { + return sigunguName; + } + public void setSigunguName(String sigunguName) { + this.sigunguName = sigunguName; + } + public String getMediaId() { + return mediaId; + } + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + public String getAssetClass() { + return assetClass; + } + public void setAssetClass(String assetClass) { + this.assetClass = assetClass; + } + public String getFirstCategoryNm() { + return firstCategoryNm; + } + public void setFirstCategoryNm(String firstCategoryNm) { + this.firstCategoryNm = firstCategoryNm; + } + public String getSecondCategoryNm() { + return secondCategoryNm; + } + public void setSecondCategoryNm(String secondCategoryNm) { + this.secondCategoryNm = secondCategoryNm; + } + public List getSidoList() { + return sidoList; + } + public void setSidoList(List sidoList) { + this.sidoList = sidoList; + } + public List getContentIdList() { + return contentIdList; + } + public void setContentIdList(List contentIdList) { + this.contentIdList = contentIdList; + } + public String[] getCodeIdList() { + String[] ret = null; + if (this.codeIdList != null) { + ret = new String[codeIdList.length]; + for (int i = 0; i < codeIdList.length; i++) { + ret[i] = this.codeIdList[i]; + } + } + return ret; + } + + public void setCodeIdList(String[] codeIdList) { + // 수정 + this.codeIdList = new String[codeIdList.length]; + for(int i = 0; i < codeIdList.length; ++i) + this.codeIdList[i] = codeIdList[i]; + } + + public String[] getAssetTypeList() { + String[] ret = null; + if (this.assetTypeList != null) { + ret = new String[assetTypeList.length]; + for (int i = 0; i < assetTypeList.length; i++) { + ret[i] = this.assetTypeList[i]; + } + } + return ret; + } + public void setAssetTypeList(String[] assetTypeList) { + // 수정 + this.assetTypeList = new String[assetTypeList.length]; + for(int i = 0; i < assetTypeList.length; ++i) + this.assetTypeList[i] = assetTypeList[i]; + } +// public String[] getUserGroupList() { +// return userGroupList; +// } +// public void setUserGroupList(String[] userGroupList) { +// this.userGroupList = userGroupList; +// } +// public String[] getAgeList() { +// return ageList; +// } +// public void setAgeList(String[] ageList) { +// this.ageList = ageList; +// } +// public String[] getAssetClassList() { +// return assetClassList; +// } +// public void setAssetClassList(String[] assetClassList) { +// this.assetClassList = assetClassList; +// } + public String[] getCouncilList() { + String[] ret = null; + if (this.councilList != null) { + ret = new String[councilList.length]; + for (int i = 0; i < councilList.length; i++) { + ret[i] = this.councilList[i]; + } + } + return ret; + } + public void setCouncilList(String[] councilList) { + // 수정 + this.councilList = new String[councilList.length]; + for(int i = 0; i < councilList.length; ++i) + this.councilList[i] = councilList[i]; + } + + public String[] getCategoryList() { + String[] ret = null; + if (this.categoryList != null) { + ret = new String[categoryList.length]; + for (int i = 0; i < categoryList.length; i++) { + ret[i] = this.categoryList[i]; + } + } + return ret; + } + public void setCategoryList(String[] categoryList) { + // 수정 + this.categoryList = new String[categoryList.length]; + for(int i = 0; i < categoryList.length; ++i) + this.categoryList[i] = categoryList[i]; + } + + public String[] getClassList() { + String[] ret = null; + if (this.classList != null) { + ret = new String[classList.length]; + for (int i = 0; i < classList.length; i++) { + ret[i] = this.classList[i]; + } + } + return ret; + } + public void setClassList(String[] classList) { + this.classList = new String[classList.length]; + for(int i = 0; i < classList.length; ++i) + this.classList[i] = classList[i]; + } + + public String[] getAssetClassArray() { + String[] ret = null; + if (this.assetClassArray != null) { + ret = new String[assetClassArray.length]; + for (int i = 0; i < assetClassArray.length; i++) { + ret[i] = this.assetClassArray[i]; + } + } + return ret; + } + public void setAssetClassArray(String[] assetClassArray) { + // 수정 + this.assetClassArray = new String[assetClassArray.length]; + for(int i = 0; i < assetClassArray.length; ++i) + this.assetClassArray[i] = assetClassArray[i]; + } + + + public String[] getPickAssetTypeArray() { + String[] ret = null; + if (this.pickAssetTypeArray != null) { + ret = new String[pickAssetTypeArray.length]; + for (int i = 0; i < pickAssetTypeArray.length; i++) { + ret[i] = this.pickAssetTypeArray[i]; + } + } + return ret; + } + public void setPickAssetTypeArray(String[] pickAssetTypeArray) { + this.pickAssetTypeArray = new String[pickAssetTypeArray.length]; + for(int i = 0; i < pickAssetTypeArray.length; ++i) + this.pickAssetTypeArray[i] = pickAssetTypeArray[i]; + } + + public String getCouName() { + return couName; + } + public void setCouName(String couName) { + this.couName = couName; + } + public String getKeyName() { + return keyName; + } + public void setKeyName(String keyName) { + this.keyName = keyName; + } + public String getTags() { + return tags; + } + public void setTags(String tags) { + this.tags = tags; + } + public String getTagsName() { + return tagsName; + } + public void setTagsName(String tagsName) { + this.tagsName = tagsName; + } + public String getTrsAge() { + return trsAge; + } + public void setTrsAge(String trsAge) { + this.trsAge = trsAge; + } + public String getAge() { + return age; + } + public void setAge(String age) { + this.age = age; + } + public String getChronologicalStart() { + return chronologicalStart; + } + public void setChronologicalStart(String chronologicalStart) { + this.chronologicalStart = chronologicalStart; + } + public String getChronologicalEnd() { + return chronologicalEnd; + } + public void setChronologicalEnd(String chronologicalEnd) { + this.chronologicalEnd = chronologicalEnd; + } + public String getFirstCategory() { + return firstCategory; + } + public void setFirstCategory(String firstCategory) { + this.firstCategory = firstCategory; + } + public String getSecondCategory() { + return secondCategory; + } + public void setSecondCategory(String secondCategory) { + this.secondCategory = secondCategory; + } + public String getTheme() { + return theme; + } + public void setTheme(String theme) { + this.theme = theme; + } + public String getSeries() { + return series; + } + public void setSeries(String series) { + this.series = series; + } + public String getSojangCouncil() { + return sojangCouncil; + } + public void setSojangCouncil(String sojangCouncil) { + this.sojangCouncil = sojangCouncil; + } + public String getSojangCouncilNm() { + return sojangCouncilNm; + } + public void setSojangCouncilNm(String sojangCouncilNm) { + this.sojangCouncilNm = sojangCouncilNm; + } + + public String getSojangCouncilNmTot() { + return sojangCouncilNmTot; + } + public void setSojangCouncilNmTot(String sojangCouncilNmTot) { + this.sojangCouncilNmTot = sojangCouncilNmTot; + } + public String getSojangLocation() { + return sojangLocation; + } + public void setSojangLocation(String sojangLocation) { + this.sojangLocation = sojangLocation; + } + + public String getGroupId() { + return groupId; + } + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + public void setGroupName(String groupName) { + this.groupName = groupName; + } + public String getMcnt() { + return mcnt; + } + public void setMcnt(String mcnt) { + this.mcnt = mcnt; + } + public String getOcrSplitNum() { + return ocrSplitNum; + } + public void setOcrSplitNum(String ocrSplitNum) { + this.ocrSplitNum = ocrSplitNum; + } + public List getOcrList() { + return ocrList; + } + public void setOcrList(List ocrList) { + this.ocrList = ocrList; + } + public String getTableOfContents() { + return tableOfContents; + } + public void setTableOfContents(String tableOfContents) { + this.tableOfContents = tableOfContents; + } + public List getTableOfContentsList() { + return tableOfContentsList; + } + public void setTableOfContentsList( + List tableOfContentsList) { + this.tableOfContentsList = tableOfContentsList; + } + public String getContentId() { + return contentId; + } + public void setContentId(String contentId) { + this.contentId = contentId; + } + public String getLinkNm() { + return linkNm; + } + public void setLinkNm(String linkNm) { + this.linkNm = linkNm; + } + public String getAssetTypeNm() { + return assetTypeNm; + } + public void setAssetTypeNm(String assetTypeNm) { + this.assetTypeNm = assetTypeNm; + } + public String getLinkUrl() { + return linkUrl; + } + public void setLinkUrl(String linkUrl) { + this.linkUrl = linkUrl; + } + public String getOrderIdx() { + return orderIdx; + } + public void setOrderIdx(String orderIdx) { + this.orderIdx = orderIdx; + } + public String getReSearch() { + return reSearch; + } + public void setReSearch(String reSearch) { + this.reSearch = reSearch; + } + +} diff --git a/src/main/java/cmm/service/CmmAmsAssetTagsVO.java b/src/main/java/cmm/service/CmmAmsAssetTagsVO.java new file mode 100644 index 00000000..3e424e95 --- /dev/null +++ b/src/main/java/cmm/service/CmmAmsAssetTagsVO.java @@ -0,0 +1,47 @@ +package cmm.service; + +import cmm.util.CmmUtil; + +public class CmmAmsAssetTagsVO { + private String id = null; + private String dataType = ""; + private String refId = ""; + private String tagsName = ""; + + private String mediaId = null; + + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getDataType() { + return dataType; + } + public void setDataType(String dataType) { + this.dataType = dataType; + } + public String getRefId() { + return refId; + } + public void setRefId(String refId) { + this.refId = refId; + } + public String getTagsName() { + return tagsName; + } + public void setTagsName(String tagsName) { + this.tagsName = tagsName; + } + public String getMediaId() { + return mediaId; + } + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmAmsAssetsVO.java b/src/main/java/cmm/service/CmmAmsAssetsVO.java new file mode 100644 index 00000000..95a98b2b --- /dev/null +++ b/src/main/java/cmm/service/CmmAmsAssetsVO.java @@ -0,0 +1,500 @@ +package cmm.service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cmm.util.CmmVO; + +/** + * @Class Name : CmmAmsAssetsVO.java + * @author ecplaza + * @since 2018-05-11O + * @version 1.0 + */ + +@SuppressWarnings("serial") +public class CmmAmsAssetsVO extends CmmVO { + + private String id = ""; + private String interfaceId = ""; + private String assetClass = ""; + private String firstCategory = ""; + private String secondCategory = ""; + private String firstCategoryNm = ""; + private String secondCategoryNm = ""; + private String mainImg = ""; + private String copyright = ""; + private String title = ""; + private String summary = ""; + private String volume = ""; + private String amount = ""; + private String trsAge = ""; + private String age = ""; + private String chronologicalStart = ""; + private String chronologicalEnd = ""; + private String theme = ""; + private String series = ""; + private String sojangCouncil = ""; + private String sojangLocation = ""; + private String remarksDesc = ""; + private Date createdAt = null; + private Date updatedAt = null; + private Date deletedAt = null; + private String useAt = ""; + + + private String assetId = ""; + private String tags = ""; + private String mcnt = ""; + private String sojangCouncilNm = ""; + + private String imgCnt = ""; + private String vedioCnt = ""; + private String audioCnt = ""; + private String docCnt = ""; + private String linkCnt = ""; + + + List sidoList = null; + List contentIdList; + private String [] codeIdList; + private String [] assetTypeList; + private String [] userGroupList; + private String [] ageList; + private String [] assetClassList; + private String [] councilList; + private String [] assetClassArray; + + + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getInterfaceId() { + return interfaceId; + } + + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + + public String getAssetClass() { + return assetClass; + } + + public void setAssetClass(String assetClass) { + this.assetClass = assetClass; + } + + public String getFirstCategory() { + return firstCategory; + } + + public void setFirstCategory(String firstCategory) { + this.firstCategory = firstCategory; + } + + public String getSecondCategory() { + return secondCategory; + } + + public void setSecondCategory(String secondCategory) { + this.secondCategory = secondCategory; + } + + public String getFirstCategoryNm() { + return firstCategoryNm; + } + + public void setFirstCategoryNm(String firstCategoryNm) { + this.firstCategoryNm = firstCategoryNm; + } + + public String getSecondCategoryNm() { + return secondCategoryNm; + } + + public void setSecondCategoryNm(String secondCategoryNm) { + this.secondCategoryNm = secondCategoryNm; + } + + public String getMainImg() { + return mainImg; + } + + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + + public String getCopyright() { + return copyright; + } + + public void setCopyright(String copyright) { + this.copyright = copyright; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getVolume() { + return volume; + } + + public void setVolume(String volume) { + this.volume = volume; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getTrsAge() { + return trsAge; + } + + public void setTrsAge(String trsAge) { + this.trsAge = trsAge; + } + + public String getAge() { + return age; + } + + public void setAge(String age) { + this.age = age; + } + + public String getChronologicalStart() { + return chronologicalStart; + } + + public void setChronologicalStart(String chronologicalStart) { + this.chronologicalStart = chronologicalStart; + } + + public String getChronologicalEnd() { + return chronologicalEnd; + } + + public void setChronologicalEnd(String chronologicalEnd) { + this.chronologicalEnd = chronologicalEnd; + } + + public String getTheme() { + return theme; + } + + public void setTheme(String theme) { + this.theme = theme; + } + + public String getSeries() { + return series; + } + + public void setSeries(String series) { + this.series = series; + } + + public String getSojangCouncil() { + return sojangCouncil; + } + + public void setSojangCouncil(String sojangCouncil) { + this.sojangCouncil = sojangCouncil; + } + + public String getSojangLocation() { + return sojangLocation; + } + + public void setSojangLocation(String sojangLocation) { + this.sojangLocation = sojangLocation; + } + + public String getRemarksDesc() { + return remarksDesc; + } + + public void setRemarksDesc(String remarksDesc) { + this.remarksDesc = remarksDesc; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Date getDeletedAt() { + return deletedAt; + } + + public void setDeletedAt(Date deletedAt) { + this.deletedAt = deletedAt; + } + + public String getUseAt() { + return useAt; + } + + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + + public String getAssetId() { + return assetId; + } + + public void setAssetId(String assetId) { + this.assetId = assetId; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + + + public String getMcnt() { + return mcnt; + } + + public void setMcnt(String mcnt) { + this.mcnt = mcnt; + } + + public String getSojangCouncilNm() { + return sojangCouncilNm; + } + + public void setSojangCouncilNm(String sojangCouncilNm) { + this.sojangCouncilNm = sojangCouncilNm; + } + + public String getImgCnt() { + return imgCnt; + } + + public void setImgCnt(String imgCnt) { + this.imgCnt = imgCnt; + } + + public String getVedioCnt() { + return vedioCnt; + } + + public void setVedioCnt(String vedioCnt) { + this.vedioCnt = vedioCnt; + } + + public String getAudioCnt() { + return audioCnt; + } + + public void setAudioCnt(String audioCnt) { + this.audioCnt = audioCnt; + } + + public String getDocCnt() { + return docCnt; + } + + public void setDocCnt(String docCnt) { + this.docCnt = docCnt; + } + + public String getLinkCnt() { + return linkCnt; + } + + public void setLinkCnt(String linkCnt) { + this.linkCnt = linkCnt; + } + + public List getSidoList() { + List ret = null; + if(this.sidoList != null){ + ret = new ArrayList(); + ret = this.sidoList; + } + return ret; + } + + public void setSidoList(ArrayList cmmCmsSidoList) { + this.sidoList = new ArrayList (cmmCmsSidoList.size()); + for(int i=0; i getContentIdList() { + List ret = null; + if(this.contentIdList != null){ + ret = new ArrayList(); + ret = this.contentIdList; + } + return ret; + } + + public void setContentIdList(List contentIdList) { + this.contentIdList = new ArrayList (contentIdList.size()); + for(int i=0; i errorList = null; + + public CmmAmsDocTableOfContentsVO() { + super(); + } + + public CmmAmsDocTableOfContentsVO(String title, String pageNum, Integer ocrFileNum, List errorList) { + super(); + this.title = title; + this.pageNum = pageNum; + this.ocrFileNum = ocrFileNum; + this.errorList = errorList; + } + + public String toString() { + return CmmUtil.reflectionToString(this); + } + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getPageNum() { + return pageNum; + } + public void setPageNum(String pageNum) { + this.pageNum = pageNum; + } + public Integer getOcrFileNum() { + return ocrFileNum; + } + public void setOcrFileNum(Integer ocrFileNum) { + this.ocrFileNum = ocrFileNum; + } + + public List getErrorList() { + return errorList; + } + + public void setErrorList(List errorList) { + this.errorList = errorList; + } + +} diff --git a/src/main/java/cmm/service/CmmApiService.java b/src/main/java/cmm/service/CmmApiService.java new file mode 100644 index 00000000..e283ff0d --- /dev/null +++ b/src/main/java/cmm/service/CmmApiService.java @@ -0,0 +1,25 @@ +package cmm.service; + +import java.util.List; + +import org.json.JSONObject; + +import cmm.util.DataMap; + + +public interface CmmApiService { + JSONObject getCultureinfoApiList(DataMap paramMap); + JSONObject getDissForecastInfoList(DataMap paramMap); + DataMap getCtprvnMesureSidoList(String sido, String dataTime); + DataMap getForecastTimeDataList(String baseDate, String baseTime, String nx, String ny); + DataMap getNaverApiGeocode(DataMap paramMap); + DataMap getNaverApiReversegeocode(DataMap paramMap); + DataMap getNaverApiJuso(DataMap paramMap); + DataMap getNaverApiSearch(DataMap paramMap); + List getToolsApiNews(DataMap paramMap); + DataMap getGiaList(DataMap paramMap); + DataMap getGiaDetailCommon(DataMap paramMap); + DataMap getGiaDetailIntro(DataMap paramMap); + DataMap getGiaDetailInfo(DataMap paramMap); + DataMap getGiaDetailImage(DataMap paramMap); +} diff --git a/src/main/java/cmm/service/CmmBbsService.java b/src/main/java/cmm/service/CmmBbsService.java new file mode 100644 index 00000000..dfcf3d97 --- /dev/null +++ b/src/main/java/cmm/service/CmmBbsService.java @@ -0,0 +1,26 @@ +package cmm.service; + + +import java.io.IOException; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.cmmn.exception.FdlException; + + +public interface CmmBbsService { + int selectCmmBbsListTotCnt(CmmBbsVO cmmBbsVO) throws EgovBizException; + List selectCmmBbsList(CmmBbsVO cmmBbsVO) throws EgovBizException; + List selectCmmBbsTopList(CmmBbsVO cmmBbsVO) throws EgovBizException; + List selectCmmBbsCnList(CmmBbsVO cmmBbsVO) throws EgovBizException; + List selectCmmBbsMainList(CmmBbsVO cmmBbsVO) throws EgovBizException; + CmmBbsVO selectCmmBbsDetail(CmmBbsVO cmmBbsVO) throws EgovBizException; + List selectPrevNextCmmBbsDetailList(CmmBbsVO cmmBbsVO) throws EgovBizException; + String insertCmmBbs(CmmBbsVO cmmBbsVO, HttpServletRequest request) throws IOException, FdlException, EgovBizException; + void updateCmmBbs(CmmBbsVO cmmBbsVO, HttpServletRequest request) throws IOException, EgovBizException; + void deleteCmmBbs(CmmBbsVO cmmBbsVO, HttpServletRequest request) throws EgovBizException; + + void updateLocalCultureRecommend(CmmBbsVO cmmBbsVO) throws EgovBizException; +} diff --git a/src/main/java/cmm/service/CmmBbsVO.java b/src/main/java/cmm/service/CmmBbsVO.java new file mode 100644 index 00000000..3fefa7ec --- /dev/null +++ b/src/main/java/cmm/service/CmmBbsVO.java @@ -0,0 +1,422 @@ +package cmm.service; + + +import java.util.Date; +import java.util.List; + +import cmm.util.CmmUtil; +import cmm.util.CmmVO; + + + + +@SuppressWarnings("serial") +public class CmmBbsVO extends CmmVO { + + + private String nttId = ""; + private String bbsId = ""; + private long nttNo = 0L; + private String nttSj = ""; + private String nttCn = ""; + private String answerAt = "N"; + private String answerCn = ""; + private String overview = ""; + private String parntscttNo = "0"; + private String answerLc = "0"; + private long sortOrdr = 0L; + private int rdcnt = 0; + private String useAt = ""; + private String ntceBgnde = ""; + private String ntceEndde = ""; + private String ntcrId = ""; + private String ntcrNm = ""; + private String password = ""; + private String atchFileId = ""; + private String atchFileNm = ""; + private Date frstRegistPnttm = null; + private String frstRegisterId = ""; + private String frstRegisterNm = ""; + private Date lastUpdtPnttm = null; + private String lastUpdusrId = ""; + private String lastUpdusrNm = ""; + private String gubun = ""; + private String topYn = ""; + private int topCnt = 0; + private String notice = ""; + private String nttType =""; + private String[] nttTypes ; + + private String tel =""; + private String zipCode=""; + private String address=""; + private String sidoName=""; + private String sigunguName=""; + private String latitude=""; + private String longitude=""; + private String mainImg=""; + private String mainImgOrignlFileNm=""; + private String thumAtchCtrl =""; + List nttIdList; + + public String getNttType() { + return nttType; + } + + public void setNttType(String nttType) { + this.nttType = nttType; + } + + public String getNotice() { + return notice; + } + + public void setNotice(String notice) { + this.notice = notice; + } + + public String getNttId() { + return this.nttId; + } + + public void setNttId(String nttId) { + this.nttId = nttId; + } + + public String getBbsId() { + return this.bbsId; + } + + public void setBbsId(String bbsId) { + this.bbsId = bbsId; + } + + public long getNttNo() { + return this.nttNo; + } + + public void setNttNo(long nttNo) { + this.nttNo = nttNo; + } + + public String getNttSj() { + return this.nttSj; + } + + public void setNttSj(String nttSj) { + this.nttSj = nttSj; + } + + public String getNttCn() { + return this.nttCn; + } + + public void setNttCn(String nttCn) { + this.nttCn = nttCn; + } + + public String getAnswerAt() { + return this.answerAt; + } + + public void setAnswerAt(String answerAt) { + this.answerAt = answerAt; + } + + public String getAnswerCn() { + return answerCn; + } + + public void setAnswerCn(String answerCn) { + this.answerCn = answerCn; + } + + public String getOverview() { + return overview; + } + + public void setOverview(String overview) { + this.overview = overview; + } + + public String getParntscttNo() { + return this.parntscttNo; + } + + public void setParntscttNo(String parntscttNo) { + this.parntscttNo = parntscttNo; + } + + public String getAnswerLc() { + return this.answerLc; + } + + public void setAnswerLc(String answerLc) { + this.answerLc = answerLc; + } + + public long getSortOrdr() { + return this.sortOrdr; + } + + public void setSortOrdr(long sortOrdr) { + this.sortOrdr = sortOrdr; + } + + public int getRdcnt() { + return this.rdcnt; + } + + public void setRdcnt(int rdcnt) { + this.rdcnt = rdcnt; + } + + public String getUseAt() { + return this.useAt; + } + + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + public String getNtceBgnde() { + return this.ntceBgnde; + } + + public void setNtceBgnde(String ntceBgnde) { + this.ntceBgnde = ntceBgnde; + } + + public String getNtceEndde() { + return this.ntceEndde; + } + + public void setNtceEndde(String ntceEndde) { + this.ntceEndde = ntceEndde; + } + + public String getNtcrId() { + return this.ntcrId; + } + + public void setNtcrId(String ntcrId) { + this.ntcrId = ntcrId; + } + + public String getNtcrNm() { + return this.ntcrNm; + } + + public void setNtcrNm(String ntcrNm) { + this.ntcrNm = ntcrNm; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getAtchFileId() { + return this.atchFileId; + } + + public void setAtchFileId(String atchFileId) { + this.atchFileId = atchFileId; + } + + public String getAtchFileNm() { + return atchFileNm; + } + + public void setAtchFileNm(String atchFileNm) { + this.atchFileNm = atchFileNm; + } + + public Date getFrstRegistPnttm() { + return this.frstRegistPnttm; + } + + public void setFrstRegistPnttm(Date frstRegistPnttm) { + this.frstRegistPnttm = frstRegistPnttm; + } + + public String getFrstRegisterId() { + return this.frstRegisterId; + } + + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + public Date getLastUpdtPnttm() { + return this.lastUpdtPnttm; + } + + public void setLastUpdtPnttm(Date lastUpdtPnttm) { + this.lastUpdtPnttm = lastUpdtPnttm; + } + + public String getLastUpdusrId() { + return this.lastUpdusrId; + } + + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + + public String getLastUpdusrNm() { + return lastUpdusrNm; + } + + public void setLastUpdusrNm(String lastUpdusrNm) { + this.lastUpdusrNm = lastUpdusrNm; + } + + public String getGubun() { + return gubun; + } + + public void setGubun(String gubun) { + this.gubun = gubun; + } + + public String getTopYn() { + return topYn; + } + + public void setTopYn(String topYn) { + this.topYn = topYn; + } + + public int getTopCnt() { + return topCnt; + } + + public void setTopCnt(int topCnt) { + this.topCnt = topCnt; + } + + public String[] getNttTypes() { + String[] ret = null; + if(this.nttTypes != null){ + ret = new String[nttTypes.length]; + ret = this.nttTypes; + } + return ret; + } + + public void setNttTypes(String[] nttTypes) { + this.nttTypes = new String[nttTypes.length]; + for(int i=0; i getNttIdList() { + return nttIdList; + } + + public void setNttIdList(List nttIdList) { + this.nttIdList = nttIdList; + } + + /** + * toString() + * @return String + */ + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmBbsValidator.java b/src/main/java/cmm/service/CmmBbsValidator.java new file mode 100644 index 00000000..0d168278 --- /dev/null +++ b/src/main/java/cmm/service/CmmBbsValidator.java @@ -0,0 +1,23 @@ +package cmm.service; + +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.ValidationUtils; +import org.springframework.validation.Validator; + + +@Component("cmmBbsValidator") +public class CmmBbsValidator implements Validator { + + @SuppressWarnings("rawtypes") + public boolean supports(Class clazz) { + return clazz.equals(CmmBbsVO.class); + } + @SuppressWarnings("unused") + public void validate(Object obj, Errors errors) { + CmmBbsVO vo = (CmmBbsVO) obj; + ValidationUtils.rejectIfEmpty(errors, "nttSj", "field.required", "제목을 입력해주세요."); + ValidationUtils.rejectIfEmpty(errors, "nttCn", "field.required", "내용을 입력해주세요."); + } + +} diff --git a/src/main/java/cmm/service/CmmCmsAssetsVO.java b/src/main/java/cmm/service/CmmCmsAssetsVO.java new file mode 100644 index 00000000..fd6c85b4 --- /dev/null +++ b/src/main/java/cmm/service/CmmCmsAssetsVO.java @@ -0,0 +1,555 @@ +package cmm.service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cmm.util.CmmVO; + +/** + * @Class Name : CmmAmsAssetMediaVO.java + * @author ecplaza + * @since 2018-05-11O + * @version 1.0 + */ + +@SuppressWarnings("serial") +public class CmmCmsAssetsVO extends CmmVO { + + private String id = ""; + private String contentId = ""; + private String interfaceId = ""; + private String assetType = ""; + private String mainImg = ""; + private String orignlFileName = ""; + private String streFileName = ""; + private String title = ""; + private String subtitle = ""; + private String fileSize = ""; + private String filePath = ""; + private String fileExt = ""; + private String assetAlt = ""; + private String subtitleAt = ""; + private String subtitleOrgFileName = ""; + private String subtitleStreFileName = ""; + private String subtitleDesc = ""; + private String isSeries = ""; + private String firstClassNm = ""; + private String secondClassNm = ""; + private String summary = ""; + private String addition = ""; + private String lang = ""; + private String field = ""; + private String age = ""; + private String chronological = ""; + private String category = ""; + private String publisher = ""; + private String genyear = ""; + private String author = ""; + private String provider = ""; + private String sourceAt = ""; + private String source = ""; + private String sojangCouncil = ""; + private String sojangLocation = ""; + private String remarksDesc = ""; + private String copyright = ""; + private String retentionPeriod = ""; + private String copyrightMgntDepart = ""; + private String thirdCopyright = ""; + private String cclType = ""; + private String orgOpenAt = ""; + private String listOpenAt = ""; + private Date createdAt = null; + private Date updatedAt = null; + private Date deletedAt = null; + private String useAt = ""; + private String linkData = ""; + private String assetClass = ""; + private String recommendYn = ""; + private String couName = ""; + private String address = ""; + private String userGroup = ""; + private String mgmtNo = ""; + List sidoList = null; + List contentIdList; + private String [] codeIdList; + private String [] assetTypeList; + private String [] userGroupList; + private String [] ageList; + private String [] assetClassList; + private String [] councilList; + private String [] assetClassArray; + + public String getAssetClass() { + return assetClass; + } + public void setAssetClass(String assetClass) { + this.assetClass = assetClass; + } + public String getLinkData() { + return linkData; + } + public void setLinkData(String linkData) { + this.linkData = linkData; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getContentId() { + return contentId; + } + public void setContentId(String contentId) { + this.contentId = contentId; + } + public String getInterfaceId() { + return interfaceId; + } + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + public String getAssetType() { + return assetType; + } + public void setAssetType(String assetType) { + this.assetType = assetType; + } + public String getMainImg() { + return mainImg; + } + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + public String getOrignlFileName() { + return orignlFileName; + } + public void setOrignlFileName(String orignlFileName) { + this.orignlFileName = orignlFileName; + } + public String getStreFileName() { + return streFileName; + } + public void setStreFileName(String streFileName) { + this.streFileName = streFileName; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getSubtitle() { + return subtitle; + } + public void setSubtitle(String subtitle) { + this.subtitle = subtitle; + } + public String getFileSize() { + return fileSize; + } + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + public String getFilePath() { + return filePath; + } + public void setFilePath(String filePath) { + this.filePath = filePath; + } + public String getFileExt() { + return fileExt; + } + public void setFileExt(String fileExt) { + this.fileExt = fileExt; + } + public String getAssetAlt() { + return assetAlt; + } + public void setAssetAlt(String assetAlt) { + this.assetAlt = assetAlt; + } + public String getSubtitleAt() { + return subtitleAt; + } + public void setSubtitleAt(String subtitleAt) { + this.subtitleAt = subtitleAt; + } + public String getSubtitleOrgFileName() { + return subtitleOrgFileName; + } + public void setSubtitleOrgFileName(String subtitleOrgFileName) { + this.subtitleOrgFileName = subtitleOrgFileName; + } + public String getSubtitleStreFileName() { + return subtitleStreFileName; + } + public void setSubtitleStreFileName(String subtitleStreFileName) { + this.subtitleStreFileName = subtitleStreFileName; + } + public String getSubtitleDesc() { + return subtitleDesc; + } + public void setSubtitleDesc(String subtitleDesc) { + this.subtitleDesc = subtitleDesc; + } + public String getIsSeries() { + return isSeries; + } + public void setIsSeries(String isSeries) { + this.isSeries = isSeries; + } + public String getFirstClassNm() { + return firstClassNm; + } + public void setFirstClassNm(String firstClassNm) { + this.firstClassNm = firstClassNm; + } + public String getSecondClassNm() { + return secondClassNm; + } + public void setSecondClassNm(String secondClassNm) { + this.secondClassNm = secondClassNm; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getAddition() { + return addition; + } + public void setAddition(String addition) { + this.addition = addition; + } + public String getLang() { + return lang; + } + public void setLang(String lang) { + this.lang = lang; + } + public String getField() { + return field; + } + public void setField(String field) { + this.field = field; + } + public String getAge() { + return age; + } + public void setAge(String age) { + this.age = age; + } + public String getChronological() { + return chronological; + } + public void setChronological(String chronological) { + this.chronological = chronological; + } + public String getCategory() { + return category; + } + public void setCategory(String category) { + this.category = category; + } + public String getPublisher() { + return publisher; + } + public void setPublisher(String publisher) { + this.publisher = publisher; + } + public String getGenyear() { + return genyear; + } + public void setGenyear(String genyear) { + this.genyear = genyear; + } + public String getAuthor() { + return author; + } + public void setAuthor(String author) { + this.author = author; + } + public String getProvider() { + return provider; + } + public void setProvider(String provider) { + this.provider = provider; + } + public String getSourceAt() { + return sourceAt; + } + public void setSourceAt(String sourceAt) { + this.sourceAt = sourceAt; + } + public String getSource() { + return source; + } + public void setSource(String source) { + this.source = source; + } + public String getSojangCouncil() { + return sojangCouncil; + } + public void setSojangCouncil(String sojangCouncil) { + this.sojangCouncil = sojangCouncil; + } + public String getSojangLocation() { + return sojangLocation; + } + public void setSojangLocation(String sojangLocation) { + this.sojangLocation = sojangLocation; + } + + public String getRemarksDesc() { + return remarksDesc; + } + public void setRemarksDesc(String remarksDesc) { + this.remarksDesc = remarksDesc; + } + public String getCopyright() { + return copyright; + } + public void setCopyright(String copyright) { + this.copyright = copyright; + } + public String getRetentionPeriod() { + return retentionPeriod; + } + public void setRetentionPeriod(String retentionPeriod) { + this.retentionPeriod = retentionPeriod; + } + public String getCopyrightMgntDepart() { + return copyrightMgntDepart; + } + public void setCopyrightMgntDepart(String copyrightMgntDepart) { + this.copyrightMgntDepart = copyrightMgntDepart; + } + public String getThirdCopyright() { + return thirdCopyright; + } + public void setThirdCopyright(String thirdCopyright) { + this.thirdCopyright = thirdCopyright; + } + public String getCclType() { + return cclType; + } + public void setCclType(String cclType) { + this.cclType = cclType; + } + public String getOrgOpenAt() { + return orgOpenAt; + } + public void setOrgOpenAt(String orgOpenAt) { + this.orgOpenAt = orgOpenAt; + } + public String getListOpenAt() { + return listOpenAt; + } + public void setListOpenAt(String listOpenAt) { + this.listOpenAt = listOpenAt; + } + public Date getCreatedAt() { + return createdAt; + } + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + public Date getUpdatedAt() { + return updatedAt; + } + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + public Date getDeletedAt() { + return deletedAt; + } + public void setDeletedAt(Date deletedAt) { + this.deletedAt = deletedAt; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + public String getRecommendYn() { + return recommendYn; + } + public void setRecommendYn(String recommendYn) { + this.recommendYn = recommendYn; + } + public String getCouName() { + return couName; + } + public void setCouName(String couName) { + this.couName = couName; + } + public String getAddress() { + return address; + } + public void setAddress(String address) { + this.address = address; + } + public String getUserGroup() { + return userGroup; + } + public void setUserGroup(String userGroup) { + this.userGroup = userGroup; + } + + + public String getMgmtNo() { + return mgmtNo; + } + public void setMgmtNo(String mgmtNo) { + this.mgmtNo = mgmtNo; + } + public List getSidoList() { + List ret = null; + if(this.sidoList != null){ + ret = new ArrayList(); + ret = this.sidoList; + } + return ret; + } + + public void setSidoList(ArrayList cmmCmsSidoList) { + this.sidoList = new ArrayList (cmmCmsSidoList.size()); + for(int i=0; i getContentIdList() { + List ret = null; + if(this.contentIdList != null){ + ret = new ArrayList(); + ret = this.contentIdList; + } + return ret; + } + + public void setContentIdList(List contentIdList) { + this.contentIdList = new ArrayList (contentIdList.size()); + for(int i=0; i contentIdList; + List tagsList; + List topicList; + List councilList; + + private String [] categoryArray1; + private String [] categoryArray2; + private String [] categoryArray3; + private String [] topicArray; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTheme() { + return theme; + } + + public void setTheme(String theme) { + this.theme = theme; + } + + public String getThemeCd() { + return themeCd; + } + + public void setThemeCd(String themeCd) { + this.themeCd = themeCd; + } + + public String getThemeNm() { + return themeNm; + } + + public void setThemeNm(String themeNm) { + this.themeNm = themeNm; + } + + public String getSeries() { + return series; + } + + public void setSeries(String series) { + this.series = series; + } + + public String getSeriesCd() { + return seriesCd; + } + + public void setSeriesCd(String seriesCd) { + this.seriesCd = seriesCd; + } + + public String getSeriesNm() { + return seriesNm; + } + + public void setSeriesNm(String seriesNm) { + this.seriesNm = seriesNm; + } + + public String getFirstTopic() { + return firstTopic; + } + + public void setFirstTopic(String firstTopic) { + this.firstTopic = firstTopic; + } + + public String getSecondTopic() { + return secondTopic; + } + + public void setSecondTopic(String secondTopic) { + this.secondTopic = secondTopic; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getFirstClass() { + return firstClass; + } + + public void setFirstClass(String firstClass) { + this.firstClass = firstClass; + } + + public String getFirstClassNm() { + return firstClassNm; + } + + public void setFirstClassNm(String firstClassNm) { + this.firstClassNm = firstClassNm; + } + + public String getSecondClass() { + return secondClass; + } + + public void setSecondClass(String secondClass) { + this.secondClass = secondClass; + } + + public String getSecondClassNm() { + return secondClassNm; + } + + public void setSecondClassNm(String secondClassNm) { + this.secondClassNm = secondClassNm; + } + + public String getFirstCategory() { + return firstCategory; + } + + public void setFirstCategory(String firstCategory) { + this.firstCategory = firstCategory; + } + + public String getFirstCategoryNm() { + return firstCategoryNm; + } + + public void setFirstCategoryNm(String firstCategoryNm) { + this.firstCategoryNm = firstCategoryNm; + } + + public String getSecondCategory() { + return secondCategory; + } + + public void setSecondCategory(String secondCategory) { + this.secondCategory = secondCategory; + } + + public String getSecondCategoryNm() { + return secondCategoryNm; + } + + public void setSecondCategoryNm(String secondCategoryNm) { + this.secondCategoryNm = secondCategoryNm; + } + + public String getSidoName1() { + return sidoName1; + } + + public void setSidoName1(String sidoName1) { + this.sidoName1 = sidoName1; + } + + public String getSigunguName1() { + return sigunguName1; + } + + public void setSigunguName1(String sigunguName1) { + this.sigunguName1 = sigunguName1; + } + + public String getDongName1() { + return dongName1; + } + + public void setDongName1(String dongName1) { + this.dongName1 = dongName1; + } + + public String getSidoName2() { + return sidoName2; + } + + public void setSidoName2(String sidoName2) { + this.sidoName2 = sidoName2; + } + + public String getSigunguName2() { + return sigunguName2; + } + + public void setSigunguName2(String sigunguName2) { + this.sigunguName2 = sigunguName2; + } + + public String getDongName2() { + return dongName2; + } + + public void setDongName2(String dongName2) { + this.dongName2 = dongName2; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getTrsSidoName() { + return trsSidoName; + } + + public void setTrsSidoName(String trsSidoName) { + this.trsSidoName = trsSidoName; + } + + public String getTrsSigunguName() { + return trsSigunguName; + } + + public void setTrsSigunguName(String trsSigunguName) { + this.trsSigunguName = trsSigunguName; + } + + public String getTrsDongName() { + return trsDongName; + } + + public void setTrsDongName(String trsDongName) { + this.trsDongName = trsDongName; + } + + public String getTrsAge() { + return trsAge; + } + + public void setTrsAge(String trsAge) { + this.trsAge = trsAge; + } + + public String getAge() { + return age; + } + + public void setAge(String age) { + this.age = age; + } + + public String getChronologicalStart() { + return chronologicalStart; + } + + public void setChronologicalStart(String chronologicalStart) { + this.chronologicalStart = chronologicalStart; + } + + public String getChronologicalEnd() { + return chronologicalEnd; + } + + public void setChronologicalEnd(String chronologicalEnd) { + this.chronologicalEnd = chronologicalEnd; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getAddInformation() { + return addInformation; + } + + public void setAddInformation(String addInformation) { + this.addInformation = addInformation; + } + + public String getWriterOpinion() { + return writerOpinion; + } + + public void setWriterOpinion(String writerOpinion) { + this.writerOpinion = writerOpinion; + } + + public String getWriter() { + return writer; + } + + public void setWriter(String writer) { + this.writer = writer; + } + + public String getCclType() { + return cclType; + } + + public void setCclType(String cclType) { + this.cclType = cclType; + } + + public String getGenyear() { + return genyear; + } + + public void setGenyear(String genyear) { + this.genyear = genyear; + } + + public Date getDeletedAt() { + return deletedAt; + } + + public void setDeletedAt(Date deletedAt) { + this.deletedAt = deletedAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public String getInterfaceId() { + return interfaceId; + } + + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + + public String getLinkData() { + return linkData; + } + + public void setLinkData(String linkData) { + this.linkData = linkData; + } + + public String getUseAt() { + return useAt; + } + + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + public String getMainImg() { + return mainImg; + } + + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + + public String getRecommendYn() { + return recommendYn; + } + + public void setRecommendYn(String recommendYn) { + this.recommendYn = recommendYn; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getCouName() { + return couName; + } + + public void setCouName(String couName) { + this.couName = couName; + } + + public int getCnt() { + return cnt; + } + + public void setCnt(int cnt) { + this.cnt = cnt; + } + + public String getContentId() { + return contentId; + } + + public void setContentId(String contentId) { + this.contentId = contentId; + } + + public String getRefType() { + return refType; + } + + public void setRefType(String refType) { + this.refType = refType; + } + + public String getRefDesc() { + return refDesc; + } + + public void setRefDesc(String refDesc) { + this.refDesc = refDesc; + } + + public String getSupLinkData() { + return supLinkData; + } + + public void setSupLinkData(String supLinkData) { + this.supLinkData = supLinkData; + } + + public String getKeyName() { + return keyName; + } + + public void setKeyName(String keyName) { + this.keyName = keyName; + } + + public String getTagsName() { + return tagsName; + } + + public void setTagsName(String tagsName) { + this.tagsName = tagsName; + } + + public String getSupType() { + return supType; + } + + public void setSupType(String supType) { + this.supType = supType; + } + + public String getRelDesc() { + return relDesc; + } + + public void setRelDesc(String relDesc) { + this.relDesc = relDesc; + } + + public String getCopyright() { + return copyright; + } + + public void setCopyright(String copyright) { + this.copyright = copyright; + } + + public List getContentIdList() { + List ret = null; + if(this.contentIdList != null){ + ret = new ArrayList(); + ret = this.contentIdList; + } + return ret; + } + + public void setContentIdList(List contentIdList) { + this.contentIdList = new ArrayList (contentIdList.size()); + for(int i=0; i getTagsList() { + List ret = null; + if(this.tagsList != null){ + ret = new ArrayList(); + ret = this.tagsList; + } + return ret; + } + + public void setTagsList(List tagsList) { + this.tagsList = new ArrayList (tagsList.size()); + for(int i=0; i getTopicList() { + List ret = null; + if(this.topicList != null){ + ret = new ArrayList(); + ret = this.topicList; + } + return ret; + } + + public void setTopicList(List topicList) { + this.topicList = new ArrayList (topicList.size()); + for(int i=0; i getCouncilList() { + List ret = null; + if(this.councilList != null){ + ret = new ArrayList(); + ret = this.councilList; + } + return ret; + } + + public void setCouncilList(List councilList) { + this.councilList = new ArrayList (councilList.size()); + for(int i=0; i selectCmmActivityHstOpList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + List selectCmmScrapList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + int selectCmmScrapListTotCnt(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + int selectCmmActivityHstOpListTotCnt(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + List selectCmmCmsKeywordsList(List result) throws EgovBizException; + List selectCmmCmsTagsList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + List selectCmmCmsPopularList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + void deleteAllCmmScrapInfo(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; +} diff --git a/src/main/java/cmm/service/CmmCmsSupplementDataVO.java b/src/main/java/cmm/service/CmmCmsSupplementDataVO.java new file mode 100644 index 00000000..c825bdf4 --- /dev/null +++ b/src/main/java/cmm/service/CmmCmsSupplementDataVO.java @@ -0,0 +1,54 @@ +package cmm.service; + +import cmm.util.CmmUtil; + +public class CmmCmsSupplementDataVO { + private String id = null; + private String contentId = null; + private String contentGroupId = ""; + private String supType = ""; + private String linkData = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContentId() { + return contentId; + } + + public void setContentId(String contentId) { + this.contentId = contentId; + } + + public String getContentGroupId() { + return contentGroupId; + } + + public void setContentGroupId(String contentGroupId) { + this.contentGroupId = contentGroupId; + } + + public String getSupType() { + return supType; + } + + public void setSupType(String supType) { + this.supType = supType; + } + + public String getLinkData() { + return linkData; + } + + public void setLinkData(String linkData) { + this.linkData = linkData; + } + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmCmsTagsVO.java b/src/main/java/cmm/service/CmmCmsTagsVO.java new file mode 100644 index 00000000..7e71e27a --- /dev/null +++ b/src/main/java/cmm/service/CmmCmsTagsVO.java @@ -0,0 +1,31 @@ +package cmm.service; + +import cmm.util.CmmUtil; + +public class CmmCmsTagsVO { + private String id = null; + private String contentId = null; + private String tagsName = ""; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getContentId() { + return contentId; + } + public void setContentId(String contentId) { + this.contentId = contentId; + } + public String getTagsName() { + return tagsName; + } + public void setTagsName(String tagsName) { + this.tagsName = tagsName; + } + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmCmsUserGroupVO.java b/src/main/java/cmm/service/CmmCmsUserGroupVO.java new file mode 100644 index 00000000..af7bf89d --- /dev/null +++ b/src/main/java/cmm/service/CmmCmsUserGroupVO.java @@ -0,0 +1,36 @@ +package cmm.service; + +import cmm.util.CmmUtil; + +public class CmmCmsUserGroupVO { + private String id = null; + private String contentId = null; + private String userType = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContentId() { + return contentId; + } + + public void setContentId(String contentId) { + this.contentId = contentId; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + public String toString() { + return CmmUtil.reflectionToString(this); + } +} diff --git a/src/main/java/cmm/service/CmmCmsVO.java b/src/main/java/cmm/service/CmmCmsVO.java new file mode 100644 index 00000000..0cd8f605 --- /dev/null +++ b/src/main/java/cmm/service/CmmCmsVO.java @@ -0,0 +1,571 @@ +package cmm.service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cmm.util.CmmUtil; +import cmm.util.CmmVO; + + +@SuppressWarnings("serial") +public class CmmCmsVO extends CmmVO { + + private String id = null; + private String contentId = null; + private String theme = ""; + private String series = ""; + private String firstTopic = ""; + private String secondTopic = ""; + private String title = ""; + private String sidoName1 = ""; + private String sigunguName1 = ""; + private String dongName1 = ""; + private String sidoName2 = ""; + private String sigunguName2 = ""; + private String dongName2 = ""; + private String latitude = ""; + private String longitude = ""; + private String trsSidoName = ""; + private String trsSigunguName = ""; + private String trsDongName = ""; + private String field = ""; + private String age = ""; + private String chronological = ""; + private String summary = ""; + private String description = ""; + private String addInformation = ""; + private String writerOpinion = ""; + private String writer = ""; + private Date deletedAt = null; + private Date updatedAt = null; + private Date createdAt = null; + private String interfaceId = ""; + private String linkData = ""; + private String recommendYn =""; + private String useAt = "Y"; + private String mainImg = ""; + private String rdcnt = ""; + private String etcCol1; + private String etcCol2; + private String council = ""; + private String volume = ""; + private String author = ""; + private String publisher = ""; + private String genyear = ""; + private String amount = ""; + private String sidoName = ""; + private String sigunguName = ""; + private String category = ""; + private String keywords = ""; + private String count = ""; + private String haveFile = ""; + private String needDigital = ""; + private String desc = ""; + private String location = ""; + private String scan1 = ""; + private String scan1History = ""; + private String writerSelect = ""; + private String contentType = ""; + private String joinCnt = ""; + private String satisAvg = ""; + private String couName = ""; + private String orgOpenAt = ""; + private String listOpenAt = ""; + private String assetType = ""; + private String assetClass = ""; + private String uaType=""; + + + private String mediaId = null; + + List cmmCmsKeywordsList = null; + List cmmCmsTagsList = null; + List cmmCouncilInfoList = null; + List cmmCmsSupplementDataList = null; + List cmmCmsReferenceDataList = null; + List cmmCmsRelatedDataList = null; + + + + + public String getRecommendYn() { + return recommendYn; + } + public void setRecommendYn(String recommendYn) { + this.recommendYn = recommendYn; + } + public String getAssetType() { + return assetType; + } + public void setAssetType(String assetType) { + this.assetType = assetType; + } + public String getOrgOpenAt() { + return orgOpenAt; + } + public void setOrgOpenAt(String orgOpenAt) { + this.orgOpenAt = orgOpenAt; + } + public String getListOpenAt() { + return listOpenAt; + } + public void setListOpenAt(String listOpenAt) { + this.listOpenAt = listOpenAt; + } + public String getCouName() { + return couName; + } + public void setCouName(String couName) { + this.couName = couName; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getContentId() { + return contentId; + } + public void setContentId(String contentId) { + this.contentId = contentId; + } + public String getTheme() { + return theme; + } + public void setTheme(String theme) { + this.theme = theme; + } + public String getSeries() { + return series; + } + public void setSeries(String series) { + this.series = series; + } + public String getFirstTopic() { + return firstTopic; + } + public void setFirstTopic(String firstTopic) { + this.firstTopic = firstTopic; + } + public String getSecondTopic() { + return secondTopic; + } + public void setSecondTopic(String secondTopic) { + this.secondTopic = secondTopic; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getSidoName1() { + return sidoName1; + } + public void setSidoName1(String sidoName1) { + this.sidoName1 = sidoName1; + } + public String getSigunguName1() { + return sigunguName1; + } + public void setSigunguName1(String sigunguName1) { + this.sigunguName1 = sigunguName1; + } + public String getDongName1() { + return dongName1; + } + public void setDongName1(String dongName1) { + this.dongName1 = dongName1; + } + public String getSidoName2() { + return sidoName2; + } + public void setSidoName2(String sidoName2) { + this.sidoName2 = sidoName2; + } + public String getSigunguName2() { + return sigunguName2; + } + public void setSigunguName2(String sigunguName2) { + this.sigunguName2 = sigunguName2; + } + public String getDongName2() { + return dongName2; + } + public void setDongName2(String dongName2) { + this.dongName2 = dongName2; + } + public String getLatitude() { + return latitude; + } + public void setLatitude(String latitude) { + this.latitude = latitude; + } + public String getLongitude() { + return longitude; + } + public void setLongitude(String longitude) { + this.longitude = longitude; + } + public String getTrsSidoName() { + return trsSidoName; + } + public void setTrsSidoName(String trsSidoName) { + this.trsSidoName = trsSidoName; + } + public String getTrsSigunguName() { + return trsSigunguName; + } + public void setTrsSigunguName(String trsSigunguName) { + this.trsSigunguName = trsSigunguName; + } + public String getTrsDongName() { + return trsDongName; + } + public void setTrsDongName(String trsDongName) { + this.trsDongName = trsDongName; + } + public String getField() { + return field; + } + public void setField(String field) { + this.field = field; + } + public String getAge() { + return age; + } + public void setAge(String age) { + this.age = age; + } + public String getChronological() { + return chronological; + } + public void setChronological(String chronological) { + this.chronological = chronological; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public String getAddInformation() { + return addInformation; + } + public void setAddInformation(String addInformation) { + this.addInformation = addInformation; + } + public String getWriterOpinion() { + return writerOpinion; + } + public void setWriterOpinion(String writerOpinion) { + this.writerOpinion = writerOpinion; + } + public String getWriter() { + return writer; + } + public void setWriter(String writer) { + this.writer = writer; + } + public String getInterfaceId() { + return interfaceId; + } + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + public String getLinkData() { + return linkData; + } + public void setLinkData(String linkData) { + this.linkData = linkData; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + public String getMainImg() { + return mainImg; + } + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + public String getRdcnt() { + return rdcnt; + } + public void setRdcnt(String rdcnt) { + this.rdcnt = rdcnt; + } + public List getCmmCmsKeywordsList() { + List ret = null; + if(this.cmmCmsKeywordsList != null){ + ret = new ArrayList(); + ret = this.cmmCmsKeywordsList; + } + return ret; + } + public void setCmmCmsKeywordsList(ArrayList cmmCmsKeywordsList) { + this.cmmCmsKeywordsList = new ArrayList (cmmCmsKeywordsList.size()); + for(int i=0; i getCmmCmsTagsList() { + List ret = null; + if(this.cmmCmsTagsList != null){ + ret = new ArrayList(); + ret = this.cmmCmsTagsList; + } + return ret; + } + public void setCmmCmsTagsList(ArrayList cmmCmsTagsList) { + this.cmmCmsTagsList = new ArrayList (cmmCmsTagsList.size()); + for(int i=0; i getCmmCouncilInfoList() { + List ret = null; + if(this.cmmCouncilInfoList != null){ + ret = new ArrayList(); + ret = this.cmmCouncilInfoList; + } + return ret; + } + public void setCmmCouncilInfoList(ArrayList cmmCouncilInfoList) { + this.cmmCouncilInfoList = new ArrayList (cmmCouncilInfoList.size()); + for(int i=0; i getCmmCmsSupplementDataList() { + List ret = null; + if(this.cmmCmsSupplementDataList != null){ + ret = new ArrayList(); + ret = this.cmmCmsSupplementDataList; + } + return ret; + } + public void setCmmCmsSupplementDataList(ArrayList cmmCmsSupplementDataList) { + this.cmmCmsSupplementDataList = new ArrayList (cmmCmsSupplementDataList.size()); + for(int i=0; i getCmmCmsReferenceDataList() { + List ret = null; + if(this.cmmCmsReferenceDataList != null){ + ret = new ArrayList(); + ret = this.cmmCmsReferenceDataList; + } + return ret; + } + public void setCmmCmsReferenceDataList(ArrayList cmmCmsReferenceDataList) { + this.cmmCmsReferenceDataList = new ArrayList (cmmCmsReferenceDataList.size()); + for(int i=0; i getCmmCmsRelatedDataList() { + List ret = null; + if(this.cmmCmsRelatedDataList != null){ + ret = new ArrayList(); + ret = this.cmmCmsRelatedDataList; + } + return ret; + } + public void setCmmCmsRelatedDataList(ArrayList cmmCmsRelatedDataList) { + this.cmmCmsRelatedDataList = new ArrayList (cmmCmsRelatedDataList.size()); + for(int i=0; i kdmCulturePostContentList = null; + List culturePostContentList = null; + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getContentId() { + return contentId; + } + public void setContentId(String contentId) { + this.contentId = contentId; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getMainImg() { + return mainImg; + } + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + public String getMainImgOrignlFileNm() { + return mainImgOrignlFileNm; + } + public void setMainImgOrignlFileNm(String mainImgOrignlFileNm) { + this.mainImgOrignlFileNm = mainImgOrignlFileNm; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + public String getBeginAt() { + return beginAt; + } + public void setBeginAt(String beginAt) { + this.beginAt = beginAt; + } + public String getEndAt() { + return endAt; + } + public void setEndAt(String endAt) { + this.endAt = endAt; + } + public Date getCreateDt() { + return createDt; + } + public void setCreateDt(Date createDt) { + this.createDt = createDt; + } + public Date getUpdateDt() { + return updateDt; + } + public void setUpdateDt(Date updateDt) { + this.updateDt = updateDt; + } + public String[] getContentIds() { + String[] ret = null; + if (this.contentIds != null) { + ret = new String[contentIds.length]; + for (int i = 0; i < contentIds.length; i++) { + ret[i] = this.contentIds[i]; + } + } + return ret; + } + public void setContentIds(String[] contentIds) { + // 수정 + this.contentIds = new String[contentIds.length]; + for(int i = 0; i < contentIds.length; ++i) + this.contentIds[i] = contentIds[i]; + } + + public String getTags() { + return tags; + } + public void setTags(String tags) { + this.tags = tags; + } + public List getKdmCulturePostContentList() { + List cpc = null; + if(this.kdmCulturePostContentList != null){ + cpc = new ArrayList(); + cpc = this.kdmCulturePostContentList; + } + + return cpc; + } + public void setKdmCulturePostContentList(ArrayList kdmCulturePostContentList) { + this.kdmCulturePostContentList = new ArrayList (kdmCulturePostContentList.size()); + for(int i=0; i getCulturePostContentList() { + List cpc = null; + if(this.culturePostContentList != null){ + cpc = new ArrayList(); + cpc = this.culturePostContentList; + } + return cpc; + } + public void setCulturePostContentList(ArrayList culturePostContentList) { + this.culturePostContentList = new ArrayList (culturePostContentList.size()); + for(int i=0; i contentIdList; + + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + public Date getCreateDt() { + return createDt; + } + public void setCreateDt(Date createDt) { + this.createDt = createDt; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + public List getContentIdList() { + List ret = null; + if(this.contentIdList != null){ + ret = new ArrayList(); + ret = this.contentIdList; + } + return ret; + } + + public void setContentIdList(List contentIdList) { + this.contentIdList = new ArrayList (contentIdList.size()); + for(int i=0; i selectFileDetailList(String fileMstNo) throws IOException, EgovBizException; + public FileDetailVO selectFileDetail(FileDetailVO fileDetailVO) throws IOException, EgovBizException; + public FileDetailVO selectFileDetailFirst(String fileMstNo) throws IOException, EgovBizException; + public boolean deleteAllFileDetailAndMaster(String fileMstNo) throws IOException, EgovBizException; + public List selectIconFileDownLoad(String atchFileId) throws IOException, EgovBizException; + public String uploadFileOneAttMulti(HttpServletRequest request, FileManagementVO fileManagementVO, int cnt) throws IOException, EgovBizException; + String uploadFileOneAttMulti(MultipartFile multipartFile, FileManagementVO fileManagementVO, int fileSn, String fileMstNo, String ctrlStr, String fileDtlNo, String path) throws IOException, EgovBizException; +} \ No newline at end of file diff --git a/src/main/java/cmm/service/CmmMenuManageService.java b/src/main/java/cmm/service/CmmMenuManageService.java new file mode 100644 index 00000000..b14537bc --- /dev/null +++ b/src/main/java/cmm/service/CmmMenuManageService.java @@ -0,0 +1,12 @@ +package cmm.service; + +import java.util.List; + +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + + +public interface CmmMenuManageService { + List selectMenuHead(String authorCode) throws EgovBizException; + List selectMenuLeft(String authorCode) throws EgovBizException; +} diff --git a/src/main/java/cmm/service/CmmMetaVO.java b/src/main/java/cmm/service/CmmMetaVO.java new file mode 100644 index 00000000..d3df71cb --- /dev/null +++ b/src/main/java/cmm/service/CmmMetaVO.java @@ -0,0 +1,90 @@ +package cmm.service; + +import cmm.Constant; +import cmm.util.CmmUtil; + +@SuppressWarnings("serial") +public class CmmMetaVO { + + private String title = "지역N문화"; + private String url = "http://www.nculture.org"; + private String image = "http://www.nculture.org/images/cmm/open-graph-image.jpg"; + private String imageType = "image/jpeg"; + private Integer imageWidth = null; + private Integer imageHeight = null; + private String description = "지방문화원이 생산,발굴한 독특하고 고유한 지역문화 콘텐츠 및 소장자료를 모든 국민이 향유할수 있도록 제공하는 지역문화 대표 포털"; + private String ogType = Constant.META_OG_TYPE.article.toString(); + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getImageType() { + return imageType; + } + + public void setImageType(String imageType) { + this.imageType = imageType; + } + + public Integer getImageWidth() { + return imageWidth; + } + + public void setImageWidth(Integer imageWidth) { + this.imageWidth = imageWidth; + } + + public Integer getImageHeight() { + return imageHeight; + } + + public void setImageHeight(Integer imageHeight) { + this.imageHeight = imageHeight; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getOgType() { + return ogType; + } + + public void setOgType(String ogType) { + this.ogType = ogType; + } + + /** + * toString() + * @return String + */ + public String toString() { + return CmmUtil.reflectionToString(this); + } + +} diff --git a/src/main/java/cmm/service/CmmPmsMapContentsService.java b/src/main/java/cmm/service/CmmPmsMapContentsService.java new file mode 100644 index 00000000..5214742e --- /dev/null +++ b/src/main/java/cmm/service/CmmPmsMapContentsService.java @@ -0,0 +1,20 @@ +package cmm.service; + +import java.util.List; + +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + +/** + * 맵 콘텐츠에 대한 서비스 인터페이스 클래스를 정의한다 + * @Class Name : CmmPmsMapContentsService.java + * @author ecplaza + * @since 2018-06-26 + * @version 1.0 + */ +public interface CmmPmsMapContentsService { + int selectCmmPmsMapCntnsStoryCnt(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException; + int selectCmmPmsMapLocalCultureCnt(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException; + List selectCmmPmsMapAoiCouncilInfoList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException; + List selectCmmPmsMapContentsList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException; + List selectCmmPmsMapContentsSearchList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException; +} diff --git a/src/main/java/cmm/service/CmmPmsMapContentsVO.java b/src/main/java/cmm/service/CmmPmsMapContentsVO.java new file mode 100644 index 00000000..064fb9f0 --- /dev/null +++ b/src/main/java/cmm/service/CmmPmsMapContentsVO.java @@ -0,0 +1,508 @@ +package cmm.service; + +import java.util.ArrayList; +import java.util.List; + +import cmm.util.CmmUtil; +import cmm.util.CmmVO; + + +/** + * @Class Name : CmmPmsMapContentsVO.java + * @author ecplaza + * @since 2018-06-26 + * @version 1.0 + */ +@SuppressWarnings("serial") +public class CmmPmsMapContentsVO extends CmmVO { + + private String id = ""; + private String contentType = ""; + private String contentId = ""; + private String contentTypeId = ""; + private String contentTypeName = ""; + private String copyright = ""; + private String title = ""; + private String summary = ""; + private String mainImage = ""; + private String linkData = ""; + private String latitude = ""; + private String longitude = ""; + private String sidoName = ""; + private String sigunguName = ""; + private String cat1 = ""; + private String cat1Name = ""; + private String cat2 = ""; + private String cat2Name = ""; + private String cat3 = ""; + private String cat3Name = ""; + private String zipCode = ""; + private String tel = ""; + private String firstTopic = ""; + private String secondTopic = ""; + private String firstClass = ""; + private String secondClass = ""; + private String age = ""; + private String genyear = ""; + private String chronologicalStart = ""; + private String chronologicalEnd = ""; + private String themeCd = ""; + private String themeNm = ""; + private String seriesCd = ""; + private String seriesNm = ""; + private String firstCategory = ""; + private String firstCategoryNm = ""; + private String secondCategory = ""; + private String secondCategoryNm = ""; + private String interfaceId = ""; + private String recommendYn = ""; + private String tagsName = ""; + private String addr1 = ""; + private String addr2 = ""; + private String ntceBgnde = ""; + private String ntceEndde = ""; + private String website = ""; + private String createdAt = ""; + private String updatedAt = ""; + private String councilCd = ""; + private String councilNm = ""; + private String councilCnt = "0"; + + + // 문화원 정보 목록 + List cmmCouncilInfoList = null; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getContentId() { + return contentId; + } + + public void setContentId(String contentId) { + this.contentId = contentId; + } + + public String getContentTypeId() { + return contentTypeId; + } + + public void setContentTypeId(String contentTypeId) { + this.contentTypeId = contentTypeId; + } + + public String getContentTypeName() { + return contentTypeName; + } + + public void setContentTypeName(String contentTypeName) { + this.contentTypeName = contentTypeName; + } + + public String getCopyright() { + return copyright; + } + + public void setCopyright(String copyright) { + this.copyright = copyright; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getMainImage() { + return mainImage; + } + + public void setMainImage(String mainImage) { + this.mainImage = mainImage; + } + + public String getLinkData() { + return linkData; + } + + public void setLinkData(String linkData) { + this.linkData = linkData; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getSidoName() { + return sidoName; + } + + public void setSidoName(String sidoName) { + this.sidoName = sidoName; + } + + public String getSigunguName() { + return sigunguName; + } + + public void setSigunguName(String sigunguName) { + this.sigunguName = sigunguName; + } + + public String getCat1() { + return cat1; + } + + public void setCat1(String cat1) { + this.cat1 = cat1; + } + + public String getCat1Name() { + return cat1Name; + } + + public void setCat1Name(String cat1Name) { + this.cat1Name = cat1Name; + } + + public String getCat2() { + return cat2; + } + + public void setCat2(String cat2) { + this.cat2 = cat2; + } + + public String getCat2Name() { + return cat2Name; + } + + public void setCat2Name(String cat2Name) { + this.cat2Name = cat2Name; + } + + public String getCat3() { + return cat3; + } + + public void setCat3(String cat3) { + this.cat3 = cat3; + } + + public String getCat3Name() { + return cat3Name; + } + + public void setCat3Name(String cat3Name) { + this.cat3Name = cat3Name; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getFirstTopic() { + return firstTopic; + } + + public void setFirstTopic(String firstTopic) { + this.firstTopic = firstTopic; + } + + public String getSecondTopic() { + return secondTopic; + } + + public void setSecondTopic(String secondTopic) { + this.secondTopic = secondTopic; + } + + public String getFirstClass() { + return firstClass; + } + + public void setFirstClass(String firstClass) { + this.firstClass = firstClass; + } + + public String getSecondClass() { + return secondClass; + } + + public void setSecondClass(String secondClass) { + this.secondClass = secondClass; + } + + public String getAge() { + return age; + } + + public void setAge(String age) { + this.age = age; + } + + public String getGenyear() { + return genyear; + } + + public void setGenyear(String genyear) { + this.genyear = genyear; + } + + public String getChronologicalStart() { + return chronologicalStart; + } + + public void setChronologicalStart(String chronologicalStart) { + this.chronologicalStart = chronologicalStart; + } + + public String getChronologicalEnd() { + return chronologicalEnd; + } + + public void setChronologicalEnd(String chronologicalEnd) { + this.chronologicalEnd = chronologicalEnd; + } + + public String getThemeCd() { + return themeCd; + } + + public void setThemeCd(String themeCd) { + this.themeCd = themeCd; + } + + public String getThemeNm() { + return themeNm; + } + + public void setThemeNm(String themeNm) { + this.themeNm = themeNm; + } + + public String getSeriesCd() { + return seriesCd; + } + + public void setSeriesCd(String seriesCd) { + this.seriesCd = seriesCd; + } + + public String getSeriesNm() { + return seriesNm; + } + + public void setSeriesNm(String seriesNm) { + this.seriesNm = seriesNm; + } + + public String getFirstCategory() { + return firstCategory; + } + + public void setFirstCategory(String firstCategory) { + this.firstCategory = firstCategory; + } + + public String getFirstCategoryNm() { + return firstCategoryNm; + } + + public void setFirstCategoryNm(String firstCategoryNm) { + this.firstCategoryNm = firstCategoryNm; + } + + public String getSecondCategory() { + return secondCategory; + } + + public void setSecondCategory(String secondCategory) { + this.secondCategory = secondCategory; + } + + public String getSecondCategoryNm() { + return secondCategoryNm; + } + + public void setSecondCategoryNm(String secondCategoryNm) { + this.secondCategoryNm = secondCategoryNm; + } + + public String getInterfaceId() { + return interfaceId; + } + + public void setInterfaceId(String interfaceId) { + this.interfaceId = interfaceId; + } + + public String getRecommendYn() { + return recommendYn; + } + + public void setRecommendYn(String recommendYn) { + this.recommendYn = recommendYn; + } + + public String getTagsName() { + return tagsName; + } + + public void setTagsName(String tagsName) { + this.tagsName = tagsName; + } + + public String getAddr1() { + return addr1; + } + + public void setAddr1(String addr1) { + this.addr1 = addr1; + } + + public String getAddr2() { + return addr2; + } + + public void setAddr2(String addr2) { + this.addr2 = addr2; + } + + public String getNtceBgnde() { + return ntceBgnde; + } + + public void setNtceBgnde(String ntceBgnde) { + this.ntceBgnde = ntceBgnde; + } + + public String getNtceEndde() { + return ntceEndde; + } + + public void setNtceEndde(String ntceEndde) { + this.ntceEndde = ntceEndde; + } + + public String getWebsite() { + return website; + } + + public void setWebsite(String website) { + this.website = website; + } + + public String getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(String createdAt) { + this.createdAt = createdAt; + } + + public String getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(String updatedAt) { + this.updatedAt = updatedAt; + } + + public String getCouncilCd() { + return councilCd; + } + + public void setCouncilCd(String councilCd) { + this.councilCd = councilCd; + } + + public String getCouncilNm() { + return councilNm; + } + + public void setCouncilNm(String councilNm) { + this.councilNm = councilNm; + } + + public String getCouncilCnt() { + return councilCnt; + } + + public void setCouncilCnt(String councilCnt) { + this.councilCnt = councilCnt; + } + + + public List getCmmCouncilInfoList() { + List ret = null; + if(this.cmmCouncilInfoList != null){ + ret = new ArrayList(); + ret = this.cmmCouncilInfoList; + } + return ret; + } + + public void setCmmCouncilInfoList(List cmmCouncilInfoList) { + this.cmmCouncilInfoList = new ArrayList (cmmCouncilInfoList.size()); + for(int i=0; i selectCmmActivityHstAllListTotCnt(DataMap paramMap) throws EgovBizException; + int selectSatisfactionTotCnt(DataMap paramMap) throws EgovBizException; + int selectCmmPscHstTotCnt(DataMap paramMap) throws EgovBizException; + DataMap selectCmmPscHstDetail(DataMap paramMap) throws EgovBizException; + DataMap selectCmmPmsPostRandom(DataMap paramMap) throws EgovBizException; + /** + * 에셋 상세정보 + * pick 레이어 사용(좌측 상단) + * @param paramMap + * @return + * @throws EgovBizException + */ + DataMap selectCmmAmsAssetsDetail(DataMap paramMap) throws EgovBizException; + /** + * 에셋 미디어 그룹 목록 Cnt + * pick 레이어 사용(좌측 목록)Cnt + * @param paramMap + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsMediaGroupListCnt(DataMap paramMap) throws EgovBizException; + /** + * 에셋 미디어 그룹 목록 + * pick 레이어 사용(좌측 목록) + * @param paramMap + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsMediaGroupList(DataMap paramMap) throws EgovBizException; + List selectCmmAmsAssetsMediaList(DataMap paramMap) throws EgovBizException; + /** + * 에셋 미디어 상세정보 + * pick 레이어 사용(완문보기 상세정보) + * @param paramMap + * @return + * @throws EgovBizException + */ + DataMap selectCmmAmsAssetsMediaDetail(DataMap paramMap) throws EgovBizException; + /** + * 에셋 미디어 상세정보 (미디어의 INTERFACE_ID 값으로 조회) + * pick 레이어 사용(완문보기 상세정보) + * @param paramMap + * @return + * @throws EgovBizException + */ + DataMap selectCmmAmsAssetsMediaDetailByInterfaceId(DataMap paramMap) throws EgovBizException; + /** + * 에셋 미디어 OCR 목록 + * pick 레이어 사용(문서 완문보기) + * @param paramMap + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsMediaOcrList(DataMap paramMap) throws EgovBizException; + /** + * 에셋 상세 연관태그 목록 + * pick 레이어 사용(상세 정보의 연관태그) + * @param paramMap + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsTagsList(DataMap paramMap) throws EgovBizException; + /** + * 에셋 상세 연속자료 목록 총 수 + * pick 레이어 사용(상세 정보의 연속자료 목록 총 수) + * @param param + * @return + * @throws EgovBizException + */ + int selectCmmAmsAssetsContinueListTotCnt(CmmVO param) throws EgovBizException; + /** + * 에셋 상세 연속자료 목록 + * pick 레이어 사용(상세 정보의 연속자료 목록) + * @param param + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsContinueList(CmmVO param) throws EgovBizException; + /** + * 에셋 상세 연관 지역문화이야기 목록 + * pick 레이어 사용(지역문화이야기 목록) + * @param paramMap + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsThemesContentsList(List paramMap) throws EgovBizException; + /** + * 에셋 상세 다른문화원 소장자료 목록 + * pick 레이어 사용(다른문화원 소장자료 목록) + * @param paramMap + * @return + * @throws EgovBizException + */ + List selectCmmAmsAssetsDiffSojangList(DataMap paramMap) throws EgovBizException; + List selectCmmAmsAssetsOriginViewList(DataMap paramMap) throws EgovBizException; + + int selectCmmAmsAssetsOriginViewListAjaxCnt(DataMap paramMap) throws EgovBizException; + List selectCmmAmsAssetsOriginViewListAjax(DataMap paramMap) throws EgovBizException; + + DataMap selectCmmAmsAssetsOriginViewDetail(DataMap paramMap) throws EgovBizException; + int selectCmmScrapCnt(DataMap paramMap) throws EgovBizException; + void insertSatisfaction(DataMap paramMap) throws EgovBizException; + void insertCmmSchedulerHst(DataMap paramMap) throws FdlException ,EgovBizException; + void insertCmmPscHst(DataMap paramMap) throws EgovBizException; + void updateCmmPscHst(DataMap paramMap) throws EgovBizException; + void insertCmmScrap(DataMap paramMap) throws EgovBizException; + void insertCmmActivityHst(DataMap paramMap) throws EgovBizException; + void updateCmmActivityHst(DataMap paramMap) throws EgovBizException; + void deleteCmmScrapInfo(DataMap paramMap) throws EgovBizException; + + /** + * 모바일 디바이스 정보 목록 + * @param paramMap + * @return + * @throws EgovBizException + */ + List selecCmmMobileDeviceInfoList(DataMap paramMap) throws EgovBizException; + + void insertCmmActivityMediaHst(DataMap paramMap) throws EgovBizException; + + List selectCmmAmsAssetsTagKeyList(DataMap paramMap) throws EgovBizException; + + DataMap selectCmmAmsAssetsMediaDetail2(DataMap paramMap) throws EgovBizException; + + int selectCmmWebzineCnfirm(DataMap paramMap) throws EgovBizException; + void insertCmmWebzineSubScribe(DataMap paramMap) throws EgovBizException; + + void insertCmmMainData(String gubun) throws FdlException ,EgovBizException; + DataMap insertCmmExtGiaMainInfo(String contentType) throws FdlException; + + DataMap selectCmmPscHst(String jsessionId) throws EgovBizException; + + public DataMap getMainLogo() throws EgovBizException; + +} diff --git a/src/main/java/cmm/service/CmmThemeVO.java b/src/main/java/cmm/service/CmmThemeVO.java new file mode 100644 index 00000000..4b48aa5d --- /dev/null +++ b/src/main/java/cmm/service/CmmThemeVO.java @@ -0,0 +1,111 @@ +package cmm.service; + +import java.util.Date; + +import cmm.util.CmmVO; + +@SuppressWarnings("serial") +public class CmmThemeVO extends CmmVO { + private String id = null; + private String themeCd = ""; + private String themeNm = ""; + private String seriesCd = ""; + private String seriesNm = ""; + private String seriesDesc = ""; + private String mainImg = ""; + private String mainImgOrignlFileNm = ""; + private String mainDesc = ""; + private String linkUrl = ""; + private String useAt = ""; + private Date createDt; + private Date updateDt; + private String atchCtrl = ""; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getThemeCd() { + return themeCd; + } + public void setThemeCd(String themeCd) { + this.themeCd = themeCd; + } + public String getThemeNm() { + return themeNm; + } + public void setThemeNm(String themeNm) { + this.themeNm = themeNm; + } + public String getSeriesCd() { + return seriesCd; + } + public void setSeriesCd(String seriesCd) { + this.seriesCd = seriesCd; + } + + public String getSeriesNm() { + return seriesNm; + } + public void setSeriesNm(String seriesNm) { + this.seriesNm = seriesNm; + } + public String getSeriesDesc() { + return seriesDesc; + } + public void setSeriesDesc(String seriesDesc) { + this.seriesDesc = seriesDesc; + } + public String getMainImg() { + return mainImg; + } + public void setMainImg(String mainImg) { + this.mainImg = mainImg; + } + public String getMainImgOrignlFileNm() { + return mainImgOrignlFileNm; + } + public void setMainImgOrignlFileNm(String mainImgOrignlFileNm) { + this.mainImgOrignlFileNm = mainImgOrignlFileNm; + } + public String getMainDesc() { + return mainDesc; + } + public void setMainDesc(String mainDesc) { + this.mainDesc = mainDesc; + } + public String getLinkUrl() { + return linkUrl; + } + public void setLinkUrl(String linkUrl) { + this.linkUrl = linkUrl; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + public Date getCreateDt() { + return createDt; + } + public void setCreateDt(Date createDt) { + this.createDt = createDt; + } + public Date getUpdateDt() { + return updateDt; + } + public void setUpdateDt(Date updateDt) { + this.updateDt = updateDt; + } + + public String getAtchCtrl() { + return atchCtrl; + } + + public void setAtchCtrl(String atchCtrl) { + this.atchCtrl = atchCtrl; + } +} diff --git a/src/main/java/cmm/service/ExtService.java b/src/main/java/cmm/service/ExtService.java new file mode 100644 index 00000000..1ac85072 --- /dev/null +++ b/src/main/java/cmm/service/ExtService.java @@ -0,0 +1,24 @@ +package cmm.service; + +import java.util.List; + +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + + +public interface ExtService { + List selectExtSigunguList(DataMap paramMap) throws EgovBizException; + List selectExtSigunguList2(DataMap paramMap) throws EgovBizException; + List selectExtGisSigunguList(DataMap paramMap) throws EgovBizException; + List selectExtGisDongList(DataMap paramMap) throws EgovBizException; + List selectExtSidoMapMappingList(DataMap paramMap) throws EgovBizException; + List selectExtDfInfoList(DataMap paramMap) throws EgovBizException; + List selectExtAisInfoList(String sido, String sigungu) throws EgovBizException; + List selectExtFtdInfoList(DataMap paramMap) throws EgovBizException; + List selectCulRelatedNews(DataMap paramMap) throws EgovBizException; + DataMap selectExtGiaDetail(String contentId, String contentTypeId) throws EgovBizException; + DataMap insertExtDfInfo(); + DataMap insertExtFdInfo(); + DataMap insertExtGiaInfo(String contentTypeId); + DataMap insertMediaHstInfo(); +} diff --git a/src/main/java/cmm/service/FileDetailVO.java b/src/main/java/cmm/service/FileDetailVO.java new file mode 100644 index 00000000..10cf4375 --- /dev/null +++ b/src/main/java/cmm/service/FileDetailVO.java @@ -0,0 +1,142 @@ +package cmm.service; + +import java.io.Serializable; +import java.math.BigDecimal; + +import org.apache.commons.lang3.builder.ToStringBuilder; + + +@SuppressWarnings("serial") +public class FileDetailVO implements Serializable { + + private String atchFileId; + + private String fileSn; + + private String fileStreCours; + + private String streFileNm; + + private String orignlFileNm; + + private String fileExtsn; + + private String fileCn; + + private String fileTyp; + + private BigDecimal fileSize; + + private byte[] fileData; + + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + + public String getAtchFileId() { + return atchFileId; + } + + + public void setAtchFileId(String atchFileId) { + this.atchFileId = atchFileId; + } + + + public String getFileSn() { + return fileSn; + } + + + public void setFileSn(String fileSn) { + this.fileSn = fileSn; + } + + + public String getFileStreCours() { + return fileStreCours; + } + + + public void setFileStreCours(String fileStreCours) { + this.fileStreCours = fileStreCours; + } + + + public String getStreFileNm() { + return streFileNm; + } + + + public void setStreFileNm(String streFileNm) { + this.streFileNm = streFileNm; + } + + + public String getOrignlFileNm() { + return orignlFileNm; + } + + + public void setOrignlFileNm(String orignlFileNm) { + this.orignlFileNm = orignlFileNm; + } + + + public String getFileExtsn() { + return fileExtsn; + } + + + public void setFileExtsn(String fileExtsn) { + this.fileExtsn = fileExtsn; + } + + + public String getFileCn() { + return fileCn; + } + + + public void setFileCn(String fileCn) { + this.fileCn = fileCn; + } + + + public String getFileTyp() { + return fileTyp; + } + + + public void setFileTyp(String fileTyp) { + this.fileTyp = fileTyp; + } + + + public BigDecimal getFileSize() { + return fileSize; + } + + + public void setFileSize(BigDecimal fileSize) { + this.fileSize = fileSize; + } + + public byte[] getFileData() { + byte[] ret = null; + if(this.fileData != null){ + ret = new byte[fileData.length]; + ret = this.fileData; + } + return ret; + } + + public void setFileData(byte[] fileData) { + this.fileData = new byte[fileData.length]; + for(int i=0; i fdFileArray = null; + + public FileManagementVO(){ + } + + public FileManagementVO (boolean isMulti){ + this.isMulti = isMulti; + } + public String getFdMstNo() { + return fdMstNo; + } + public void setFdMstNo(String fdMstNo) { + this.fdMstNo = fdMstNo; + } + public String getFdDtlNo() { + return fdDtlNo; + } + public void setFdDtlNo(String fdDtlNo) { + this.fdDtlNo = fdDtlNo; + } + public String getFdFile() { + return fdFile; + } + public void setFdFile(String fdFile) { + this.fdFile = fdFile; + } + public String getFdTitle() { + return fdTitle; + } + public void setFdTitle(String fdTitle) { + this.fdTitle = fdTitle; + } + public String getFdCtrl() { + return fdCtrl; + } + public void setFdCtrl(String fdCtrl) { + this.fdCtrl = fdCtrl; + } + public boolean isMulti() { + return isMulti; + } + public void setMulti(boolean isMulti) { + this.isMulti = isMulti; + } + public String getFileClssCd() { + return fileClssCd; + } + public void setFileClssCd(String fileClssCd) { + this.fileClssCd = fileClssCd; + } + public String getFileAuthCd() { + return fileAuthCd; + } + public void setFileAuthCd(String fileAuthCd) { + this.fileAuthCd = fileAuthCd; + } + public int getIndex() { + return index; + } + public void setIndex(int index) { + this.index = index; + } + public boolean isSaveToDisk() { + return isSaveToDisk; + } + public void setSaveToDisk(boolean isSaveToDisk) { + this.isSaveToDisk = isSaveToDisk; + } + + public ArrayList getFdFileArray() { + ArrayList ret = null; + if(this.fdFileArray != null){ + ret = new ArrayList(); + ret = this.fdFileArray; + } + return ret; + } + + public void setFdFileArray(ArrayList fdFileArray) { + this.fdFileArray = new ArrayList (fdFileArray.size()); + for(int i=0; i keySet = paramMap.keySet(); + Iterator keys = keySet.iterator(); + int cnt = 0; + while (keys.hasNext()) { + String key = keys.next(); + String value = paramMap.getString(key); + if(cnt>0){ + url += "&"; + }else{ + url += "?"; + } + url += key; + url += "="; + url += value; + + cnt++; + } + return url; + } + @Override + public JSONObject getDissForecastInfoList(DataMap paramMap){ + String resultXml = ""; + JSONObject xmlJSONObj = null; + try { + String addr = propertiesService.getString("openapi.apis.data.url"); + paramMap.setString("serviceKey", propertiesService.getString("openapi.apis.data.serviceKey")); + paramMap.setString("pageNo", "1"); + paramMap.setString("numOfRows", "2000"); + paramMap.setString("type", "xml"); + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+this.getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + } catch (org.json.JSONException jsoe) { + LOGGER.error("fail in getDissForecastInfoList() String xml to JSON Parsing error", jsoe); + } + }else{ + // 통신오류 + xmlJSONObj = new JSONObject(); + JSONObject jsonObjResponse = new JSONObject(); + JSONObject jsonObjComMsgHeader = new JSONObject(); + jsonObjComMsgHeader.put("ErrMsg", "통신 오류상태입니다."); + jsonObjComMsgHeader.put("returnReasonCode", statusCode); + jsonObjComMsgHeader.put("returnAuthMsg", "통신 오류상태입니다."); + jsonObjResponse.put("cmmMsgHeader", jsonObjComMsgHeader); + xmlJSONObj.put("OpenAPI_ServiceResponse",jsonObjResponse); + } + } catch (UnsupportedEncodingException e) { + LOGGER.error("fail in getDissForecastInfoList()", e); + } catch (HttpException e) { + LOGGER.error("fail in getDissForecastInfoList()", e); + } catch (IOException e) { + LOGGER.error("fail in getDissForecastInfoList()", e); + } catch (Exception e) { + LOGGER.error("fail in getDissForecastInfoList()", e); + } + return xmlJSONObj; + } + @Override + @Cacheable(value="ctprvnMesureCache", key="{#sido, #dataTime}") + public DataMap getCtprvnMesureSidoList(String sido, String dataTime) { + + String resultXml = "", resultCode = "", resultMsg = ""; + int useTimeout = 5; + boolean isSuccess = true; + DataMap paramMap = new DataMap(); + DataMap rsMap = new DataMap(); + List resultList = new ArrayList(); + JSONObject xmlJSONObj = null; + + try { + String addr = propertiesService.getString("openapi.airkorea.url"); + paramMap.setString("serviceKey", propertiesService.getString("openapi.airkorea.serviceKey")); + paramMap.setString("pageNo", "1"); + paramMap.setString("numOfRows", "2000"); + paramMap.setString("searchCondition", propertiesService.getString("openapi.airkorea.searchCondition.hour")); + paramMap.setString("ver", propertiesService.getString("openapi.airkorea.ver")); + paramMap.setString("sidoName", URLEncoder.encode(CmmUtil.getAisSidoName(sido),"UTF-8")); + + HttpClient httpClient = new HttpClient(); + httpClient.getParams().setParameter("http.connection.timeout", useTimeout * 1000);// 원격 호스트와 연결을 설정하는 시간 + httpClient.getParams().setParameter("http.socket.timeout", useTimeout * 1000);//데이터를 기다리는 시간 + //httpClient.getParams().setParameter("http.connection-manager.timeout", useTimeout * 1000);// 연결 및 소켓 시간 초과 + //httpClient.getParams().setParameter("http.protocol.head-body-timeout", useTimeout * 1000); + + HttpMethod getMethod = new GetMethod(addr+this.getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + } catch (org.json.JSONException jsoe) { + LOGGER.error("fail in getCtprvnMesureSidoLIst() String xml to JSON Parsing error", jsoe); + } + }else{ + // 통신오류 + rsMap.setString("resultMsg","통신 오류상태입니다."); + rsMap.setString("resultCode",String.valueOf(statusCode)); + isSuccess = false; + } + + } catch (ConnectTimeoutException e) { + LOGGER.error("fail in getCtprvnMesureSidoLIst()", e); + } catch (UnsupportedEncodingException e) { + LOGGER.error("fail in getCtprvnMesureSidoLIst()", e); + } catch (HttpException e) { + LOGGER.error("fail in getCtprvnMesureSidoLIst()", e); + } catch (IOException e) { + LOGGER.error("fail in getCtprvnMesureSidoLIst()", e); + } catch (Exception e) { + LOGGER.error("fail in getCtprvnMesureSidoLIst()", e); + } finally{ + if(isSuccess){ + try { + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + JSONObject jsonItems = null; + + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + + if(jsonBody.has("items") && jsonBody.get("items") instanceof JSONObject){ + jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONObject){ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + }else{ + jsonArray =jsonItems.getJSONArray("item"); + } + for(int i=0; i 2018.07.01 일자로 미추홀구로 변경 + if(map.getString("cityName").indexOf("남구") != -1){ + map.setString("sigungu", "미추홀구"); + }else{ + map.setString("sigungu", map.getString("cityName")); + } + }else{ + map.setString("sigungu", map.getString("cityName")); + } + + map.setString("so2Value", map.getString("so2Value").replaceAll("-", "0")); + map.setString("coValue", map.getString("coValue").replaceAll("-", "0")); + map.setString("o3Value", map.getString("o3Value").replaceAll("-", "0")); + map.setString("no2Value", map.getString("no2Value").replaceAll("-", "0")); + map.setString("pm10Value", map.getString("pm10Value").replaceAll("-", "0")); + map.setString("pm25Value", map.getString("pm25Value").replaceAll("-", "0")); + resultList.add(map); + + if(dataTime.equals(map.getString("dataTime"))){ + break; + } + } + }else{ + rsMap.setString("resultMsg","[데이터 가공오류]item 미존재"); + rsMap.setString("resultCode","11"); + } + }else{ + rsMap.setString("resultMsg","[데이터 가공오류]item 미존재"); + rsMap.setString("resultCode","11"); + } + } catch (org.json.JSONException jsoe) { + LOGGER.error("fail in getCtprvnMesureSidoLIst() JSON Parsing error", jsoe); + } + } + } + if(isSuccess){ + rsMap.setString("resultCode",resultCode); + rsMap.setString("resultMsg",resultMsg); + } + rsMap.put("resultList", resultList); + return rsMap; + } + @Override + @Cacheable(value="forecastCache", key="{#baseDate, #baseTime, #nx, #ny}") + public DataMap getForecastTimeDataList(String baseDate, String baseTime, String nx, String ny) { + + String resultXml = "", resultCode = "", resultMsg = ""; + DataMap paramMap = new DataMap(); + DataMap rsMap = new DataMap(); + List resultList = new ArrayList(); + JSONObject xmlJSONObj = null; + + try { + String addr = propertiesService.getString("openapi.kma.forecastTimeData.url"); + paramMap.setString("serviceKey", propertiesService.getString("openapi.kma.serviceKey")); + paramMap.setString("base_date", baseDate); + paramMap.setString("base_time", baseTime); + paramMap.setString("nx", nx); + paramMap.setString("ny", ny); + paramMap.setString("pageNo", "1"); + paramMap.setString("numOfRows", "1000"); + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+this.getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + } catch (org.json.JSONException jsoe) { + LOGGER.error("fail in getForecastTimeDataList() String xml to JSON Parsing error", jsoe); + } + }else{ + xmlJSONObj = new JSONObject(); + JSONObject jsonObjResponse = new JSONObject(); + JSONObject jsonObjComMsgHeader = new JSONObject(); + jsonObjComMsgHeader.put("resultMsg", "통신 오류상태입니다."); + jsonObjComMsgHeader.put("resultCode", statusCode); + jsonObjResponse.put("header", jsonObjComMsgHeader); + xmlJSONObj.put("response",jsonObjResponse); + } + } catch (UnsupportedEncodingException e) { + LOGGER.error("fail in getForecastTimeDataList()", e); + } catch (HttpException e) { + LOGGER.error("fail in getForecastTimeDataList()", e); + } catch (IOException e) { + LOGGER.error("fail in getForecastTimeDataList()", e); + } catch (Exception e) { + LOGGER.error("fail in getForecastTimeDataList()", e); + } finally{ + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + if("0000".equals(resultCode)){ + try { + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + if(jsonBody.has("items")){ + if(jsonBody.get("items") instanceof JSONObject){ + JSONObject jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONObject){ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + }else{ + jsonArray =jsonItems.getJSONArray("item"); + } + for(int i=0; i 0){ + // 데이터 존재 + if(jsonObj.has("addresses") && jsonObj.get("addresses") instanceof JSONArray){ + // 결과값이 JSONArray + JSONArray addresses = jsonObj.getJSONArray("addresses"); + if(addresses != null && addresses.length() > 0){ + JSONObject result = addresses.getJSONObject(0); + if(result.has("x") && result.has("y")){ + rtnMap.setString("mapX", result.getString("x")); + rtnMap.setString("mapY", result.getString("y")); + + total = 1; + } + } + } + } + } + } + rtnMap.setInt("total", total); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error in getNaverApiGeocode()", e); + } catch (MalformedURLException e) { + LOGGER.error("Error in getNaverApiGeocode()", e); + } catch (ProtocolException e) { + LOGGER.error("Error in getNaverApiGeocode()", e); + } catch (IOException e) { + LOGGER.error("Error in getNaverApiGeocode()", e); + } catch (JSONException e) { + LOGGER.error("Error in getNaverApiGeocode()", e); + } catch (Exception e) { + LOGGER.error("Error in getNaverApiGeocode()", e); + } finally{ + try { + if(isr != null){ + isr.close(); + } + if(br != null){ + br.close(); + } + } catch (IOException e) { + LOGGER.error("Error in getNaverApiGeocode() close", e); + } + } + return rtnMap; + } + @Override + public DataMap getNaverApiReversegeocode(DataMap paramMap) { + JSONObject jsonObj = null; + DataMap rtnMap = new DataMap(); + BufferedReader br = null; + InputStreamReader isr = null; + int total = 0; + + try { + String apiURL = propertiesService.getString("openapi.naver.map.reversegeocode.url") + "?request=coordsToaddr&sourcecrs=epsg:4326&output=json"; + String clientId = propertiesService.getString("openapi.naver.map.clientId"); + String clientSecret = propertiesService.getString("openapi.naver.map.clientSecret"); + + String xy = paramMap.getString("xy"); + URL url = new URL(apiURL+"&coords=" + xy); + HttpURLConnection con = (HttpURLConnection)url.openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId); + con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret); + int responseCode = con.getResponseCode(); + if(responseCode==200) { + isr = new InputStreamReader(con.getInputStream(),"UTF-8"); + br = new BufferedReader(isr); + } else { + isr = new InputStreamReader(con.getErrorStream(),"UTF-8"); + br = new BufferedReader(isr); + } + + String inputLine; + StringBuffer response = new StringBuffer(); + while ((inputLine = br.readLine()) != null) { + response.append(inputLine); + } + if(responseCode==200) { + jsonObj = new JSONObject(response.toString()); + jsonObj.put("successYn","Y"); + } else { + JSONObject errObj = new JSONObject(response.toString()); + jsonObj = new JSONObject(); + jsonObj.put("result", errObj); + jsonObj.put("successYn","N"); + } + if("Y".equals(jsonObj.get("successYn").toString()) ){ + if(jsonObj.has("status")){ + JSONObject status = jsonObj.getJSONObject("status"); + if(status.getInt("code") == 0){ + // 데이터 존재 + if(jsonObj.has("results") && jsonObj.get("results") instanceof JSONArray){ + // 결과값이 JSONArray + JSONArray results = jsonObj.getJSONArray("results"); + if(results != null && results.length() > 0){ + JSONObject result = results.getJSONObject(0); + if(result != null && result.has("region")){ + JSONObject region = result.getJSONObject("region"); + if(region.has("area2")){ + // 세종시일경우 안나옴. + if(region.getJSONObject("area2").has("name")){ + rtnMap.setString("sigugun", region.getJSONObject("area2").getString("name")); + } + } + if(region.has("area1")){ + if(region.getJSONObject("area1").has("name")){ + rtnMap.setString("sido", region.getJSONObject("area1").getString("name")); + if(rtnMap.getString("sido").indexOf("세종") > -1){ + // 세종인경우 시군구에 담는다. + rtnMap.setString("sigugun", rtnMap.getString("sido")); + } + total = 1; + } + } + } + } + } + } + } + } + + rtnMap.setInt("total", total); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error in getNaverApiReversegeocode()", e); + } catch (MalformedURLException e) { + LOGGER.error("Error in getNaverApiReversegeocode()", e); + } catch (ProtocolException e) { + LOGGER.error("Error in getNaverApiReversegeocode()", e); + } catch (IOException e) { + LOGGER.error("Error in getNaverApiReversegeocode()", e); + } catch (JSONException e) { + LOGGER.error("Error in getNaverApiReversegeocode()", e); + } catch (Exception e) { + LOGGER.error("Error in getNaverApiReversegeocode()", e); + } finally{ + try { + if(isr != null){ + isr.close(); + } + if(br != null){ + br.close(); + } + } catch (IOException e) { + LOGGER.error("Error in getNaverApiGeocode() close", e); + } + } + return rtnMap; + } + @Override + public DataMap getNaverApiJuso(DataMap paramMap) { + + JSONObject jsonObj = null; + DataMap rtnMap = new DataMap(); + BufferedReader br = null; + InputStreamReader isr = null; + int total = 0; + + try { + String apiURL = propertiesService.getString("openapi.naver.map.geocode.url"); + String clientId = propertiesService.getString("openapi.naver.map.clientId"); + String clientSecret = propertiesService.getString("openapi.naver.map.clientSecret"); + + String addr = URLEncoder.encode(paramMap.getString("juso"), "UTF-8"); + URL url = new URL(apiURL+"?query=" + addr); + HttpURLConnection con = (HttpURLConnection)url.openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId); + con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret); + int responseCode = con.getResponseCode(); + if(responseCode==200) { + isr = new InputStreamReader(con.getInputStream(),"UTF-8"); + br = new BufferedReader(isr); + } else { + isr = new InputStreamReader(con.getErrorStream(),"UTF-8"); + br = new BufferedReader(isr); + } + + String inputLine; + StringBuffer response = new StringBuffer(); + while ((inputLine = br.readLine()) != null) { + response.append(inputLine); + } + + if(responseCode==200) { + jsonObj = new JSONObject(response.toString()); + jsonObj.put("successYn","Y"); + } else { + JSONObject errObj = new JSONObject(response.toString()); + jsonObj = new JSONObject(); + jsonObj.put("result", errObj); + jsonObj.put("successYn","N"); + } + if("Y".equals(jsonObj.get("successYn").toString()) ){ + if(jsonObj.has("status") && jsonObj.has("meta")){ + JSONObject meta = jsonObj.getJSONObject("meta"); + if("OK".equals(jsonObj.getString("status")) && meta.getInt("count") > 0){ + // 데이터 존재 + if(jsonObj.has("addresses") && jsonObj.get("addresses") instanceof JSONArray){ + // 결과값이 JSONArray + JSONArray addresses = jsonObj.getJSONArray("addresses"); + if(addresses != null && addresses.length() > 0){ + JSONObject result = addresses.getJSONObject(0); + if(result.has("x") && result.has("y")){ + rtnMap.setString("point_x", result.getString("x")); + rtnMap.setString("point_y", result.getString("y")); + + total = 1; + } + if(result.has("jibunAddress")){ + // ex) "jibunAddress":"전라남도 완도군 완도읍" + // "jibunAddress":"제주특별자치도 제주시 노형동 245" + // "jibunAddress":"울산광역시 동구" + String [] jibunAddress = result.getString("jibunAddress").split(" ",5); + rtnMap.setString("sido", jibunAddress[0]); + if (jibunAddress.length >= 2) rtnMap.setString("sigugun", jibunAddress[1]); + if (jibunAddress.length >= 3) rtnMap.setString("dongmyun", jibunAddress[2]); + if (jibunAddress.length >= 4) rtnMap.setString("rest", jibunAddress[3]); + } + + } + } + } + } + } + rtnMap.setInt("total", total); + rtnMap.setString("successYn", jsonObj.getString("successYn")); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error in getNaverApiJuso() paramMap="+paramMap+", jsonObj="+jsonObj, e); + } catch (MalformedURLException e) { + LOGGER.error("Error in getNaverApiJuso() paramMap="+paramMap+", jsonObj="+jsonObj, e); + } catch (ProtocolException e) { + LOGGER.error("Error in getNaverApiJuso() paramMap="+paramMap+", jsonObj="+jsonObj, e); + } catch (IOException e) { + LOGGER.error("Error in getNaverApiJuso() paramMap="+paramMap+", jsonObj="+jsonObj, e); + } catch (JSONException e) { + LOGGER.error("Error in getNaverApiJuso() paramMap="+paramMap+", jsonObj="+jsonObj, e); + } catch (Exception e) { + LOGGER.error("Error in getNaverApiJuso() paramMap="+paramMap+", jsonObj="+jsonObj, e); + } finally{ + try { + if(isr != null){ + isr.close(); + } + if(br != null){ + br.close(); + } + } catch (IOException e) { + LOGGER.error("Error in getNaverApiJuso() close", e); + } + } + return rtnMap; + } + @Override + public DataMap getNaverApiSearch(DataMap paramMap) { + JSONObject jsonObj = null; + DataMap rtnMap = new DataMap(); + BufferedReader br = null; + InputStreamReader isr = null; + List resultList = new ArrayList(); + + String code = paramMap.getString("code"); // 01-관광지 , 02-맛집, 03-숙박 + //String [] sort = {"sim","date"}; // 정렬 옵션: sim (유사도순-기본값), date (날짜순) + String gubun = ""; + if("01".equals(code)){ + gubun = "관광지"; + }else if("02".equals(code)){ + gubun = "맛집"; + }else if("03".equals(code)){ + gubun = "숙박"; + } + String apiURL = propertiesService.getString("openapi.naver.search.url"); + String clientId = propertiesService.getString("openapi.naver.map.clientId"); + String clientSecret = propertiesService.getString("openapi.naver.map.clientSecret"); + + // 검색 인자 지역 + "공백 필수"+ 관광지, 맛집, 숙박 + try { + String text = URLEncoder.encode(paramMap.getString("addr")+" "+gubun, "UTF-8"); + apiURL = apiURL + "?query="+ text; + if(!StringUtils.isBlank(paramMap.getString("sort"))){ + apiURL += "&sort="+paramMap.getString("sort"); // 기본 sim + } + if(!StringUtils.isBlank(paramMap.getString("start"))){ + apiURL += "&start="+paramMap.getString("start"); // 기본 1 + } + if(!StringUtils.isBlank(paramMap.getString("display"))){ + apiURL += "&display="+paramMap.getString("display"); // 기본 10 + } + + URL url = new URL(apiURL); + HttpURLConnection con = (HttpURLConnection)url.openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("X-Naver-Client-Id", clientId); + con.setRequestProperty("X-Naver-Client-Secret", clientSecret); + int responseCode = con.getResponseCode(); + if(responseCode==200) { + isr = new InputStreamReader(con.getInputStream()); + br = new BufferedReader(isr); + } else { + isr = new InputStreamReader(con.getErrorStream()); + br = new BufferedReader(isr); + } + String inputLine; + StringBuffer response = new StringBuffer(); + while ((inputLine = br.readLine()) != null) { + response.append(inputLine); + } + if(responseCode==200) { + jsonObj = new JSONObject(response.toString()); + jsonObj.put("successYn","Y"); + } else { + JSONObject errObj = new JSONObject(response.toString()); + jsonObj = new JSONObject(); + jsonObj.put("result", errObj); + jsonObj.put("successYn","N"); + } + if("Y".equals(jsonObj.getString("successYn")) ){ + rtnMap.setString("total", (jsonObj.has("total") ? jsonObj.get("total").toString() : "0")); + rtnMap.setString("start", (jsonObj.has("start") ? jsonObj.get("start").toString() : "0")); + rtnMap.setString("display", (jsonObj.has("display") ? jsonObj.get("display").toString() : "0")); + if(jsonObj.has("items")){ + JSONArray jsonArray = null; + if(jsonObj.get("items") instanceof JSONArray){ + jsonArray =jsonObj.getJSONArray("items"); + }else{ + jsonArray = new JSONArray(); + jsonArray.put(jsonObj.getJSONObject("items")); + } + for(int i=0; i getToolsApiNews(DataMap paramMap) { + + BufferedReader br = null; + InputStreamReader isr = null; + OutputStream wr = null; + List mapList = new ArrayList(); + + try { + String access_key = propertiesService.getString("openapi.tools.kinds.accessKey"); + String apiURL = propertiesService.getString("openapi.tools.kinds.url"); + + JSONObject argument = new JSONObject(); + argument.put("query", paramMap.getString("query")); + argument.put("provider", paramMap.get("provider")); + argument.put("category", paramMap.get("category")); + argument.put("sort", paramMap.get("sort")); + argument.put("hilight", StringUtils.defaultIfEmpty(paramMap.getString("hilight"), "2000")); + argument.put("return_from", StringUtils.defaultIfEmpty(paramMap.getString("return_from"), "0")); + argument.put("return_size", StringUtils.defaultIfEmpty(paramMap.getString("return_size"), "15")); + argument.put("fields", paramMap.get("fields")); + + JSONObject paramJSON = new JSONObject(); + paramJSON.put("access_key", access_key); + paramJSON.put("argument", argument); + + String body = paramJSON.toString(); + + URL url = new URL(apiURL); + HttpURLConnection con = (HttpURLConnection)url.openConnection(); + + con.setDoOutput(true); + con.setRequestMethod("POST"); + con.setRequestProperty("Content-Type", "application/json;charset=utf-8"); + + wr = con.getOutputStream(); + wr.write(body.getBytes()); + wr.flush(); + + int responseCode = con.getResponseCode(); + if(responseCode==200) { // 정상 호출 + isr = new InputStreamReader(con.getInputStream()); + br = new BufferedReader(isr); + JSONObject json = new JSONObject(br.readLine()); + if(json !=null && json.has("return_object")){ + JSONObject return_object = (JSONObject) json.get("return_object"); + if(return_object.has("documents")){ + JSONArray newsArr = null; + if(return_object.get("documents") instanceof JSONArray){ + newsArr = (JSONArray) return_object.get("documents"); + + for(int i=0; i resultList = new ArrayList(); + + try { + String addr = propertiesService.getString("api.visitkorea.gia.list.url");; + paramMap.setString("serviceKey", propertiesService.getString("api.visitkorea.gia.serviceKey")); + // contentTypeId 필수 : 호출하는곳에서 맵핑해서 넘겨준다. + // 나머지는 픽스 + paramMap.setString("pageNo", "1"); + paramMap.setString("numOfRows", "20000"); + paramMap.setString("arrange", "A"); + paramMap.setString("listYN", "Y"); + paramMap.setString("MobileOS", "ETC"); + paramMap.setString("MobileApp", "TourAPI3.0_Guide"); + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + isSuccess = true; + } catch (org.json.JSONException jsoe) { + resultMsg = "[String xml to JSON Parsing error]"+ jsoe.getMessage(); + LOGGER.error("String xml to JSON Parsing error in getGiaList()", jsoe); + } + }else{ + // 통신오류 + resultMsg = "통신 오류상태입니다."; + } + } catch (ConnectTimeoutException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaList()", e); + } catch (UnsupportedEncodingException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaList()", e); + } catch (HttpException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaList()", e); + } catch (IOException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaList()", e); + } catch (Exception e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaList()", e); + } finally { + if(isSuccess){ + try { + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + if("0000".equals(resultCode)){ + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + JSONObject jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONArray){ + jsonArray =jsonItems.getJSONArray("item"); + }else{ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + } + for(int i=0; i resultList = new ArrayList(); + + try { + String addr = propertiesService.getString("api.visitkorea.gia.detail.common.url");; + paramMap.setString("serviceKey", propertiesService.getString("api.visitkorea.gia.serviceKey")); + //paramMap.setString("contentId", "2518765"); + //paramMap.setString("contenttypeid", "12"); // 의미가 없는것 같음. + paramMap.setString("MobileOS", "ETC"); + paramMap.setString("MobileApp", "TourAPI3.0_Guide"); + paramMap.setString("defaultYN", "Y"); //기본정보조회 + paramMap.setString("firstImageYN", "Y"); //대표이미지조회 + paramMap.setString("areacodeYN", "Y"); // 지역코드조회 + paramMap.setString("catcodeYN", "Y"); // 서비스분류코드조회 + paramMap.setString("addrinfoYN", "Y"); // 주소조회 + paramMap.setString("mapinfoYN", "N"); // 좌표조회 + paramMap.setString("overviewYN", "Y"); //개요 조회 + paramMap.setString("transGuideYN", "Y"); //길안내조회 + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + isSuccess = true; + } catch (org.json.JSONException jsoe) { + resultMsg = "[String xml to JSON Parsing error]"+ jsoe.getMessage(); + LOGGER.error("String xml to JSON Parsing error in getGiaDetailCommon()", jsoe); + } + }else{ + // 통신오류 + resultMsg = "통신 오류상태입니다."; + } + } catch (ConnectTimeoutException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailCommon()", e); + } catch (UnsupportedEncodingException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailCommon()", e); + } catch (HttpException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailCommon()", e); + } catch (IOException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailCommon()", e); + } catch (Exception e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailCommon()", e); + } finally { + if(isSuccess){ + try { + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + if("0000".equals(resultCode)){ + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + totalCount = jsonBody.getInt("totalCount"); + if(totalCount > 0){ + JSONObject jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONArray){ + jsonArray =jsonItems.getJSONArray("item"); + }else{ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + } + for(int i=0; i resultList = new ArrayList(); + + try { + String addr = propertiesService.getString("api.visitkorea.gia.detail.intro.url");; + paramMap.setString("serviceKey", propertiesService.getString("api.visitkorea.gia.serviceKey")); + //paramMap.setString("contentId", "570762"); + //paramMap.setString("contenttypeid", "39"); // 의미가 없는것 같음. + paramMap.setString("MobileOS", "ETC"); + paramMap.setString("MobileApp", "TourAPI3.0_Guide"); + paramMap.setString("introYN", "Y"); + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + isSuccess = true; + } catch (org.json.JSONException jsoe) { + resultMsg = "[String xml to JSON Parsing error]"+ jsoe.getMessage(); + LOGGER.error("String xml to JSON Parsing error in getGiaDetailIntro()", jsoe); + } + }else{ + // 통신오류 + resultMsg = "통신 오류상태입니다."; + } + } catch (ConnectTimeoutException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailIntro()", e); + } catch (UnsupportedEncodingException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailIntro()", e); + } catch (HttpException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailIntro()", e); + } catch (IOException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailIntro()", e); + } catch (Exception e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailIntro()", e); + } finally { + if(isSuccess){ + try { + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + if("0000".equals(resultCode)){ + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + totalCount = jsonBody.getInt("totalCount"); + if(totalCount > 0){ + JSONObject jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONArray){ + jsonArray =jsonItems.getJSONArray("item"); + }else{ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + } + for(int i=0; i resultList = new ArrayList(); + + try { + String addr = propertiesService.getString("api.visitkorea.gia.detail.info.url");; + paramMap.setString("serviceKey", propertiesService.getString("api.visitkorea.gia.serviceKey")); + //paramMap.setString("contentTypeId", "26"); // 39 반복정보 , 25 코스정보 + //paramMap.setString("contentId", "2381406"); // 570762 반복정보 , 2381406 코스정보 + paramMap.setString("MobileOS", "ETC"); + paramMap.setString("MobileApp", "TourAPI3.0_Guide"); + paramMap.setString("listYN", "Y"); + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + isSuccess = true; + } catch (org.json.JSONException jsoe) { + resultMsg = "[String xml to JSON Parsing error]"+ jsoe.getMessage(); + LOGGER.error("String xml to JSON Parsing error in getGiaDetailInfo()", jsoe); + } + }else{ + // 통신오류 + resultMsg = "통신 오류상태입니다."; + } + } catch (ConnectTimeoutException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailInfo()", e); + } catch (UnsupportedEncodingException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailInfo()", e); + } catch (HttpException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailInfo()", e); + } catch (IOException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailInfo()", e); + } catch (Exception e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailInfo()", e); + } finally { + if(isSuccess){ + try { + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + if("0000".equals(resultCode)){ + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + totalCount = jsonBody.getInt("totalCount"); + if(totalCount > 0){ + JSONObject jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONArray){ + jsonArray =jsonItems.getJSONArray("item"); + }else{ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + } + for(int i=0; i resultList = new ArrayList(); + + try { + String addr = propertiesService.getString("api.visitkorea.gia.detail.image.url");; + paramMap.setString("serviceKey", propertiesService.getString("api.visitkorea.gia.serviceKey")); + //paramMap.setString("contentTypeId", "39"); // 39 반복정보 , 25 코스정보 + //paramMap.setString("contentId", "570762"); // 570762 반복정보 , 2381406 코스정보 + paramMap.setString("MobileOS", "ETC"); + paramMap.setString("MobileApp", "TourAPI3.0_Guide"); + paramMap.setString("imageYN", StringUtils.defaultString(paramMap.getString("imageYN"), "Y")); // Y : 추가이미지, N : 메뉴이미지 + + HttpClient httpClient = new HttpClient(); + HttpMethod getMethod = new GetMethod(addr+getQueryString(paramMap)); + getMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); // encoding : UTF-8 + + int statusCode = httpClient.executeMethod(getMethod); + byte[] responseBody = getMethod.getResponseBody(); + resultXml = new String(responseBody, "UTF-8"); // encoding : UTF-8 + if(statusCode == 200){ + try { + xmlJSONObj = XML.toJSONObject(resultXml); + isSuccess = true; + } catch (org.json.JSONException jsoe) { + resultMsg = "[String xml to JSON Parsing error]"+ jsoe.getMessage(); + LOGGER.error("String xml to JSON Parsing error in getGiaDetailImage()", jsoe); + } + }else{ + // 통신오류 + resultMsg = "통신 오류상태입니다."; + } + } catch (ConnectTimeoutException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailImage()", e); + } catch (UnsupportedEncodingException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailImage()", e); + } catch (HttpException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailImage()", e); + } catch (IOException e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailImage()", e); + } catch (Exception e) { + resultMsg = e.getMessage(); + LOGGER.error("Error in getGiaDetailImage()", e); + } finally { + if(isSuccess){ + try { + JSONObject jsonResponse = xmlJSONObj.getJSONObject("response"); + JSONObject jsonHeader = jsonResponse.getJSONObject("header"); + resultCode = jsonHeader.get("resultCode").toString(); + resultMsg = jsonHeader.get("resultMsg").toString(); + if("0000".equals(resultCode)){ + JSONObject jsonBody = jsonResponse.getJSONObject("body"); + totalCount = jsonBody.getInt("totalCount"); + if(totalCount > 0){ + JSONObject jsonItems = jsonBody.getJSONObject("items"); + if(jsonItems.has("item")){ + JSONArray jsonArray = null; + if(jsonItems.get("item") instanceof JSONArray){ + jsonArray =jsonItems.getJSONArray("item"); + }else{ + jsonArray = new JSONArray(); + jsonArray.put(jsonItems.getJSONObject("item")); + } + for(int i=0; i selectCmmBbsList(CmmBbsVO cmmBbsVO) throws DataAccessException{ + return (List)list("cmmBbsDAO.selectCmmBbsList", cmmBbsVO); + } + @SuppressWarnings("unchecked") + public List selectCmmBbsTopList(CmmBbsVO cmmBbsVO) throws DataAccessException{ + return (List)list("cmmBbsDAO.selectCmmBbsTopList", cmmBbsVO); + } + @SuppressWarnings("unchecked") + public List selectCmmBbsCnList(CmmBbsVO cmmBbsVO) throws DataAccessException{ + return (List)list("cmmBbsDAO.selectCmmBbsCnList", cmmBbsVO); + } + @SuppressWarnings("unchecked") + public List selectCmmBbsMainList(CmmBbsVO cmmBbsVO) throws DataAccessException{ + return (List)list("cmmBbsDAO.selectCmmBbsMainList", cmmBbsVO); + } + public CmmBbsVO selectCmmBbsDetail(CmmBbsVO cmmBbsVO) throws DataAccessException{ + //return (CmmBbsVO)select("cmmBbsDAO.selectCmmBbsDetail", cmmBbsVO); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("unchecked") + public List selectPrevNextCmmBbsDetailList(CmmBbsVO cmmBbsVO) throws DataAccessException{ + return (List)list("cmmBbsDAO.selectPrevNextCmmBbsDetailList", cmmBbsVO); + } + public void insertCmmBbs(CmmBbsVO cmmBbsVO) throws TransactionException{ + insert("cmmBbsDAO.insertCmmBbs", cmmBbsVO); + } + public void updateCmmBbs(CmmBbsVO cmmBbsVO) throws TransactionException{ + update("cmmBbsDAO.updateCmmBbs", cmmBbsVO); + } + public void deleteCmmBbs(CmmBbsVO cmmBbsVO) throws TransactionException{ + update("cmmBbsDAO.deleteCmmBbs", cmmBbsVO); + } + public void updateCmmBbsReadCnt(CmmBbsVO cmmBbsVO) throws TransactionException{ + update("cmmBbsDAO.updateCmmBbsReadCnt", cmmBbsVO); + } + public void updateLocalCultureRecommend(CmmBbsVO cmmBbsVO) throws TransactionException{ + update("cmmBbsDAO.updateLocalCultureRecommend",cmmBbsVO); + } +} diff --git a/src/main/java/cmm/service/impl/CmmBbsServiceImpl.java b/src/main/java/cmm/service/impl/CmmBbsServiceImpl.java new file mode 100644 index 00000000..a809c610 --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmBbsServiceImpl.java @@ -0,0 +1,132 @@ +package cmm.service.impl; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import cmm.Constant; +import cmm.service.CmmBbsService; +import cmm.service.CmmBbsVO; +import cmm.service.CmmCmsContentsVO; +import cmm.service.CmmFileService; +import cmm.service.FileManagementVO; +import cmm.util.CmmUtil; +import cmm.util.DateUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; + + +/** + * 게시판 관리에 대한 서비스 클래스를 구현한다. + * @Class Name : CmmBbsServiceImpl.java + * @author ecplaza + * @since 2018-04-16 + * @version 1.0 + */ +@Service("cmmBbsService") +public class CmmBbsServiceImpl extends EgovAbstractServiceImpl implements CmmBbsService { + + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(CmmBbsServiceImpl.class); + + /** cmmBbsDAO */ + @Resource(name="cmmBbsDAO") + private CmmBbsDAO cmmBbsDAO; + + /** egovNttIdGnrService */ + @Resource(name = "egovNttIdGnrService") + private EgovIdGnrService nttIdgenService; + + /** CmmFileService */ + @Resource(name = "cmmFileService") + private CmmFileService cmmFileService; + + public int selectCmmBbsListTotCnt(CmmBbsVO cmmBbsVO) throws EgovBizException{ + return (Integer)cmmBbsDAO.selectCmmBbsListTotCnt(cmmBbsVO); + } + public List selectCmmBbsList(CmmBbsVO cmmBbsVO) throws EgovBizException{ + return (List)cmmBbsDAO.selectCmmBbsList(cmmBbsVO); + } + public List selectCmmBbsTopList(CmmBbsVO cmmBbsVO) throws EgovBizException{ + return (List)cmmBbsDAO.selectCmmBbsTopList(cmmBbsVO); + } + public List selectCmmBbsCnList(CmmBbsVO cmmBbsVO) throws EgovBizException{ + return (List)cmmBbsDAO.selectCmmBbsCnList(cmmBbsVO); + } + public List selectCmmBbsMainList(CmmBbsVO cmmBbsVO) throws EgovBizException{ + cmmBbsVO.setSearchStartStr(DateUtil.getNowString("yyyyMMddHHmm"));// 쿼리에서 비교할 때는 분단위까지 비교 + return (List)cmmBbsDAO.selectCmmBbsMainList(cmmBbsVO); + } + public CmmBbsVO selectCmmBbsDetail(CmmBbsVO cmmBbsVO) throws EgovBizException{ + cmmBbsDAO.updateCmmBbsReadCnt(cmmBbsVO); + CmmBbsVO rsVo = (CmmBbsVO)cmmBbsDAO.selectCmmBbsDetail(cmmBbsVO); + if(rsVo != null && !rsVo.getBbsId().equals(Constant.BBS_ID_NOTICE)){ + if( !StringUtils.isBlank(rsVo.getNtceBgnde()) ){ + rsVo.setNtceBgnde(DateUtil.getDateFormatString(rsVo.getNtceBgnde())); + } + if( !StringUtils.isBlank(rsVo.getNtceEndde()) ){ + rsVo.setNtceEndde(DateUtil.getDateFormatString(rsVo.getNtceEndde())); + } + if(cmmBbsVO.isBr()){ + rsVo.setNttCn(CmmUtil.escapeNewlineToBr(rsVo.getNttCn())); + } + } + return rsVo; + } + public List selectPrevNextCmmBbsDetailList(CmmBbsVO cmmBbsVO) throws EgovBizException{ + return (List)cmmBbsDAO.selectPrevNextCmmBbsDetailList(cmmBbsVO); + } + public String insertCmmBbs(CmmBbsVO cmmBbsVO, HttpServletRequest request) throws IOException, FdlException, EgovBizException{ + if( !StringUtils.isBlank(cmmBbsVO.getNtceBgnde()) ){ + cmmBbsVO.setNtceBgnde(cmmBbsVO.getNtceBgnde().replaceAll("-", "")); + } + if( !StringUtils.isBlank(cmmBbsVO.getNtceEndde()) ){ + cmmBbsVO.setNtceEndde(cmmBbsVO.getNtceEndde().replaceAll("-", "")); + } + cmmBbsVO.setNttSj(CmmUtil.unscript(cmmBbsVO.getNttSj())); // XSS 방지 + cmmBbsVO.setAtchFileId(cmmFileService.uploadFile(request, new FileManagementVO(true))); + String id = String.valueOf(nttIdgenService.getNextLongId()).trim(); + cmmBbsVO.setNttId(id); + cmmBbsDAO.insertCmmBbs(cmmBbsVO); + + return id; + } + public void updateCmmBbs(CmmBbsVO cmmBbsVO, HttpServletRequest request) throws IOException, EgovBizException{ + if( !StringUtils.isBlank(cmmBbsVO.getNtceBgnde()) ){ + cmmBbsVO.setNtceBgnde(cmmBbsVO.getNtceBgnde().replaceAll("-", "")); + } + if( !StringUtils.isBlank(cmmBbsVO.getNtceEndde()) ){ + cmmBbsVO.setNtceEndde(cmmBbsVO.getNtceEndde().replaceAll("-", "")); + } + cmmBbsVO.setNttSj(CmmUtil.unscript(cmmBbsVO.getNttSj())); // XSS 방지 + cmmBbsVO.setAtchFileId(cmmFileService.uploadFile(request, new FileManagementVO(true))); + cmmBbsDAO.updateCmmBbs(cmmBbsVO); + } + public void deleteCmmBbs(CmmBbsVO cmmBbsVO, HttpServletRequest request) throws EgovBizException{ + cmmBbsDAO.deleteCmmBbs(cmmBbsVO); + } + + @Override + public void updateLocalCultureRecommend(CmmBbsVO cmmBbsVO) + throws EgovBizException { + String idStr = cmmBbsVO.getNttIdList().get(0).substring(0); + String idArr[] = idStr.split(","); + List idList = new ArrayList(); + for(int i=0; i + * << 개정이력(Modification Information) >> + * @ + * @ 수정일 수정자 수정내용 + * @ --------- --------- ------------------------------- + * @ 2018-05-11 ecplaza 최초생성 + * + * + */ +@Repository("cmmCmsDAO") +public class CmmCmsDAO extends EgovComAbstractDAO { + + @SuppressWarnings("unchecked") + public List selectCmmScrapList(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException{ + return (List)list("cmmCmsDAO.selectCmmScrapList",cmmActivityHstVO); + } + @SuppressWarnings("unchecked") + public List selectCmmActivityHstOpList(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + return (List)list("cmmCmsDAO.selectCmmActivityHstOpList",cmmActivityHstVO); + } + @SuppressWarnings("deprecation") + public int selectCmmScrapListTotCnt(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmCmsDAO.selectCmmScrapListTotCnt", cmmActivityHstVO); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("deprecation") + public int selectCmmActivityHstOpListTotCnt(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmCmsDAO.selectCmmActivityHstOpListTotCnt", cmmActivityHstVO); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("unchecked") + public List selectCmmCmsKeywordsList(List contentId) throws DataAccessException { + return (List)list("cmmCmsDAO.selectCmmCmsKeywordsList",contentId); + } + @SuppressWarnings("unchecked") + public List selectCmmCmsTagsList(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + return (List)list("cmmCmsDAO.selectCmmCmsTagsList",cmmActivityHstVO); + } + @SuppressWarnings("unchecked") + public List selectCmmCmsPopularList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (List)list("cmmCmsDAO.selectCmmCmsPopularList",cmmActivityHstVO); + } + public void deleteAllCmmScrapInfo(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + delete("cmmDAO.deleteCmmScrapInfo", cmmActivityHstVO); + } +} diff --git a/src/main/java/cmm/service/impl/CmmCmsServiceImpl.java b/src/main/java/cmm/service/impl/CmmCmsServiceImpl.java new file mode 100644 index 00000000..53744f04 --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmCmsServiceImpl.java @@ -0,0 +1,76 @@ +package cmm.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import cmm.service.CmmActivityHstVO; +import cmm.service.CmmCmsService; +import cmm.util.DataMap; +import egovframework.com.cmm.service.impl.CmmUseDAO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.property.EgovPropertyService; + + +/** + * CMS 콘텐츠관리에 대한 서비스 클래스를 구현한다 + * @Class Name : CmmCmsServiceImpl.java + * @author ecplaza + * @since 2018-05-11 + * @version 1.0 + */ +@Service("cmmCmsService") +public class CmmCmsServiceImpl extends EgovAbstractServiceImpl implements CmmCmsService { + + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(CmmCmsServiceImpl.class); + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** cmmCmsDAO */ + @Resource(name="cmmCmsDAO") + private CmmCmsDAO cmmCmsDAO; + + /** cmmUseDAO */ + @Resource(name="cmmUseDAO") + private CmmUseDAO cmmUseDAO; + + public List selectCmmScrapList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (List)cmmCmsDAO.selectCmmScrapList(cmmActivityHstVO); + } + public List selectCmmActivityHstOpList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (List)cmmCmsDAO.selectCmmActivityHstOpList(cmmActivityHstVO); + } + public int selectCmmScrapListTotCnt(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (Integer)cmmCmsDAO.selectCmmScrapListTotCnt(cmmActivityHstVO); + } + public int selectCmmActivityHstOpListTotCnt(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (Integer)cmmCmsDAO.selectCmmActivityHstOpListTotCnt(cmmActivityHstVO); + } + public List selectCmmCmsKeywordsList(List result) throws EgovBizException{ + List contentId = new ArrayList(); + for(int i=0; i< result.size(); i++){ + contentId.add(result.get(i).getId()); + } + return cmmCmsDAO.selectCmmCmsKeywordsList(contentId); + } + public List selectCmmCmsTagsList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return cmmCmsDAO.selectCmmCmsTagsList(cmmActivityHstVO); + } + public List selectCmmCmsPopularList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return cmmCmsDAO.selectCmmCmsPopularList(cmmActivityHstVO); + } + + public void deleteAllCmmScrapInfo(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + cmmCmsDAO.deleteAllCmmScrapInfo(cmmActivityHstVO); + } +} diff --git a/src/main/java/cmm/service/impl/CmmDAO.java b/src/main/java/cmm/service/impl/CmmDAO.java new file mode 100644 index 00000000..f99b2f8f --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmDAO.java @@ -0,0 +1,339 @@ +package cmm.service.impl; + +import java.util.List; + +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.TransactionException; + +import cmm.Constant; +import cmm.util.CmmVO; +import cmm.util.DataMap; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; + +/** + * 공통에 대한 데이터 접근 클래스를 정의한다. + * @Class Name : CmmDAO.java + * @author ecplaza + * @since 2018-04-16 + * @version 1.0 + */ +@Repository("cmmDAO") +public class CmmDAO extends EgovComAbstractDAO { + + @SuppressWarnings("unchecked") + public List selectMenuHead(String authorCode) throws DataAccessException { + return (List) list("cmmDAO.selectMenuHead", authorCode); + } + @SuppressWarnings("unchecked") + public List selectMenuLeft(String authorCode) throws DataAccessException { + return (List) list("cmmDAO.selectMenuLeft", authorCode); + } + @SuppressWarnings("unchecked") + public List selectCmmActivityHstAllListTotCnt(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmActivityHstAllListTotCnt",paramMap); + } + @SuppressWarnings("deprecation") + public int selectSatisfactionTotCnt(DataMap paramMap) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmDAO.selectSatisfactionTotCnt", paramMap); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + + } + @SuppressWarnings("deprecation") + public int selectCmmPscHstTotCnt(DataMap paramMap) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmDAO.selectCmmPscHstTotCnt", paramMap); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + public DataMap selectCmmPscHstDetail(DataMap paramMap) throws DataAccessException { + //return (DataMap)select("cmmDAO.selectCmmPscHstDetail", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + public DataMap selectCmmPmsPostRandom(DataMap paramMap) throws DataAccessException { + //return (DataMap)select("cmmDAO.selectCmmPmsPostRandom", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + /** + * 에셋 상세정보 + * pick 레이어 사용(좌측 상단 및 상세 정보) + * @param paramMap + * @return + * @throws DataAccessException + */ + public DataMap selectCmmAmsAssetsDetail(DataMap paramMap) throws DataAccessException { + paramMap.put("searchAssetClassArray", Constant.ASSETS_CLASS_ARRAY_PICK); + + //return (DataMap)select("cmmDAO.selectCmmAmsAssetsDetail", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + /** + * 에셋 미디어 그룹 목록 + * pick 레이어 사용(좌측 목록) + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsMediaGroupListCnt(DataMap paramMap) throws DataAccessException { + paramMap.put("searchAssetClassArray", Constant.ASSETS_CLASS_ARRAY_PICK); + paramMap.put("searchAssetTypeArray", Constant.ASSETS_TYPE_ARRAY_PICK); + + return (List)list("cmmDAO.selectCmmAmsAssetsMediaGroupListCnt",paramMap); + } + /** + * 에셋 미디어 그룹 목록 + * pick 레이어 사용(좌측 목록) + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsMediaGroupList(DataMap paramMap) throws DataAccessException { + paramMap.put("searchAssetClassArray", Constant.ASSETS_CLASS_ARRAY_PICK); + paramMap.put("searchAssetTypeArray", Constant.ASSETS_TYPE_ARRAY_PICK); + + return (List)list("cmmDAO.selectCmmAmsAssetsMediaGroupList",paramMap); + } + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsMediaList(DataMap paramMap) throws DataAccessException { + paramMap.put("searchAssetClassArray", Constant.ASSETS_CLASS_ARRAY_PICK); + paramMap.put("searchAssetTypeArray", Constant.ASSETS_TYPE_ARRAY_PICK); + + return (List)list("cmmDAO.selectCmmAmsAssetsMediaList",paramMap); + } + /** + * 에셋 미디어 상세정보 + * pick 레이어 사용(완문보기 상세정보) + * @param paramMap + * @return + * @throws DataAccessException + */ + public DataMap selectCmmAmsAssetsMediaDetail(DataMap paramMap) throws DataAccessException { + //return (DataMap)select("cmmDAO.selectCmmAmsAssetsMediaDetail", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + /** + * 에셋 미디어 상세정보(미디어의 INTERFACE_ID 값으로 조회) + * pick 레이어 사용(완문보기 상세정보) + * @param paramMap + * @return + * @throws DataAccessException + */ + public DataMap selectCmmAmsAssetsMediaDetailByInterfaceId(DataMap paramMap) throws DataAccessException { + //return (DataMap)select("cmmDAO.selectCmmAmsAssetsMediaDetailByInterfaceId", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + /** + * 에셋 미디어 OCR 목록 + * pick 레이어 사용(문서 완문보기) + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsMediaOcrList(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsMediaOcrList",paramMap); + } + /** + * 에셋 상세 연관태그 목록 + * pick 레이어 사용(상세 정보의 연관태그) + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsTagsList(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsTagsList",paramMap); + } + /** + * 에셋 상세 연속자료 목록 총 수 + * pick 레이어 사용(상세 정보의 연속자료 목록 총 수) + * @param param + * @return + * @throws DataAccessException + */ + public int selectCmmAmsAssetsContinueListTotCnt(CmmVO param) throws DataAccessException { + param.setSearchAssetClassArray(Constant.ASSETS_CLASS_ARRAY_PICK); + param.setSearchAssetTypeArray(Constant.ASSETS_TYPE_ARRAY_PICK); + + //return (Integer)select("cmmDAO.selectCmmAmsAssetsContinueListTotCnt",param); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + /** + * 에셋 상세 연속자료 목록 + * pick 레이어 사용(상세 정보의 연속자료 목록) + * @param param + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsContinueList(CmmVO param) throws DataAccessException { + param.setSearchAssetClassArray(Constant.ASSETS_CLASS_ARRAY_PICK); + param.setSearchAssetTypeArray(Constant.ASSETS_TYPE_ARRAY_PICK); + + return (List)list("cmmDAO.selectCmmAmsAssetsContinueList",param); + } + /** + * 에셋 상세 연관 지역문화이야기 목록 + * pick 레이어 사용(지역문화이야기 목록) + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsThemesContentsList(List paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsThemesContentsList",paramMap); + } + /** + * 에셋 상세 다른문화원 소장자료 목록 + * pick 레이어 사용(다른문화원 소장자료 목록) + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsDiffSojangList(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsDiffSojangList",paramMap); + } + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsOriginViewList(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsOriginViewList",paramMap); + } + + public int selectCmmAmsAssetsOriginViewListAjaxCnt(DataMap paramMap) throws DataAccessException { + //return (Integer)select("cmmDAO.selectCmmAmsAssetsOriginViewListAjaxCnt", paramMap); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsOriginViewListAjax(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsOriginViewListAjax",paramMap); + } + + public DataMap selectCmmAmsAssetsOriginViewDetail(DataMap paramMap) throws DataAccessException { + //return (DataMap)select("cmmDAO.selectCmmAmsAssetsOriginViewDetail",paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("deprecation") + public int selectCmmScrapCnt(DataMap paramMap) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmDAO.selectCmmScrapCnt", paramMap); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + public void insertSatisfaction(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertSatisfaction", paramMap); + } + public void insertCmmSchedulerHst(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmSchedulerHst", paramMap); + } + public void insertCmmPscHst(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmPscHst", paramMap); + } + public void updateCmmPscHst(DataMap paramMap) throws TransactionException { + update("cmmDAO.updateCmmPscHst", paramMap); + } + public void insertCmmScrapTypeA(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeA", paramMap); + } + public void insertCmmScrapTypeB(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeB", paramMap); + } + public void insertCmmScrapTypeC(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeC", paramMap); + } + public void insertCmmScrapTypeG(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeG", paramMap); + } + public void insertCmmScrapTypeI(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeI", paramMap); + } + public void insertCmmScrapTypeP(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeP", paramMap); + } + public void insertCmmScrapTypeT(DataMap paramMap) throws TransactionException{ + insert("cmmDAO.insertCmmScrapTypeT", paramMap); + } + public void insertCmmActivityHstTypeA(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeA", paramMap); + } + public void insertCmmActivityHstTypeB(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeB", paramMap); + } + public void insertCmmActivityHstTypeC(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeC", paramMap); + } + /* 미사용 주석처리 (2019.12.06) + public void insertCmmActivityHstTypeL(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeL", paramMap); + } + */ + public void insertCmmActivityHstTypeG(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeG", paramMap); + } + public void insertCmmActivityHstTypeI(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeI", paramMap); + } + public void insertCmmActivityHstTypeP(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeP", paramMap); + } + public void insertCmmActivityHstTypeT(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityHstTypeT", paramMap); + } + public void updateCmmActivityHst(DataMap paramMap) throws TransactionException { + delete("cmmDAO.updateCmmActivityHst", paramMap); + } + public void deleteCmmScrapInfo(DataMap paramMap) throws TransactionException{ + delete("cmmDAO.deleteCmmScrapInfo", paramMap); + } + + /** + * 모바일 디바이스 정보 목록 + * @param paramMap + * @return + * @throws DataAccessException + */ + @SuppressWarnings("unchecked") + public List selecCmmMobileDeviceInfoList(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selecCmmMobileDeviceInfoList",paramMap); + } + + public void insertCmmActivityMediaHst(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmActivityMediaHst", paramMap); + } + + @SuppressWarnings("unchecked") + public List selectCmmAmsAssetsTagKeyList(DataMap paramMap) throws DataAccessException { + return (List)list("cmmDAO.selectCmmAmsAssetsTagKeyList",paramMap); + } + + public DataMap selectCmmAmsAssetsMediaDetail2(DataMap paramMap) throws DataAccessException { + //return (DataMap)select("cmmDAO.selectCmmAmsAssetsMediaDetail2", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + + @SuppressWarnings("deprecation") + public int selectCmmWebzineCnfirm(DataMap paramMap) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmDAO.selectCmmWebzineCnfirm", paramMap); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + + public void insertCmmWebzineSubScribe(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmWebzineSubScribe", paramMap); + } + + @SuppressWarnings("unchecked") + public List selectMainExtGiaList(DataMap param) throws DataAccessException { + return (List)list("cmmDAO.selectMainExtGiaList", param); + } + + public void deleteCmmMainExtGiaData(DataMap paramMap) throws TransactionException{ + delete("cmmDAO.deleteCmmMainExtGiaData", paramMap); + } + + public void insertCmmMainData(DataMap paramMap) throws TransactionException { + insert("cmmDAO.insertCmmMainData", paramMap); + } + + public DataMap getMainLogo() throws DataAccessException { + //return (DataMap)select("cmmDAO.getMainLogo"); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + +} diff --git a/src/main/java/cmm/service/impl/CmmFileDAO.java b/src/main/java/cmm/service/impl/CmmFileDAO.java new file mode 100644 index 00000000..6bbd806b --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmFileDAO.java @@ -0,0 +1,79 @@ +package cmm.service.impl; + +import java.math.BigDecimal; +import java.util.List; + +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.TransactionException; + +import cmm.service.FileDetailVO; +import cmm.service.FileMasterVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; + +/** + * CmmFileDAO + */ +@Repository("cmmFileDAO") +public class CmmFileDAO extends EgovComAbstractDAO +{ + public void insertFileMaster(FileMasterVO fileMasterVO) throws TransactionException + { + insert("cmmFileDAO.insertFileMasterXXX", fileMasterVO); + } + public int getMaxFileSN(FileDetailVO fileDetailVO) throws DataAccessException { + //return (Integer) select("cmmFileDAO.getMaxFileSN", fileDetailVO); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + public void deleteFileDetail(FileDetailVO fileDetailVO) throws TransactionException + { + delete("cmmFileDAO.deleteFileDetailXXX", fileDetailVO); + } + public void insertFileDetail(FileDetailVO fileDetailVO) throws TransactionException + { + insert("cmmFileDAO.insertFileDetailXXX", fileDetailVO); + } + + @SuppressWarnings("unchecked") + public List selectFileDetailList(String atchFileId) throws DataAccessException + { + return (List)list("cmmFileDAO.selectFileDetailList", atchFileId); + } + + @SuppressWarnings("deprecation") + public BigDecimal selectFileMasterCount(String atchFileId) throws DataAccessException + { + //return (BigDecimal)getSqlMapClientTemplate().queryForObject("cmmFileDAO.selectFileMasterCount", atchFileId); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + + @SuppressWarnings("deprecation") + public BigDecimal selectFileDetailCount(String atchFileId) throws DataAccessException + { + //return (BigDecimal)getSqlMapClientTemplate().queryForObject("cmmFileDAO.selectFileDetailCount", atchFileId); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + + public FileDetailVO selectFileDetail(FileDetailVO fileDetailVOParam) throws DataAccessException{ + //return (FileDetailVO) select("cmmFileDAO.selectFileDetail", fileDetailVOParam); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + + public FileDetailVO selectFileDetailFirst(String atchFileId) throws DataAccessException{ + //return (FileDetailVO)select("cmmFileDAO.selectFileDetailFirst", atchFileId); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + + public void alternateFileDetail(FileDetailVO fileDetailVO) throws TransactionException { + update("cmmFileDAO.alternateFileDetail", fileDetailVO); + } + + public void deleteFileMaster(String atchFileId) throws TransactionException { + delete("cmmFileDAO.deleteFileMasterXXX", atchFileId); + } + + @SuppressWarnings("unchecked") + public List selectIconFileDownLoad(String atchFileId) throws DataAccessException { + return (List) list("cmmFileDAO.selectFileDetailList", atchFileId); + } +} diff --git a/src/main/java/cmm/service/impl/CmmFileServiceImpl.java b/src/main/java/cmm/service/impl/CmmFileServiceImpl.java new file mode 100644 index 00000000..66f754f7 --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmFileServiceImpl.java @@ -0,0 +1,377 @@ +package cmm.service.impl; + +import java.io.File; +import java.io.IOException; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import cmm.service.CmmFileService; +import cmm.service.FileDetailVO; +import cmm.service.FileManagementVO; +import cmm.service.FileMasterVO; +import cmm.util.DateUtil; +import cmm.util.FileUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.property.EgovPropertyService; + +@Service("cmmFileService") +public class CmmFileServiceImpl extends EgovAbstractServiceImpl implements CmmFileService { + + @Resource(name = "cmmFileDAO") + private CmmFileDAO cmmFileDAO; + + @Resource(name = "egovFileIdGnrService") + private EgovIdGnrService idgenService; + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + private static final Logger LOGGER = LoggerFactory.getLogger(CmmFileServiceImpl.class); + + + @SuppressWarnings("unused") + public String uploadFile(HttpServletRequest request, FileManagementVO fileManagementVO) throws IOException, EgovBizException { + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; + + + final Map files = multiRequest.getFileMap(); + + String fileMstNo = null; + String path = propertiesService.getString("file.upload.path") + DateUtil.getNowString(DateUtil.DATE_DB_FORMAT)+"/"; + File file = new File(path); + file.setExecutable(false, true); + file.setReadable(true); + file.setWritable(false,true); + if (!file.exists()) { + file.mkdirs(); + } + List fileList = multiRequest.getFiles(fileManagementVO.getFdFile()); + + int index = fileManagementVO.getIndex(); + if (fileList == null) { + LOGGER.debug("No file attached."); + return null; + } + + LOGGER.debug("CHANG CHECK POINT FILE LIST : " + fileList + ", fdFile : " + fileManagementVO.getFdFile()); + if (StringUtils.isNotEmpty(fileManagementVO.getFdMstNo())) { + String[] fileMstNoArr = multiRequest.getParameterValues(fileManagementVO.getFdMstNo()); + if (fileMstNoArr != null) { + if (StringUtils.isNotEmpty(fileMstNoArr[index])) { + fileMstNo = fileMstNoArr[index]; + } + } + } + if (fileManagementVO.isMulti() == false) { + String ctrlStr = null; + String title = null; + if (fileManagementVO.getFdCtrl() != null) { + ctrlStr = multiRequest.getParameterValues(fileManagementVO.getFdCtrl())[index]; + } + if (fileManagementVO.getFdTitle() != null) { + title = multiRequest.getParameterValues(fileManagementVO.getFdTitle())[index]; + } + if (FileUtil.ORDER_FLAG_DELETE.equals(ctrlStr)) { + FileDetailVO fileDetailVO = cmmFileDAO.selectFileDetailFirst(fileMstNo); + if (fileDetailVO != null) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + this.deleteFileDetail(fileDetailVO); + } + } else if (FileUtil.ORDER_FLAG_RETRIEVE.equals(ctrlStr)) { + } else { + FileDetailVO fileDetailVONew = null; + if (fileList.size() > 0) { + MultipartFile multipartFile = fileList.get(index); + fileDetailVONew = this.saveFile(multipartFile, fileManagementVO, fileMstNo, path, null); + } + if (fileDetailVONew != null) { + fileMstNo = fileDetailVONew.getAtchFileId(); + FileDetailVO fileDetailVO = cmmFileDAO.selectFileDetailFirst(fileMstNo); + if (fileDetailVO != null) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + fileDetailVONew.setFileSn(fileDetailVO.getFileSn()); + this.alternateFileDetail(fileDetailVONew); + } else { + //fileDetailVONew.setAtchFileId(idgenService.getNextStringId()); + int newMaxFileSN = cmmFileDAO.getMaxFileSN(fileDetailVONew); + fileDetailVONew.setFileSn(Integer.toString(newMaxFileSN - 1)); + + this.createNewFileDetail(fileDetailVONew); + } + } + } + } else { + for (int i = 0; i < fileList.size(); i++) { + String ctrlStr = multiRequest.getParameterValues(fileManagementVO.getFdCtrl())[i]; + String title = null; + String fileDtlNo = null; + if (fileManagementVO.getFdTitle() != null) { + title = multiRequest.getParameterValues(fileManagementVO.getFdTitle())[i]; + } + if (fileManagementVO.getFdDtlNo() != null) { + fileDtlNo = multiRequest.getParameterValues(fileManagementVO.getFdDtlNo())[i]; + } + if (FileUtil.ORDER_FLAG_INSERT.equals(ctrlStr)) { + MultipartFile multipartFile = fileList.get(i); + FileDetailVO fileDetailVO = this.saveFile(multipartFile, fileManagementVO, fileMstNo, path, title); + if (fileDetailVO == null) { + continue; + } + fileMstNo = fileDetailVO.getAtchFileId(); + int newMaxFileSN = cmmFileDAO.getMaxFileSN(fileDetailVO); + fileDetailVO.setFileSn(Integer.toString(newMaxFileSN)); + this.createNewFileDetail(fileDetailVO); + } else if (FileUtil.ORDER_FLAG_UPDATE.equals(ctrlStr)) { + MultipartFile multipartFile = fileList.get(i); + FileDetailVO fileDetailVONew = this.saveFile(multipartFile, fileManagementVO, fileMstNo, path, title); + FileDetailVO fileDetailVO = null; + if (fileDetailVONew == null) { + + } else { + fileMstNo = fileDetailVONew.getAtchFileId(); + fileDetailVONew.setFileSn(fileDtlNo); + fileDetailVO = cmmFileDAO.selectFileDetail(fileDetailVONew); + if (fileDetailVO != null) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + fileDetailVONew.setAtchFileId(fileDetailVO.getAtchFileId()); + this.alternateFileDetail(fileDetailVONew); + } else { + int newMaxFileSN = cmmFileDAO.getMaxFileSN(fileDetailVONew); + fileDetailVONew.setFileSn(Integer.toString(newMaxFileSN - 1)); + this.createNewFileDetail(fileDetailVONew); + } + } + } else if (FileUtil.ORDER_FLAG_DELETE.equals(ctrlStr)) { + FileDetailVO fileDetailVO = new FileDetailVO(); + fileDetailVO.setAtchFileId(fileMstNo); + fileDetailVO.setFileSn(fileDtlNo); + fileDetailVO = cmmFileDAO.selectFileDetail(fileDetailVO); + if(fileManagementVO.isSaveToDisk()) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + } + this.deleteFileDetail(fileDetailVO); + } + } + } + return fileMstNo; + } + public String uploadFileOneAttMulti(HttpServletRequest request, FileManagementVO fileManagementVO, int cnt) throws IOException, EgovBizException { + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; + + String fileMstNo = null; + String fileReturnMstNo = null; + String path = propertiesService.getString("file.upload.path") + DateUtil.getNowString(DateUtil.DATE_DB_FORMAT)+"/"; + File file = new File(path); + file.setExecutable(false, true); + file.setReadable(true); + file.setWritable(false,true); + if (!file.exists()) { + file.mkdirs(); + } + + for(int i = 1; i <= cnt; i++){ + MultipartFile multipartFile = multiRequest.getFile("atchFile0"+i); + + String ctrlStr = multiRequest.getParameter("atchCtrl0"+i); + String fileDtlNo = null; + fileDtlNo = multiRequest.getParameter("atchDtlNo0"+i); + if(multipartFile != null){ + if((fileManagementVO.getFdMstNo() != null) && (!"".equals(fileManagementVO.getFdMstNo()))){ + fileMstNo = fileManagementVO.getFdMstNo(); + } + fileMstNo = uploadFileOneAttMulti(multipartFile, fileManagementVO, i, fileMstNo, ctrlStr, fileDtlNo, path); + + if(!"".equals(fileMstNo)){ + fileReturnMstNo = fileMstNo; + } + + } + } + + return fileReturnMstNo; + } + + public String uploadFileOneAttMulti(MultipartFile multipartFile, FileManagementVO fileManagementVO, int fileSn, String fileMstNo, String ctrlStr, String fileDtlNo, String path) throws IOException, EgovBizException { + + String fileReturnMstNo = fileMstNo; + if (FileUtil.ORDER_FLAG_DELETE.equals(ctrlStr)) { + FileDetailVO fileDetailVONew = new FileDetailVO(); + fileDetailVONew.setFileSn(Integer.toString(fileSn)); + fileDetailVONew.setAtchFileId(fileReturnMstNo); + FileDetailVO fileDetailVO = cmmFileDAO.selectFileDetail(fileDetailVONew); + if (fileDetailVO != null) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + this.deleteFileDetail(fileDetailVO); + } + } else if (FileUtil.ORDER_FLAG_RETRIEVE.equals(ctrlStr)) { + } else { + FileDetailVO fileDetailVONew = null; + fileDetailVONew = this.saveFile(multipartFile, fileManagementVO, fileReturnMstNo, path, null); + if (fileDetailVONew != null) { + fileDetailVONew.setFileSn(Integer.toString(fileSn)); + FileDetailVO fileDetailVO = cmmFileDAO.selectFileDetail(fileDetailVONew); + if (fileDetailVO != null) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + fileDetailVONew.setFileSn(Integer.toString(fileSn)); + this.alternateFileDetail(fileDetailVONew); + } else { + fileReturnMstNo = fileDetailVONew.getAtchFileId(); + fileDetailVONew.setFileSn(Integer.toString(fileSn)); + this.createNewFileDetail(fileDetailVONew); + } + } + } + return fileReturnMstNo; + } + private boolean deleteFile(String filePath, String fileNm) { + File file; + try { + file = new File(filePath, fileNm); + if (file.exists()) { + file.delete(); + } + } catch(NullPointerException ex) { + LOGGER.error("Error in deleteFile()" , ex); + return false; + } catch(SecurityException ex) { + LOGGER.error("Error in deleteFile()" , ex); + return false; + } + + return true; + } + + private FileDetailVO saveFile(MultipartFile multipartFile, FileManagementVO fileManagementVO, String fileMstNo, String path, String title) throws IOException, EgovBizException { + FileMasterVO fileMasterVO = null; + String saveFilename = ""; + @SuppressWarnings("unused") + File file = null; + String filename = multipartFile.getOriginalFilename(); + String filepath = ""; + + if (StringUtils.isEmpty(filename)) { + return null; + } + + String fileExt = filename.substring(filename.lastIndexOf(".") + 1); + + if (fileManagementVO.isSaveToDisk()) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); + String today = formatter.format(new java.util.Date()); + saveFilename = today + UUID.randomUUID().toString() +"."+ fileExt; + filepath = path; + LOGGER.debug("["+ fileManagementVO.getFdFile() +"]: "+ multipartFile.getName() + +", "+ filename + +", "+ saveFilename + ); + + multipartFile.transferTo(new File(path, saveFilename)); + } + + if (fileMstNo == null) { + fileMasterVO = this.createNewFileMaster(fileManagementVO); + fileMstNo = fileMasterVO.getAtchFileId(); + } else { + BigDecimal cnt = cmmFileDAO.selectFileMasterCount(fileMstNo); + if (cnt.equals(BigDecimal.valueOf(0))) { + fileMasterVO = this.createNewFileMaster(fileManagementVO); + fileMstNo = fileMasterVO.getAtchFileId(); + } + } + + FileDetailVO fileDetailVO = new FileDetailVO(); + fileDetailVO.setAtchFileId(fileMstNo); + fileDetailVO.setOrignlFileNm(filename); + fileDetailVO.setFileStreCours(filepath); + fileDetailVO.setStreFileNm(saveFilename); + fileDetailVO.setFileExtsn(fileExt); + fileDetailVO.setFileSize(BigDecimal.valueOf(multipartFile.getSize())); + + if (fileManagementVO.isSaveToDisk() == false) { + fileDetailVO.setFileData(multipartFile.getBytes()); + } + + return fileDetailVO; + } + + public boolean deleteAllFileDetailAndMaster(String fileMstNo) throws IOException, EgovBizException { + + if (fileMstNo == null) { + return false; + } + List fileDetailVOList = cmmFileDAO.selectFileDetailList(fileMstNo); + for (FileDetailVO fileDetailVO : fileDetailVOList) { + this.deleteFile(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + this.deleteFileDetail(fileDetailVO); + } + this.deleteFileMaster(fileMstNo); + + return true; + } + + private void deleteFileMaster(String fileMstNo) throws IOException, EgovBizException { + cmmFileDAO.deleteFileMaster(fileMstNo); + } + + private void deleteFileDetail(FileDetailVO fileDetailVO) throws IOException, EgovBizException { + cmmFileDAO.deleteFileDetail(fileDetailVO); + } + + private void alternateFileDetail(FileDetailVO fileDetailVO) throws IOException, EgovBizException { + cmmFileDAO.alternateFileDetail(fileDetailVO); + } + + private void createNewFileDetail(FileDetailVO fileDetailVO) throws IOException, EgovBizException { + cmmFileDAO.insertFileDetail(fileDetailVO); + } + + private FileMasterVO createNewFileMaster(FileManagementVO fileManagementVO) throws IOException, EgovBizException { + FileMasterVO fileMasterVO = new FileMasterVO(); + try { + fileMasterVO.setAtchFileId(idgenService.getNextStringId()); + } catch (FdlException e) { + LOGGER.error("fail in createNewFileMaster() getNextStringId()", e); + } + cmmFileDAO.insertFileMaster(fileMasterVO); + return fileMasterVO; + } + + public List selectFileDetailList(String atchFileId) throws IOException, EgovBizException { + if (atchFileId == null) { + return null; + } + return cmmFileDAO.selectFileDetailList(atchFileId); + } + public FileDetailVO selectFileDetail(FileDetailVO fileDetailVOParam) throws IOException, EgovBizException { + return cmmFileDAO.selectFileDetail(fileDetailVOParam); + } + public BigDecimal selectFileDetailCount(String fileMstNo) throws IOException, EgovBizException { + return cmmFileDAO.selectFileDetailCount(fileMstNo); + } + public FileDetailVO selectFileDetailFirst(String atchFileId) throws IOException, EgovBizException { + if (atchFileId == null) { + return null; + } + return cmmFileDAO.selectFileDetailFirst(atchFileId); + } + public List selectIconFileDownLoad(String atchFileId) throws IOException, EgovBizException { + return cmmFileDAO.selectIconFileDownLoad(atchFileId); + } +} diff --git a/src/main/java/cmm/service/impl/CmmMenuManageServiceImpl.java b/src/main/java/cmm/service/impl/CmmMenuManageServiceImpl.java new file mode 100644 index 00000000..e219d422 --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmMenuManageServiceImpl.java @@ -0,0 +1,31 @@ +package cmm.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import cmm.service.CmmMenuManageService; +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + +@Service("cmmMenuManageService") +public class CmmMenuManageServiceImpl extends EgovAbstractServiceImpl implements CmmMenuManageService{ + + @Resource(name="cmmDAO") + private CmmDAO cmmDAO; + + @Override + @Cacheable(value="menu", key="{#authorCode}") + public List selectMenuHead(String authorCode) throws EgovBizException{ + return cmmDAO.selectMenuHead(authorCode); + } + @Override + @Cacheable(value="menu", key="{#authorCode}") + public List selectMenuLeft(String authorCode) throws EgovBizException{ + return cmmDAO.selectMenuLeft(authorCode); + } +} \ No newline at end of file diff --git a/src/main/java/cmm/service/impl/CmmPmsMapContentsDAO.java b/src/main/java/cmm/service/impl/CmmPmsMapContentsDAO.java new file mode 100644 index 00000000..1a40be26 --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmPmsMapContentsDAO.java @@ -0,0 +1,59 @@ +package cmm.service.impl; + +import java.util.List; + +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Repository; + +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmCouncilInfoVO; +import cmm.service.CmmPmsMapContentsVO; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; + +/** + * 맵 콘텐츠에 대한 데이터 접근 클래스를 정의한다 + * @Class Name : CmmPmsMapContentsDAO.java + * @author ecplaza + * @since 2018-06-26 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ * @
+ * @ 수정일		수정자		수정내용
+ * @ ---------	---------	-------------------------------
+ * @ 2018-06-26	ecplaza		최초생성
+ * 
+ * 
+ */ +@Repository("cmmPmsMapContentsDAO") +public class CmmPmsMapContentsDAO extends EgovComAbstractDAO { + @SuppressWarnings("unchecked") + public String selectCouncilNm(String councilCd) throws DataAccessException{ + //return (String)getSqlMapClientTemplate().queryForObject("cmmPmsMapContentsDAO.selectCouncilNm", councilCd); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("deprecation") + public int selectCmmPmsMapCntnsStoryCnt(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmPmsMapContentsDAO.selectCmmPmsMapCntnsStoryCnt", cmmPmsMapContentsVO); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("deprecation") + public int selectCmmPmsMapLocalCultureCnt(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("cmmPmsMapContentsDAO.selectCmmPmsMapLocalCultureCnt", cmmPmsMapContentsVO); + return 0; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + @SuppressWarnings("unchecked") + public List selectCmmPmsMapAoiCouncilInfoList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws DataAccessException{ + return (List)list("cmmPmsMapContentsDAO.selectCmmPmsMapAoiCouncilInfoList", cmmPmsMapContentsVO); + } + @SuppressWarnings("unchecked") + public List selectCmmPmsMapContentsList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws DataAccessException{ + return (List)list("cmmPmsMapContentsDAO.selectCmmPmsMapContentsList", cmmPmsMapContentsVO); + } + @SuppressWarnings("unchecked") + public List selectCmmPmsMapContentsSearchList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws DataAccessException{ + return (List)list("cmmPmsMapContentsDAO.selectCmmPmsMapContentsSearchList", cmmPmsMapContentsVO); + } +} \ No newline at end of file diff --git a/src/main/java/cmm/service/impl/CmmPmsMapContentsServiceImpl.java b/src/main/java/cmm/service/impl/CmmPmsMapContentsServiceImpl.java new file mode 100644 index 00000000..53630769 --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmPmsMapContentsServiceImpl.java @@ -0,0 +1,104 @@ +package cmm.service.impl; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmCouncilInfoVO; +import cmm.service.CmmPmsMapContentsService; +import cmm.service.CmmPmsMapContentsVO; +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + + +/** + * 맵 콘텐츠에 대한 서비스 클래스를 구현한다 + * @Class Name : CmmPmsMapContentsServiceImpl.java + * @author ecplaza + * @since 2018-06-26 + * @version 1.0 + */ +@Service("cmmPmsMapContentsService") +public class CmmPmsMapContentsServiceImpl extends EgovAbstractServiceImpl implements CmmPmsMapContentsService { + + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(CmmPmsMapContentsServiceImpl.class); + + /** cmmPmsMapContentsDAO */ + @Resource(name="cmmPmsMapContentsDAO") + private CmmPmsMapContentsDAO cmmPmsMapContentsDAO; + + @Override + public int selectCmmPmsMapCntnsStoryCnt(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException { + return cmmPmsMapContentsDAO.selectCmmPmsMapCntnsStoryCnt(cmmPmsMapContentsVO); + } + + @Override + public int selectCmmPmsMapLocalCultureCnt(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException { + return cmmPmsMapContentsDAO.selectCmmPmsMapLocalCultureCnt(cmmPmsMapContentsVO); + } + + @Override + public List selectCmmPmsMapAoiCouncilInfoList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException{ + return (List)cmmPmsMapContentsDAO.selectCmmPmsMapAoiCouncilInfoList(cmmPmsMapContentsVO); + } + @Override + public List selectCmmPmsMapContentsList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException{ + List cmmPmsMapContentsList = (List)cmmPmsMapContentsDAO.selectCmmPmsMapContentsList(cmmPmsMapContentsVO); + + /* + * 쿼리에서 문화원명 구하도록 수정되어 주석처리 (2020.02.06) + * + // COUNTIL_CD 값이 '||' 로 연결되어 있는 경우 각각의 문화원명 구하기 (2020.02.05) + DataMap councilData = new DataMap(); // 문화원코드-문화원명 맵 (불필요한 DB 호출을 방지하기 위하여 사용) + for (int i=0; cmmPmsMapContentsList != null && i 0) { + boolean isNumberDiff = true; + String[] cdArr = councilCd.split("\\|\\|"); // 문화원 코드 배열 + if (StringUtils.isNotEmpty(councilNm)) { + String[] nmArr = councilNm.split(","); // 문화원명 배열 + if (cdArr.length == nmArr.length) { // 문화원 코드 개수와 문화원명 개수가 동일한 경우 (쿼리에서 문화원명 구한 경우) + isNumberDiff = false; + } + } + if (isNumberDiff) { + councilNm = ""; + for (int j=0; cdArr!=null && j 0) councilNm += ","; + councilNm += councilData.getString(currCouncilCd); + } + } + LOGGER.info("selectCmmPmsMapContentsList() i={}, cdArr={}, councilNm={}",i, cdArr==null ? cdArr : Arrays.toString(cdArr), councilNm); + vo.setCouncilNm(councilNm); + } + } + */ + + return cmmPmsMapContentsList; + } + + @Override + public List selectCmmPmsMapContentsSearchList(CmmPmsMapContentsVO cmmPmsMapContentsVO) throws EgovBizException{ + List cmmPmsMapContentsList = (List)cmmPmsMapContentsDAO.selectCmmPmsMapContentsSearchList(cmmPmsMapContentsVO); + return cmmPmsMapContentsList; + } +} diff --git a/src/main/java/cmm/service/impl/CmmServiceImpl.java b/src/main/java/cmm/service/impl/CmmServiceImpl.java new file mode 100644 index 00000000..3802c0ae --- /dev/null +++ b/src/main/java/cmm/service/impl/CmmServiceImpl.java @@ -0,0 +1,559 @@ +package cmm.service.impl; + + +import java.util.List; +import java.util.StringTokenizer; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionException; + +import cmm.Constant; +import cmm.service.CmmService; +import cmm.util.CmmUtil; +import cmm.util.CmmVO; +import cmm.util.DataMap; +import cmm.util.DateUtil; +import egovframework.com.cmm.service.impl.CmmUseDAO; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.property.EgovPropertyService; + +/** + * 공통 서비스 클래스를 구현한다. + * @Class Name : CmmServiceImpl.java + * @author ecplaza + * @since 2018-04-18 + * @version 1.0 + */ +@Service("cmmService") +public class CmmServiceImpl extends EgovAbstractServiceImpl implements CmmService { + + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(CmmServiceImpl.class); + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** cmmDAO */ + @Resource(name="cmmDAO") + private CmmDAO cmmDAO; + + /** cmmUseDAO */ + @Resource(name="cmmUseDAO") + private CmmUseDAO cmmUseDAO; + + /** egovSchedulerHstIdGnrService */ + @Resource(name = "egovSchedulerHstIdGnrService") + private EgovIdGnrService schedulerHstIdGnrService; + + @Override + public List selectCmmActivityHstAllListTotCnt(DataMap paramMap) throws EgovBizException{ + return (List)cmmDAO.selectCmmActivityHstAllListTotCnt(paramMap); + } + @Override + public int selectSatisfactionTotCnt(DataMap paramMap) throws EgovBizException{ + return (Integer)cmmDAO.selectSatisfactionTotCnt(paramMap); + } + @Override + public int selectCmmPscHstTotCnt(DataMap paramMap) throws EgovBizException{ + return (Integer)cmmDAO.selectCmmPscHstTotCnt(paramMap); + } + @Override + public DataMap selectCmmPscHstDetail(DataMap paramMap) throws EgovBizException{ + return cmmDAO.selectCmmPscHstDetail(paramMap); + } + @Override + public DataMap selectCmmPmsPostRandom(DataMap paramMap) throws EgovBizException{ + if(StringUtils.isBlank(paramMap.getString("today"))){ + paramMap.setString("today", DateUtil.getNowString(DateUtil.DATE_DB_FORMAT)); + } + return cmmDAO.selectCmmPmsPostRandom(paramMap); + } + /** + * 에셋 상세정보 + * pick 레이어 사용(좌측 상단) + */ + @Override + public DataMap selectCmmAmsAssetsDetail(DataMap paramMap) throws EgovBizException { + return cmmDAO.selectCmmAmsAssetsDetail(paramMap); + } + + /** + * 에셋 미디어 그룹 목록 + * pick 레이어 사용(좌측 목록) + */ + @Override + public List selectCmmAmsAssetsMediaGroupListCnt(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsMediaGroupListCnt(paramMap); + } + /** + * 에셋 미디어 그룹 목록 + * pick 레이어 사용(좌측 목록) + */ + @Override + public List selectCmmAmsAssetsMediaGroupList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsMediaGroupList(paramMap); + } + @Override + public List selectCmmAmsAssetsMediaList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsMediaList(paramMap); + } + /** + * 에셋 미디어 상세정보 + * pick 레이어 사용(완문보기 상세정보) + */ + @Override + public DataMap selectCmmAmsAssetsMediaDetail(DataMap paramMap) throws EgovBizException{ + return cmmDAO.selectCmmAmsAssetsMediaDetail(paramMap); + } + /** + * 에셋 미디어 상세정보 (미디어의 INTERFACE_ID 값으로 조회) + * pick 레이어 사용(완문보기 상세정보) + */ + @Override + public DataMap selectCmmAmsAssetsMediaDetailByInterfaceId(DataMap paramMap) throws EgovBizException{ + return cmmDAO.selectCmmAmsAssetsMediaDetailByInterfaceId(paramMap); + } + /** + * 에셋 미디어 OCR 목록 + * pick 레이어 사용(문서 완문보기) + */ + @Override + public List selectCmmAmsAssetsMediaOcrList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsMediaOcrList(paramMap); + } + /** + * 에셋 상세 연관태그 목록 + * pick 레이어 사용(상세 정보의 연관태그) + */ + @Override + public List selectCmmAmsAssetsTagsList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsTagsList(paramMap); + } + /** + * 에셋 상세 연속자료 목록 총 수 + * pick 레이어 사용(상세 정보의 연속자료 목록 총 수) + */ + @Override + public int selectCmmAmsAssetsContinueListTotCnt(CmmVO param) throws EgovBizException{ + return (Integer)cmmDAO.selectCmmAmsAssetsContinueListTotCnt(param); + } + /** + * 에셋 상세 연속자료 목록 + * pick 레이어 사용(상세 정보의 연속자료 목록) + */ + @Override + public List selectCmmAmsAssetsContinueList(CmmVO param) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsContinueList(param); + } + /** + * 에셋 상세 연관 지역문화이야기 목록 + * pick 레이어 사용(지역문화이야기 목록) + */ + @Override + public List selectCmmAmsAssetsThemesContentsList(List paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsThemesContentsList(paramMap); + } + /** + * 에셋 상세 다른문화원 소장자료 목록 + * pick 레이어 사용(다른문화원 소장자료 목록) + */ + public List selectCmmAmsAssetsDiffSojangList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsDiffSojangList(paramMap); + } + @Override + public List selectCmmAmsAssetsOriginViewList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsOriginViewList(paramMap); + } + + @Override + public int selectCmmAmsAssetsOriginViewListAjaxCnt(DataMap paramMap) throws EgovBizException{ + return (Integer)cmmDAO.selectCmmAmsAssetsOriginViewListAjaxCnt(paramMap); + } + @Override + public List selectCmmAmsAssetsOriginViewListAjax(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsOriginViewListAjax(paramMap); + } + + @Override + public DataMap selectCmmAmsAssetsOriginViewDetail(DataMap paramMap) throws EgovBizException { + return cmmDAO.selectCmmAmsAssetsOriginViewDetail(paramMap); + } + @Override + public int selectCmmScrapCnt(DataMap paramMap) throws EgovBizException { + return (Integer)cmmDAO.selectCmmScrapCnt(paramMap); + } + @Override + public void insertSatisfaction(DataMap paramMap) throws EgovBizException { + cmmDAO.insertSatisfaction(paramMap); + } + @Override + public void insertCmmSchedulerHst(DataMap paramMap) throws FdlException, EgovBizException { + paramMap.setString("schedulerHstId", schedulerHstIdGnrService.getNextStringId()); + cmmDAO.insertCmmSchedulerHst(paramMap); + } + @Override + public void insertCmmPscHst(DataMap paramMap) throws EgovBizException{ + cmmDAO.insertCmmPscHst(paramMap); + } + @Override + public void updateCmmPscHst(DataMap paramMap) throws EgovBizException{ + cmmDAO.updateCmmPscHst(paramMap); + } + @Override + public void insertCmmScrap(DataMap paramMap) throws EgovBizException{ + if(Constant.CONTENT_TYPE_A.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmScrapTypeA(paramMap); + }else if(Constant.CONTENT_TYPE_B.equals(paramMap.getString("contentType"))){ + paramMap.setString("bbsId", Constant.BBS_ID_CUL); + cmmDAO.insertCmmScrapTypeB(paramMap); + }else if(Constant.CONTENT_TYPE_C.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmScrapTypeC(paramMap); + }else if(Constant.CONTENT_TYPE_G.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmScrapTypeG(paramMap); + }else if(Constant.CONTENT_TYPE_I.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmScrapTypeI(paramMap); + }else if(Constant.CONTENT_TYPE_P.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmScrapTypeP(paramMap); + }else if(Constant.CONTENT_TYPE_T.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmScrapTypeT(paramMap); + } + } + @Override + public void insertCmmActivityHst(DataMap paramMap) throws EgovBizException { + + // 사용구분(W:웹,M:모바일웹,A앱,I:API,R:RIS) + String uaType = paramMap.getString("uaType"); + if (StringUtils.isEmpty(uaType)) { + paramMap.setString("uaType", Constant.UA_TYPE_W); + } + + if(Constant.CONTENT_TYPE_A.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmActivityHstTypeA(paramMap); + }else if(Constant.CONTENT_TYPE_B.equals(paramMap.getString("contentType"))){ + paramMap.setString("bbsId", Constant.BBS_ID_CUL); + cmmDAO.insertCmmActivityHstTypeB(paramMap); + }else if(Constant.CONTENT_TYPE_C.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmActivityHstTypeC(paramMap); + }else if(Constant.CONTENT_TYPE_G.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmActivityHstTypeG(paramMap); + }else if(Constant.CONTENT_TYPE_I.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmActivityHstTypeI(paramMap); + }else if(Constant.CONTENT_TYPE_P.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmActivityHstTypeP(paramMap); + }else if(Constant.CONTENT_TYPE_T.equals(paramMap.getString("contentType"))){ + cmmDAO.insertCmmActivityHstTypeT(paramMap); + } + } + @Override + public void updateCmmActivityHst(DataMap paramMap) throws EgovBizException { + if(paramMap.get("ids") != null){ + String [] ids = null; + String [] contentTypes = null; + if(paramMap.get("ids") instanceof String[]){ + ids = (String[]) paramMap.get("ids"); + contentTypes = paramMap.getString("contentTypes").split(","); + }else{ + ids = new String[1]; + ids[0] = paramMap.getString("ids"); + contentTypes = new String[1]; + contentTypes[0] = paramMap.getString("contentTypes"); + } + for(String temp : ids){ + paramMap.setString("contentId", temp); + cmmDAO.updateCmmActivityHst(paramMap); + paramMap.remove("contentId"); + } + } + } + @Override + public void deleteCmmScrapInfo(DataMap paramMap) throws EgovBizException{ + if(paramMap.get("ids") != null){ + String [] ids = null; + String [] contentTypes = null; + if(paramMap.get("ids") instanceof String[]){ + ids = (String[]) paramMap.get("ids"); + contentTypes = paramMap.getString("contentTypes").split(","); + }else{ + ids = new String[1]; + ids[0] = paramMap.getString("ids"); + contentTypes = new String[1]; + contentTypes[0] = paramMap.getString("contentTypes"); + } + for(String temp : ids){ + paramMap.setString("id", temp); + cmmDAO.deleteCmmScrapInfo(paramMap); + paramMap.remove("id"); + } + }else{ + cmmDAO.deleteCmmScrapInfo(paramMap); + } + } + + /** + * 모바일 디바이스 정보 목록 + */ + @Override + public List selecCmmMobileDeviceInfoList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selecCmmMobileDeviceInfoList(paramMap); + } + + @Override + public void insertCmmActivityMediaHst(DataMap paramMap) throws EgovBizException { + cmmDAO.insertCmmActivityMediaHst(paramMap); + } + + @Override + public List selectCmmAmsAssetsTagKeyList(DataMap paramMap) throws EgovBizException { + return (List)cmmDAO.selectCmmAmsAssetsTagKeyList(paramMap); + } + @Override + public DataMap selectCmmAmsAssetsMediaDetail2(DataMap paramMap) throws EgovBizException{ + return cmmDAO.selectCmmAmsAssetsMediaDetail2(paramMap); + } + + @Override + public int selectCmmWebzineCnfirm(DataMap paramMap) throws EgovBizException{ + return (Integer)cmmDAO.selectCmmWebzineCnfirm(paramMap); + } + + @Override + public void insertCmmWebzineSubScribe(DataMap paramMap) throws EgovBizException{ + cmmDAO.insertCmmWebzineSubScribe(paramMap); + } + + @Override + public void insertCmmMainData(String gubun) throws EgovBizException, FdlException{ + String toDay = DateUtil.getNowString(DateUtil.DATE_DB_FORMAT); + String tomorrow = DateUtil.getAddDayFormat(1,DateUtil.DATE_DB_FORMAT); + String startDt = DateUtil.getNowString(DateUtil.DATETIME_FORMAT); + DataMap schedulerHstMap = new DataMap(); + boolean isSuccess = false; + String msg = ""; + int dataCnt = 0; + + try { + DataMap paramMap= new DataMap(); + + if(gubun.equals("G")){ // 이달의 지역문화정보 + paramMap.put("gubun", "G"); //구분 (C:이야기, A:지역문화PICK, G:지역문화정보, P:포스트) + + List extGiaList = cmmDAO.selectMainExtGiaList(paramMap); + if(extGiaList.size()> 0){ + cmmDAO.deleteCmmMainExtGiaData(paramMap); + for(DataMap extGia : extGiaList){ + extGia.put("gubun", "G"); + cmmDAO.insertCmmMainData(extGia); + dataCnt++; + } + isSuccess = true; + }else{ + msg = "[데이터 조회오류]조회된 데이터 size:0"; + } + } + + } catch (TransactionException ex1) { + LOGGER.error("fail in insertCmmMainData()", ex1); + msg = dataLimit(ex1.toString()); + } catch (Exception ex2) { + LOGGER.error("fail in insertCmmMainData()", ex2); + msg = dataLimit(ex2.toString()); + } finally{ + schedulerHstMap.setString("schedulerMethodNm", "setMainInfo"); + + String schedulerNm = ""; + if(gubun.equals("A")){ + schedulerNm = Constant.SCHEDULER_MAIN_A_INFO; + }else if (gubun.equals("C")){ + schedulerNm = Constant.SCHEDULER_MAIN_C_INFO; + }else if (gubun.equals("G")){ + schedulerNm = Constant.SCHEDULER_MAIN_G_INFO; + }else{ + schedulerNm = Constant.SCHEDULER_MAIN_P_INFO; + } + schedulerHstMap.setString("schedulerNm", schedulerNm); + schedulerHstMap.setString("strTm", startDt); + schedulerHstMap.setString("endTm", DateUtil.getNowString(DateUtil.DATETIME_FORMAT)); + if(isSuccess){ + schedulerHstMap.setString("rstMsg", "등록성공"); + }else{ + schedulerHstMap.setString("rstMsg", "등록실패"); + schedulerHstMap.setString("etcCn", msg); + } + schedulerHstMap.setInt("dataCnt", dataCnt); + } + + schedulerHstMap.setString("schedulerHstId", schedulerHstIdGnrService.getNextStringId()); + cmmDAO.insertCmmSchedulerHst(schedulerHstMap); + } + + @Override + public DataMap insertCmmExtGiaMainInfo(String contentType) throws FdlException { + + String startDt = DateUtil.getNowString(DateUtil.DATETIME_FORMAT); + DataMap schedulerHstMap = new DataMap(); + boolean isSuccess = false; + String msg = ""; + int dataCnt = 0; + + try { + DataMap paramMap= new DataMap(); + + if(contentType.equals("G")){ // 이달의 지역문화정보 + paramMap.put("gubun", "G"); //구분 (C:이야기, A:지역문화PICK, G:지역문화정보, P:포스트) + + List extGiaList = cmmDAO.selectMainExtGiaList(paramMap); + if(extGiaList.size()> 0){ + cmmDAO.deleteCmmMainExtGiaData(paramMap); + for(DataMap extGia : extGiaList){ + extGia.put("gubun", "G"); + cmmDAO.insertCmmMainData(extGia); + dataCnt++; + } + isSuccess = true; + }else{ + msg = "[데이터 조회오류]조회된 데이터 size:0"; + } + } + + } catch (TransactionException ex1) { + LOGGER.error("fail in insertCmmMainData()", ex1); + msg = dataLimit(ex1.toString()); + } catch (Exception ex2) { + LOGGER.error("fail in insertCmmMainData()", ex2); + msg = dataLimit(ex2.toString()); + } finally{ + schedulerHstMap.setString("schedulerMethodNm", "setMainInfo"); + + String schedulerNm = ""; + if(contentType.equals("A")){ + schedulerNm = Constant.SCHEDULER_MAIN_A_INFO; + }else if (contentType.equals("C")){ + schedulerNm = Constant.SCHEDULER_MAIN_C_INFO; + }else if (contentType.equals("G")){ + schedulerNm = Constant.SCHEDULER_MAIN_G_INFO; + }else{ + schedulerNm = Constant.SCHEDULER_MAIN_P_INFO; + } + schedulerHstMap.setString("schedulerNm", schedulerNm); + schedulerHstMap.setString("strTm", startDt); + schedulerHstMap.setString("endTm", DateUtil.getNowString(DateUtil.DATETIME_FORMAT)); + if(isSuccess){ + schedulerHstMap.setString("rstMsg", "등록성공"); + }else{ + schedulerHstMap.setString("rstMsg", "등록실패"); + schedulerHstMap.setString("etcCn", msg); + } + schedulerHstMap.setInt("dataCnt", dataCnt); + } + + schedulerHstMap.setString("schedulerHstId", schedulerHstIdGnrService.getNextStringId()); + cmmDAO.insertCmmSchedulerHst(schedulerHstMap); + return schedulerHstMap; + } + + @Override + public DataMap selectCmmPscHst(String jsessionId) throws EgovBizException { + DataMap paramMap = new DataMap(); + paramMap.setString("jsessionId", jsessionId); + paramMap.setInt("sortOrdr", 1); + DataMap pscHstMap1 = cmmDAO.selectCmmPscHstDetail(paramMap); + + paramMap.setInt("sortOrdr", 2); + DataMap pscHstMap2 = cmmDAO.selectCmmPscHstDetail(paramMap); + + paramMap.setInt("sortOrdr", 3); + DataMap pscHstMap3 = cmmDAO.selectCmmPscHstDetail(paramMap); + + String pscHstAddr = propertiesService.getString("kccf.default.pscHst"); + String[] addrArr = pscHstAddr.split("\\^"); + String addr = ""; + String sidoName = ""; + String sigunguName = ""; + + if(pscHstMap1 == null){ + if(!StringUtils.isBlank(addrArr[0])){ + addr = addrArr[0].replaceAll("\\|", " "); + StringTokenizer st = new StringTokenizer(addr," "); + if(st.hasMoreElements()){ + if(st.hasMoreTokens()){ + sidoName = st.nextToken(); + } + if(st.hasMoreTokens()){ + sigunguName = st.nextToken(); + } + } + } + pscHstMap1 = new DataMap(); + pscHstMap1.setString("sidoName", sidoName); + pscHstMap1.setString("sigunguName", sigunguName); + } + + if(pscHstMap2 == null){ + if(!StringUtils.isBlank(addrArr[1])){ + addr = addrArr[1].replaceAll("\\|", " "); + StringTokenizer st = new StringTokenizer(addr," "); + if(st.hasMoreElements()){ + if(st.hasMoreTokens()){ + sidoName = st.nextToken(); + } + if(st.hasMoreTokens()){ + sigunguName = st.nextToken(); + } + } + } + pscHstMap2 = new DataMap(); + pscHstMap2.setString("sidoName", sidoName); + pscHstMap2.setString("sigunguName", sigunguName); + } + + if(pscHstMap3 == null){ + if(!StringUtils.isBlank(addrArr[2])){ + addr = addrArr[2].replaceAll("\\|", " "); + StringTokenizer st = new StringTokenizer(addr," "); + if(st.hasMoreElements()){ + if(st.hasMoreTokens()){ + sidoName = st.nextToken(); + } + if(st.hasMoreTokens()){ + sigunguName = st.nextToken(); + } + } + } + pscHstMap3 = new DataMap(); + pscHstMap3.setString("sidoName", sidoName); + pscHstMap3.setString("sigunguName", sigunguName); + } + + DataMap pscHstMap = new DataMap(); //관심지역 표시에 사용 + pscHstMap.put("pscHst1", pscHstMap1); + pscHstMap.put("pscHst2", pscHstMap2); + pscHstMap.put("pscHst3", pscHstMap3); + + return pscHstMap; + } + + private String dataLimit(String data){ + String rtnStr = ""; + if(CmmUtil.checkMaxbyte(data , 1000)){ + rtnStr = data.substring(0 , 1000); + }else{ + rtnStr = data; + } + return rtnStr; + } + + public DataMap getMainLogo() throws EgovBizException{ + return cmmDAO.getMainLogo(); + } + +} \ No newline at end of file diff --git a/src/main/java/cmm/service/impl/ExtDAO.java b/src/main/java/cmm/service/impl/ExtDAO.java new file mode 100644 index 00000000..b57ca69e --- /dev/null +++ b/src/main/java/cmm/service/impl/ExtDAO.java @@ -0,0 +1,79 @@ +package cmm.service.impl; + +import java.util.List; + +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.TransactionException; + +import cmm.util.DataMap; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; + +/** + * 외부 API 데이터 관리에 대한 데이터 접근 클래스를 정의한다. + * @Class Name : ExtDAO.java + * @author ecplaza + * @since 2018-04-16 + * @version 1.0 + */ +@Repository("extDAO") +public class ExtDAO extends EgovComAbstractDAO { + + @SuppressWarnings("unchecked") + public List selectExtSigunguList(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectExtSigunguList", paramMap); + } + @SuppressWarnings("unchecked") + public List selectExtSigunguList2(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectExtSigunguList2", paramMap); + } + @SuppressWarnings("unchecked") + public List selectExtGisSigunguList(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectExtGisSigunguList", paramMap); + } + @SuppressWarnings("unchecked") + public List selectExtGisDongList(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectExtGisDongList", paramMap); + } + @SuppressWarnings("unchecked") + public List selectExtSidoMapMappingList(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectExtSidoMapMappingList", paramMap); + } + @SuppressWarnings("unchecked") + public List selectExtDfInfoList(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectExtDfInfoList", paramMap); + } + public DataMap selectExtGiaDetail(DataMap paramMap) throws DataAccessException{ + //return (DataMap)select("extDAO.selectExtGiaDetail", paramMap); + return null; // DDDDDDDDDDDdddd 임시 처리 (2021.08.13) + } + public void insertExtDfInfo(DataMap paramMap) throws TransactionException{ + insert("extDAO.insertExtDfInfo", paramMap); + } + public void deleteExtDfInfo() throws TransactionException{ + delete("extDAO.deleteExtDfInfo"); + } + public void insertExtFdInfo(DataMap paramMap) throws TransactionException{ + insert("extDAO.insertExtFdInfo", paramMap); + } + public void deleteExtFdInfo(DataMap paramMap) throws TransactionException{ + delete("extDAO.deleteExtFdInfo",paramMap); + } + public void insertExtGiaInfo(DataMap paramMap) throws TransactionException{ + insert("extDAO.insertExtGiaInfo", paramMap); + } + public void deleteExtGiaInfo(DataMap paramMap) throws TransactionException{ + delete("extDAO.deleteExtGiaInfo",paramMap); + } + + @SuppressWarnings("unchecked") + public List selectActivityMediaList(DataMap paramMap) throws DataAccessException{ + return (List)list("extDAO.selectActivityMediaList", paramMap); + } + public void deleteMediaHstInfo(DataMap paramMap) throws TransactionException{ + delete("extDAO.deleteMediaHstInfo",paramMap); + } + public void insertMediaHstInfo(DataMap paramMap) throws TransactionException{ + insert("extDAO.insertMediaHstInfo", paramMap); + } +} diff --git a/src/main/java/cmm/service/impl/ExtServiceImpl.java b/src/main/java/cmm/service/impl/ExtServiceImpl.java new file mode 100644 index 00000000..6c192316 --- /dev/null +++ b/src/main/java/cmm/service/impl/ExtServiceImpl.java @@ -0,0 +1,1210 @@ +package cmm.service.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import javax.annotation.Resource; + +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONArray; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionException; +import org.springframework.transaction.annotation.Transactional; + +import cmm.Constant; +import cmm.service.CmmApiService; +import cmm.service.CmmService; +import cmm.service.ExtService; +import cmm.util.CmmCodeUtil; +import cmm.util.CmmCodeVO; +import cmm.util.CmmUtil; +import cmm.util.DataMap; +import cmm.util.DateUtil; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.property.EgovPropertyService; + + +/** + * 외부 API를 통한 데이터 관리 서비스 클래스를 구현한다. + * @Class Name : EtServiceImpl.java + * @author ecplaza + * @since 2018-04-18 + * @version 1.0 + */ +@Service("extService") +public class ExtServiceImpl extends EgovAbstractServiceImpl implements ExtService { + + /** LOGGER */ + private static final Logger LOGGER = LoggerFactory.getLogger(ExtServiceImpl.class); + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + /** cmmApiService */ + @Resource(name = "cmmApiService") + private CmmApiService cmmApiService; + + @Resource(name = "cmmService") + private CmmService cmmService; + + /** extDAO */ + @Resource(name="extDAO") + private ExtDAO extDAO; + + /** egovDfInfoIdGnrService */ + @Resource(name = "egovDfInfoIdGnrService") + private EgovIdGnrService dfInfoIdGnrService; + + /** egovFdInfoIdGnrService */ + @Resource(name = "egovFdInfoIdGnrService") + private EgovIdGnrService fdInfoIdGnrService; + + /** egovGiaInfoIdGnrService */ + @Resource(name = "egovGiaInfoIdGnrService") + private EgovIdGnrService giaInfoIdGnrService; + + /** 관광정보 api 카테고리 **/ + private List giaCat1List = null; + private List giaCat2List = null; + private List giaCat3List = null; + + + @Override + public List selectExtSigunguList(DataMap paramMap) throws EgovBizException{ + return extDAO.selectExtSigunguList(paramMap); + } + @Override + public List selectExtSigunguList2(DataMap paramMap) throws EgovBizException{ + return extDAO.selectExtSigunguList2(paramMap); + } + @Override + public List selectExtGisSigunguList(DataMap paramMap) throws EgovBizException{ + return extDAO.selectExtGisSigunguList(paramMap); + } + @Override + public List selectExtGisDongList(DataMap paramMap) throws EgovBizException{ + return extDAO.selectExtGisDongList(paramMap); + } + @Override + public List selectExtSidoMapMappingList(DataMap paramMap) throws EgovBizException{ + if(!"".equals(paramMap.getString("sido")) && "".equals(paramMap.getString("sido2"))){ + paramMap.setString("sido2", paramMap.getString("sido")); + } + if( paramMap.getString("sido").indexOf("세종") != -1 + || paramMap.getString("sido1").indexOf("세종") != -1 + || paramMap.getString("sido2").indexOf("세종") != -1 ){ + paramMap.setString("sigungu", "세종특별자치시"); + } + return extDAO.selectExtSidoMapMappingList(paramMap); + } + @Override + public List selectExtDfInfoList(DataMap paramMap) throws EgovBizException{ + paramMap.setString("dfDt", DateUtil.getNowString(DateUtil.DATE_DB_FORMAT)); + if(paramMap.getString("sido").indexOf("세종") != -1){ + paramMap.setString("sigungu", "세종특별자치시"); + } + return extDAO.selectExtDfInfoList(paramMap); + } + @Override + @SuppressWarnings("unchecked") + public List selectExtAisInfoList(String sido, String sigungu) throws EgovBizException{ + List rtnList = null; + if(sido.indexOf("세종") != -1){ + sigungu = "세종시"; + } + String dataTime = DateUtil.getNowString(DateUtil.DATEHOUR_FORMAT2)+ ":00"; + DataMap rsMap = cmmApiService.getCtprvnMesureSidoList(sido,dataTime); + if("00".equals(rsMap.getString("resultCode"))){ + List resultList = (List) rsMap.get("resultList"); + if(resultList != null && resultList.size()>0){ + rtnList = new ArrayList(); + for(DataMap map : resultList){ + if(sigungu.equals(map.getString("sigungu"))){ + rtnList.add(map); + break; + } + } + if(rtnList == null || resultList.size() == 0){ + rtnList.add(resultList.get(0)); + } + } + } + return rtnList; + } + @Override + @SuppressWarnings("unchecked") + public List selectExtFtdInfoList(DataMap paramMap) throws EgovBizException{ + String nx="",ny=""; + boolean isNext = false; + if(paramMap.getString("sido").indexOf("세종") != -1){ + paramMap.setString("sigungu", "세종특별자치시"); + } + List xyList = this.selectExtSidoMapMappingList(paramMap); + if(xyList !=null && xyList.size()>0){ + DataMap sidoMap = xyList.get(0); + nx = sidoMap.getString("mapNx"); + ny = sidoMap.getString("mapNy"); + + isNext = true; + }else{ + paramMap.remove("dong"); + xyList = this.selectExtSidoMapMappingList(paramMap); + if(xyList !=null && xyList.size()>0){ + DataMap sidoMap = xyList.get(0); + nx = sidoMap.getString("mapNx"); + ny = sidoMap.getString("mapNy"); + + isNext = true; + } + } + List resultList = null; + if(isNext){ + int h = 0; + if(NumberUtils.toInt(DateUtil.currentDateHh()) < 45){ + h = -1; + } + String baseDate = DateUtil.getAddHourFormat(h,DateUtil.DATE_DB_FORMAT); + String baseTime = DateUtil.getAddHourFormat(h,DateUtil.TIMEHOUR_FORMAT3) +"00"; + DataMap resultMap = cmmApiService.getForecastTimeDataList(baseDate,baseTime,nx,ny); + if("0000".equals(resultMap.getString("resultCode"))){ + resultList = (List) resultMap.get("resultList"); + } + } + return resultList; + } + @Override + public List selectCulRelatedNews(DataMap paramMap) throws EgovBizException{ + + paramMap.put("provider", new String [] {"경향신문","국민일보","내일신문","문화일보","서울신문","세계일보","한겨레","한국일보","경기일보","경인일보","강원도민일보","대전일보","중도일보","중부매일","충북일보","충청일보","충청투데이","경남신문","경남도민일보","경상일보","국제신문","대구일보","매일신문","부산일보","영남일보","울산매일","광주일보","무등일보","전남일보","전북도민일보","전북일보","제민일보","한라일보","매일경제","서울경제","파이낸셜뉴스","한국경제","헤럴드경제","MBC","SBS","YTN","OBS","전자신문","디지털타임스"}); + paramMap.put("category", new String[] {"문화>영화","문화>요리_여행","문화>학술_문화재","문화>전시_공연","문화>출판","문화>미술_건축","문화>음악","문화>종교"}); + paramMap.put("fields", new String [] {"hilight","byline","category","category_incident","images"}); + /*paramMap.setString("hilight", "2000"); + paramMap.setString("return_from", "0"); + paramMap.setString("return_size", "15");*/ + paramMap.put("sort", new String [] {"date", "desc"}); + + List newsList = cmmApiService.getToolsApiNews(paramMap); + if(newsList != null){ + StringTokenizer stTokenizer = null; + for(int i=0; i 0){ + List resultList = (List) rsMap.get("resultList"); + if(resultList != null && resultList.size()>0){ + rtnMap.put("giaCommon",resultList.get(0)); + } + } + // 상세 소개정보 + rsMap = cmmApiService.getGiaDetailIntro(paramMap); + if(rsMap.getInt("totalCount") > 0){ + List resultList = (List) rsMap.get("resultList"); + if(resultList != null && resultList.size()>0){ + rtnMap.put("giaIntro",resultList.get(0)); + } + } + // 상세 반복 및 코스 정보 or 룸 이미지 + rsMap = cmmApiService.getGiaDetailInfo(paramMap); + rtnMap.put("giaInfoList",(List) rsMap.get("resultList")); + + // 상세 추가이미지 + rsMap = cmmApiService.getGiaDetailImage(paramMap); + rtnMap.put("giaImageList",(List) rsMap.get("resultList")); + + // 상세 메뉴이미지 + paramMap.setString("imageYN", "N"); + rsMap = cmmApiService.getGiaDetailImage(paramMap); + rtnMap.put("giaMenuImageList",(List) rsMap.get("resultList")); + + return rtnMap; + } + @Override + @Transactional + public DataMap insertExtDfInfo() { + + String toDay = DateUtil.getNowString(DateUtil.DATE_DB_FORMAT); + String tomorrow = DateUtil.getAddDayFormat(1,DateUtil.DATE_DB_FORMAT); + String startDt = DateUtil.getNowString(DateUtil.DATETIME_FORMAT); + DataMap schedulerHstMap = new DataMap(); + boolean isSuccess = false; + String msg = ""; + int dataCnt = 0; + + try { + DataMap paramMap = new DataMap(); + List list = new ArrayList(); + boolean isParseErr = false; + for(int idx=0; idx 0){ + extDAO.deleteExtDfInfo(); + for(DataMap map : list){ + map.setString("dfInfoId", dfInfoIdGnrService.getNextStringId()); + extDAO.insertExtDfInfo(map); + map.remove("dfInfoId"); + dataCnt++; + } + isSuccess = true; + }else{ + msg = "[데이터 가공오류]가공된 데이터 size:0"; + } + } + } catch (TransactionException ex1) { + LOGGER.error("fail in insertExtDfInfo()", ex1); + msg = dataLimit(ex1.toString()); + } catch (Exception ex2) { + LOGGER.error("fail in insertExtDfInfo()", ex2); + msg = dataLimit(ex2.toString()); + } finally{ + schedulerHstMap.setString("schedulerMethodNm", "setExtDfInfo"); + schedulerHstMap.setString("schedulerNm", Constant.SCHEDULER_EXT_DF_INFO); + schedulerHstMap.setString("strTm", startDt); + schedulerHstMap.setString("endTm", DateUtil.getNowString(DateUtil.DATETIME_FORMAT)); + if(isSuccess){ + schedulerHstMap.setString("rstMsg", "등록성공"); + }else{ + schedulerHstMap.setString("rstMsg", "등록실패"); + schedulerHstMap.setString("etcCn", msg); + } + schedulerHstMap.setInt("dataCnt", dataCnt); + + try { + cmmService.insertCmmSchedulerHst(schedulerHstMap); + } catch (EgovBizException ex1) { + LOGGER.error("fail in insertCmmSchedulerHst()", ex1); + } catch (Exception ex2) { + LOGGER.error("fail in insertCmmSchedulerHst()", ex2); + } + + } + + return schedulerHstMap; + } + @Override + @Transactional + public DataMap insertExtFdInfo() { + + String fromDate = DateUtil.getNowString(DateUtil.DATE_DB_FORMAT); + String toDate = DateUtil.getAddDayFormat(30,DateUtil.DATE_DB_FORMAT); + String startDt = DateUtil.getNowString(DateUtil.DATETIME_FORMAT); + DataMap schedulerHstMap = new DataMap(); + boolean isSuccess = true; + String msg = ""; + int dataCnt = 0; + + try { + DataMap paramMap = new DataMap(); + paramMap.setString("viewType", Constant.VIEW_TYPE_L); // 화면 타입(포탈에서만 사용하는 변수) + paramMap.setString("reqUrl", propertiesService.getString("cultureinfoApi.fd.period.url")); + paramMap.setString("serviceKey", propertiesService.getString("cultureinfoApi.serviceKey")); + paramMap.setString("cPage", "1"); + paramMap.setString("rows", "2000"); + paramMap.setString("from", fromDate); + paramMap.setString("to", toDate); + + JSONObject jsonObj = cmmApiService.getCultureinfoApiList(paramMap); + JSONObject jsonResponse = jsonObj.getJSONObject("response"); + JSONObject jsonComMsgHeader = jsonResponse.getJSONObject("comMsgHeader"); + + JSONObject jsonObjMsgBody = null; + List resultList = null; + if("Y".equals(jsonComMsgHeader.get("SuccessYN").toString())){ + if(jsonResponse.has("msgBody")){ + jsonObjMsgBody = jsonResponse.getJSONObject("msgBody"); + if(jsonObjMsgBody.has("perforList")){ + JSONArray jsonArray = null; + if(jsonObjMsgBody.get("perforList") instanceof JSONObject){ + jsonArray = new JSONArray(); + jsonArray.put(jsonObjMsgBody.getJSONObject("perforList")); + }else{ + jsonArray = jsonObjMsgBody.getJSONArray("perforList"); + } + resultList = CmmUtil.getListMapFromJsonArray(jsonArray); + }else{ + msg = "[데이터 가공오류][목록정보]perforList 미존재"; + isSuccess = false; + } + }else{ + msg = "[데이터 가공오류][목록정보]msgBody 미존재"; + isSuccess = false; + } + }else{ + msg = jsonComMsgHeader.get("ErrMsg").toString(); + isSuccess = false; + } + if(isSuccess && resultList != null && resultList.size()>0){ + DataMap pMap = null; + DataMap nMap = null; + DataMap jusoMap = null; + DataMap dMap = null; + + paramMap.setString("toDay", fromDate); + extDAO.deleteExtFdInfo(paramMap); + for(DataMap map :resultList){ + pMap = new DataMap(); + pMap.setString("seq",map.getString("seq")); + pMap.setString("viewType", Constant.VIEW_TYPE_D); // 화면 타입(포탈에서만 사용하는 변수) + pMap.setString("reqUrl", propertiesService.getString("cultureinfoApi.fd.period.url")); + pMap.setString("serviceKey", propertiesService.getString("cultureinfoApi.serviceKey")); + + jsonObj =cmmApiService.getCultureinfoApiList(pMap); + jsonResponse = jsonObj.getJSONObject("response"); + jsonComMsgHeader = jsonResponse.getJSONObject("comMsgHeader"); + if("Y".equals(jsonComMsgHeader.get("SuccessYN").toString())){ + if(jsonResponse.has("msgBody")){ + jsonObjMsgBody = jsonResponse.getJSONObject("msgBody"); + if(jsonObjMsgBody.has("perforInfo")){ + dMap = CmmUtil.getMapFromJsonObject(jsonObjMsgBody.getJSONObject("perforInfo")); + }else{ + msg = "[데이터 가공오류][상세정보]perforInfo 미존재"; + isSuccess = false; + break; + } + }else{ + msg = "[데이터 가공오류][상세정보]msgBody 미존재"; + isSuccess = false; + break; + } + }else{ + msg = jsonComMsgHeader.get("ErrMsg").toString(); + isSuccess = false; + break; + } + nMap = new DataMap(); + nMap.setString("xy", map.getString("gpsX") +","+ map.getString("gpsY")); + jusoMap = cmmApiService.getNaverApiReversegeocode(nMap); + + dMap.setString("seq", map.getString("seq")); + dMap.setString("gpsX", map.getString("gpsX")); + dMap.setString("gpsY", map.getString("gpsY")); + + dMap.setString("sido", jusoMap.getString("sido")); + dMap.setString("sigugun", jusoMap.getString("sigugun")); + dMap.setString("dong", jusoMap.getString("dongmyun")); + dMap.setString("rest", jusoMap.getString("rest")); + + //이미지 경로 및 파일에 공백이 들어있을경우 json파싱 후 문제생겨서 치환 + dMap.setString("imgUrl" , dMap.getString("imgUrl").replaceAll(" ","%20")); + + dMap.setString("fdInfoId", fdInfoIdGnrService.getNextStringId()); + extDAO.insertExtFdInfo(dMap); + dataCnt++; + } + }else{ + msg = "[데이터 가공오류]가공된 데이터 size:0"; + isSuccess = false; + } + } catch (TransactionException ex1) { + LOGGER.error("fail in insertExtFdInfo()", ex1); + msg = dataLimit(ex1.toString()); + isSuccess = false; + } catch (Exception ex2) { + LOGGER.error("fail in insertExtFdInfo()", ex2); + msg = dataLimit(ex2.toString()); + isSuccess = false; + }finally{ + schedulerHstMap.setString("schedulerMethodNm", "setExtFdInfo"); + schedulerHstMap.setString("schedulerNm", Constant.SCHEDULER_EXT_FD_INFO); + schedulerHstMap.setString("strTm", startDt); + schedulerHstMap.setString("endTm", DateUtil.getNowString(DateUtil.DATETIME_FORMAT)); + if(isSuccess){ + schedulerHstMap.setString("rstMsg", "등록성공"); + }else{ + schedulerHstMap.setString("rstMsg", "등록실패"); + schedulerHstMap.setString("etcCn", msg); + } + schedulerHstMap.setInt("dataCnt", dataCnt); + } + return schedulerHstMap; + } + @Override + @SuppressWarnings("unchecked") + public DataMap insertExtGiaInfo(String contentTypeId) { + + String startDt = DateUtil.getNowString(DateUtil.DATETIME_FORMAT); + DataMap schedulerHstMap = new DataMap(); + boolean isSuccess = true, isUse = false, isRun = false; + String msg = ""; + int dataCnt = 0; + + DataMap paramMap = new DataMap(); + int len = Constant.GIA_COTENT_TYPE_ID_ARRAY.length; + for(int i=0;i resultList = (List) rtnMap.get("resultList"); + if(resultList != null && resultList.size()>0){ + dataCnt = resultList.size(); + extDAO.deleteExtGiaInfo(paramMap); // 해당하는 것만 삭제 + // 삭제 후 저장 + for(DataMap map :resultList){ + map.setString("contenttypename", Constant.GIA_COTENT_TYPE_NAME_ARRAY[i]); + if(!StringUtils.isBlank(map.getString("mapx")) && !StringUtils.isBlank(map.getString("mapy"))){ + paramMap.setString("xy", map.getString("mapx").trim()+ "," +map.getString("mapy").trim()); + DataMap nMap = cmmApiService.getNaverApiReversegeocode(paramMap); + if(nMap.getInt("total") > 0){ + // 좌표로 주소변환 + map.setString("sidoname", nMap.getString("sido")); + map.setString("sigunguname", nMap.getString("sigugun")); + if(!StringUtils.isBlank(nMap.getString("sido"))){ + if(nMap.getString("sido").indexOf("세종") > -1){ + map.setString("sigunguname", "세종특별자치시"); + } + } + paramMap.remove("xy"); + // 좌표 및 카운트는 정상으로 가져오지만 주소를 못가져오는 경우 + // 주소로 재확인 후 시도, 시군구만 맵핑 + if(StringUtils.isBlank(nMap.getString("sido"))){ + if(!StringUtils.isBlank(map.getString("addr1"))){ + nMap = null; + paramMap.setString("juso", map.getString("addr1").trim()); + nMap = cmmApiService.getNaverApiJuso(paramMap); + if(nMap.getInt("total") > 0){ + map.setString("sidoname", nMap.getString("sido")); + map.setString("sigunguname", nMap.getString("sigugun")); + if(!StringUtils.isBlank(nMap.getString("sido"))){ + if(nMap.getString("sido").indexOf("세종") > -1){ + map.setString("sigunguname", "세종특별자치시"); + } + } + } + paramMap.remove("juso"); + } + } + }else{ + // 주소 변환이 안됐을 경우 : 좌표가 네이버 맵에 찍지 못하는 좌표일 가능성이 크다. + // 시도, 시군구 변환 등록 및 좌표를 찍기 위해 재정의 + if(!StringUtils.isBlank(map.getString("addr1"))){ + nMap = null; + paramMap.setString("juso", map.getString("addr1").trim()); + nMap = cmmApiService.getNaverApiJuso(paramMap); + if(nMap.getInt("total") > 0){ + map.setString("mapx", nMap.getString("point_x")); + map.setString("mapy", nMap.getString("point_y")); + map.setString("sidoname", nMap.getString("sido")); + map.setString("sigunguname", nMap.getString("sigugun")); + if(!StringUtils.isBlank(nMap.getString("sido"))){ + if(nMap.getString("sido").indexOf("세종") > -1){ + map.setString("sigunguname", "세종특별자치시"); + } + } + } + paramMap.remove("juso"); + } + } + }else{ + // api에 좌표가 없는경우 : 주소로 시도, 시군구 변환 및 좌표 획득 + if(!StringUtils.isBlank(map.getString("addr1"))){ + paramMap.setString("juso", map.getString("addr1").trim()); + DataMap nMap = cmmApiService.getNaverApiJuso(paramMap); + if(nMap.getInt("total") > 0){ + map.setString("mapx", nMap.getString("point_x")); + map.setString("mapy", nMap.getString("point_y")); + map.setString("sidoname", nMap.getString("sido")); + map.setString("sigunguname", nMap.getString("sigugun")); + if(!StringUtils.isBlank(nMap.getString("sido"))){ + if(nMap.getString("sido").indexOf("세종") > -1){ + map.setString("sigunguname", "세종특별자치시"); + } + } + } + paramMap.remove("juso"); + } + } + + map.setString("cat1nm", this.getGiaCat1Name(map.getString("cat1"))); // 카테고리1 명 + map.setString("cat2nm", this.getGiaCat2Name(map.getString("cat2"))); // 카테고리2 명 + map.setString("cat3nm", this.getGiaCat3Name(map.getString("cat3"))); // 카테고리3 명 + // 지역명(축약) + map.setString("area", CmmUtil.getAisSidoName(map.getString("sidoname"))); + + // 이미지 URL https로 저장 + map.setString("firstimage", CmmUtil.changeSchemeToHttps(map.getString("firstimage"))); + map.setString("firstimage2", CmmUtil.changeSchemeToHttps(map.getString("firstimage2"))); + + + map.setString("giaId", giaInfoIdGnrService.getNextStringId()); // key + + LOGGER.debug("insertExtGiaInfo() before insert... map={}", map); + extDAO.insertExtGiaInfo(map); + } + }else{ + msg = "[데이터 가공오류]가공된 데이터 size:0"; + isSuccess = false; + } + }else{ + msg = rtnMap.getString("resultMsg"); + isSuccess = false; + } + } catch (TransactionException ex1) { + LOGGER.error("fail in insertExtFdInfo() [" +Constant.GIA_COTENT_TYPE_NAME_ARRAY[i]+ "]", ex1); + msg = dataLimit(ex1.toString()); + isSuccess = false; + } catch (Exception ex2) { + LOGGER.error("fail in insertExtFdInfo() [" +Constant.GIA_COTENT_TYPE_NAME_ARRAY[i]+ "]", ex2); + msg = dataLimit(ex2.toString()); + isSuccess = false; + }finally{ + schedulerHstMap.setString("schedulerMethodNm", "setExtGiaInfo"); + schedulerHstMap.setString("schedulerNm", Constant.SCHEDULER_EXT_GIA_INFO + "["+ Constant.GIA_COTENT_TYPE_NAME_ARRAY[i] +"]"); + schedulerHstMap.setString("strTm", startDt); + schedulerHstMap.setString("endTm", DateUtil.getNowString(DateUtil.DATETIME_FORMAT)); + if(isSuccess){ + schedulerHstMap.setString("rstMsg", "등록성공"); + }else{ + schedulerHstMap.setString("rstMsg", "등록실패"); + schedulerHstMap.setString("etcCn", msg); + } + schedulerHstMap.setInt("dataCnt", dataCnt); + + try { + cmmService.insertCmmSchedulerHst(schedulerHstMap); + } catch (EgovBizException ex1) { + LOGGER.error("fail in insertCmmSchedulerHst()", ex1); + break; + } catch (Exception ex2) { + LOGGER.error("fail in insertCmmSchedulerHst()", ex2); + break; + } + dataCnt = 0; + } + paramMap.clear(); // 파람 초기화 + } + if(isUse) break; + } + if(isSuccess){ + if(!isUse){ + schedulerHstMap.setString("schedulerNm", Constant.SCHEDULER_EXT_GIA_INFO); + } + } + + return schedulerHstMap; + } + private String getGiaCat1Name(String cat1){ + if(StringUtils.isBlank(cat1)) return ""; + String nm = ""; + if(giaCat1List == null){ + CmmCodeVO vo = null; + giaCat1List = new ArrayList(); + vo = new CmmCodeVO(); + vo.setCode("A01");vo.setCodeNm("자연");giaCat1List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02");vo.setCodeNm("인문(문화/예술/역사)");giaCat1List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01");vo.setCodeNm("추천코스");giaCat1List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03");vo.setCodeNm("레포츠");giaCat1List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02");vo.setCodeNm("숙박");giaCat1List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04");vo.setCodeNm("쇼핑");giaCat1List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05");vo.setCodeNm("음식");giaCat1List.add(vo); + } + for(CmmCodeVO vo :giaCat1List){ + if(vo.getCode().equals(cat1.trim())){ + nm = vo.getCodeNm(); + break; + } + } + return nm; + } + private String getGiaCat2Name(String cat2){ + if(StringUtils.isBlank(cat2)) return ""; + String nm = ""; + if(giaCat2List == null){ + CmmCodeVO vo = null; + giaCat2List = new ArrayList(); + vo = new CmmCodeVO(); + vo.setCode("A0101");vo.setCodeNm("자연관광지");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0102");vo.setCodeNm("관광자원");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0201");vo.setCodeNm("역사관광지");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0202");vo.setCodeNm("휴양관광지");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0203");vo.setCodeNm("체험관광지");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0204");vo.setCodeNm("산업관광지");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0205");vo.setCodeNm("건축/조형물");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0206");vo.setCodeNm("문화시설");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0207");vo.setCodeNm("축제");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0208");vo.setCodeNm("공연/행사");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C0112");vo.setCodeNm("가족코스");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C0113");vo.setCodeNm("나홀로코스");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C0114");vo.setCodeNm("힐링코스");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C0115");vo.setCodeNm("도보코스");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C0116");vo.setCodeNm("캠핑코스");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C0117");vo.setCodeNm("맛코스");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0301");vo.setCodeNm("레포츠소개");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0302");vo.setCodeNm("육상 레포츠");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0303");vo.setCodeNm("수상 레포츠");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0304");vo.setCodeNm("항공 레포츠");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0305");vo.setCodeNm("복합 레포츠");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B0201");vo.setCodeNm("숙박시설");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0401");vo.setCodeNm("쇼핑");giaCat2List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0502");vo.setCodeNm("음식점");giaCat2List.add(vo); + } + for(CmmCodeVO vo :giaCat2List){ + if(vo.getCode().equals(cat2.trim())){ + nm = vo.getCodeNm(); + break; + } + } + return nm; + } + private String getGiaCat3Name(String cat3){ + if(StringUtils.isBlank(cat3)) return ""; + String nm = ""; + if(giaCat3List == null){ + CmmCodeVO vo = null; + giaCat3List = new ArrayList(); + vo = new CmmCodeVO(); + vo.setCode("A01010100");vo.setCodeNm("국립공원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010200");vo.setCodeNm("도립공원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010300");vo.setCodeNm("군립공원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010400");vo.setCodeNm("산");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010500");vo.setCodeNm("자연생태관광지");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010600");vo.setCodeNm("자연휴양림");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010700");vo.setCodeNm("수목원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010800");vo.setCodeNm("폭포");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01010900");vo.setCodeNm("계곡");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011000");vo.setCodeNm("약수터");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011100");vo.setCodeNm("해안절경");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011200");vo.setCodeNm("해수욕장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011300");vo.setCodeNm("섬");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011400");vo.setCodeNm("항구/포구");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011500");vo.setCodeNm("어촌");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011600");vo.setCodeNm("등대");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011700");vo.setCodeNm("호수");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011800");vo.setCodeNm("강");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01011900");vo.setCodeNm("동굴");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01020100");vo.setCodeNm("희귀동.식물");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A01020200");vo.setCodeNm("기암괴석");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010100");vo.setCodeNm("고궁");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010200");vo.setCodeNm("성");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010300");vo.setCodeNm("문");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010400");vo.setCodeNm("고택");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010500");vo.setCodeNm("생가");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010600");vo.setCodeNm("민속마을");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010700");vo.setCodeNm("유적지/사적지");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010800");vo.setCodeNm("사찰");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02010900");vo.setCodeNm("종교성지");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02011000");vo.setCodeNm("안보관광");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020100");vo.setCodeNm("유원지");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020200");vo.setCodeNm("관광단지");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020300");vo.setCodeNm("온천/욕장/스파");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020400");vo.setCodeNm("이색찜질방");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020500");vo.setCodeNm("헬스투어");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020600");vo.setCodeNm("테마공원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020700");vo.setCodeNm("공원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02020800");vo.setCodeNm("유람선/잠수함관광");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02030100");vo.setCodeNm("농.산.어촌 체험");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02030200");vo.setCodeNm("전통체험");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02030300");vo.setCodeNm("산사체험");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02030400");vo.setCodeNm("이색체험");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02030500");vo.setCodeNm("관광농원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02030600");vo.setCodeNm("이색거리");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A0204010");vo.setCodeNm("제철소");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040200");vo.setCodeNm("조선소");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040300");vo.setCodeNm("공단");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040400");vo.setCodeNm("발전소");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040500");vo.setCodeNm("광산");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040600");vo.setCodeNm("식음료");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040700");vo.setCodeNm("화학/금속");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040800");vo.setCodeNm("기타");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02040900");vo.setCodeNm("전자/반도체");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02041000");vo.setCodeNm("자동차");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02050100");vo.setCodeNm("다리/대교");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02050200");vo.setCodeNm("기념탑/기념비/전망대");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02050300");vo.setCodeNm("분수");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02050400");vo.setCodeNm("동상");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02050500");vo.setCodeNm("터널");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02050600");vo.setCodeNm("유명건물");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060100");vo.setCodeNm("박물관");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060200");vo.setCodeNm("기념관");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060300");vo.setCodeNm("전시관");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060400");vo.setCodeNm("컨벤션센터");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060500");vo.setCodeNm("미술관/화랑");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060600");vo.setCodeNm("공연장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060700");vo.setCodeNm("문화원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060800");vo.setCodeNm("외국문화원");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02060900");vo.setCodeNm("도서관");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02061000");vo.setCodeNm("대형서점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02061100");vo.setCodeNm("문화전수시설");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02061200");vo.setCodeNm("영화관");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02061300");vo.setCodeNm("어학당");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02061400");vo.setCodeNm("학교");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02070100");vo.setCodeNm("문화관광축제");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02070200");vo.setCodeNm("일반축제");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080100");vo.setCodeNm("전통공연");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080200");vo.setCodeNm("연극");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080300");vo.setCodeNm("뮤지컬");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080400");vo.setCodeNm("오페라");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080500");vo.setCodeNm("전시회");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080600");vo.setCodeNm("박람회");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080700");vo.setCodeNm("컨벤션");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080800");vo.setCodeNm("무용");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02080900");vo.setCodeNm("클래식음악회");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02081000");vo.setCodeNm("대중콘서트");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02081100");vo.setCodeNm("영화");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02081200");vo.setCodeNm("스포츠경기");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A02081300");vo.setCodeNm("기타행사");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01120001");vo.setCodeNm("가족코스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01130001");vo.setCodeNm("나홀로코스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01140001");vo.setCodeNm("힐링코스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01150001");vo.setCodeNm("도보코스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01160001");vo.setCodeNm("캠핑코스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("C01170001");vo.setCodeNm("맛코스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03010100");vo.setCodeNm("육상레포츠");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03010200");vo.setCodeNm("수상레포츠");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03010300");vo.setCodeNm("항공레포츠");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020100");vo.setCodeNm("스포츠센터");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020200");vo.setCodeNm("수련시설");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020300");vo.setCodeNm("경기장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020400");vo.setCodeNm("인라인(실내 인라인 포함)");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020500");vo.setCodeNm("자전거하이킹");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020600");vo.setCodeNm("카트");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020700");vo.setCodeNm("골프");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020800");vo.setCodeNm("경마");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03020900");vo.setCodeNm("경륜");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021000");vo.setCodeNm("카지노");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021100");vo.setCodeNm("승마");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021200");vo.setCodeNm("스키/스노보드");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021300");vo.setCodeNm("스케이트");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021400");vo.setCodeNm("썰매장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021500");vo.setCodeNm("수렵장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021600");vo.setCodeNm("사격장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021700");vo.setCodeNm("야영장,오토캠핑장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021800");vo.setCodeNm("암벽등반");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03021900");vo.setCodeNm("빙벽등반");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022000");vo.setCodeNm("서바이벌게임");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022100");vo.setCodeNm("ATV");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022200");vo.setCodeNm("MTB");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022300");vo.setCodeNm("오프로드");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022400");vo.setCodeNm("번지점프");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022500");vo.setCodeNm("자동차경주");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022600");vo.setCodeNm("스키(보드) 렌탈샵");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03022700");vo.setCodeNm("트래킹");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030100");vo.setCodeNm("윈드서핑/제트스키");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030200");vo.setCodeNm("카약/카누");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030300");vo.setCodeNm("요트");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030400");vo.setCodeNm("스노쿨링/스킨스쿠버다이빙");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030500");vo.setCodeNm("민물낚시");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030600");vo.setCodeNm("바다낚시");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030700");vo.setCodeNm("수영");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03030800");vo.setCodeNm("래프팅");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03040100");vo.setCodeNm("스카이다이빙");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03040200");vo.setCodeNm("초경량비행");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03040300");vo.setCodeNm("헹글라이딩/패러글라이딩");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03040400");vo.setCodeNm("열기구");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A03050100");vo.setCodeNm("복합 레포츠");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010100");vo.setCodeNm("관광호텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010200");vo.setCodeNm("수상관광호텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010300");vo.setCodeNm("전통호텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010400");vo.setCodeNm("가족호텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010500");vo.setCodeNm("콘도미니엄");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010600");vo.setCodeNm("유스호스텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010700");vo.setCodeNm("펜션");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010800");vo.setCodeNm("여관");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02010900");vo.setCodeNm("모텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011000");vo.setCodeNm("민박");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011100");vo.setCodeNm("게스트하우스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011200");vo.setCodeNm("홈스테이");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011300");vo.setCodeNm("서비스드레지던스");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011400");vo.setCodeNm("의료관광호텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011500");vo.setCodeNm("소형호텔");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("B02011600");vo.setCodeNm("한옥스테이");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010100");vo.setCodeNm("5일장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010200");vo.setCodeNm("상설시장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010300");vo.setCodeNm("백화점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010400");vo.setCodeNm("면세점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010500");vo.setCodeNm("할인매장");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010600");vo.setCodeNm("전문상가");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010700");vo.setCodeNm("공예,공방");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010800");vo.setCodeNm("관광기념품점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A04010900");vo.setCodeNm("특산물판매점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020100");vo.setCodeNm("한식");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020200");vo.setCodeNm("서양식");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020300");vo.setCodeNm("일식");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020400");vo.setCodeNm("중식");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020500");vo.setCodeNm("아시아식");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020600");vo.setCodeNm("패밀리레스토랑");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020700");vo.setCodeNm("이색음식점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020800");vo.setCodeNm("채식전문점");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05020900");vo.setCodeNm("바/까페");giaCat3List.add(vo); + vo = new CmmCodeVO(); + vo.setCode("A05021000");vo.setCodeNm("클럽");giaCat3List.add(vo); + } + for(CmmCodeVO vo :giaCat3List){ + if(vo.getCode().equals(cat3.trim())){ + nm = vo.getCodeNm(); + break; + } + } + return nm; + } + + @Override + @Transactional + public DataMap insertMediaHstInfo() { + + String yyyy = DateUtil.getNowString(DateUtil.DATEYEAR_FORMAT); + String startDt = DateUtil.getNowString(DateUtil.DATETIME_FORMAT); + + String month = DateUtil.getNowString(DateUtil.DATEMONTH_ONLY_FORMAT); + + if(month.equals("01")){ + yyyy = DateUtil.getAddYearFormat(-1,DateUtil.DATEYEAR_FORMAT); + } + + DataMap schedulerHstMap = new DataMap(); + boolean isSuccess = false; + String msg = ""; + int dataCnt = 0; + + try { + DataMap paramMap = new DataMap(); + paramMap.put("yyyy", yyyy); + + List resultList = extDAO.selectActivityMediaList(paramMap); + + if(resultList.size()> 0){ + extDAO.deleteMediaHstInfo(paramMap); + for(DataMap map : resultList){ + extDAO.insertMediaHstInfo(map); + dataCnt++; + } + isSuccess = true; + }else{ + msg = "[데이터 가공오류]가공된 데이터 size:0"; + } + } catch (TransactionException ex1) { + LOGGER.error("fail in insertMediaHstInfo()", ex1); + msg = dataLimit(ex1.toString()); + } catch (Exception ex2) { + LOGGER.error("fail in insertMediaHstInfo()", ex2); + msg = dataLimit(ex2.toString()); + } finally{ + schedulerHstMap.setString("schedulerMethodNm", "setMediaHstInfo"); + schedulerHstMap.setString("schedulerNm", Constant.SCHEDULER_MEDIA_HST_INFO); + schedulerHstMap.setString("strTm", startDt); + schedulerHstMap.setString("endTm", DateUtil.getNowString(DateUtil.DATETIME_FORMAT)); + if(isSuccess){ + schedulerHstMap.setString("rstMsg", "등록성공"); + }else{ + schedulerHstMap.setString("rstMsg", "등록실패"); + schedulerHstMap.setString("etcCn", msg); + } + schedulerHstMap.setInt("dataCnt", dataCnt); + + try { + cmmService.insertCmmSchedulerHst(schedulerHstMap); + } catch (EgovBizException ex1) { + LOGGER.error("fail in insertCmmSchedulerHst()", ex1); + } catch (Exception ex2) { + LOGGER.error("fail in insertCmmSchedulerHst()", ex2); + } + + } + + return schedulerHstMap; + } + private String dataLimit(String data){ + String rtnStr = ""; + if(CmmUtil.checkMaxbyte(data , 1000)){ + rtnStr = data.substring(0 , 1000); + }else{ + rtnStr = data; + } + return rtnStr; + } + +} diff --git a/src/main/java/cmm/taglibs/FunctionTag.java b/src/main/java/cmm/taglibs/FunctionTag.java new file mode 100644 index 00000000..4b94f985 --- /dev/null +++ b/src/main/java/cmm/taglibs/FunctionTag.java @@ -0,0 +1,381 @@ +package cmm.taglibs; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.sql.SQLException; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; + +import cmm.Constant; +import cmm.util.CmmUtil; +import cmm.util.DataMap; +import cmm.util.DateUtil; + +//import com.unidocs.cipher.PDFInfoEncrypter; // DDDDDDDDDDDdddd 아직 관련 LIB 받지 못함 (2021.08.13) + + +public class FunctionTag { + + + static final String DELIMITER = "-"; + public static String toBr(String value) { + String str = ""; + if( org.apache.commons.lang3.StringUtils.isBlank(value) ){ + return str; + } + str = value; + if (str.indexOf("\\r") >= 0) str = str.replaceAll("\\\\r", "\r"); + if (str.indexOf("\\n") >= 0) str = str.replaceAll("\\\\n", "\n"); + if (str.indexOf("\r\n") >= 0 || str.indexOf("\n") >= 0 || str.indexOf("\r") >= 0) { + str = str.replaceAll("\\r\\n", "
"); + str = str.replaceAll("\\r", "
"); + str = str.replaceAll("\\n", "
"); + } + return str; + } + + public static String removeTag(String value) { + String str = ""; + if( org.apache.commons.lang3.StringUtils.isBlank(value) ){ + return str; + }else{ + str = value.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", ""); + } + return str; + } + + public static String dateFormatString(String strDate) throws IOException, InvocationTargetException, SQLException { + String formatDate = ""; + if( StringUtils.isBlank(strDate) ) return formatDate; + + String regExpNumber = "^[0-9]*$"; + strDate = strDate.trim(); + + Pattern p = Pattern.compile(regExpNumber); + Matcher m = p.matcher(strDate); + + if( !m.matches() ) { + return strDate; + } + + int strDateLen = strDate.length(); + if(strDateLen >= 4) { + formatDate = strDate.substring(0, 4); + } + if(strDateLen >= 6) { + formatDate += DELIMITER + strDate.substring(4, 6) ; + } + if(strDateLen >= 8) { + formatDate += DELIMITER + strDate.substring(6) ; + } + + return formatDate; + } + + + public static String[] dateSplitArrayString(String strDate, String type) throws IOException, InvocationTargetException, SQLException { + String formatDate [] = new String[3]; + if( StringUtils.isBlank(strDate) ) return formatDate; + + String regExpNumber = "^[0-9]*$"; + String rDate = strDate.replaceAll("-", "").trim(); + + Pattern p = Pattern.compile(regExpNumber); + Matcher m = p.matcher(rDate); + + if( !m.matches() ) { + for(int i=0;i= 4) { + formatDate[0] = rDate.substring(0, 4); + } + if(strDateLen >= 6) { + if( "M".equals(type) ){ + if(NumberUtils.toInt(rDate.substring(4, 6)) < 10){ + formatDate[1] = rDate.substring(5, 6); + }else{ + formatDate[1] = rDate.substring(4, 6); + } + }else{ + formatDate[1] = rDate.substring(4, 6); + } + } + if(strDateLen >= 8) { + formatDate[2] = rDate.substring(6) ; + } + + return formatDate; + } + + public static String moneyFormatString(String strMoney) throws IOException, InvocationTargetException, SQLException { + String formatMoney = ""; + if( StringUtils.isBlank(strMoney) ) return formatMoney; + if( !NumberUtils.isNumber(strMoney) ) return strMoney; + + DecimalFormat df = new DecimalFormat("#,###"); + formatMoney = df.format(NumberUtils.toLong(strMoney)); + + return formatMoney; + } + public static long getDday(String start, String end) throws ParseException, IOException, InvocationTargetException, SQLException { + + if( StringUtils.isBlank(start) || StringUtils.isBlank(end)){ + return -9999; + } + start = start.replaceAll("-", "").trim(); + end = end.replaceAll("-", "").trim(); + if( !NumberUtils.isNumber(start) || !NumberUtils.isNumber(end)){ + return -9999; + } + if( start.length() < 8 || end.length() < 8 ){ + return -9999; + } + + DateFormat df = new SimpleDateFormat("yyyyMMdd"); + Date s = df.parse(start); + Date e = df.parse(end); + + long diff = e.getTime() - s.getTime(); + return TimeUnit.MILLISECONDS.toDays(diff); + } + + public static boolean isIn(String to) throws ParseException, IOException, InvocationTargetException, SQLException { + if( StringUtils.isBlank(to)){ + return false; + } + to = to.replaceAll("-", "").replaceAll(".", "").trim(); + if( !NumberUtils.isNumber(to) ){ + return false; + } + if( to.length() < 8){ + return false; + } + DateFormat df = new SimpleDateFormat("yyyyMMdd"); + Date end = df.parse(to); + Date now = df.parse(df.format(new Date())); + + /*if(now.getTime() > end.getTime()){ + return false; + }else{ + return true; + }*/ + if(now.getTime() >= end.getTime()){ + return true; + }else{ + return false; + } + } + public static String getMonth(String target) throws IOException, InvocationTargetException, SQLException { + String mm = ""; + if( StringUtils.isBlank(target)){ + // 인자값을 빈값으로 보내면 현재월을 넘긴다. + Calendar cal = Calendar.getInstance(); + mm = String.valueOf(Integer.toString(cal.get(Calendar.MONTH)+1)); + } + mm = target.replaceAll("-", "").trim(); + if( !NumberUtils.isNumber(mm) ){ + return target; + } + if( mm.length() < 2){ + mm = "0"+mm; + } + return mm; + } + public static String getDay(String target) throws IOException, InvocationTargetException, SQLException { + String dd = ""; + if( StringUtils.isBlank(target)){ + // 인자값을 빈값으로 보내면 현재일을 넘긴다. + Calendar cal = Calendar.getInstance(); + dd = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)); + } + dd = target.replaceAll("-", "").trim(); + if( !NumberUtils.isNumber(dd) ){ + return target; + } + if( dd.length() < 2){ + dd = "0"+dd; + } + return dd; + } + + public static boolean isWeekend(String date_yyyymmdd) throws IOException, InvocationTargetException, SQLException { + boolean rtnBoolean = false; + if( !StringUtils.isBlank(date_yyyymmdd) ){ + String date=date_yyyymmdd.replaceAll("-", "").trim(); + if(date.length() >= 8 && NumberUtils.isNumber(date) ){ + int year = Integer.parseInt(date.substring(0,4)); + int month = Integer.parseInt(date.substring(4,6)); + int day = Integer.parseInt(date.substring(6,8)); + Calendar cal = Calendar.getInstance(); + cal.set(year, month-1, day ); + int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); + if( dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY){ + // 주말 + rtnBoolean = true; + } + } + } + return rtnBoolean; + } + public static String getToDay() throws Exception { + return DateUtil.getDateString(new Date(), new SimpleDateFormat("yyyy-MM-dd", Locale.KOREA)); + } + public static String getToDay2() throws Exception { + return DateUtil.getDateString(new Date(), new SimpleDateFormat("yyyyMMdd", Locale.KOREA)); + } + public static String reverseSido(String sido){ + if(sido == null || "".equals(sido)) return ""; + String rtnSido = ""; + for(int i=0; i -1 ){ + rtnSido = Constant.AIS_SIDO_NAME_ARRAY[i]; + break; + } + if(sido.indexOf( Constant.AIS_SIDO_PARAM_NAME_ARRAY[i] ) > -1 ){ + rtnSido = Constant.AIS_SIDO_NAME_ARRAY[i]; + break; + } + } + return rtnSido; + } + public static boolean isAreaOfInterest(String sido, String sigungu , DataMap pscHst){ + boolean rtnBoolean = false; + if(sido == null || "".equals(sido)) return rtnBoolean; + if(sigungu == null || "".equals(sigungu)) return rtnBoolean; + + if(pscHst == null) return rtnBoolean; + + DataMap pscHst1 = (DataMap) pscHst.get("pscHst1"); + DataMap pscHst2 = (DataMap) pscHst.get("pscHst2"); + DataMap pscHst3 = (DataMap) pscHst.get("pscHst3"); + + if(sido.trim().equals(pscHst1.getString("sidoName").trim()) && sigungu.trim().equals(pscHst1.getString("sigunguName").trim())){ + rtnBoolean = true; + } + if(sido.trim().equals(pscHst2.getString("sidoName").trim()) && sigungu.trim().equals(pscHst2.getString("sigunguName").trim())){ + rtnBoolean = true; + } + if(sido.trim().equals(pscHst3.getString("sidoName").trim()) && sigungu.trim().equals(pscHst3.getString("sigunguName").trim())){ + rtnBoolean = true; + } + return rtnBoolean; + } + + + //unidocs Viewer + public static String unidocsViewer(String filePath, String fileNm) throws Exception { + //String path = "/apps/ezpdfwebviewer/WEB-INF/ezPDFWebViewer/releasecontents/sokcho_20180608.pdf"; + //String path = "/nfs/kccf_doc/cfba8b83e460323079b67be17ba6f96d.pdf"; + String path = filePath + fileNm; + String download = "false"; + String print = "false"; + String annotation = "false"; + String[] param = new String[]{ java.net.URLEncoder.encode( path, "UTF-8" ), download, print, annotation}; +// String encData = PDFInfoEncrypter.encrypt( param ); +// return encData; + return null; // DDDDDDDDDDDdddd 아직 관련 LIB 받지 못함 (2021.08.13) + } + + /** + * ASSET 이미지 URL + * jsp 파일에서 다음과 같이 사용하던 linkUrl 로직을 포함함 + * + + + * + * @param filePath + * @return + * @throws Exception + */ + public static String assetImgUrl(String filePath) throws Exception { + String url = ""; + if (StringUtils.isEmpty(filePath)) return url; + + String amsAssetsPath = CmmUtil.getPropertyStr(Constant.AMS_SERVER_KEY) + CmmUtil.getPropertyStr(Constant.AMS_ASSETS_PATH_KEY); + String amsThumbnailPath = CmmUtil.getPropertyStr(Constant.AMS_THUMBNAIL_PATH_KEY); + + if (filePath.startsWith("http")) { // http 포함한 전체 경로일 경우 ex) object storage 이미지 + url = filePath; + + } else if (filePath.indexOf("/") >= 0) { // ex) 2/2/7292_thumbnail.jpg + url = amsAssetsPath + "/" + filePath; + + } else { + url = amsAssetsPath + "/" + amsThumbnailPath + "/" + filePath; // ex) ac6be22ee9db4414aeb4dab6078d27feb723f1c0.jpg + } + + url = url.replaceAll("//", "/"); + url = url.replaceAll(":/", "://"); // ex) https:/ => https:// + + return url; + } + + /** + * 업로드 이미지 URL + * + * @param filePath + * @return + * @throws Exception + */ + public static String uploadImgUrl(String filePath) throws Exception { + String url = ""; + if (StringUtils.isEmpty(filePath)) return url; + + // 로컬 개발 시 개발서버 upload 하위 이미지를 바라보도록 설정, 운영에서는 운영 upload 폴더 바라봄 + String uploadHomePath = CmmUtil.getPropertyStr(Constant.UPLOAD_HOME_KEY); + + if (filePath.startsWith("/upload")) { // ex) /upload/post/20180921142754.png (포스트, 배너 등) + url = uploadHomePath + "/" + filePath; + + } else { + url = filePath; + } + + url = url.replaceAll("//", "/"); + url = url.replaceAll(":/", "://"); // ex) https:/ => https:// + + return url; + } + + /** + * 두개의 문자열을 delimiter로 연결하여 반환 + * + * ex) *, aaa, bbb => aaa*bbb + * *, aaa => aaa + * *, "", bbb => bbb + * *, "", "" => "" + * + * @param delimiter + * @param str1 + * @param str2 + * @return + * @throws Exception + */ + public static String joinWithDelimiter(String delimiter, String str1, String str2) throws Exception { + String result = ""; + + if (StringUtils.isEmpty(str1) && StringUtils.isEmpty(str2)) return result; + result = str1; + if (StringUtils.isNotEmpty(str1) && StringUtils.isNotEmpty(str2)) result += delimiter; + result += str2; + + return result; + } + +} diff --git a/src/main/java/cmm/util/CmmCodeUtil.java b/src/main/java/cmm/util/CmmCodeUtil.java new file mode 100644 index 00000000..26b38696 --- /dev/null +++ b/src/main/java/cmm/util/CmmCodeUtil.java @@ -0,0 +1,70 @@ +package cmm.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import cmm.Constant; + +/** + * + * fix된 코드에 관한것만 사용하는 클래스 + */ +public class CmmCodeUtil { + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(CmmCodeUtil.class); + + public static List getAreaCodeList() { + List rtnList = new ArrayList(); + Arrays.sort(Constant.AREA_CODE_ARRAY); // 지역번호 정렬 + CmmCodeVO vo = null; + for(String v : Constant.AREA_CODE_ARRAY){ + vo = new CmmCodeVO(); + vo.setCode(v); + vo.setCodeNm(v); + vo.setCodeDc(v); + rtnList.add(vo); + } + return rtnList; + } + public static List getMobileCodeList() { + List rtnList = new ArrayList(); + Arrays.sort(Constant.MOBILE_CODE_ARRAY); // 번호 정렬 + CmmCodeVO vo = null; + for(String v : Constant.MOBILE_CODE_ARRAY){ + vo = new CmmCodeVO(); + vo.setCode(v); + vo.setCodeNm(v); + vo.setCodeDc(v); + rtnList.add(vo); + } + return rtnList; + } + public static List getSidoCodeList() { + List rtnList = new ArrayList(); + CmmCodeVO vo = null; + for(int i=0;i getSidoCodeList2() { + List rtnList = new ArrayList(); + CmmCodeVO vo = null; + for(int i=0;i listRole = (List) EgovUserDetailsHelper.getAuthorities(); + for (String role : listRole) { + if (Constant.AUTH_ROLE_KDM.equals(role)) { + return true; + } + } + return false; + } + public static boolean isRoleSysKdm() { + List listRole = (List) EgovUserDetailsHelper.getAuthorities(); + for (String role : listRole) { + if (Constant.AUTH_ROLE_SYM.equals(role)) { + return true; + } + } + return false; + } + + public static String clearXSS(String value) { + if (value == null || value.trim().equals("")) { + return ""; + } + String returnValue = value; + returnValue = returnValue.replaceAll("&", "&"); + returnValue = returnValue.replaceAll("<", "<"); + returnValue = returnValue.replaceAll(">", ">"); + returnValue = returnValue.replaceAll("'", "'"); + returnValue = returnValue.replaceAll("eval\\((.*)\\)", ""); + returnValue = returnValue.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); + returnValue = returnValue.replaceAll("\"", """); + returnValue = returnValue.replaceAll("\\(", "(").replaceAll("\\)", ")"); + returnValue = returnValue.replaceAll("script", ""); + returnValue = returnValue.replaceAll("alert", ""); + return returnValue; + } + + public static String escapeNewlineToBr(String text) { + String str = text; + if (StringUtils.isEmpty(str)) return str; + + if (str.indexOf("\\r") >= 0) str = str.replaceAll("\\\\r", "\r"); + if (str.indexOf("\\n") >= 0) str = str.replaceAll("\\\\n", "\n"); + if (str.indexOf("\r\n") >= 0 || str.indexOf("\n") >= 0 || str.indexOf("\r") >= 0) { + str = str.replaceAll("\\r\\n", "
"); + str = str.replaceAll("\\r", "
"); + str = str.replaceAll("\\n", "
"); + } + return str; + } + public static String escapeNewlineToSpace(String text) { + String str = text; + if (StringUtils.isEmpty(str)) return str; + if (str.indexOf("\\r") >= 0) str = str.replaceAll("\\\\r", "\r"); + if (str.indexOf("\\n") >= 0) str = str.replaceAll("\\\\n", "\n"); + if (str.indexOf("\r\n") >= 0 || str.indexOf("\n") >= 0 || str.indexOf("\r") >= 0) { + str = str.replaceAll("\\r\\n", ""); + str = str.replaceAll("\\r", ""); + str = str.replaceAll("\\n", ""); + } + str = str.replaceAll("\"", ""); + str = str.replaceAll("'", ""); + return str; + } + public static String cut(String text, int size) { + return cut(text, size, ""); + } + public static String cut(String text, int size, String suffix) { + if (text == null) { + return ""; + } + if (text.length() < size) { + return text; + } + size = size - suffix.length(); + return StringUtils.substring(text, 0, size) + suffix; + } + public static boolean isConsecutive(String str, int n) { + int sumOfDifferences = 0; + int lastTemp = 0; + Boolean consecutive = false; + for (int i = 0; i < str.length() - 1; i++) { + int temp = str.charAt(i) - str.charAt(i + 1); + if (temp != lastTemp) { + sumOfDifferences = 0; + } + if (temp == 1 || temp == -1) { + sumOfDifferences += temp; + } else { + sumOfDifferences = 0; + } + if (sumOfDifferences == n - 1 || sumOfDifferences == ((n - 1) * -1)) { + consecutive = true; + break; + } + lastTemp = temp; + } + return consecutive; + } + public static boolean regexFind(String str, String regex) { + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(str); + return matcher.find(); + } + public static String generateRandomString(String allowed, int length) { + Random random = new Random(); + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + sb.append(allowed.charAt(random.nextInt(allowed.length()))); + } + return sb.toString(); + } + public static String getIpAddress(HttpServletRequest req) { + String ipAddress = ""; + if (req.getHeader("X-Forwarded-For") == null) { + ipAddress = req.getRemoteAddr(); + } else { + ipAddress = req.getHeader("X-Forwarded-For"); + int idx = ipAddress.indexOf(','); + if (idx > -1) { + ipAddress = ipAddress.substring(0, idx); + } + } + return ipAddress; + } + public static String returnUrl(HttpServletRequest req, String parameterName) { + String url = req.getRequestURI(); + if (url.startsWith("/logout") || url.startsWith("/error") || "/".equals(url)) { + return ""; + } + String queryString = req.getQueryString(); + if (queryString != null) { + url += "?" + queryString; + try { + url = URLEncoder.encode(url, Constant.ENCODING_UTF8); + } catch (UnsupportedEncodingException e) { + url = ""; + } + } + return "?" + parameterName + "=" + url; + } + + public static String getUrl(HttpServletRequest req, String domain) { + final String uri = req.getRequestURI(); + final String queryString = req.getQueryString(); + String url = ""; + url = domain + uri; + if (StringUtils.isNotBlank(queryString)) { + url += "?" + queryString; + } + return url; + } + public static int getTridentVersion(String userAgent) { + String lowerUserAgent = userAgent.toLowerCase(); + int start = lowerUserAgent.indexOf("trident/"); + if (start == -1) { + return 0; + } + String trident = lowerUserAgent.substring(start + 8, start + 9); + return NumberUtils.toInt(trident); + } + public static String getPropertyStr(String key) { + String str = ""; + if (org.apache.commons.lang3.StringUtils.isNotBlank(key)) str = propertyService.getString(key); + return str; + } + public static String deleteChar(String str) { + if (StringUtils.isEmpty(str)) return str; + + String regExpNumber = "[^0-9]"; + return str.replaceAll(regExpNumber, ""); + } + @SuppressWarnings("rawtypes") + public static boolean isEmpty(Map map, String key) { + boolean isEmpty = true; + if (map == null) return isEmpty; + + Object obj = map.get(key); + if ( obj != null + && !StringUtils.isEmpty(obj.toString()) + && !(obj+"").equals("null")) { + + isEmpty = false; + } + return isEmpty; + } + public static boolean checkMaxbyte(String chkString, int maxbyte) { + boolean checkResult = true; + if (StringUtils.isBlank(chkString)) return checkResult; + int bytes = 0; + try { + bytes = chkString.getBytes(Constant.ENCODING_UTF8).length; + if (bytes > maxbyte) checkResult = false; + } catch (UnsupportedEncodingException e) { + LOGGER.error("fail in checkMaxbyte() maxbyte="+maxbyte+", bytes="+bytes+", chkString="+chkString, e); + checkResult = false; + } catch (Exception e) { + LOGGER.error("fail in checkMaxbyte() maxbyte="+maxbyte+", bytes="+bytes+", chkString="+chkString, e); + checkResult = false; + } + return checkResult; + } + public static String[] getValueArr(List list, String key) { + String[] exidArr = null; + if (list == null || list.size() == 0) return exidArr; + exidArr = new String[list.size()]; + for (int i=0; i max) + return false; + } + else + return false; + } + return true; + } + public static String getRandomNum(int size) { + String strRandom = ""; + Random rand = new Random(); + for (int i = 0; i < size; i++) { + strRandom += String.valueOf(rand.nextInt(10)); + } + return strRandom; + } + public static boolean isMobile(final HttpServletRequest req) { + String ua = StringUtils.defaultString(req.getHeader("User-Agent"), "").toLowerCase(); + if (ua.indexOf(Constant.ANDROID) > -1 || ua.indexOf(Constant.IOS) > -1 || ua.indexOf("mobile") > -1) { + return true; + } + return false; + } + public static String getContextPath(final HttpServletRequest req, final String path) { + //if (isApp(req)) { + return Constant.PREFIX_M + (path.startsWith("/") ? path : "/" + path); + //} + // return path; + } + public static String unscript(String data) { + if (data == null || data.trim().equals("")) { + return ""; + } + + String ret = data; + + ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); + ret = ret.replaceAll(" getListMapFromJsonArray( JSONArray jsonArray ) { + List list = new ArrayList(); + if( jsonArray != null ){ + int jsonSize = jsonArray.length(); + for( int i = 0; i < jsonSize; i++ ){ + DataMap map = CmmUtil.getMapFromJsonObject( ( JSONObject ) jsonArray.get(i) ); + list.add( map ); + } + } + return list; + } + public static String getAisSidoName(String sido) { + String rtnStr = ""; + for(int i=0;i 0){ + for(Cookie cookie : cookies){ + if(Name.equals(cookie.getName())){ + cookieValue = cookie.getValue(); + break; + } + } + } + return cookieValue; + } + public static String getDecoderCookie(final HttpServletRequest req, String Name){ + String cookieValue = ""; + Cookie[] cookies = req.getCookies(); + if(cookies != null && cookies.length > 0){ + for(Cookie cookie : cookies){ + if(Name.equals(cookie.getName())){ + try { + cookieValue = java.net.URLDecoder.decode(cookie.getValue(),Constant.ENCODING_UTF8); + } catch (UnsupportedEncodingException e) { + LOGGER.error("fail in getDecoderCookie()" , e); + } catch (Exception e) { + LOGGER.error("fail in getDecoderCookie()", e); + } + break; + } + } + } + return cookieValue; + } + public static String getCookieIdKey(){ + return propertyService.getString("kccf.cookie.id.key"); + } + + public static String getCookieId(final HttpServletRequest req){ + String cookieId = ""; + String key = getCookieIdKey(); + Cookie[] cookies = req.getCookies(); + if(cookies != null && cookies.length > 0){ + for(Cookie cookie : cookies){ + if(key.equals(cookie.getName())){ + try { + cookieId = java.net.URLDecoder.decode( cookie.getValue(),Constant.ENCODING_UTF8); + } catch (UnsupportedEncodingException e) { + LOGGER.error("fail in getCookieId()" , e); + } catch (Exception e) { + LOGGER.error("fail in getCookieId()", e); + } + break; + } + } + } + return cookieId; + } + public static String getNewCookieId(final HttpServletRequest req){ + String key = getCookieIdKey(); + String value = ""; + try { + value = java.net.URLEncoder.encode( encryptPassword(getPassStr(50), key) , Constant.ENCODING_UTF8 ); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error in getNewCookieId()", e); + } catch (Exception e) { + LOGGER.error("Error in getNewCookieId()", e); + } + return value; + } + public static void setCookieId(final HttpServletRequest req, final HttpServletResponse res){ + String key = getCookieIdKey(); + String value = ""; + + try { + value = java.net.URLEncoder.encode( encryptPassword(getPassStr(50), key) , Constant.ENCODING_UTF8 ); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error in setCookieId()", e); + } catch (Exception e) { + LOGGER.error("Error in setCookieId()", e); + } + + /* 2019.02.26 웹취약점 수정사항 => 1시간마다 쿠키 만료되고 있음 + String maxAge = String.valueOf((60*60*24*365)*10); + if (maxAge.matches("[0-9]+")) { + Cookie cookie = new Cookie(key,value); + // 수정 : 외부입력값 검증 후 쿠키 유효시한 설정에 사용 + int t = Integer.parseInt(maxAge); + if ( t > 3600 ) { + t = 3600; + } + cookie.setMaxAge(t); + cookie.setPath("/"); + res.addCookie(cookie); + } + */ + + // 쿠키 유효기간 1년으로 변경 (2019.08.08) + int maxAge = 60*60*24*365; // 1년 + Cookie cookie = new Cookie(key,value); + cookie.setMaxAge(maxAge); + cookie.setPath("/"); + res.addCookie(cookie); + } + + public static void setCookie(final HttpServletResponse res, String key, String value){ + /* 2019.02.26 웹취약점 수정사항 => 1시간마다 쿠키 만료되고 있음 + String maxAge = String.valueOf((60*60*24*365)*10); + if (maxAge.matches("[0-9]+")) { + Cookie cookie = new Cookie(key,value); + // 수정 : 외부입력값 검증 후 쿠키 유효시한 설정에 사용 + int t = Integer.parseInt(maxAge); + if ( t > 3600 ) { + t = 3600; + } + cookie.setMaxAge(t); + cookie.setPath("/"); + res.addCookie(cookie); + } + */ + + // 쿠키 유효기간 1년으로 변경 (2019.08.08) + int maxAge = 60*60*24*365; // 1년 + Cookie cookie = new Cookie(key,value); + cookie.setMaxAge(maxAge); + cookie.setPath("/"); + res.addCookie(cookie); + } + + public static void setEncoderCookie(final HttpServletResponse res, String key, String value){ + + try { + value = java.net.URLEncoder.encode(value,Constant.ENCODING_UTF8); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error in setEncoderCookie()", e); + } catch (Exception e) { + LOGGER.error("Error in setEncoderCookie()", e); + } + + /* 2019.02.26 웹취약점 수정사항 => 1시간마다 쿠키 만료되고 있음 + String maxAge = String.valueOf((60*60*24*365)*10); + if (maxAge.matches("[0-9]+")) { + Cookie cookie = new Cookie(key,value); + // 수정 : 외부입력값 검증 후 쿠키 유효시한 설정에 사용 + int t = Integer.parseInt(maxAge); + if ( t > 3600 ) { + t = 3600; + } + cookie.setMaxAge(t); + cookie.setPath("/"); + res.addCookie(cookie); + } + */ + + // 쿠키 유효기간 1년으로 변경 (2019.08.08) + int maxAge = 60*60*24*365; // 1년 + Cookie cookie = new Cookie(key,value); + cookie.setMaxAge(maxAge); + cookie.setPath("/"); + res.addCookie(cookie); + } + + public static void removeCookie(final HttpServletRequest req, final HttpServletResponse res, String key){ + Cookie[] cookies = req.getCookies(); + if(cookies != null && cookies.length > 0){ + for(Cookie cookie : cookies){ + if(key.equals(cookie.getName())){ + cookie.setMaxAge(0); + cookie.setPath("/"); + cookie.setSecure(true); //중요정보 평문전송 (HTTP): 취약점 수정 + String val = cookie.getValue(); + String filtered_val = val.replaceAll("\r","").replaceAll("\n",""); + Cookie cookie2 = new Cookie(key, filtered_val); + res.addCookie(cookie2); + break; + } + } + } + } + private static String encryptPassword(String key, String val) throws NoSuchAlgorithmException { + if (key == null) { + return ""; + } + byte[] hashValue = null; // 해쉬값 + MessageDigest md = MessageDigest.getInstance("SHA-512"); + md.reset(); + md.update(val.getBytes()); + hashValue = md.digest(key.getBytes()); + + return new String(Base64.encodeBase64(hashValue)).replaceAll("\\+", "").replaceAll("=", ""); + } + public static boolean isSido(String str){ + boolean isSido = false; + for(int i=0; i -1 ){ + isSido = true; + break; + } + if(str.indexOf( Constant.AIS_SIDO_PARAM_NAME_ARRAY[i] ) > -1 ){ + isSido = true; + break; + } + } + return isSido; + } + public static String changeSido(String str){ + if(str == null || "".equals(str)) return ""; + String rtnSido = ""; + for(int i=0; i -1 ){ + rtnSido = Constant.AIS_SIDO_PARAM_NAME_ARRAY[i]; + break; + } + if(str.indexOf( Constant.AIS_SIDO_PARAM_NAME_ARRAY[i] ) > -1 ){ + rtnSido = Constant.AIS_SIDO_PARAM_NAME_ARRAY[i]; + break; + } + } + return rtnSido; + } + public static void setAmsPathModelMap(HttpServletRequest req, ModelMap modelMap){ + // ams 경로 + String amsAssetsPath = getPropertyStr(Constant.AMS_SERVER_KEY) + getPropertyStr(Constant.AMS_ASSETS_PATH_KEY); + String amsThumbnailPath = getPropertyStr(Constant.AMS_THUMBNAIL_PATH_KEY); + String amsImagePath = getPropertyStr(Constant.AMS_FILE_PATH_KEY); + modelMap.addAttribute("amsAssetsPath", amsAssetsPath); + modelMap.addAttribute("amsThumbnailPath", amsThumbnailPath); + modelMap.addAttribute("amsImagePath", amsImagePath); + } + + public static void setNfsPathModelMap(HttpServletRequest req, ModelMap modelMap){ + // ams 경로 + String nfsNasPath = getPropertyStr(Constant.NFS_NAS_KEY); + String nfsDocPath = getPropertyStr(Constant.NFS_DOC_KEY); + modelMap.addAttribute("nfsNasPath", nfsNasPath); + modelMap.addAttribute("nfsDocPath", nfsDocPath); + } + + public static String getAssetImageUrl(String imagePath) { + String imageUrl = ""; + if (StringUtils.isEmpty(imagePath)) return imageUrl; + + String amsAssetsPath = getPropertyStr(Constant.AMS_SERVER_KEY) + getPropertyStr(Constant.AMS_ASSETS_PATH_KEY); + String amsThumbnailPath = getPropertyStr(Constant.AMS_THUMBNAIL_PATH_KEY); + if (imagePath.startsWith("http")) { // http 포함한 전체 경로일 경우 ex) object storage 이미지 + imageUrl = imagePath; + + } else if (imagePath.indexOf("/") >= 0) { // ex) 2/2/7292_thumbnail.jpg + imageUrl = amsAssetsPath + "/" + imagePath; + + } else { + imageUrl = amsAssetsPath + "/" + amsThumbnailPath + "/" + imagePath; // ex) ac6be22ee9db4414aeb4dab6078d27feb723f1c0.jpg + } + + imageUrl = imageUrl.replaceAll("//", "/"); + imageUrl = imageUrl.replaceAll(":/", "://"); // ex) https:/ => https:// + + return imageUrl; + } + + + public static String getContentsImageUrl(String imagePath) { + String imageUrl = ""; + if (StringUtils.isEmpty(imagePath)) return imageUrl; + + String amsAssetsPath = getPropertyStr(Constant.KCCF_HOME_KEY); + if (imagePath.startsWith("http")) { // http 포함한 전체 경로일 경우 ex) object storage 이미지 + imageUrl = imagePath; + + } else if (imagePath.indexOf("/") >= 0) { // ex) 2/2/7292_thumbnail.jpg + imageUrl = amsAssetsPath + "/" + imagePath; + + } else { + imageUrl = amsAssetsPath + "/" + imagePath; // ex) ac6be22ee9db4414aeb4dab6078d27feb723f1c0.jpg + } + + imageUrl = imageUrl.replaceAll("//", "/"); + imageUrl = imageUrl.replaceAll(":/", "://"); // ex) https:/ => https:// + + return imageUrl; + } + + + public static void setUploadPathModelMap(HttpServletRequest req, ModelMap modelMap){ + // 서버경로 (upload폴더 상위경로) : 로컬 개발시 upload 파일이 로컬에 존재하지 않을 경우 사용 + String uploadHomePath = getPropertyStr(Constant.UPLOAD_HOME_KEY); + modelMap.addAttribute("uploadHomePath", uploadHomePath); + } + + /** + * 자산미디어 - 문서 목차 문자열 파싱 + * +테스트 목차 -----1 +제1장 6.25전쟁 전투수기 -----100 + +발간사 ---2 ***1 +축간사(창녕군수) ---4 +축간사(창녕군의회의장)---5 +제1장 6.25전쟁 전투수기 ***2 + 끊어진 한강 철교 빈 보트로 건너다.(성경상) ---12 + 포탄이 날아들어 전우 3명이 즉사하다.(김윤규) ---16 + * + * @param str + * @return + * @throws Exception + */ + public static List parseTableOfContents(String str) { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) return list; + + + String[] lineArr = str.split("\n"); + int listIdx = 1; + for (int i=0; i errorList = new ArrayList(); + + if (idx1 >= 0 && idx2 >= 0) { // ex) 발간사 ---2 ***1 + String[] arr = line.split(pattern1); + title = arr[0]; + String[] arr2 = arr[1].split(pattern2); + + try { + if (arr2.length == 2) { + pageNum = parseTableOfContentsPageNum(arr2[0]); + ocrFileNum = new Integer(StringUtils.trim(arr2[1]).replaceAll(" ", "")); + + } else if (arr2.length == 1) { // ex) 1. 옹기의 지역적인 특성 ---7 *** + pageNum = parseTableOfContentsPageNum(arr2[0]); + ocrFileNum = new Integer(""); // 강제로 에러발생시킴 + } + } catch (Exception e) { + errorList.add(listIdx+"\t"+e.getMessage()); + } + } else if (idx1 >= 0 && idx2 < 0) { // ex) 축간사(창녕군수) ---4 + String[] arr = line.split(pattern1); + title = arr[0]; + try { + pageNum = parseTableOfContentsPageNum(arr[1]); + } catch (Exception e) { + errorList.add(listIdx+"\t"+e.getMessage()); + } + + } else if (idx1 < 0 && idx2 >= 0) { // ex) 제1장 6.25전쟁 전투수기 ***2 + String[] arr = line.split(pattern2); + title = arr[0]; + try { + if (arr.length == 2) { + ocrFileNum = new Integer(StringUtils.trim(arr[1]).replaceAll(" ", "")); + + } else if (arr.length == 1) { // ex) -참고문헌 *** + ocrFileNum = new Integer(""); // 강제로 에러발생시킴 + } + } catch (Exception e) { + errorList.add(listIdx+"\t"+e.getMessage()); + } + + } else { + title = line; + } + + list.add(new CmmAmsDocTableOfContentsVO(title, pageNum, ocrFileNum, errorList)); + listIdx++; + } + + return list; + } + + /** + * PDF 목차 페이지번호 파싱 + * @param pageNumStr + * @return + * @throws Exception + */ + public static String parseTableOfContentsPageNum(String pageNumStr) throws Exception { + if (StringUtils.isEmpty(pageNumStr)) { + pageNumStr = new Integer(pageNumStr).toString(); // 강제로 Exception 발생시킴 + } + + pageNumStr = StringUtils.trim(pageNumStr).replaceAll(" ", ""); + + boolean isPageNum = true; + for (int i=0; i list, String delimiter) throws Exception { + StringBuffer sb = new StringBuffer();; + + String title = ""; + int titleDepth = 1; + int prevTitleDepth = 100; + String pageNum = null; + Integer ocrFileNum = null; + boolean hasOcrFileNum = false; + + for (int i=0; list!=null && i= 0) { + title = title.replaceAll("\"", " "); // 따옴표 치환 + } + pageNum = vo.getPageNum(); + + ocrFileNum = vo.getOcrFileNum(); + + if (ocrFileNum != null) { + hasOcrFileNum = true; + } else { + hasOcrFileNum = false; + } + + if (title.startsWith(" ") || title.startsWith("\t")) { + if (title.startsWith(" ")) { // 공백6칸 + titleDepth = 4; + } else if (title.startsWith(" ")) { // 공백5칸 + titleDepth = 4; + } else if (title.startsWith(" ")) { // 공백4칸 + titleDepth = 3; + } else if (title.startsWith(" ")) { // 공백3칸 + titleDepth = 3; + } else if (title.startsWith(" ")) { // 공백2칸 + titleDepth = 2; + } else if (title.startsWith(" ")) { // 공백1칸 + titleDepth = 2; + } else if (title.startsWith(" •")) { // 공백1칸 +원문자 ex) K163832.pdf + titleDepth = 2; + } + } else { + titleDepth = 1; + } + + String cssDepth = ""; + if (titleDepth == 1) cssDepth = "d1"; + else if (titleDepth == 2) cssDepth = "d2"; + else if (titleDepth == 3) cssDepth = "d3"; + else if (titleDepth == 4) cssDepth = "d4"; + + if (hasOcrFileNum) { + if (i > 0 && ocrFileNum != null) sb.append(delimiter); + title = title.replaceAll("(\r\n|\r|\n|\n\r)", ""); + sb.append("

"+title); + if (pageNum != null) sb.append(" - "+pageNum); + sb.append("

"); + + } else { + title = title.replaceAll("(\r\n|\r|\n|\n\r)", ""); + sb.append("

"+title); + if (pageNum != null) sb.append(" - "+pageNum); + sb.append("

"); + } + + // ocrFileNum 위치 검증 + if (titleDepth == 1 && prevTitleDepth > 1 && !hasOcrFileNum) { + List errorList = vo.getErrorList(); + errorList.add((i+1)+"\t"+"missing divided file number? : "+title+(pageNum!=null ? " - "+pageNum : "")); +// System.out.println("makeTableOfContentsMarkup() \t"+(i+1)+"\tmissing divided file number? : "+title+(pageNum!=null ? " - "+pageNum : "")); + } + + + prevTitleDepth = titleDepth; + } + + return sb.toString(); + } + + /** + * URL scheme HTTPS로 변경 + * @param url + * @return + */ + public static String changeSchemeToHttps(String url) { + String result = ""; + if (StringUtils.isEmpty(url)) return result; + + Pattern p = Pattern.compile("^(http:\\/\\/|https:\\/\\/)?(www\\.)?(.*)$"); // URL 앞부분 패턴 + Matcher m = p.matcher(url); + if (m.find()) { + LOGGER.info("changeSchemeToHttps() m.groupCount()={}, m.group(1)={}, m.group(2)={}, m.group(3)={}, m.group(0)={}", m.groupCount(), m.group(1), m.group(2), m.group(3), m.group(0)); + result = "https://"; + if (m.group(2) != null) result += m.group(2); + result += m.group(3); + } + + return result; + } + + public static String getLinkUrl(String aId, String mId )throws EgovBizException { + + DataMap param = new DataMap(); + param.put("aId", aId); + param.put("mId", mId); + DataMap media = cmmService.selectCmmAmsAssetsMediaDetail2(param); // asset id로 조회 + String mediaId = media.getString("mediaId"); + String mediaInterfaceId = media.getString("mediaInterfaceId"); + + String rtnStr = ""; + if (StringUtils.isNotEmpty(mediaInterfaceId)) { // mediaInterfaceId가 존재할 경우만 URL 정보 생성 + if(media.get("assetType") != null){ + if(media.get("assetType").toString().equals("문서") ){ + rtnStr = CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+"/npdfView.do?"; + rtnStr += "npdf="+Constant.UA_TYPE_R+mediaInterfaceId; // MEDIA 의 INTERFACE_ID 사용 + + }else if(media.get("assetType").toString().equals("링크")){ + rtnStr = media.get("linkData").toString(); + }else{ + rtnStr = CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+"/lib/libraryDetail.do?contentId="+mediaId; + rtnStr += "&rfType="+Constant.UA_TYPE_R; // 히스토리 등록 시 사용 + } + } + } + return rtnStr; + } +} + diff --git a/src/main/java/cmm/util/CmmVO.java b/src/main/java/cmm/util/CmmVO.java new file mode 100644 index 00000000..3106107c --- /dev/null +++ b/src/main/java/cmm/util/CmmVO.java @@ -0,0 +1,673 @@ +package cmm.util; + +import java.io.Serializable; +import java.util.Date; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @Class Name : CmmVO.java + * @author Kdmistrator + * @version 1.0 + * 상속 받아서 사용하는 공통 VO + */ +public class CmmVO implements Serializable{ + + private static final long serialVersionUID = 1L; + private String cntntsSeCode; + private String searchCondition = ""; + private String searchKeyword = ""; + private String searchCondition2 = ""; + private String searchKeyword2 = ""; + private String searchCondition3 = ""; + private String searchKeyword3 = ""; + private String searchCondition4 = ""; + private String searchKeyword4 = ""; + private String searchCondition5 = ""; + private String searchKeyword5 = ""; + private String searchCondition6 = ""; + private String searchKeyword6 = ""; + private String searchCondition7 = ""; + private String searchCondition8 = ""; + private String searchKeywordWhole = ""; + private String searchConditionWhole = ""; + private String searchDateCondition = ""; + private Date searchStartDate = null; + private Date searchEndDate = null; + private String searchStartStr = null; + private String searchEndStr = null; + private String searchUseYn = ""; + private String searchType = ""; + private String searchType1 = ""; + private String searchType2 = ""; + private String searchType3 = ""; + private String searchType4 = ""; + private int pageIndex = 1; + private int pageIndex2 = 1; + private int pageIndex3 = 1; + + private int pageUnit = 12; + private int pageUnit10 = 10; + private int pageUnit20 = 20; + private int pageUnit30 = 30; + private int pageSize = 10; + private int mobilePageSize = 5; + private int firstIndex = 1; + private int lastIndex = 1; + private int recordCountPerPage = 10; + private String orderCondition; + private String orderType; + private boolean isBr = false; + private String pageUseAt = "Y"; + private int limit = 5; + private String authorCode; + private String targetId; + private String sido = ""; + private String sigungu = ""; + private String sido2 = ""; + private String sigungu2 = ""; + private String dong = ""; + private String lon = ""; + private String lat = ""; + private String addr =""; + private String xy =""; + private String distance = ""; + private String tabCode = ""; + private int fixedPage = 0; + private String activityType =""; + private String contentType = ""; + private String toDay = ""; + private String parameter1 = ""; + private String parameter2 = ""; + private String parameter3 = ""; + private String parameter4 = ""; + private String parameter5 = ""; + private String parameter6 = ""; + private String sessionId = ""; + private boolean isTag = false; + private String viewType = ""; + // 태그 명이 넘어가는 파라미터 + private String searchTag = ""; + // 스크랩 여부(스크랩 활성 체크) : 존재하면 on , 존재하지 않으면 빈값 "" + private String scrapActive = ""; + private String aId=""; // 에셋 아이디 + private String mId=""; // 에셋미디어 아이디 + private String [] searchLocaleArray; // 지역 + private String [] searchAssetClassArray; // 에셋유형 (ex. 일반, 특화, 문화원소장 등) + private String [] searchAssetTypeArray; // 자산유형 (ex. 문서, 이미지, 동영상, 오디오, 링크 등) + private String [] searchFirstCategoryArray; // 카테고리 + + private String sCouncilCd=""; + private String gubun=""; + + + public CmmVO() {} + public String getCntntsSeCode() { + return cntntsSeCode; + } + + public void setCntntsSeCode(String cntntsSeCode) { + this.cntntsSeCode = cntntsSeCode; + } + + 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 getSearchCondition2() { + return searchCondition2; + } + + public void setSearchCondition2(String searchCondition2) { + this.searchCondition2 = searchCondition2; + } + + public String getSearchKeyword2() { + return searchKeyword2; + } + + public void setSearchKeyword2(String searchKeyword2) { + this.searchKeyword2 = searchKeyword2; + } + + public String getSearchCondition3() { + return searchCondition3; + } + + public void setSearchCondition3(String searchCondition3) { + this.searchCondition3 = searchCondition3; + } + + public String getSearchKeyword3() { + return searchKeyword3; + } + + public void setSearchKeyword3(String searchKeyword3) { + this.searchKeyword3 = searchKeyword3; + } + public String getSearchCondition4() { + return searchCondition4; + } + + public void setSearchCondition4(String searchCondition4) { + this.searchCondition4 = searchCondition4; + } + + public String getSearchKeyword4() { + return searchKeyword4; + } + + public void setSearchKeyword4(String searchKeyword4) { + this.searchKeyword4 = searchKeyword4; + } + + public String getSearchCondition5() { + return searchCondition5; + } + + public void setSearchCondition5(String searchCondition5) { + this.searchCondition5 = searchCondition5; + } + + public String getSearchKeyword5() { + return searchKeyword5; + } + + public void setSearchKeyword5(String searchKeyword5) { + this.searchKeyword5 = searchKeyword5; + } + + public String getSearchCondition6() { + return searchCondition6; + } + public void setSearchCondition6(String searchCondition6) { + this.searchCondition6 = searchCondition6; + } + public String getSearchKeyword6() { + return searchKeyword6; + } + + public String getSearchCondition7() { + return searchCondition7; + } + public void setSearchCondition7(String searchCondition7) { + this.searchCondition7 = searchCondition7; + } + public String getSearchCondition8() { + return searchCondition8; + } + public void setSearchCondition8(String searchCondition8) { + this.searchCondition8 = searchCondition8; + } + public String getSearchKeywordWhole() { + return searchKeywordWhole; + } + public void setSearchKeywordWhole(String searchKeywordWhole) { + this.searchKeywordWhole = searchKeywordWhole; + } + public String getSearchConditionWhole() { + return searchConditionWhole; + } + public void setSearchConditionWhole(String searchConditionWhole) { + this.searchConditionWhole = searchConditionWhole; + } + public void setSearchKeyword6(String searchKeyword6) { + this.searchKeyword6 = searchKeyword6; + } + public String getSearchDateCondition() { + return searchDateCondition; + } + + public void setSearchDateCondition(String searchDateCondition) { + this.searchDateCondition = searchDateCondition; + } + + public Date getSearchStartDate() { + return searchStartDate; + } + + public void setSearchStartDate(Date searchStartDate) { + this.searchStartDate = searchStartDate; + } + + public Date getSearchEndDate() { + return searchEndDate; + } + + public void setSearchEndDate(Date searchEndDate) { + this.searchEndDate = searchEndDate; + } + + + public String getSearchStartStr() { + return searchStartStr; + } + + public void setSearchStartStr(String searchStartStr) { + this.searchStartStr = searchStartStr; + } + + public String getSearchEndStr() { + return searchEndStr; + } + + public void setSearchEndStr(String searchEndStr) { + this.searchEndStr = searchEndStr; + } + + public String getSearchUseYn() { + return searchUseYn; + } + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + public String getSearchType() { + return StringUtils.defaultIfEmpty(searchType, "1") ; + } + + public void setSearchType(String searchType) { + this.searchType = searchType; + } + + public String getSearchType1() { + return StringUtils.defaultIfEmpty(searchType1, "1") ; + } + public void setSearchType1(String searchType1) { + this.searchType1 = searchType1; + } + public String getSearchType2() { + return StringUtils.defaultIfEmpty(searchType2, "1") ; + } + public void setSearchType2(String searchType2) { + this.searchType2 = searchType2; + } + public String getSearchType3() { + return StringUtils.defaultIfEmpty(searchType3, "1") ; + } + public void setSearchType3(String searchType3) { + this.searchType3 = searchType3; + } + public String getSearchType4() { + return StringUtils.defaultIfEmpty(searchType4, "1") ; + } + public void setSearchType4(String searchType4) { + this.searchType4 = searchType4; + } + public int getPageIndex() { + return this.pageIndex; + } + + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + public int getPageIndex2() { + return pageIndex2; + } + public void setPageIndex2(int pageIndex2) { + this.pageIndex2 = pageIndex2; + } + + public int getPageIndex3() { + return pageIndex3; + } + public void setPageIndex3(int pageIndex3) { + this.pageIndex3 = pageIndex3; + } + public int getPageUnit() { + return pageUnit; + } + + public void setPageUnit(int pageUnit) { + this.pageUnit = pageUnit; + } + + public int getPageUnit10() { + return pageUnit10; + } + public void setPageUnit10(int pageUnit10) { + this.pageUnit10 = pageUnit10; + } + + public int getPageUnit20() { + return pageUnit20; + } + public void setPageUnit20(int pageUnit20) { + this.pageUnit20 = pageUnit20; + } + public int getPageUnit30() { + return pageUnit30; + } + public void setPageUnit30(int pageUnit30) { + this.pageUnit30 = pageUnit30; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getMobilePageSize() { + return mobilePageSize; + } + public void setMobilePageSize(int mobilePageSize) { + this.mobilePageSize = mobilePageSize; + } + 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 getOrderCondition() { + return orderCondition; + } + + public void setOrderCondition(String orderCondition) { + this.orderCondition = orderCondition; + } + public String getOrderType() { + return orderType; + } + + public void setOrderType(String orderType) { + this.orderType = orderType; + } + + public boolean isBr() { + return isBr; + } + + public void setBr(boolean isBr) { + this.isBr = isBr; + } + + public String getPageUseAt() { + return pageUseAt; + } + public void setPageUseAt(String pageUseAt) { + this.pageUseAt = pageUseAt; + } + + public int getLimit() { + return limit; + } + public void setLimit(int limit) { + this.limit = limit; + } + + public String getAuthorCode() { + return authorCode; + } + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + + public String getTargetId() { + return targetId; + } + public void setTargetId(String targetId) { + this.targetId = targetId; + } + + public String getSido() { + return sido; + } + public void setSido(String sido) { + this.sido = sido; + } + public String getSigungu() { + return sigungu; + } + public void setSigungu(String sigungu) { + this.sigungu = sigungu; + } + public String getSido2() { + return sido2; + } + public void setSido2(String sido2) { + this.sido2 = sido2; + } + public String getSigungu2() { + return sigungu2; + } + public void setSigungu2(String sigungu2) { + this.sigungu2 = sigungu2; + } + public String getDong() { + return dong; + } + public void setDong(String dong) { + this.dong = dong; + } + public String getLon() { + return lon; + } + public void setLon(String lon) { + this.lon = lon; + } + public String getLat() { + return lat; + } + public void setLat(String lat) { + this.lat = lat; + } + + public String getAddr() { + return addr; + } + public void setAddr(String addr) { + this.addr = addr; + } + public String getXy() { + return xy; + } + public void setXy(String xy) { + this.xy = xy; + } + + public String getDistance() { + return distance; + } + public void setDistance(String distance) { + this.distance = distance; + } + + public String getTabCode() { + return tabCode; + } + public void setTabCode(String tabCode) { + this.tabCode = tabCode; + } + + + public int getFixedPage() { + return fixedPage; + } + public void setFixedPage(int fixedPage) { + this.fixedPage = fixedPage; + } + + public String getActivityType() { + return activityType; + } + public void setActivityType(String activityType) { + this.activityType = activityType; + } + public String getContentType() { + return contentType; + } + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getToDay() { + return toDay; + } + public void setToDay(String toDay) { + this.toDay = toDay; + } + public String getParameter1() { + return parameter1; + } + public void setParameter1(String parameter1) { + this.parameter1 = parameter1; + } + public String getParameter2() { + return parameter2; + } + public void setParameter2(String parameter2) { + this.parameter2 = parameter2; + } + public String getParameter3() { + return parameter3; + } + public void setParameter3(String parameter3) { + this.parameter3 = parameter3; + } + public String getParameter4() { + return parameter4; + } + public void setParameter4(String parameter4) { + this.parameter4 = parameter4; + } + public String getParameter5() { + return parameter5; + } + public void setParameter5(String parameter5) { + this.parameter5 = parameter5; + } + public String getParameter6() { + return parameter6; + } + public void setParameter6(String parameter6) { + this.parameter6 = parameter6; + } + public String getSessionId() { + return sessionId; + } + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + public boolean isTag() { + return isTag; + } + public void setIsTag(boolean isTag) { + this.isTag = isTag; + } + public String getViewType() { + return viewType; + } + public void setViewType(String viewType) { + this.viewType = viewType; + } + + public String getSearchTag() { + return searchTag; + } + public void setSearchTag(String searchTag) { + this.searchTag = searchTag; + } + + public String getScrapActive() { + return scrapActive; + } + public void setScrapActive(String scrapActive) { + this.scrapActive = scrapActive; + } + public String getaId() { + return aId; + } + public void setaId(String aId) { + this.aId = aId; + } + public String getmId() { + return mId; + } + public void setmId(String mId) { + this.mId = mId; + } + + public String[] getSearchLocaleArray() { + return searchLocaleArray; + } + public void setSearchLocaleArray(String[] searchLocaleArray) { + this.searchLocaleArray = searchLocaleArray; + } + public String[] getSearchAssetClassArray() { + return searchAssetClassArray; + } + public void setSearchAssetClassArray(String[] searchAssetClassArray) { + this.searchAssetClassArray = searchAssetClassArray; + } + + public String[] getSearchAssetTypeArray() { + return searchAssetTypeArray; + } + public void setSearchAssetTypeArray(String[] searchAssetTypeArray) { + this.searchAssetTypeArray = searchAssetTypeArray; + } + public String getsCouncilCd() { + return sCouncilCd; + } + public void setsCouncilCd(String sCouncilCd) { + this.sCouncilCd = sCouncilCd; + } + + public String[] getSearchFirstCategoryArray() { + return searchFirstCategoryArray; + } + public void setSearchFirstCategoryArray(String[] searchFirstCategoryArray) { + this.searchFirstCategoryArray = searchFirstCategoryArray; + } + + public String getGubun() { + return gubun; + } + public void setGubun(String gubun) { + this.gubun = gubun; + } + /** + * toString + * @return String + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + +} diff --git a/src/main/java/cmm/util/DataMap.java b/src/main/java/cmm/util/DataMap.java new file mode 100644 index 00000000..569c50f8 --- /dev/null +++ b/src/main/java/cmm/util/DataMap.java @@ -0,0 +1,196 @@ +package cmm.util; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import egovframework.rte.psl.dataaccess.util.CamelUtil; + +/** + * @Class Name : DataMap.java + * @author Kdmistrator + * @version 1.0 + * DB 리턴 받을때 사용하거나 Map 타입으로 사용할때 사용한다. + */ +public class DataMap extends LinkedHashMap implements Map{ + private static final long serialVersionUID = 1L; + private static final Logger LOGGER = LoggerFactory.getLogger(DataMap.class); + + public static DataMap getNewDataMap(){ + return new DataMap(); + } + public static DataMap getNewDataMap(HttpServletRequest request){ + DataMap map = new DataMap(); + map.defaultSetInfo(request, map); + return map; + } + private void defaultSetInfo(HttpServletRequest request, DataMap map){ + map.setString("contentType",request.getContentType()); + map.setString("contextPath",request.getContextPath()); + map.setString("uri",request.getRequestURI()); + map.setString("protocol",request.getProtocol()); + map.setString("ip", CmmUtil.getIpAddress(request)); + } + @SuppressWarnings("unchecked") + private static DataMap makePrameterMap(HttpServletRequest request){ + DataMap resultMap = new DataMap(); + Map maps = request.getParameterMap(); + Set keySet = maps.keySet(); + Iterator keys = keySet.iterator(); + while (keys.hasNext()) { + String key = keys.next(); + String[] value = maps.get(key); + if (value.length > 1){ + //for (String val : value) { + //resultMap.put(key, val); + //} + resultMap.put(key, value); + } else { + if(value[0] instanceof String) { + resultMap.put(key, value[0].toString()); + } else { + resultMap.put(key, value[0]); + } + } + } + resultMap.defaultSetInfo(request, resultMap); + return resultMap; + } + public static DataMap getParamMap(HttpServletRequest request){ + return makePrameterMap(request); + } + private static String nvlTrim(String obj) { + String result = ""; + if (obj != null) + result = obj.trim(); + return result; + } + public Object get(String key){ + Object o = null; + try { + o = super.get(key); + } catch (NullPointerException e) { + LOGGER.error("Error in get() key="+key, e); + } + return o; + } + public String [] getStringArray(String key) { + String [] r = null; + try { + if(super.get(key) instanceof String[]){ + r = (String [])super.get(key); + }else{ + r = new String[1]; + r[0]= getString(key); + } + } catch (NullPointerException e) { + LOGGER.error("Error in getStringArray() key="+key, e); + } + return r; + } + public String getString(String key) { + String r = ""; + try { + if(super.get(key) != null){ + r = super.get(key).toString(); + } + } catch (NullPointerException e) { + LOGGER.error("Error in getString() key="+key, e); + } + return r; + } + public int getInt(String key) { + return getInt(key, 0); + } + public int getInt(String key, int defaultInt) { + int result = 0; + String str = getString(key); + try { + if(StringUtils.isNotEmpty(str)) { + result = new Integer(str).intValue(); + } + } catch (NumberFormatException e) { + LOGGER.error("Error in getInt() key="+key+", getString(key)=="+getString(key), e); + result = defaultInt; + } + return result; + } + public long getLong(String key) { + return getLong(key, 0); + } + public long getLong(String key, long defaultLong) { + long result = 0; + String str = getString(key); + try { + if(StringUtils.isNotEmpty(str)) { + Double tmp = Double.parseDouble(str); + result = tmp.longValue(); + } + } catch (NumberFormatException e) { + LOGGER.error("Error in getLong() key="+key+", getString(key)=="+getString(key), e); + result = defaultLong; + } + return result; + } + public double getDouble(String key) { + return getDouble(key, 0); + } + public double getDouble(String key, double defaultDouble) { + double result = 0; + String str = getString(key); + try { + if(StringUtils.isNotEmpty(str)) { + result = new Long(str).doubleValue(); + } + } catch (NumberFormatException e) { + LOGGER.error("Error in getDouble() key="+key+", getString(key)="+getString(key), e); + result = defaultDouble; + } + return result; + } + public boolean getBoolean(String key){ + return getBoolean(key, false); + } + public boolean getBoolean(String key, boolean defaltValue){ + boolean result = defaltValue; + String strObj = nvlTrim(key); + if (strObj.length() > 0){ + result = strObj.toLowerCase().equals("true"); + } + return result; + } + public void setString(String key, String value){ + super.put(key, value); + } + public void setInt(String key, int value){ + super.put(key, value); + } + public void setInt(String key, String value){ + super.put(key, new Integer(value).intValue()); + } + public void setLong(String key, long value){ + super.put(key, value); + } + public void setLong(String key, String value){ + super.put(key, new Long(value).longValue()); + } + public void setDouble(String key, double value){ + super.put(key, value); + } + public void setDouble(String key, String value){ + super.put(key, new Double(value).doubleValue()); + } + public void setBoolean(String key, boolean value){ + super.put(key, new Boolean(value)); + } + public Object put(String key, Object value) { + return super.put(CamelUtil.convert2CamelCase((String) key), value); + } +} diff --git a/src/main/java/cmm/util/DateUtil.java b/src/main/java/cmm/util/DateUtil.java new file mode 100644 index 00000000..d3f7b7fe --- /dev/null +++ b/src/main/java/cmm/util/DateUtil.java @@ -0,0 +1,355 @@ +package cmm.util; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.sql.SQLException; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.TimeZone; + +import org.apache.commons.lang.time.DateFormatUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DateUtil extends DateUtils { + + private final static Logger LOGGER = LoggerFactory.getLogger(DateUtil.class); + + private static TimeZone mySTZ = (TimeZone) TimeZone.getTimeZone("JST"); + private static Locale lc = new Locale("Locale.KOREAN", "Locale.KOREA"); + public static String [] HOUR_CODE_ARRAY = {"08","09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"}; + public static String [] HOUR_CODE_ARRAY2 = {"01", "02", "03", "04", "05", "06", "07","08","09","10", "11", "12", "13", "14", "15","16", "17", "18", "19","20","21","22","23"}; + public static String [][] HOUR_CODE_ONE_ARRAY = {{"10","11"}, {"11", "12"},{"14", "15"}, {"15","16"}, {"16", "17"}}; + public static String [][] HOUR_CODE_TWO_ARRAY = {{"10","12"}, {"14", "16"},{"16", "17"}}; + public static String [][] HOUR_CODE_THREE_ARRAY = {{"","12",""}, {"14", "16"},{"16", "17"}}; + public static String [][] HOUR_CODE_DAY_ARRAY = {{"10","17"}}; + public static String [] MINUTE_CODE_ARRAY = {"00","10", "20", "30", "40", "50"}; + public static String [] MINUTE_CODE_ARRAY2 = {"00","30"}; + public static String PATTERN_DATETIME_TO_STRING = "yyyy-MM-dd HH:mm:ss"; + public static String PATTERN_DATE_TO_STRING = "yyyy-MM-dd"; + public static String DEFAULT_DATE_DELIMITER = "-"; + + public final static String DATE_FORMAT = "yyyy-MM-dd"; + public final static String DATE_DB_FORMAT = "yyyyMMdd"; + public final static String DATEYEAR_FORMAT = "yyyy"; + public final static String DATEMONTH_FORMAT = "yyyy-MM"; + public final static String DATEMONTH_FORMAT2 = "yyyyK-MMK"; + public final static String DATEMONTH_DB_FORMAT = "yyyyMM"; + public final static String DATEMONTH_ONLY_FORMAT = "MM"; + public final static String DATEHOUR_FORMAT = "yyyy-MM-dd HH:mm"; + public final static String DATEHOUR_FORMAT2 = "yyyy-MM-dd HH"; + public final static String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + public final static String DATETIME_STRING_FORMAT = "yyyyMMddHHmmss"; + + public final static String TIMEHOUR_FORMAT = "HH:mm"; + public final static String TIMEHOUR_FORMAT2 = "HHmm"; + public final static String TIMEHOUR_FORMAT3 = "HH"; + public final static String TIMESECOND_FORMAT = "HH:mm:ss"; + + public final static String DELIMITER_DATE = "-"; + public final static String DELIMITER_TIME = ":"; + public final static String DELIMITER_DATETIME = " "; + public static final String DELIMITER_PERIOD = "~"; + + + public static int getYearCurrent() { + Calendar today = Calendar.getInstance(mySTZ, lc); + int year = today.get(Calendar.YEAR); + + return year; + } + + public static int getMonthCurrent() { + Calendar today = Calendar.getInstance(mySTZ, lc); + int month = today.get(Calendar.MONTH) +1; + + return month; + } + + public static int getDayIntCurrent() { + Calendar today = Calendar.getInstance(mySTZ, lc); + int day = today.get(Calendar.DAY_OF_MONTH); + + return day; + } + + public static Date getDayCurrent() { + Calendar today = Calendar.getInstance(mySTZ, lc); + return new Date(today.getTimeInMillis()); + } + + @SuppressWarnings("static-access") + public static Date getAddDayCurrent(int period) { + Calendar today = new GregorianCalendar(mySTZ,lc); + Calendar resultDay = new GregorianCalendar (mySTZ,lc); + resultDay.add(today.DATE, period); + return new Date(resultDay.getTimeInMillis()); + } + + @SuppressWarnings("static-access") + public static Date getDayAddDay(Date date, int day) { + if (date == null) return null; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(cal.DATE, day); + return cal.getTime(); + } + + public static String getNowString(String dtFormat) { + Calendar today = Calendar.getInstance(mySTZ, lc); + String szResult = ""; + if (dtFormat != null) { + szResult = new SimpleDateFormat(dtFormat).format(today.getTime()); + } + return szResult; + } + + public static String getDateString(java.util.Date dt, SimpleDateFormat dtFormat) { + String szResult = ""; + if (dt != null && dtFormat != null) { + szResult = dtFormat.format(dt); + } + return szResult; + } + + public static String date2str(Date date, String format) { + if (date == null || StringUtils.isEmpty(format)) return null; + return new SimpleDateFormat(format).format(date); + } + + public static Date getFirstDayOfMonth(String strMonth) { + Calendar resultDay = new GregorianCalendar (mySTZ,lc); + + int intYear = Integer.parseInt(strMonth.substring(0,4)); + int intMonth = Integer.parseInt(strMonth.substring(4,6))-1; // -1을 해야 현재월 + int intDay = 1; + + resultDay.set(intYear, intMonth, intDay); + return new Date(resultDay.getTimeInMillis()); + } + + @SuppressWarnings("static-access") + public static Date getLastDayOfMonth(String strMonth) { + Calendar resultDay = Calendar.getInstance(mySTZ, lc); + int intYear = Integer.parseInt(strMonth.substring(0,4)); + int intMonth = Integer.parseInt(strMonth.substring(4,6))-1; // -1을 해야 현재월 + int intDay = 1; + resultDay.set(intYear, intMonth, intDay); + resultDay.add(resultDay.MONTH, +1); // 다음달 + resultDay.add(resultDay.DATE, -1); // 하루빼 + return new Date(resultDay.getTimeInMillis()); + } + + public static Calendar str2cal(String str, String format) { + Calendar cal = null; + if (StringUtils.isEmpty(str)) return cal; + + try { + DateFormat formatter = new SimpleDateFormat(format); + Date date = (Date)formatter.parse(str); + + cal = Calendar.getInstance(); + cal.setTime(date); + } catch (NullPointerException e) { + LOGGER.error("fail in str2cal() str="+str+", format="+format, e); + } catch (IllegalArgumentException e) { + LOGGER.error("fail in str2cal() str="+str+", format="+format, e); + } catch (Exception e) { + LOGGER.error("fail in str2cal() str="+str+", format="+format, e); + } + return cal; + } + + public static String getDateFormatString(String strDate) { + String formatDate = ""; + if(strDate == null) return formatDate; + strDate = CmmUtil.deleteChar(strDate); + + int strDateLen = strDate.length(); + if(strDateLen >= 4) { + formatDate = strDate.substring(0, 4); + } + if(strDateLen >= 6) { + formatDate += DEFAULT_DATE_DELIMITER + strDate.substring(4, 6) ; + } + if(strDateLen >= 8) { + formatDate += DEFAULT_DATE_DELIMITER + strDate.substring(6) ; + } + return formatDate; + } + + public static String getDateFormatString2(String strDate) { + String formatDate = ""; + if(strDate == null) return formatDate; + + strDate = CmmUtil.deleteChar(strDate); + + int strDateLen = strDate.length(); + + if(strDateLen > 8){ + strDate = strDate.substring(0, 8); + } + + if(strDateLen >= 4) { + formatDate = strDate.substring(0, 4); + } + if(strDateLen >= 6) { + formatDate += DEFAULT_DATE_DELIMITER + strDate.substring(4, 6) ; + } + if(strDateLen >= 8) { + formatDate += DEFAULT_DATE_DELIMITER + strDate.substring(6) ; + } + + return formatDate; + } + + @SuppressWarnings("static-access") + public static Date getDayPreMonth() throws IOException, InvocationTargetException, SQLException{ + Calendar today = new GregorianCalendar(mySTZ,lc); + Calendar resultDay = new GregorianCalendar (mySTZ,lc); + resultDay.add(today.MONTH, -1); + return new Date(resultDay.getTimeInMillis()); + } + + @SuppressWarnings("static-access") + public static Date getPreMonth(int period) throws IOException, InvocationTargetException, SQLException { + Calendar today = new GregorianCalendar(mySTZ,lc); + Calendar resultDay = new GregorianCalendar (mySTZ,lc); + resultDay.add(today.MONTH, period); + return new Date(resultDay.getTimeInMillis()); + } + + @SuppressWarnings("static-access") + public static Date getDayNextMonth() throws IOException, InvocationTargetException, SQLException { + Calendar today = new GregorianCalendar(mySTZ,lc); + Calendar resultDay = new GregorianCalendar (mySTZ,lc); + resultDay.add(today.MONTH, 1); + return new Date(resultDay.getTimeInMillis()); + } + + @SuppressWarnings("static-access") + public static Date getDayAddMonth(Calendar cal, int month) throws IOException, InvocationTargetException, SQLException { + if (cal == null) return null; + Calendar tmp = Calendar.getInstance(); + tmp.setTime(cal.getTime()); + tmp.add(cal.MONTH, month); + return tmp.getTime(); + } + + public static Date getDayAddMonth(int month) throws Exception { + Calendar today = new GregorianCalendar(mySTZ,lc); + return getDayAddMonth(today, month); + } + + public static Date getDayAddMonth(String str, String format, int month) throws IOException, InvocationTargetException, SQLException { + Calendar today = str2cal(str, format); + return getDayAddMonth(today, month); + } + + @SuppressWarnings("rawtypes") + public static Date getDate(Map map, String key) { + Date date = null; + if (CmmUtil.isEmpty(map, key)) return date; + + date = (Date)map.get(key); + return date; + } + + public static String[] getBetweenDays(String startD, String endD) throws ParseException, IOException, InvocationTargetException, SQLException { + List list = new ArrayList<>(); + + if( StringUtils.isBlank(startD) || StringUtils.isBlank(endD)){ + return null; + } + startD = startD.replaceAll("-", "").trim(); + endD = endD.replaceAll("-", "").trim(); + + if( startD.length() > 8 || endD.length() > 8) { + return null; + } + + String start = startD; + String end = endD; + + DateFormat inDf = new SimpleDateFormat("yyyyMMdd"); + + //getBetweenDays("20160930" , "20161003") = {"30,금,9월,20160930", "2,일,10월,20161002" , "1,토,10월,20161001" , "3,월,10월,20161003"} + //DateFormat outDf = new SimpleDateFormat("d,E,MMMM,yyyyMMdd", Locale.US); + + // getBetweenDays("20160930" , "20161003") = {"20160930", "20161002" , "20161001" , "20161003"} + DateFormat outDf = new SimpleDateFormat("yyyyMMdd", Locale.KOREA); + + Calendar startCal = Calendar.getInstance(); + Calendar endCal = Calendar.getInstance(); + startCal.setTime(inDf.parse(start)); + endCal.setTime(inDf.parse(end)); + endCal.add(Calendar.DAY_OF_MONTH, +1); + while (endCal.after(startCal)) { + String date = outDf.format(startCal.getTime()).toUpperCase(); + startCal.add(Calendar.DAY_OF_MONTH, +1); + list.add(date); + } + return list.toArray(new String[list.size()]); + } + + public static Date currentDate() + { + return new Date(); + } + + public static String currentDateHh() + { + Date dt = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("HH"); + return sdf.format(dt).toString(); + } + + public static String getAddYearFormat(int year, String format) + { + return dateToString(addYears(currentDate(), year), format); + } + + public static String getAddMonthFormat(int month, String format) + { + return dateToString(addMonths(currentDate(), month), format); + } + + public static String getAddDayFormat(int day, String format) + { + return dateToString(addDays(currentDate(), day), format); + } + public static String dateToString(Date date, String format) + { + if (date == null) { + return ""; + } + return DateFormatUtils.format(date, format); + } + + public static String getAddHourFormat(int h,String format) { + Calendar cal = Calendar.getInstance(mySTZ, lc); + cal.add(Calendar.HOUR, h); + return DateFormatUtils.format(cal.getTime(), format); + } + + public static Date stringToDate(String str, String format) throws Exception { + Date date = null; + if (StringUtils.isEmpty(str) || StringUtils.isEmpty(format)) return date; + + Calendar cal = str2cal(str, format); + if (cal == null) return date; + + date = cal.getTime(); + return date; + } +} diff --git a/src/main/java/cmm/util/ExcelUtil.java b/src/main/java/cmm/util/ExcelUtil.java new file mode 100644 index 00000000..863d4990 --- /dev/null +++ b/src/main/java/cmm/util/ExcelUtil.java @@ -0,0 +1,776 @@ +package cmm.util; + +import java.io.BufferedOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ExcelUtil { + + /** LOGGER */ + private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class); + + /** 다운로드 버퍼 크기 */ + // private static final int BUFFER_SIZE = 8192; // 8kb + + /** 문자 인코딩 */ + public final static String CHARSET = "utf-8"; + + public final static String CELL_STYLE_TITLE = "1"; + public final static String CELL_STYLE_TITLE2 = "11"; + public final static String CELL_STYLE_TITLE3 = "12"; + public final static String CELL_STYLE_HEADER = "2"; + + public final static String CELL_STYLE_DATA_DEFAULT_CENTER = "3"; + public final static String CELL_STYLE_DATA_DEFAULT_LEFT = "4"; + public final static String CELL_STYLE_DATA_DEFAULT_RIGHT = "5"; + public final static String CELL_STYLE_DATA_DATE_HYPHEN = "6"; + public final static String CELL_STYLE_DATA_DATE_SLASH = "7"; + public final static String CELL_STYLE_DATA_NUMBER = "8"; + public final static String CELL_STYLE_DATA_NUMBER_DECIMAL_1 = "9"; + public final static String CELL_STYLE_DATA_NUMBER_DECIMAL_2 = "10"; + + public final static int CELL_SIZE_DEFAULT = 4500; + + public final static String DATALIST_MAP = "map"; + public final static String DATALIST_VO = "vo"; + + + private String filePath; + private List outputColumns; + private int startRow; + + public static void xlsxFileDownByEgovMap( + HttpServletResponse response, + String fileName, + String sheetName, + String headerTitle, + String[] headerNames, + String[] dataKeys, + String[] dataType, + int[] cellSizes, + List dataList) throws Exception + { + // 워크북 생성 + XSSFWorkbook wb = new XSSFWorkbook(); + + // 시트 생성 + XSSFSheet sheet = null; + if (StringUtils.isNotEmpty(sheetName)) + { + sheet = wb.createSheet(sheetName); + } + else + { + sheet = wb.createSheet(); + } + + // 기본 Cell Style + Map styles = createStyles(wb); + + int headerNamesLength = 1; + if (headerNames != null && headerNames.length > 0) headerNamesLength = headerNames.length; + + // 셀크기지정 + if (cellSizes == null || cellSizes.length == 0) + { + for (int i = 0; i < headerNamesLength; i++) + { + sheet.setColumnWidth(i, CELL_SIZE_DEFAULT); + } + } + else + { + for (int i = 0; i < headerNamesLength; i++) + { + sheet.setColumnWidth(i, cellSizes[i] * 256); + } + } + + Row titleRow = sheet.createRow(0); + titleRow.setHeightInPoints(45); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellValue(headerTitle); + titleCell.setCellStyle(styles.get(CELL_STYLE_TITLE)); + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headerNamesLength-1)); + + Row headerRow = sheet.createRow(1); + headerRow.setHeightInPoints(40); + Cell headerCell; + for (int i = 0; i < headerNamesLength; i++) { + headerCell = headerRow.createCell(i); + headerCell.setCellValue(headerNames[i]); + headerCell.setCellStyle(styles.get(CELL_STYLE_HEADER)); + } + + Row dataRow = null; + + Cell dataCell = null; + + DataMap dataMap = null; + if (dataList != null && dataList.size() > 0) + { + for (int i = 0; i < dataList.size(); i++) + { + dataMap = (DataMap) dataList.get(i); + dataRow = sheet.createRow(i + 2); + dataCell = null; + if (dataKeys != null && dataKeys.length > 0) + { + for (int j = 0; j < dataKeys.length; j++) + { + Object dataObj = (Object)(dataMap.get(dataKeys[j])); + if (dataObj != null) { + String dataTypeNm = dataObj.getClass().getName(); + + dataCell = dataRow.createCell(j); + dataCell.setCellStyle(styles.get(dataType[j])); + if (dataTypeNm.contains("BigDecimal")) + { + dataCell.setCellValue(((BigDecimal)(dataMap.get(dataKeys[j]))).doubleValue()); + } + else if (dataTypeNm.contains("Integer")) + { + dataCell.setCellValue((Integer)(dataMap.get(dataKeys[j]))); + } + else if (dataTypeNm.contains("Long")) + { + dataCell.setCellValue((Long)(dataMap.get(dataKeys[j]))); + } + else if (dataTypeNm.contains("Date")) + { + dataCell.setCellValue((Date)(dataMap.get(dataKeys[j]))); + } + else + { + dataCell.setCellValue((String)(dataMap.get(dataKeys[j]))); + } + } + else + { + dataCell = dataRow.createCell(j); + dataCell.setCellStyle(styles.get(CELL_STYLE_DATA_DEFAULT_CENTER)); + dataCell.setCellValue(""); + } + + } + } + } + } + + BufferedOutputStream outs = null; + OutputStream out = null; + try + { + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8") + ";"); + out = response.getOutputStream(); + outs = new BufferedOutputStream(out); + wb.write(outs); + out.flush(); + } + catch (IOException e){ + LOGGER.error("fail in xlsxFileDownByEgovMap()", e); + } catch (Exception e){ + LOGGER.error("fail in xlsxFileDownByEgovMap()", e); + } finally { + if(out != null){ + out.close(); + } + if(outs != null){ + outs.close(); + } + } + } + + public static void xlsxFileDownByEgovMap2( + HttpServletResponse response, + String fileName, + String sheetName, + String headerTitle, + String[] headerNames1, + String[] headerNames2, + int [][] headerMerged, + String[] dataKeys, + String[] dataType, + int[] cellSizes, + List dataList) throws Exception + { + XSSFWorkbook wb = new XSSFWorkbook(); + + XSSFSheet sheet = null; + if (StringUtils.isNotEmpty(sheetName)) + { + sheet = wb.createSheet(sheetName); + } + else + { + sheet = wb.createSheet(); + } + + Map styles = createStyles(wb); + + int headerNamesLength = 1; + if (headerNames1 != null && headerNames1.length > 0) headerNamesLength = headerNames1.length; + + int headerMergedLength = 0; + if (headerMerged != null && headerMerged.length > 0) headerMergedLength = headerMerged.length; + + if (cellSizes == null || cellSizes.length == 0) + { + for (int i = 0; i < headerNamesLength; i++) + { + sheet.setColumnWidth(i, CELL_SIZE_DEFAULT); + } + } + else + { + for (int i = 0; i < headerNamesLength; i++) + { + sheet.setColumnWidth(i, cellSizes[i] * 256); + } + } + + Row titleRow = sheet.createRow(0); + titleRow.setHeightInPoints(45); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellValue(headerTitle); + titleCell.setCellStyle(styles.get(CELL_STYLE_TITLE)); + + + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headerNamesLength-1)); + + Row headerRow1 = sheet.createRow(1); + headerRow1.setHeightInPoints(40); + Cell headerCell1; + for (int i = 0; i < headerNamesLength; i++) + { + //if (AtEduStringUtils.isNotEmpty(headerNames1[i])) + //{ + headerCell1 = headerRow1.createCell(i); + headerCell1.setCellValue(headerNames1[i]); + headerCell1.setCellStyle(styles.get(CELL_STYLE_HEADER)); + //} + } + + Row headerRow2 = sheet.createRow(2); + headerRow2.setHeightInPoints(40); + Cell headerCell2; + for (int i = 0; i < headerNamesLength; i++) + { + //if (AtEduStringUtils.isNotEmpty(headerNames2[i])) + //{ + headerCell2 = headerRow2.createCell(i); + headerCell2.setCellValue(headerNames2[i]); + headerCell2.setCellStyle(styles.get(CELL_STYLE_HEADER)); + //} + } + + for (int i = 0; i < headerMergedLength; i++) + { + sheet.addMergedRegion(new CellRangeAddress(headerMerged[i][0], headerMerged[i][1], headerMerged[i][2], headerMerged[i][3])); + } + + Row dataRow = null; + + Cell dataCell = null; + + DataMap dataMap = null; + if (dataList != null && dataList.size() > 0) + { + for (int i = 0; i < dataList.size(); i++) + { + dataMap = (DataMap) dataList.get(i); + dataRow = sheet.createRow(i + 3); + dataCell = null; + if (dataKeys != null && dataKeys.length > 0) + { + for (int j = 0; j < dataKeys.length; j++) + { + Object dataObj = (Object)(dataMap.get(dataKeys[j])); + if (dataObj != null) { + String dataTypeNm = dataObj.getClass().getName(); + + dataCell = dataRow.createCell(j); + dataCell.setCellStyle(styles.get(dataType[j])); + if (dataTypeNm.contains("BigDecimal")) + { + dataCell.setCellValue(((BigDecimal)(dataMap.get(dataKeys[j]))).doubleValue()); + } + else if (dataTypeNm.contains("Integer")) + { + dataCell.setCellValue((Integer)(dataMap.get(dataKeys[j]))); + } + else if (dataTypeNm.contains("Long")) + { + dataCell.setCellValue((Long)(dataMap.get(dataKeys[j]))); + } + else if (dataTypeNm.contains("Date")) + { + dataCell.setCellValue((Date)(dataMap.get(dataKeys[j]))); + } + else + { + dataCell.setCellValue((String)(dataMap.get(dataKeys[j]))); + } + } + else + { + dataCell = dataRow.createCell(j); + dataCell.setCellStyle(styles.get(CELL_STYLE_DATA_DEFAULT_CENTER)); + dataCell.setCellValue(""); + } + + } + } + } + } + + BufferedOutputStream outs = null; + try + { + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8") + ";"); + outs = new BufferedOutputStream(response.getOutputStream()); + wb.write(outs); + outs.close(); + } + catch (IOException e){ + LOGGER.error("fail in xlsxFileDownByEgovMap2()", e); + } catch (Exception e){ + LOGGER.error("fail in xlsxFileDownByEgovMap2()", e); + } + + response.getOutputStream().flush(); + response.getOutputStream().close(); + } + + /** + * Create a library of cell styles + */ + public static Map createStyles(Workbook wb) + { + Map styles = new HashMap(); + CellStyle style; + + // DDDDDDDDDDDDDDDDDDDDDD 2021.08.13 임시 막음 버전차이로 인한 상수값 부재 + /* + Font titleFont = wb.createFont(); + titleFont.setFontHeightInPoints((short) 18); + titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFont(titleFont); + styles.put(CELL_STYLE_TITLE, style); + + Font title2Font = wb.createFont(); + title2Font.setFontHeightInPoints((short) 13); + title2Font.setBoldweight(Font.BOLDWEIGHT_BOLD); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFont(title2Font); + styles.put(CELL_STYLE_TITLE2, style); + + Font title3Font = wb.createFont(); + title3Font.setFontHeightInPoints((short) 10); + title3Font.setBoldweight(Font.BOLDWEIGHT_BOLD); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFont(title3Font); + styles.put(CELL_STYLE_TITLE3, style); + + Font headerFont = wb.createFont(); + headerFont.setFontHeightInPoints((short) 11); + headerFont.setColor(IndexedColors.WHITE.getIndex()); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setFont(headerFont); + style.setWrapText(true); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_HEADER, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setWrapText(true); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_DEFAULT_CENTER, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_RIGHT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setWrapText(true); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_DEFAULT_RIGHT, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setWrapText(true); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_DEFAULT_LEFT, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setDataFormat(wb.createDataFormat().getFormat("yyyy-mm-dd")); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_DATE_HYPHEN, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setDataFormat(wb.createDataFormat().getFormat("yyyy/mm/dd")); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_DATE_SLASH, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_RIGHT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setDataFormat(wb.createDataFormat().getFormat("#,##0")); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_NUMBER, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_RIGHT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setDataFormat(wb.createDataFormat().getFormat("#,##0.0")); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_NUMBER_DECIMAL_1, style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_RIGHT); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setDataFormat(wb.createDataFormat().getFormat("#,##0.00")); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderTop(CellStyle.BORDER_THIN); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + styles.put(CELL_STYLE_DATA_NUMBER_DECIMAL_2, style); + */ + + return styles; + } + + + //추가 + public static Workbook getWorkbook(String filePath) { + + /* + * FileInputStream은 파일의 경로에 있는 파일을 + * 읽어서 Byte로 가져온다. + * + * 파일이 존재하지 않는다면은 + * RuntimeException이 발생된다. + */ + FileInputStream fis = null; + try { + fis = new FileInputStream(filePath); + } catch (FileNotFoundException e) { + throw new RuntimeException(e.getMessage(), e); + } + + Workbook wb = null; + + /* + * 파일의 확장자를 체크해서 .XLS 라면 HSSFWorkbook에 + * .XLSX라면 XSSFWorkbook에 각각 초기화 한다. + */ + if(filePath.toUpperCase().endsWith(".XLS")) { + try { + wb = new HSSFWorkbook(fis); + } catch (IOException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + else if(filePath.toUpperCase().endsWith(".XLSX")) { + try { + wb = new XSSFWorkbook(fis); + } catch (IOException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + return wb; + } + + + + + public static String getName(Cell cell, int cellIndex) { + int cellNum = 0; + if(cell != null) { + cellNum = cell.getColumnIndex(); + } + else { + cellNum = cellIndex; + } + + return CellReference.convertNumToColString(cellNum); + } + + public static String getValue(Cell cell) { + String value = ""; + + if(cell == null) { + value = ""; + } + else { + // DDDDDDDDDDDDDDDDDDDDDD 2021.08.13 임시 막음 버전차이로 인한 상수값 부재 + /* + if( cell.getCellType() == Cell.CELL_TYPE_FORMULA ) { + value = cell.getCellFormula(); + } + else if( cell.getCellType() == Cell.CELL_TYPE_NUMERIC ) { + value = cell.getNumericCellValue() + ""; + } + else if( cell.getCellType() == Cell.CELL_TYPE_STRING ) { + value = cell.getStringCellValue(); + } + else if( cell.getCellType() == Cell.CELL_TYPE_BOOLEAN ) { + value = cell.getBooleanCellValue() + ""; + } + else if( cell.getCellType() == Cell.CELL_TYPE_ERROR ) { + value = cell.getErrorCellValue() + ""; + } + else if( cell.getCellType() == Cell.CELL_TYPE_BLANK ) { + value = ""; + } + else { + value = cell.getStringCellValue(); + } + */ + } + + return value; + } + + public static List> read(ExcelUtil excelReadOption) { + //엑셀 파일 자체 + //엑셀파일을 읽어 들인다. + //FileType.getWorkbook() <-- 파일의 확장자에 따라서 적절하게 가져온다. + Workbook wb = getWorkbook(excelReadOption.getFilePath()); + /** + * 엑셀 파일에서 첫번째 시트를 가지고 온다. + */ + Sheet sheet = wb.getSheetAt(0); + + //System.out.println("Sheet 이름: "+ wb.getSheetName(0)); + //System.out.println("데이터가 있는 Sheet의 수 :" + wb.getNumberOfSheets()); + /** + * sheet에서 유효한(데이터가 있는) 행의 개수를 가져온다. + */ + int numOfRows = sheet.getPhysicalNumberOfRows(); + int numOfCells = 0; + + Row row = null; + Cell cell = null; + + String cellName = ""; + /** + * 각 row마다의 값을 저장할 맵 객체 + * 저장되는 형식은 다음과 같다. + * put("A", "이름"); + * put("B", "게임명"); + */ + Map map = null; + /* + * 각 Row를 리스트에 담는다. + * 하나의 Row를 하나의 Map으로 표현되며 + * List에는 모든 Row가 포함될 것이다. + */ + List> result = new ArrayList>(); + /** + * 각 Row만큼 반복을 한다. + */ + for(int rowIndex = excelReadOption.getStartRow() - 1; rowIndex < numOfRows; rowIndex++) { + /* + * 워크북에서 가져온 시트에서 rowIndex에 해당하는 Row를 가져온다. + * 하나의 Row는 여러개의 Cell을 가진다. + */ + row = sheet.getRow(rowIndex); + + if(row != null) { + /* + * 가져온 Row의 Cell의 개수를 구한다. + */ + numOfCells = row.getPhysicalNumberOfCells(); + /* + * 데이터를 담을 맵 객체 초기화 + */ + map = new HashMap(); + /* + * cell의 수 만큼 반복한다. + */ + for(int cellIndex = 0; cellIndex < numOfCells; cellIndex++) { + /* + * Row에서 CellIndex에 해당하는 Cell을 가져온다. + */ + cell = row.getCell(cellIndex); + /* + * 현재 Cell의 이름을 가져온다 + * 이름의 예 : A,B,C,D,...... + */ + cellName = getName(cell, cellIndex); + /* + * 추출 대상 컬럼인지 확인한다 + * 추출 대상 컬럼이 아니라면, + * for로 다시 올라간다 + */ + if( !excelReadOption.getOutputColumns().contains(cellName) ) { + continue; + } + /* + * map객체의 Cell의 이름을 키(Key)로 데이터를 담는다. + */ + map.put(cellName, getValue(cell)); + } + /* + * 만들어진 Map객체를 List로 넣는다. + */ + result.add(map); + + } + + } + + return result; + + } + + + + public String getFilePath() { + return filePath; + } + public void setFilePath(String filePath) { + this.filePath = filePath; + } + public List getOutputColumns() { + + List temp = new ArrayList(); + temp.addAll(outputColumns); + + return temp; + } + public void setOutputColumns(List outputColumns) { + + List temp = new ArrayList(); + temp.addAll(outputColumns); + + this.outputColumns = temp; + } + + public void setOutputColumns(String ... outputColumns) { + + if(this.outputColumns == null) { + this.outputColumns = new ArrayList(); + } + + for(String ouputColumn : outputColumns) { + this.outputColumns.add(ouputColumn); + } + } + + public int getStartRow() { + return startRow; + } + public void setStartRow(int startRow) { + this.startRow = startRow; + } + + + +} diff --git a/src/main/java/cmm/util/FileUtil.java b/src/main/java/cmm/util/FileUtil.java new file mode 100644 index 00000000..b85d8dd6 --- /dev/null +++ b/src/main/java/cmm/util/FileUtil.java @@ -0,0 +1,193 @@ +package cmm.util; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.Errors; + +import egovframework.com.cmm.service.FileVO; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.idgnr.impl.Base64; + +public class FileUtil { + + /** LOGGER */ + private final static Logger LOGGER = LoggerFactory.getLogger(FileUtil.class); + + /** 파일업로드시 사용 */ + public static final String ORDER_FLAG_INSERT = "C"; + public static final String ORDER_FLAG_RETRIEVE = "R"; + public static final String ORDER_FLAG_UPDATE = "U"; + public static final String ORDER_FLAG_DELETE = "D"; + + public static String getFileExtension(String fileName) { + String ext = ""; + if (StringUtils.isNotEmpty(fileName) && fileName.indexOf(".") >= 0) { + ext = fileName.substring(fileName.lastIndexOf(".")+1, fileName.length()); + } + return ext; + } + @SuppressWarnings("unused") + public static String getImageFileStream(FileVO fvo) throws IOException, InvocationTargetException, SQLException { + byte[] result = null; + + File file = null; + FileInputStream fis = null; + + BufferedInputStream in = null; + ByteArrayOutputStream bStream = null; + + try { + file = new File(fvo.getFileStreCours(), fvo.getStreFileNm()); + fis = new FileInputStream(file); + + in = new BufferedInputStream(fis); + bStream = new ByteArrayOutputStream(); + + Base64.encode(bStream.toByteArray()); + 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("getImageFileStream() Image fileType is null... fvo={}", fvo); + } + result = bStream.toByteArray(); + + } catch (FileNotFoundException e) { + LOGGER.error("fail in getImageFileStream() message="+e+", fvo="+fvo); + + } catch (IOException e) { + LOGGER.error("fail in getImageFileStream() message="+e+", fvo="+fvo); + + } catch (Exception e) { + LOGGER.error("fail in getImageFileStream() message="+e+", fvo="+fvo); + + } finally { + if (bStream != null) { + try { + bStream.close(); + } catch (IOException ignore) { + LOGGER.error("IGNORED: {}", ignore); + } + } + if (in != null) { + try { + in.close(); + } catch (IOException ignore) { + LOGGER.error("IGNORED: {}", ignore); + } + } + if (fis != null) { + try { + fis.close(); + } catch (IOException ignore) { + LOGGER.error("IGNORED: {}", ignore); + } + } + } + String encodedResult = result == null ? "" : Base64.encode(result); + return encodedResult; + } + + public static int validateFileSize(FileVO fileVO, BigDecimal maxFileSize, String fieldName, Errors errors) throws EgovBizException { + int errorCnt = 0; + BigDecimal fileSize = null; + String fileMg = fileVO.getFileMg(); // 파일크기 + if (StringUtils.isNotEmpty(fileMg)) fileSize = new BigDecimal(fileMg); + if (fileSize == null) return errorCnt; // 더 이상 진행하지 않음 + + BigDecimal maxSize = maxFileSize.multiply(new BigDecimal(1024*1024)); // byte 단위 + if (fileSize.compareTo(maxSize) > 0) { +// throw new EgovBizException("파일 업로드 용량을 초과하였습니다... [허용size:"+maxSize+" byte] fileVO="+fileVO); + errors.rejectValue(fieldName, "", "파일 업로드 용량을 초과하였습니다. [허용size:"+maxFileSize+" Mb]"); + errorCnt++; + } + + if (errorCnt > 0) { + LOGGER.debug("validateFileSize() errorCnt={}", errorCnt+", fileSize="+fileSize+", errors="+errors); + } + return errorCnt; + } + + public static int validateFileExt(FileVO fileVO, List extList, String fieldName, Errors errors) throws EgovBizException { + int errorCnt = 0; + String fileExt = fileVO.getFileExtsn(); + if (StringUtils.isEmpty(fileExt)) { + if (StringUtils.isNotEmpty(fileVO.getOrignlFileNm())) { + String tmp = FileUtil.getFileExtension(fileVO.getOrignlFileNm()); + if (!StringUtils.isEmpty(tmp)) { + fileExt = tmp; + } else { +// throw new EgovBizException("파일 확장자를 확인할 수 없습니다... fileVO="+fileVO); + errors.rejectValue(fieldName, "", "파일 확장자를 확인할 수 없습니다. [파일명:"+fileVO.getOrignlFileNm()+"]"); + errorCnt++; + } + } else { +// throw new EgovBizException("파일 확장자를 확인할 수 없습니다... fileVO="+fileVO); + errors.rejectValue(fieldName, "", "파일 확장자를 확인할 수 없습니다. [파일명:"+fileVO.getOrignlFileNm()+"]"); + errorCnt++; + } + } + + if (errorCnt == 0) { + if (StringUtils.isEmpty(fileExt) || !extList.contains(fileExt.toLowerCase())) { // 소문자로 비교 +// LOGGER.debug("validateFileExt() 소문자비교... errorCnt={}", errorCnt+", fileExt="+fileExt+", fieldName="+fieldName+", errors="+errors); +// throw new EgovBizException("허용되지 않는 파일 확장자 입니다... fileVO="+fileVO); + errors.rejectValue(fieldName, "", "허용되지 않는 파일 확장자 입니다. [파일명:"+fileVO.getOrignlFileNm()+"]"); + errorCnt++; + } + } + + if (errorCnt > 0) { + LOGGER.debug("validateFileExt() errorCnt={}", errorCnt+", fileExt="+fileExt+", errors="+errors); + } + return errorCnt; + } + public static void makeDir(String dirPath) { + if (StringUtils.isEmpty(dirPath)) { + LOGGER.warn("makeDir() dirPath is null!!!"); + return; + } + + File file = new File(dirPath); + //file.setExecutable(false,true); + //file.setReadable(true); + //file.setWritable(false, true); + + if (!file.isDirectory()) { + boolean flag = file.mkdirs(); + if (!flag) { + LOGGER.error("fail in directory creation... file="+file); +// throw new IOException("fail in directory creation..."); + } + } + } + + public static boolean isExistFile(String filePath) { + File file = new File(filePath); + return file.exists(); + } + +} diff --git a/src/main/java/cmm/util/MailUtil.java b/src/main/java/cmm/util/MailUtil.java new file mode 100644 index 00000000..358e3150 --- /dev/null +++ b/src/main/java/cmm/util/MailUtil.java @@ -0,0 +1,156 @@ +package cmm.util; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.util.Properties; + +import javax.mail.Authenticator; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import egovframework.com.cmm.service.EgovProperties; + +public class MailUtil { + + private static final Log log = LogFactory.getLog(MailUtil.class); + + public static void sendMail(String toAddr, String toName, String msgSubj, String msgText) { + try{ + Properties mailProps = new Properties(); + + mailProps.put("mail.smtp.starttls.enable", "true"); + mailProps.put("mail.smtp.host", EgovProperties.getProperty("Globals.mail.smtp.host")); + mailProps.put("mail.smtp.auth", "true"); + mailProps.put("mail.smtp.port", EgovProperties.getProperty("Globals.mail.smtp.port")); + + + Authenticator auth = new MyAuthentication(); + //session 생성 및 MimeMessage생성 + Session _session = Session.getDefaultInstance(mailProps, auth); + + String fromAddr = EgovProperties.getProperty("Globals.mail.smtp.user"); + String fromName = EgovProperties.getProperty("Globals.mail.smtp.username"); + + MimeMessage msg = new MimeMessage(_session); + msg.setFrom(new InternetAddress(fromAddr, fromName)); + InternetAddress[] address = {new InternetAddress(fromAddr, toName)}; + msg.setRecipients(Message.RecipientType.TO, address); + + /*참조인원*/ + InternetAddress[] addresscc = {new InternetAddress(EgovProperties.getProperty("Globals.mail.cc.user01")), + new InternetAddress(EgovProperties.getProperty("Globals.mail.cc.user02")), + new InternetAddress(EgovProperties.getProperty("Globals.mail.cc.user03")), + new InternetAddress(EgovProperties.getProperty("Globals.mail.cc.user04")) + }; + msg.setRecipients(Message.RecipientType.CC, addresscc); + + msgSubj = "Q&A가 등록되었습니다."; + msg.setSubject(msgSubj); + msg.setSentDate(new Date()); + msgText = "Q&A가 등록되었습니다. 관리자사이트에서 Q&A를 확인하시기 바랍니다."; + // 이메일 제목 + msg.setSubject(msgSubj, "UTF-8"); + // 이메일 내용 + msg.setText(msgText, "UTF-8"); + // 이메일 헤더 + msg.setHeader("content-Type", "text/html"); + //메일보내기 + Transport.send(msg); + + }catch(MessagingException e){ + log.error("Error in sendMail()", e); + }catch (UnsupportedEncodingException e) { + log.error("Error in sendMail()", e); + } + } + public static void sendMailHtml(HttpServletRequest request, String toAddr, String toName, String msgSubj, String msgText) { + try{ + String serverPath = request.getContextPath(); // 서버패스 + String htmlFilePath = EgovProperties.getProperty("Globals.mail.html.path"); + String htmlFileName = EgovProperties.getProperty("Globals.mail.html.file"); + + Properties mailProps = new Properties(); + + + mailProps.put("mail.smtp.host", EgovProperties.getProperty("Globals.mail.smtp.host")); + Session _session = Session.getInstance(mailProps, null); + + String fromAddr = EgovProperties.getProperty("Globals.mail.smtp.user"); + String fromName = EgovProperties.getProperty("Globals.mail.smtp.username"); + + MimeMessage msg = new MimeMessage(_session); + msg.setFrom(new InternetAddress(fromAddr, fromName)); + InternetAddress[] address = { + new InternetAddress(toAddr, toName) + }; + + msg.setRecipients(Message.RecipientType.TO, address); + + msg.setSubject(msgSubj); + + msg.setSentDate(new Date()); + + MimeMultipart cont = new MimeMultipart(); + MimeBodyPart txt = new MimeBodyPart(); + + txt.setText(msgText, "EUC-KR"); //"ks_c_5601-1987" + txt.setHeader("Content-Type", "text/html; charset=\"EUC-KR\""); //charset=\"ks_c_5601-1987\"" + txt.setHeader("Content-Transfer-Encoding", "base64"); + + /// html 값을 리플레이스. + String html = getMailBodyHtml(htmlFilePath+htmlFileName); + html.replace("$title$", msgSubj); + + cont.addBodyPart(txt); + msg.setText(html); + msg.setContent(cont); + msg.saveChanges(); + + Transport.send(msg); + + }catch(MessagingException e){ + log.error("Error in sendMail()", e); + }catch (UnsupportedEncodingException e) { + log.error("Error in sendMail()", e); + } + } + public static String getMailBodyHtml(String pathFile){ + String html = ""; + if(StringUtils.isBlank(pathFile) ){ + return html; + }else{ + BufferedReader br = null ; + try { + br = new BufferedReader(new FileReader(pathFile)); + while(true) { + String temp = br.readLine(); + if (temp==null) break; + html += temp; + } + br.close(); + } catch (Exception e) { + }finally { + try { + br.close(); + } catch (IOException e) { + } + } + } + return html; + } + +} diff --git a/src/main/java/cmm/util/MessageAlertUtil.java b/src/main/java/cmm/util/MessageAlertUtil.java new file mode 100644 index 00000000..92e9a8c0 --- /dev/null +++ b/src/main/java/cmm/util/MessageAlertUtil.java @@ -0,0 +1,701 @@ +package cmm.util; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MessageAlertUtil +{ + private static final Logger LOGGER = LoggerFactory.getLogger(MessageAlertUtil.class); + + public static void alert(String msg, HttpServletResponse response){ + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alert()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alert()", e); + } + finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertBack(String msg, HttpServletResponse response) + { + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try{ + out = response.getWriter(); + out.println(""); + } + catch (IOException ex){ + LOGGER.error("Error in alertBack()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertBack()", e); + }finally{ + if(out != null){ + out.close(); + } + } + } + + public static void alertBackExceptionMessage(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertBackExceptionMessage()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertBackExceptionMessage()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertBack(String msg, Object[] args, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertBack()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertBack()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertClose(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertClose()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertClose()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertCloseOpenerReload(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertCloseOpenerReload()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertCloseOpenerReload()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertRedirect(String msg, String url, HttpServletResponse response) + { + response.setHeader("Cache-Control", "no-store"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertRedirect()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertRedirect()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertRedirect(String msg, String url, String hiddens, HttpServletResponse response) + { + response.setHeader("Cache-Control", "no-store"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + StringBuffer sb = new StringBuffer(); + + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append("
"); + sb.append(hiddens); + sb.append("
"); + sb.append(""); + + out.println(sb.toString()); + + } + catch (IOException ex) + { + LOGGER.error("Error in alertRedirect()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertRedirect()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertReload(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(""); + out.println(""); + out.close(); + + } + catch (IOException ex) + { + LOGGER.error("Error in alertReload()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertReload()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertOpenerReload(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(""); + out.println(""); + out.close(); + + } + catch (IOException ex) + { + LOGGER.error("Error in alertOpenerReload()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertOpenerReload()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertCloseOpenerClose(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(""); + out.println(""); + out.close(); + + } + catch (IOException ex) + { + LOGGER.error("Error in alertCloseOpenerClose()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertCloseOpenerClose()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void println(Object obj, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + out.println(obj); + } + catch (IOException ex) + { + LOGGER.error("Error in println()", ex); + }catch (Exception e) + { + LOGGER.error("Error in println()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void println(String msg, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(msg); + } + catch (IOException ex) + { + LOGGER.error("Error in println()", ex); + }catch (Exception e) + { + LOGGER.error("Error in println()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void script(String script, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in script()", ex); + }catch (Exception e) + { + LOGGER.error("Error in script()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertRedirectTop(String msg, String url, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertRedirectTop()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertRedirectTop()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertRedirectClose(String msg, String url, HttpServletResponse response) + { + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + + /*out.println(""); + out.println("");*/ + } + catch (IOException ex) + { + LOGGER.error("Error in alertRedirectClose()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertRedirectClose()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertRedirect(String msg, String url, HttpServletRequest request, HttpServletResponse response) + { + response.setHeader("Cache-Control", "no-cache"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + + out.println(""); + out.println(""); + out.println(""); + out.println(""); + out.println(""); + } + catch (IOException ex) + { + LOGGER.error("Error in alertRedirect()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertRedirect()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertRedirect(String msg, String url, String hiddens, HttpServletRequest request, HttpServletResponse response) + { + response.setHeader("Cache-Control", "no-cache"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + StringBuffer sb = new StringBuffer(); + + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append("
"); + sb.append(hiddens); + sb.append("
"); + sb.append(""); + + out.println(sb.toString()); + + } + catch (IOException ex) + { + LOGGER.error("Error in alertRedirect()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertRedirect()", e); + }finally + { + if(out != null){ + out.close(); + } + } + } + + public static void alertDirectMsgRedirect(String msg, String url, String hiddens, HttpServletRequest request, HttpServletResponse response) + { + response.setHeader("Cache-Control", "no-cache"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Expires", "0"); + + response.setContentType("text/html; charset=utf-8"); + PrintWriter out = null; + try + { + out = response.getWriter(); + StringBuffer sb = new StringBuffer(); + + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append("
"); + sb.append(hiddens); + sb.append("
"); + sb.append(""); + + out.println(sb.toString()); + + } + catch (IOException ex) + { + LOGGER.error("Error in alertDirectMsgRedirect()", ex); + }catch (Exception e) + { + LOGGER.error("Error in alertDirectMsgRedirect()", e); + }finally + { + if(out != null){ + out.close(); + } + } + }} diff --git a/src/main/java/cmm/util/MyAuthentication.java b/src/main/java/cmm/util/MyAuthentication.java new file mode 100644 index 00000000..374ab182 --- /dev/null +++ b/src/main/java/cmm/util/MyAuthentication.java @@ -0,0 +1,20 @@ +package cmm.util; + +import javax.mail.Authenticator; +import javax.mail.PasswordAuthentication; + +import egovframework.com.cmm.service.EgovProperties; + +public class MyAuthentication extends Authenticator { + PasswordAuthentication pa; + public MyAuthentication(){ + + String id = EgovProperties.getProperty("Globals.mail.smtp.user"); + String pw = EgovProperties.getProperty("Globals.mail.smtp.pass"); + pa = new PasswordAuthentication(id, pw); + } + // 시스템에서 사용하는 인증정보 + public PasswordAuthentication getPasswordAuthentication() { + return pa; + } +} diff --git a/src/main/java/cmm/util/cxRovecat.java b/src/main/java/cmm/util/cxRovecat.java new file mode 100644 index 00000000..8c814ca0 --- /dev/null +++ b/src/main/java/cmm/util/cxRovecat.java @@ -0,0 +1,245 @@ +//ROVECAT-PROTOCOL : PACKET SAMPLE ///////////////////////////////////////////// +//Client -> Server ............................... +// ENQUE/NENCODER 192.168.7.104:8087/192.168.7.109 ROVECAT/1.0 +// Content-Length: 105 +// +// Source-Media: /mkv/120414_YCH_02.avi +// Export-Path: /mp4_files/ +// Is-File-Path: false +// Is-Overwrite: true + +//Server -> Client ............................... +// ROVECAT/1.0 200 OK +// Date: Wed, 4 Jul 2012 08:44:14 GMT +// Server: NACLIPS.encoder/1.1.0.00 (NEXPOLY Technology Inc.) +// Content-Length: 80 +// +// Result: 1000 OK_ENC_ACCEPTED +// Connection-Sequence: 421 +// Encoding-Sequence: 280 +// ROVECAT-PROTOCOL : PACKET SAMPLE ///////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////// +package cmm.util; + +import java.net.*; +import java.io.*; +import java.util.Arrays; + +public class cxRovecat { + private static final String LOG_PATH = "/usr/local/tomcat/webapps/ROOT/log/iface_rovecat.log"; + private String ms_serv_name = "RVCP_SERVER"; + private String ms_params = ""; + + private String ms_ret_code = ""; + + private String ms_ret_date = ""; + private String ms_ret_server = ""; + private int mi_ret_length = 0; + + private String ms_body = ""; + private String ms_error = ""; + private Boolean mb_readblock = false; + private String ms_charset = "UTF-8"; + + private BufferedInputStream mx_bis = null; + + ////////////////////////////////////////////////////////////// + public cxRovecat(){}; + ////////////////////////////////////////////////////////////// + public cxRovecat(String s_serv_name){ + if(s_serv_name != null && s_serv_name != "") ms_serv_name = s_serv_name; + }; + + //////////////////////////////////// + public int iGetFromServer(String s_server,int i_port,String s_client,String s_div,int i_conn_timeout, int i_read_timeout){ + Socket x_conn = null; + + //OutputStream x_os; + PrintWriter x_pw = null; + String s_request = ""; + + s_request += s_div +"/"+ ms_serv_name +" "+ s_server +":"+ Integer.toString(i_port) +"/"+ s_client + " ROVECAT/1.0\r\n"; + s_request += "Content-Length: "+Integer.toString(ms_params.length())+"\r\n"; + s_request += "\r\n"; + s_request += ms_params; + + //fiLog(s_request); + + try{ + SocketAddress socketAddress = new InetSocketAddress(s_server,i_port); + x_conn = new Socket(); + x_conn.connect(socketAddress, i_conn_timeout); //connection timeout - ref: jsp_oracle.txt + x_conn.setSoTimeout(i_read_timeout); //communication timeout - ref: jsp_oracle.txt + + //x_os = x_conn.getOutputStream(); + + mx_bis = new BufferedInputStream(x_conn.getInputStream()); + x_pw = new PrintWriter(x_conn.getOutputStream()); + + x_pw.print(s_request); + x_pw.flush(); + + ms_body = ""; + + String s_line; + boolean b_body = false; + + clearRet(); + + Integer i_pt = 0; + Integer i_read = 0; + + byte[] bs_buf = new byte[2048]; + //String s_num = new String(bs_buf); + while ((i_read = iGetOnLine(bs_buf)) >= 0){ + s_line = new String(bs_buf).trim(); + if(i_read == 0){ + if(mi_ret_length <= 0) break; + if(mb_readblock){ + byte[] bs_body = new byte[mi_ret_length]; + int i_bytes = mx_bis.read(bs_body); + if(i_bytes > 0){ + String s_ret = new String(bs_body, ms_charset); + ms_body += s_ret; + } + break; + } + b_body = true; + }else{ + if(b_body){ + ms_body += s_line+"\r\n"; + }else{ + String s_data = ""; + if ((s_data = getPropertyOnLine(s_line,"ROVECAT/1.0" ))!="" ) ms_ret_code = s_data; + else if((s_data = getPropertyOnLine(s_line,"Date:" ))!="" ) ms_ret_date = s_data; + else if((s_data = getPropertyOnLine(s_line,"Server:" ))!="" ) ms_ret_server = s_data; + else if((s_data = getPropertyOnLine(s_line,"Content-Length:"))!="" ){ + mi_ret_length = Integer.parseInt(s_data); + } + } + }//if + if(mi_ret_length>0 && ms_body.length() >= mi_ret_length){ + break; + } + }//while + + mi_ret_length = ms_body.length(); + } + catch (IOException e){ + ms_error = "connection error : "+e.getMessage(); + mi_ret_length = -1; + } + finally{ + try{ + if(mx_bis!= null) mx_bis.close(); + if(x_pw != null) x_pw .close(); + } + catch(IOException e1) {} + + try{ + if(x_conn!= null && !x_conn.isClosed()) x_conn.close(); + } + catch(IOException e1) {} + } + + return mi_ret_length; + } + + //////////////////////////////////// + public String getLastError() { return ms_error; } + public String getBody() { return ms_body; } + public String getParams() { return ms_params; } + public String getRetCode() { return ms_ret_code; } + public String getRetDate() { return ms_ret_date; } + public String getRetServer() { return ms_ret_server; } + public int getContentLength(){ return mi_ret_length; } + + public void setDataChareset(String cs_charset){ms_charset = cs_charset;} + public void setReadBlock(Boolean b_block){ mb_readblock = b_block;} + public void clearRet() { ms_ret_code = ms_ret_date = ms_ret_server = ""; mi_ret_length = 0;} + public void clearParams() { ms_params = ""; } + public void addParams(String s_param_name, String s_data){ ms_params += ((s_param_name==null)?"":(s_param_name+": "))+s_data+"\r\n";} + public String getProperty(String s_porperty_name){ + if(s_porperty_name == null || s_porperty_name.length() <= 0) return ""; + if(ms_body.length() <= 0) return ""; + + int i_pt = ms_body.indexOf(s_porperty_name); + if(i_pt < 0) return ""; + + String s_data = ""; + try{ + String s_find = ms_body.substring(i_pt+s_porperty_name.length()+1); + if(s_find.length() > 0){ + + i_pt = s_find.indexOf("\r\n"); + if(i_pt >= 0) s_data = s_find.substring(0,i_pt); + else s_data = s_find; + + } + }catch(Exception e){} + + return s_data.trim(); + } + + //////////////////////////////////// + private String getPropertyOnLine(String s_line, String s_porperty_name){ + if(s_line == null || s_line.length() <= 0) return ""; + if(s_porperty_name == null || s_porperty_name.length() <= 0) return ""; + + String s_data = ""; + int i_pt = s_line.indexOf(s_porperty_name); + if(i_pt == 0) s_data = s_line.substring(s_porperty_name.length()); + return s_data.trim(); + }; + + //////////////////////////////////// + private int iGetOnLine(byte[] bs_buf){ + if(mx_bis == null) return -1; + Arrays.fill(bs_buf, (byte) 0 ); + + int i = 0; + for(i =0 ; i < bs_buf.length ; i++){ + try{ + int i_ret = mx_bis.read(); + if(i_ret == -1 && i == 0) return -1; + if(i_ret == -1 || i_ret == '\n'){ + if(bs_buf[i-1] == '\r'){ + bs_buf[i-1] = (byte)0; + i--; + } + break; + } + bs_buf[i] = (byte)i_ret; + }catch (IOException e){ + ms_error = "getting packet error : "+e.getMessage(); + return -1; + } + } + return i; + } + + /* + //////////////////////////////////// + private boolean fiLog(String s_mesg){ + boolean b_retu = false; + + FileWriter fstream = null; + BufferedWriter fbw = null; + try{ + fstream = new FileWriter(LOG_PATH,true); + fbw = new BufferedWriter(fstream); + fbw.write(s_mesg); + fbw.newLine(); + }catch (IOException e){ } + + try{ + if(fbw !=null) fbw.close(); + if(fstream !=null) fstream.close(); + b_retu = true; + }catch (Exception e){} + return b_retu; + }; + //////////////////////////////////// + */ +} + diff --git a/src/main/java/cmm/web/CmmController.java b/src/main/java/cmm/web/CmmController.java new file mode 100644 index 00000000..4046bc89 --- /dev/null +++ b/src/main/java/cmm/web/CmmController.java @@ -0,0 +1,1747 @@ +package cmm.web; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kccf.res.service.ResourcesService; +import kccf.sch.service.vo.SearchVO; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +import cmm.Constant; +import cmm.service.CmmAmsDocTableOfContentsVO; +import cmm.service.CmmApiService; +import cmm.service.CmmFileService; +import cmm.service.CmmService; +import cmm.service.ExtService; +import cmm.service.FileDetailVO; +import cmm.util.CmmUtil; +import cmm.util.CmmVO; +import cmm.util.DataMap; +import cmm.util.MessageAlertUtil; +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * @Class Name : CmmController.java + * @author ecplaza + * @since 2018-04-17 + * @version 1.0 + */ +@Controller +public class CmmController { + /** LOGGER */ + private static final Logger LOGGER = LoggerFactory.getLogger(CmmController.class); + + /** EgovPropertyService */ + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "cmmFileService") + private CmmFileService cmmFileService; + + /** extService */ + @Resource(name = "extService") + private ExtService extService; + + /** cmmApiService */ + @Resource(name = "cmmApiService") + private CmmApiService cmmApiService; + + /** cmmService */ + @Resource(name = "cmmService") + private CmmService cmmService; + + /** EgovCmmUseService */ + @Resource(name = "EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + /** resourcesService */ + @Resource(name = "resourcesService") + private ResourcesService resourcesService; + + @RequestMapping(value="/cmm/downloadFile.do") + public void cvplFileDownload(HttpServletRequest request, HttpServletResponse response) throws IOException, EgovBizException { + + String atchFileId = request.getParameter("atchFileId"); + String fileSn = request.getParameter("fileSn"); + + FileDetailVO paramVO = new FileDetailVO(); + paramVO.setAtchFileId(atchFileId); + paramVO.setFileSn(fileSn); + FileDetailVO fileDetailVO = cmmFileService.selectFileDetail(paramVO); + + File uFile = new File(fileDetailVO.getFileStreCours(), fileDetailVO.getStreFileNm()); + long fSize = uFile.length(); + + if (fSize > 0) { + String mimetype = "application/x-msdownload"; + + response.setContentType(mimetype); + setDisposition(fileDetailVO.getOrignlFileNm(), request, response); + //response.setContentLength(fSize); + + BufferedInputStream in = null; + FileInputStream fis = null; + BufferedOutputStream out = null; + + try { + + fis = new FileInputStream(uFile); + in = new BufferedInputStream(fis); + out = new BufferedOutputStream(response.getOutputStream()); + + FileCopyUtils.copy(in, out); + out.flush(); + } catch (IOException ioe) { + LOGGER.error("Error in cvplFileDownload()", ioe); + } catch (NullPointerException npe) { + LOGGER.error("Error in cvplFileDownload()", npe); + } finally { + if (fis != null) { + try { + fis.close(); + } catch (IOException ioe) { + LOGGER.error("Error in cvplFileDownload()", ioe); + } + } + if (in != null) { + try { + in.close(); + } catch (IOException ioe) { + LOGGER.error("Error in cvplFileDownload()", ioe); + } + } + if (out != null) { + try { + out.close(); + } catch (IOException ioe) { + LOGGER.error("Error in cvplFileDownload()", ioe); + } + } + } + + } else { + MessageAlertUtil.alertBack("파일이 존재하지 않습니다." , response); + } + } + + @RequestMapping("/cmm/selectIconFileDownLoad.do") + public String selectIconFileDownLoad(@ModelAttribute("searchVO") FileDetailVO fileVO, @RequestParam Map commandMap, ModelMap model) throws IOException, EgovBizException { + String atchFileId = (String)commandMap.get("param_atchFileId"); + List result = cmmFileService.selectIconFileDownLoad(atchFileId); + model.addAttribute("fileList", result); + model.addAttribute("fileListCnt", result.size()); + model.addAttribute("atchFileId", atchFileId); + return "kdm/cmm/cmmIconFileList"; + } + + @RequestMapping(value="/cmm/cmmSigunguList.do") + public ModelAndView selectCmmSigunguList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + model.addAttribute("resultList", extService.selectExtSigunguList(paramMap)); + + return modelAndView; + } + + @RequestMapping(value="/cmm/cmmSigunguList2.do") + public ModelAndView selectCmmSigunguList2(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + model.addAttribute("resultList", extService.selectExtSigunguList2(paramMap)); + + return modelAndView; + } + + @RequestMapping(value="/cmm/cmmGisSigunguList.do") + public ModelAndView selectCmmGisSigunguList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + model.addAttribute("resultList", extService.selectExtGisSigunguList(paramMap)); + + return modelAndView; + } + + @RequestMapping(value="/cmm/cmmGisSigunguList2.do") + public ModelAndView selectCmmGisSigunguList2(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + model.addAttribute("resultList", extService.selectExtGisSigunguList(paramMap)); + + return modelAndView; + } + + @RequestMapping(value="/cmm/cmmGisDongList.do") + public ModelAndView selectCmmGisDongList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + model.addAttribute("resultList", extService.selectExtGisDongList(paramMap)); + + return modelAndView; + } + + @RequestMapping(value="/cmm/cmmJusoCheck.do") + public ModelAndView jusoCheck(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + String addr = paramMap.getString("localSido") + " " + paramMap.getString("localSigungu") + " " + paramMap.getString("localDong"); + paramMap.clear(); + paramMap.setString("juso", addr); + DataMap rtnMap = cmmApiService.getNaverApiJuso(paramMap); + model.addAttribute("resultData", rtnMap); + + return modelAndView; + } + @RequestMapping(value="/cmm/cmmPscHstTotCnt.do") + public void selectCmmPscHstTotCnt(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ + DataMap paramMap = DataMap.getParamMap(request); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); + String successYn = "N"; + + int cnt = 0; + try { + cnt = cmmService.selectCmmPscHstTotCnt(paramMap); + successYn = "Y"; + } catch (EgovBizException e) { + LOGGER.error("Error in selectCmmPscHstTotCnt()", e); + } + + JSONObject jsonObj = new JSONObject(); + jsonObj.put("successYn", successYn); + jsonObj.put("cnt", cnt); + + + response.setContentType("text/html; charset=utf-8"); + response.setDateHeader("Expires", -1); + response.setHeader("Pragma", "no-cahce"); + response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 + response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 + + response.getWriter().write(jsonObj.toString()); + } + + @RequestMapping(value="/cmm/regCmmPscHst.do") + public void insertCmmPscHst(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ + DataMap paramMap1 = DataMap.getParamMap(request); + DataMap paramMap2 = DataMap.getParamMap(request); + DataMap paramMap3 = DataMap.getParamMap(request); + + paramMap1.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap1.setString("sidoName", paramMap1.getString("localSido1")); + paramMap1.setString("sigunguName", paramMap1.getString("localSigungu1")); + + paramMap2.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap2.setString("sidoName", paramMap2.getString("localSido2")); + paramMap2.setString("sigunguName", paramMap2.getString("localSigungu2")); + + paramMap3.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap3.setString("sidoName", paramMap3.getString("localSido3")); + paramMap3.setString("sigunguName", paramMap3.getString("localSigungu3")); + + String successYn = "N"; + String addr = ""; + + try { + + addr = paramMap1.getString("localSido1") + "|" + paramMap1.getString("localSigungu1") + "^"; + addr = addr + paramMap2.getString("localSido2") + "|" + paramMap2.getString("localSigungu2") + "^"; + addr = addr + paramMap3.getString("localSido3") + "|" + paramMap3.getString("localSigungu3"); + + paramMap1.setInt("sortOrdr", 1); + if(cmmService.selectCmmPscHstTotCnt(paramMap1)>0){ + cmmService.updateCmmPscHst(paramMap1); + }else{ + cmmService.insertCmmPscHst(paramMap1); + } + + paramMap2.setInt("sortOrdr", 2); + if(cmmService.selectCmmPscHstTotCnt(paramMap2)>0){ + cmmService.updateCmmPscHst(paramMap2); + }else{ + cmmService.insertCmmPscHst(paramMap2); + } + + paramMap3.setInt("sortOrdr", 3); + if(cmmService.selectCmmPscHstTotCnt(paramMap3)>0){ + cmmService.updateCmmPscHst(paramMap3); + }else{ + cmmService.insertCmmPscHst(paramMap3); + } + + CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.addr.key"))); + //CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.pscType.key"))); + CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.addr.key"), addr); + //CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.pscType.key"), paramMap.getString("pscType")); + + successYn = "Y"; + } catch (PatternSyntaxException ex1) { + LOGGER.error("Error in insertCmmPscHst()", ex1); + } catch (EgovBizException ex2) { + LOGGER.error("Error in insertCmmPscHst()", ex2); + } + + JSONObject jsonObj = new JSONObject(); + jsonObj.put("successYn", successYn); + + + response.setContentType("text/html; charset=utf-8"); + response.setDateHeader("Expires", -1); + response.setHeader("Pragma", "no-cahce"); + response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 + response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 + + response.getWriter().write(jsonObj.toString()); + } + + @RequestMapping(value="/cmm/regCmmPscHst-data.do") + public String insertCmmPscHstAjax(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ + DataMap paramMap = DataMap.getParamMap(request); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap.setString("sidoName", paramMap.getString("localSido")); + paramMap.setString("sigunguName", paramMap.getString("localSigungu")); + + String addr = ""; + try { + + addr = paramMap.getString("localSido") + "|" + paramMap.getString("localSigungu"); + if(cmmService.selectCmmPscHstTotCnt(paramMap)>0){ + cmmService.updateCmmPscHst(paramMap); + }else{ + cmmService.insertCmmPscHst(paramMap); + } + + CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.addr.key"))); + CmmUtil.removeCookie(request, response, CmmUtil.getCookie(request, propertiesService.getString("kccf.cookie.pscType.key"))); + CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.addr.key"), addr); + CmmUtil.setEncoderCookie(response, propertiesService.getString("kccf.cookie.pscType.key"), paramMap.getString("pscType")); + + + int pscHstCnt = 0; + DataMap pscHstMap = cmmService.selectCmmPscHstDetail(paramMap); + List sigunguList = null; + if(pscHstMap != null){ + pscHstCnt = 1; + paramMap.clear(); + paramMap.setString("sido", pscHstMap.getString("sidoName")); + sigunguList = extService.selectExtSigunguList(paramMap); + } + model.addAttribute("pscHstCnt", pscHstCnt); + model.addAttribute("pscHst", pscHstMap); + model.addAttribute("pscHstSigunguList", sigunguList); + + } catch (PatternSyntaxException ex1) { + LOGGER.error("Error in insertCmmPscHst()", ex1); + } catch (EgovBizException ex2) { + LOGGER.error("Error in insertCmmPscHst()", ex2); + } + + return "kccf/cmm/userSetPopupAjax.jsp"; + } + + @RequestMapping(value="/cmm/cmmActivityHstAllListTotCnt.do") + public ModelAndView selectCmmActivityHstAllListTotCnt(ModelMap model, HttpServletRequest request, HttpServletResponse response) { + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); + String successYn = "N"; + + List resultList = null; + try { + resultList = cmmService.selectCmmActivityHstAllListTotCnt(paramMap); + successYn = "Y"; + } catch (EgovBizException e) { + LOGGER.error("Error in selectCmmActivityHstAllListTotCnt()", e); + } + model.addAttribute("successYn", successYn); + model.addAttribute("resultList", resultList); + return modelAndView; + } + @RequestMapping(value="/cmm/regCmmScrap.do") + public void insertCmmScrap(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ + DataMap paramMap = DataMap.getParamMap(request); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap.setString("contentId", paramMap.getString("cId")); + paramMap.setString("contentType", paramMap.getString("cType")); + + String keyName = "contentId"; + if(Constant.CONTENT_TYPE_G.equals(paramMap.getString("contentType")) + || Constant.CONTENT_TYPE_I.equals(paramMap.getString("contentType")) + || Constant.CONTENT_TYPE_P.equals(paramMap.getString("contentType")) ){ + keyName = "targetId"; + } + paramMap.setString("linkUrl", paramMap.getString("lUrl") + "?"+keyName+"="+paramMap.getString("contentId")); + + String successYn = "Y"; + String resultCode = "01"; + try { + if("on".equals(paramMap.getString("already"))){ + if(cmmService.selectCmmScrapCnt(paramMap)<1){ + successYn = "N"; + resultCode = "98"; + }else{ + cmmService.deleteCmmScrapInfo(paramMap); + } + }else{ + // 다른곳에서 등록시에는 불이 안들어온 상태로 DB에만 등록되어있어서 체크 해야함. + if(cmmService.selectCmmScrapCnt(paramMap)>0){ + successYn = "N"; + resultCode = "99"; + }else{ + resultCode = "00"; + cmmService.insertCmmScrap(paramMap); + } + } + } catch (EgovBizException e) { + LOGGER.error("Error in insertCmmScrap()", e); + } + JSONObject jsonObj = new JSONObject(); + jsonObj.put("successYn", successYn); + jsonObj.put("resultCode", resultCode); + + response.setContentType("text/html; charset=utf-8"); + response.setDateHeader("Expires", -1); + response.setHeader("Pragma", "no-cahce"); + response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 + response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 + + response.getWriter().write(jsonObj.toString()); + } + @RequestMapping(value="/cmm/regCmmRecentlyView.do") + public void insertCmmRecentlyView(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws IOException{ + DataMap paramMap = DataMap.getParamMap(request); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap.setString("contentId", paramMap.getString("cId")); + paramMap.setString("contentType", paramMap.getString("cType")); + paramMap.setString("linkUrl", paramMap.getString("lUrl")); + + String successYn = "N"; + try { + cmmService.insertCmmActivityHst(paramMap); + successYn = "Y"; + } catch (EgovBizException e) { + LOGGER.error("Error in insertCmmRecentlyView()", e); + } + JSONObject jsonObj = new JSONObject(); + jsonObj.put("successYn", successYn); + + response.setContentType("text/html; charset=utf-8"); + response.setDateHeader("Expires", -1); + response.setHeader("Pragma", "no-cahce"); + response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 + response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 + + response.getWriter().write(jsonObj.toString()); + } + @RequestMapping(value="/cmm/regSatisfaction.do") + public ModelAndView insertSatisfaction(ModelMap model, HttpServletRequest request, HttpServletResponse response) { + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + String satisfaction; + switch (paramMap.get("satisfaction").toString()){ + case "매우만족" : satisfaction="5"; + break; + case "만족" : satisfaction="4"; + break; + case "보통" : satisfaction="3"; + break; + case "불만족" : satisfaction="2"; + break; + default: satisfaction="1"; + break; + } + paramMap.setString("contentId", paramMap.get("contentId").toString()); + paramMap.setString("jsessionId", CmmUtil.getCookieId(request)); + paramMap.setString("stsfdg", satisfaction); //만족도 + paramMap.setString("stsfdgCnt", paramMap.get("satisfactionText").toString()); + paramMap.setString("contentType", paramMap.get("type").toString()); + String successYn = "N"; + try { + if(cmmService.selectSatisfactionTotCnt(paramMap) > 0){ + successYn = "Y"; + }else{ + cmmService.insertSatisfaction(paramMap); + successYn = "N"; + } + } catch (EgovBizException e) { + LOGGER.error("Error in insertSatisfaction()", e); + } + + model.addAttribute("successYn", successYn); + return modelAndView; + } + + + @RequestMapping(value="/cmm/cmmAmsAssetMediaList.do") + public String selectCmmAmsAssetMediaList( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(req); + + //paramMap.setString("aId", paramMap.getString("aId")); + //cmmVO.setaId(paramMap.getString("aId")); + + // 스크랩 여부 키 + paramMap.setString("sessionId", CmmUtil.getCookieId(req)); + + model.addAttribute("paramVO", cmmVO); // 파라미터 + + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + // ams nfs 파일 경로 + CmmUtil.setNfsPathModelMap(req,model); + + + return "/kccf/cmm/layerMediaListAjax"; + } + + + /** + * AMS ASSETS 상세 정보 + * pick 레이어 에셋의 상세정보 : 모든 데이터 + * @param cmmVO + * @param model + * @param commandMap + * @param req + * @param res + * @return + * @throws EgovBizException + */ + @RequestMapping(value="/cmm/cmmAmsAssetsPick.do") + public String selectCmmAmsAssetsPick( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(req); + LOGGER.info("selectCmmAmsAssetsPick() paramMap={}", paramMap); + + //paramMap.setString("aId", paramMap.getString("aId")); + //cmmVO.setaId(paramMap.getString("aId")); + + // 스크랩 여부 키 + paramMap.setString("sessionId", CmmUtil.getCookieId(req)); + + // Asset 상세정보 : 죄측 상단 및 상세 + DataMap cmmAmsAssetsDetail = cmmService.selectCmmAmsAssetsDetail(paramMap); + model.addAttribute("cmmAmsAssetsDetail", cmmAmsAssetsDetail); + + // 다른문화원 소장자료 목록 정보를 가져오기 위한 맵핑 + paramMap.setString("sojangCouncil", cmmAmsAssetsDetail.getString("sojangCouncil")); // 소장문화원 + + // AssetMedia 그룹 목록 : 좌측 목록 Cnt + List cmmAmsAssetsMediaGroupListCnt = cmmService.selectCmmAmsAssetsMediaGroupListCnt(paramMap); + model.addAttribute("cmmAmsAssetsMediaGroupListCnt", cmmAmsAssetsMediaGroupListCnt); + + // AssetMedia 그룹 목록 : 좌측 목록 + List cmmAmsAssetsMediaGroupList = cmmService.selectCmmAmsAssetsMediaGroupList(paramMap); + model.addAttribute("cmmAmsAssetsMediaGroupList", cmmAmsAssetsMediaGroupList); + + /**** 연속자료 paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmVO.getMobilePageSize() : cmmVO.getPageSize()); + + cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** 연속자료 paging ****/ + + int totCnt = 0; + DataMap cmmAmsAssetsMediaDetail = null; + List cmmAmsAssetsContinueList = null; + List tagsListResult = null; + + // 화면에서 mId 값 넘어오면(지역문화Pick 유형별 목록) 넘어온 값 사용하도록 수정 (2019.10.16) + String mediaId = paramMap.getString("mId"); + if (StringUtils.isEmpty(mediaId)) { + // 화면에서 mId 값 넘어오지 않는 경우 (지역문화Pick 지역별 목록) + if(cmmAmsAssetsMediaGroupList != null && cmmAmsAssetsMediaGroupList.size()>0) { + mediaId = cmmAmsAssetsMediaGroupList.get(0).getString("id"); // 0번째의 미디어 아이디 + } + } + LOGGER.info("selectCmmAmsAssetsPick() mediaId={}", mediaId); + + if(StringUtils.isNotEmpty(mediaId)){ + // 미디어 ID 맵핑 + if (StringUtils.isEmpty(paramMap.getString("mId"))) paramMap.setString("mId", mediaId); + cmmVO.setmId(paramMap.getString("mId")); + + // 에셋 미디어 상세정보(원문보기 쪽 상세정보) + cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); + + /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 + // 문서 목차정보 파싱 + List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); + cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); + */ + + // 연관태그목록 + tagsListResult = cmmService.selectCmmAmsAssetsTagsList(paramMap); + model.addAttribute("cmmAmsAssetsTagsList", tagsListResult); + + // 연속자료 총 수 + totCnt = cmmService.selectCmmAmsAssetsContinueListTotCnt(cmmVO); + // 연속자료 목록 + cmmAmsAssetsContinueList = cmmService.selectCmmAmsAssetsContinueList(cmmVO); + } + // 상세정보 + model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); + + /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 + // 문서 원문보기 OCR 목록 (2019.10.04) + if (cmmAmsAssetsMediaDetail != null && cmmAmsAssetsMediaDetail.getInt("ocrSplitNum") > 1) { + model.addAttribute("cmmAmsAssetsMediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); + } + */ + + // 연속자료 페이징 오브젝트 + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("cmmAmsAssetsContinueList", cmmAmsAssetsContinueList); // 연속자료 목록 + + + // 연관 지역문화 이야기 + List cmsTag = new ArrayList(); + for(int i = 0; i < tagsListResult.size() ; i++){ + cmsTag.add(tagsListResult.get(i).get("tagsName") ); + } + List themesResult = cmmService.selectCmmAmsAssetsThemesContentsList(cmsTag); + model.addAttribute("cmmAmsAssetsThemesContentsList",themesResult); + + + // 문화원의 다른 소장자료 목록 + List diffSojangListResult = cmmService.selectCmmAmsAssetsDiffSojangList(paramMap); + /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 + for (int i=0; diffSojangListResult!=null && i diffSojangTableOfContentsList = CmmUtil.parseTableOfContents(diffSojang.getString("tableOfContents")); + diffSojang.put("tableOfContentsList", diffSojangTableOfContentsList); + + // 문서 원문보기 OCR 목록 + if (diffSojang.getInt("ocrSplitNum") > 1) { + diffSojang.put("mediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); + } +// LOGGER.info("selectCmmAmsAssetsPick() diffSojangListResult... i={}, diffSojang.get(\"tableOfContentsLis\")=", i, diffSojang.get("tableOfContentsList")); + } + */ + model.addAttribute("cmmAmsAssetsDiffSojangList", diffSojangListResult); + + /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 + // 문서 목차정보 파싱 + List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); + cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); + */ + + paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); + paramMap.setString("contentId", paramMap.getString("mId")); + paramMap.setString("contentType", Constant.CONTENT_TYPE_A); + cmmService.insertCmmActivityHst(paramMap); + + model.addAttribute("paramVO", cmmVO); // 파라미터 + + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + // ams nfs 파일 경로 + CmmUtil.setNfsPathModelMap(req,model); + // jsi 값 세팅 + model.addAttribute("jsi", CmmUtil.getCookieId(req)); + + return "/kccf/cmm/layerAmsAssetsPickAjax"; + } + //AMS 미디어 목록 상세 레이어(PICK) : Ajax + @RequestMapping(value="/cmm/cmmAmsAssetsPickDetail.do") + public String selectCmmAmsAssetsPickDetail( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(req); + + //paramMap.setString("aId", paramMap.getString("aId")); + //cmmVO.setaId(paramMap.getString("aId")); + //paramMap.setString(mId", paramMap.getString("mId")); + //cmmVO.setaId(paramMap.getString("mId")); + + // 스크랩 여부 키 + paramMap.setString("sessionId", CmmUtil.getCookieId(req)); + + // Asset 상세정보(죄측 상단 및 상세) + DataMap cmmAmsAssetsDetail = cmmService.selectCmmAmsAssetsDetail(paramMap); + model.addAttribute("cmmAmsAssetsDetail", cmmAmsAssetsDetail); + + // 다른문화원 소장자료 목록 정보를 가져오기 위한 맵핑 + paramMap.setString("sojangCouncil", cmmAmsAssetsDetail.getString("sojangCouncil")); // 소장문화원 + + // 에셋 미디어 상세정보(원문보기 쪽 상세정보) + DataMap cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); + model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); + + /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 + // 문서 목차정보 파싱 + List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); + cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); + + // 문서 원문보기 OCR 목록 (2019.10.04) + if (cmmAmsAssetsMediaDetail != null && cmmAmsAssetsMediaDetail.getInt("ocrSplitNum") > 1) { + model.addAttribute("cmmAmsAssetsMediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); + } + */ + + // 연관태그목록 + List tagsListResult = cmmService.selectCmmAmsAssetsTagsList(paramMap); + model.addAttribute("cmmAmsAssetsTagsList", tagsListResult); + + /**** 연속자료 paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmVO.getMobilePageSize() : cmmVO.getPageSize()); + + cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** 연속자료 paging ****/ + + // 미디어 ID 맵핑 + cmmVO.setmId(paramMap.getString("mId")); + // 연속자료 총 수 + int totCnt = cmmService.selectCmmAmsAssetsContinueListTotCnt(cmmVO); + // 연속자료 목록 + model.addAttribute("cmmAmsAssetsContinueList", cmmService.selectCmmAmsAssetsContinueList(cmmVO)); + // 연속자료 페이징 오브젝트 + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + // 연관 지역문화 이야기 + List cmsTag = new ArrayList(); + for(int i = 0; i < tagsListResult.size() ; i++){ + cmsTag.add(tagsListResult.get(i).get("tagsName") ); + } + List themesResult = cmmService.selectCmmAmsAssetsThemesContentsList(cmsTag); + model.addAttribute("cmmAmsAssetsThemesContentsList",themesResult); + + // 문화원의 다른 소장자료 목록 + List diffSojangListResult = cmmService.selectCmmAmsAssetsDiffSojangList(paramMap); + /* 목차 정보가 많을 경우 select box에 표시하기 어려움 - 뷰어 띄울 때 목차 표시하도록 변경할 예정 + for (int i=0; diffSojangListResult!=null && i diffSojangTableOfContentsList = CmmUtil.parseTableOfContents(diffSojang.getString("tableOfContents")); + diffSojang.put("tableOfContentsList", diffSojangTableOfContentsList); + + // 문서 원문보기 OCR 목록 + if (diffSojang.getInt("ocrSplitNum") > 1) { + diffSojang.put("mediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); + } +// LOGGER.info("selectCmmAmsAssetsPickDetail() diffSojangListResult... i={}, diffSojang.get(\"tableOfContentsLis\")=", i, diffSojang.get("tableOfContentsList")); + } + */ + model.addAttribute("cmmAmsAssetsDiffSojangList", diffSojangListResult); + + + paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); + paramMap.setString("contentId", paramMap.getString("mId")); + paramMap.setString("contentType", Constant.CONTENT_TYPE_A); + cmmService.insertCmmActivityHst(paramMap); + + // 관심지역 정보 + model.addAttribute("pscHst", cmmService.selectCmmPscHstDetail(paramMap)); + + model.addAttribute("paramVO", cmmVO); // 파라미터 + + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + // ams nfs 파일 경로 + CmmUtil.setNfsPathModelMap(req,model); + + return "/kccf/cmm/layerAmsAssetsPickDetailAjax"; + } + //AMS 미디어 목록 상세 레이어(PICK) : 연속자료 목록: Ajax + @RequestMapping(value="/cmm/cmmAmsAssetsPickContinueList.do") + public String selectCmmAmsAssetsPickContinueList( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(req); + + // 스크랩 여부 키 + paramMap.setString("sessionId", CmmUtil.getCookieId(req)); + + // Asset 상세정보(죄측 상단 및 상세) + DataMap cmmAmsAssetsDetail = cmmService.selectCmmAmsAssetsDetail(paramMap); + model.addAttribute("cmmAmsAssetsDetail", cmmAmsAssetsDetail); + + // 에셋 미디어 상세정보(원문보기 쪽 상세정보) + DataMap cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); + model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); + + + /**** 연속자료 paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmVO.getMobilePageSize() : cmmVO.getPageSize()); + + cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** 연속자료 paging ****/ + + // 연속자료 총 수 + int totCnt = cmmService.selectCmmAmsAssetsContinueListTotCnt(cmmVO); + // 연속자료 목록 + model.addAttribute("cmmAmsAssetsContinueList", cmmService.selectCmmAmsAssetsContinueList(cmmVO)); + // 연속자료 페이징 오브젝트 + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + // 관심지역 정보 + model.addAttribute("pscHst", cmmService.selectCmmPscHstDetail(paramMap)); + model.addAttribute("paramVO", cmmVO); // 파라미터 + + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + // ams nfs 파일 경로 + CmmUtil.setNfsPathModelMap(req,model); + + return "/kccf/cmm/layerAmsAssetsPickContinueListAjax"; + } + // 미디어 기준의 목록(레이어 원문보기용) + @RequestMapping(value="/cmm/cmmAmsAssetsOriginViewList.do") + public String selectCmmAmsAssetsOriginViewList( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(req); + + paramMap.setString("aid", paramMap.getString("aId")); + paramMap.setString("mid", paramMap.getString("mId")); + + // AssetMedia 목록 + String rsUrl = ""; + String assetType = ""; + if(Constant.M_TYPE_I.equals(paramMap.getString("mType"))){ + // 이미지 + rsUrl = "/kccf/cmm/layerImgAjax"; + assetType = Constant.M_TYPE_ARRAY[0]; + } else if(Constant.M_TYPE_V.equals(paramMap.getString("mType"))){ + // 비디오 + rsUrl = "/kccf/cmm/layerVideoAjax"; + assetType = Constant.M_TYPE_ARRAY[1]; + } else if(Constant.M_TYPE_A.equals(paramMap.getString("mType"))){ + // 오디오 + rsUrl = "/kccf/cmm/layerAudioAjax"; + assetType = Constant.M_TYPE_ARRAY[2]; + } + + paramMap.setString("assetType", assetType); + model.addAttribute("mType", paramMap.getString("mType")); + model.addAttribute("pageIndex", 1); + model.addAttribute("lastPageNo", 1); + + model.addAttribute("cmmOriginViewList", cmmService.selectCmmAmsAssetsOriginViewList(paramMap)); + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + + return rsUrl; + } + + + @RequestMapping(value="/cmm/cmmAmsAssetsOriginViewList-data.do") + public String selectCmmAmsAssetsOriginViewListData( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + + DataMap paramMap = DataMap.getParamMap(req); + model.addAttribute("paramVO",cmmVO); + paramMap.setString("uaType", Constant.UA_TYPE_A); + paramMap.setString("activityType", Constant.ACTIVITY_TYPE_B); + // 파라미터 맵핑 + + + + paramMap.setString("aid", paramMap.getString("aId")); + paramMap.setString("mid", paramMap.getString("mId")); + + // AssetMedia 목록 + String rsUrl = ""; + String assetType = ""; + if(Constant.M_TYPE_I.equals(paramMap.getString("mType"))){ + // 이미지 + rsUrl = "/kccf/cmm/layerImgAddAjax"; + assetType = Constant.M_TYPE_ARRAY[0]; + } else if(Constant.M_TYPE_V.equals(paramMap.getString("mType"))){ + // 비디오 + rsUrl = "/kccf/cmm/layerVideoAddAjax"; + assetType = Constant.M_TYPE_ARRAY[1]; + } else if(Constant.M_TYPE_A.equals(paramMap.getString("mType"))){ + // 오디오 + rsUrl = "/kccf/cmm/layerVideoAddAjax"; + assetType = Constant.M_TYPE_ARRAY[2]; + } + + + + paramMap.setString("assetType", assetType); + model.addAttribute("mType", paramMap.getString("mType")); + + + + /**** paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmVO.getPageUnit()); + paginationInfo.setPageSize(cmmVO.getPageSize()); + + cmmVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** paging ****/ + + paramMap.setInt("recordCountPerPage", paginationInfo.getRecordCountPerPage()); + paramMap.setInt("firstIndex", paginationInfo.getFirstRecordIndex()); + paramMap.setInt("lastIndex", paginationInfo.getLastRecordIndex()); + + int totCnt = cmmService.selectCmmAmsAssetsOriginViewListAjaxCnt(paramMap); + model.addAttribute("totCnt", totCnt); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("lastPageNo", paginationInfo.getLastPageNo()); + + + + model.addAttribute("cmmOriginViewList", cmmService.selectCmmAmsAssetsOriginViewListAjax(paramMap)); + + + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + + + return rsUrl; + } + + + + + + + + + + + + + + // 미디어 기준의 상세(레이어 원문보기용) + @RequestMapping(value="/cmm/cmmAmsAssetsOriginViewDetail.do") + public ModelAndView selectCmmAmsAssetsOriginViewDetail( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + LOGGER.info("selectCmmAmsAssetsOriginViewDetail() start... req.getRequestURI()={}, req.getQueryString()={}", req.getRequestURI(), req.getQueryString()); + + DataMap paramMap = DataMap.getParamMap(req); + paramMap.setString("mid", paramMap.getString("mId")); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + DataMap responseMap = new DataMap(); + DataMap resultMap = cmmService.selectCmmAmsAssetsOriginViewDetail(paramMap); + responseMap.put("result", resultMap); + + + // 미디어 활동이력 (원문보기 이력) 등록 (2019.08.26) + DataMap hstParamMap = new DataMap(); + hstParamMap.put("jsessionId", CmmUtil.getCookieId(req)); + hstParamMap.put("contentId", paramMap.getString("mId")); + hstParamMap.put("assetType", resultMap.getString("assetType")); + hstParamMap.put("linkUrl", req.getRequestURI()+"?"+req.getQueryString()); + hstParamMap.put("uaType", CmmUtil.isMobile(req) ? Constant.UA_TYPE_M : Constant.UA_TYPE_W); + cmmService.insertCmmActivityMediaHst(hstParamMap); + + + model.addAttribute("responseData", responseMap); + return modelAndView; + } + + @RequestMapping(value="/cmm/imageSrc.do") + public String cmmSmartEditorImageView(HttpServletRequest request, HttpServletResponse response) { + return "egovframework/cmm/cmmSmartEditorImageView"; + } + 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"; + } + private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException { + 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 IOException("Not supported browser"); + } + + response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); + + if ("Opera".equals(browser)) { + response.setContentType("application/octet-stream;charset=UTF-8"); + } + } + /** + * response Cache + * @param response + */ + @SuppressWarnings("unused") + private void setResponseCacheControl(HttpServletResponse response){ + response.setContentType("text/html; charset=utf-8"); + response.setDateHeader("Expires", -1); + response.setHeader("Pragma", "no-cahce"); + response.setHeader("Cache-Control", "no-store"); // HTTP 1.0 + response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 + } + + /** + * PDF 호출 - [RIS] 파일에 표시되는 URL (viewer에 관계없이 변하지 않는 URL 제공위해 생성) + * ex) /npdfView.do?npdf=R10692 + * + * npdf="미디어ID" (사용여부, 원문공개여부 모두 Y가 아니면 404 페이지) + * npdf="R+미디어인터페이스ID" (사용여부, 원문공개여부 모두 Y가 아니면 404 페이지) + * npdf="I+미디어인터페이스ID" (사용여부, 원문공개여부 모두 Y가 아니면 404 페이지) + * npdf="A+미디어인터페이스ID" (사용여부, 원문공개여부 관계없이 항상 뷰어 띄움) + * + * @param request + * @param response + * @param model + * @return + */ + @RequestMapping(value="/npdfView.do") + public String nPdfView(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { + DataMap paramMap = DataMap.getParamMap(request); + String npdf = paramMap.getString("npdf"); // "R" + interfaceId + String pNumber = paramMap.getString("pn"); + if (StringUtils.isEmpty(npdf)) { + LOGGER.error("nPdfView() npdf is empty..."); + return "/code404.jsp"; + } + + String rfType = ""; // RIS일 경우 "R" (Constant.UA_TYPE_R) + String contentId = ""; // asset media id + if (npdf.startsWith(Constant.UA_TYPE_R) || npdf.startsWith("I") || npdf.startsWith("A")) { // npdf="R+인터페이스ID", npdf="I+인터페이스ID", npdf="A+인터페이스ID" + if (npdf.startsWith(Constant.UA_TYPE_R)) rfType = Constant.UA_TYPE_R; + + if (npdf.length() > 1) { + // interface_id 로 media_id 구하기 + DataMap mediaParamMap = new DataMap(); + mediaParamMap.put("interfaceId", npdf.substring(1)); + DataMap mediaMap = cmmService.selectCmmAmsAssetsMediaDetailByInterfaceId(mediaParamMap); + if (mediaMap != null) contentId = mediaMap.getString("id"); + } + } else { // mediaId만 넘긴 경우 (npdf="미디어ID") + contentId = npdf; + } + LOGGER.info("nPdfView() contentId={}, rfType={}", contentId, rfType); + + // searchData index (분할파일일 경우 default로 띄울 분할파일 index 값 (1부터 시작하는 값)) + //int sdIdx = paramMap.getInt("sd"); xss 때문에 아래처럼 수정 + + String sd = CmmUtil.clearXSS(paramMap.getString("sd")); // XSS 방지 + if(sd == "") sd = "0"; + int sdIdx = Integer.parseInt(sd); + + if (sdIdx == 0) sdIdx += 1; + LOGGER.info("nPdfView() sdIdx={}", sdIdx); + + String assetType = ""; +// String encData = ""; // 원본파일 사용할 경우 + String path = ""; // 분할파일 사용할 경우 + String title = ""; // 분할파일 사용할 경우 + String searchData = ""; // 분할파일 사용할 경우 (분할파알 중 default로 선택될 파일명) + String orginTitle = ""; + String ogData = ""; + + if (StringUtils.isNotEmpty(contentId)) { + String jsessionId = CmmUtil.getCookieId(request); + + // media 단건조회 + DataMap mediaParamMap = new DataMap(); + mediaParamMap.put("mId", contentId); + mediaParamMap.put("sessionId", jsessionId); + if (npdf.startsWith("A")){ + mediaParamMap.put("allView", "Y"); + } + DataMap mediaMap = cmmService.selectCmmAmsAssetsMediaDetail(mediaParamMap); + orginTitle = mediaMap.getString("title"); + ogData = mediaMap.getString("title")+"||"; + ogData = ogData + CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+request.getRequestURI()+"?"+request.getQueryString()+"||"; + + if (StringUtils.isNotEmpty(mediaMap.getString("mainImg"))){ + ogData = ogData + CmmUtil.getAssetImageUrl(mediaMap.getString("mainImg"))+"||"; + }else{ + ogData = ogData + "||"; + } + ogData = ogData + mediaMap.getString("sojangCouncilNm"); + + if (mediaMap != null) { + if ("N".equals(mediaMap.getString("useAt")) || "N".equals(mediaMap.getString("orgOpenAt"))) { + LOGGER.error("nPdfView() USE_AT=N or ORG_OPEN_AT=N ... npdf={}, mediaParamMap={}", npdf, mediaParamMap); + if (!npdf.startsWith("A")) return "/code404.jsp"; // npdf="A***" 형식일 때는 사용여부/원문공개여부 상관없이 항상 띄움 + } + assetType = mediaMap.getString("assetType"); + + String pdfViewerDelimiter = "||"; // pdf뷰어에서 사용하는 delimiter + String amsNasPath = CmmUtil.getPropertyStr(Constant.NFS_NAS_KEY); + + // 분할파일 정보 조회 + List ocrList = cmmService.selectCmmAmsAssetsMediaOcrList(mediaParamMap); + if (ocrList == null || ocrList.size() == 0) { + String streFileName = mediaMap.getString("streFileName"); + String filePath = CmmUtil.getPropertyStr(Constant.NFS_NAS_KEY)+CmmUtil.getPropertyStr(Constant.NFS_DOC_KEY); + if (streFileName.contains("/")) filePath = CmmUtil.getPropertyStr(Constant.NFS_NAS_KEY); + if (streFileName.startsWith(CmmUtil.getPropertyStr("ams.nas.root.path"))) filePath = ""; // ex) /nfs_nas/minio/amsweb-opt/pdf/***.pdf + + path += filePath + streFileName; + /* + // 암호화 문자열 생성 - 기존방식 (원본파일 하나 호출) + encData = FunctionTag.unidocsViewer(filePath, streFileName); + */ + + // 2019.12.27 수정작업 이후 - customLayout.jsp 사용하려면 반드시 searchData 값 존재해야 함 + searchData = FilenameUtils.getName(path); // 경로 제외한 파일명만 + + } else { + // sdIdx 값이 ocrList 크기를 벗어날 경우 첫번째 분할 파일 default로 보여주기 + if (sdIdx > ocrList.size()) sdIdx = 1; + + for (int i=0; i 0) path += pdfViewerDelimiter; + if (fileName.startsWith(CmmUtil.getPropertyStr("ams.nas.root.path"))) path += fileName; // ex) /nfs_nas/minio/amsweb-opt/pdf/***.pdf + else path += amsNasPath + fileName; // ex) 248/15/5064_divide1-1.pdf + + + if (i == (sdIdx-1)) { + searchData = fileName; + searchData = FilenameUtils.getName(path); // 경로 제외한 파일명만 + } + } + pNumber = "1"; //분할파일은 1페이지 부터 무조건 시작 + } + LOGGER.info("nPdfView() path={}", path); + LOGGER.info("nPdfView() searchData={}", searchData); + + // 문서 목차정보 파싱 + List tableOfContentsList = CmmUtil.parseTableOfContents(mediaMap.getString("tableOfContents")); + title = CmmUtil.makeTableOfContentsMarkup(tableOfContentsList, pdfViewerDelimiter); + LOGGER.info("nPdfView() title={}", title); + + /* + // 암호화 문자열 생성 + // PDFPath, downloadYn(true/false), printYn(true/false) + String download = "true"; + String print = "true"; + String annotation = "false"; + String[] param = new String[]{ java.net.URLEncoder.encode( path, "UTF-8" ), java.net.URLEncoder.encode( title, "UTF-8" ), download, print, annotation}; + encData = PDFInfoEncrypter.encrypt( param ); + LOGGER.info("nPdfView() encData={}", encData); + */ + } + + // 미디어 활동이력 (원문보기 이력) 등록 + DataMap hstParamMap = new DataMap(); + hstParamMap.put("jsessionId", jsessionId); + hstParamMap.put("contentId", contentId); + hstParamMap.put("assetType", assetType); + hstParamMap.put("linkUrl", request.getRequestURI()+"?"+request.getQueryString()); + String uaType = rfType; // rfType 값이 넘어온 경우 그대로 사용 + if (StringUtils.isEmpty(uaType)) { + if (CmmUtil.isMobile(request)) uaType = Constant.UA_TYPE_M; + else uaType = Constant.UA_TYPE_W; + } + hstParamMap.put("uaType", uaType); + cmmService.insertCmmActivityMediaHst(hstParamMap); + } + + /*if (StringUtils.isNotEmpty(encData)) { // 원본파일 열 경우 - 기존방식 사용 + String pdfPath = CmmUtil.getPropertyStr(Constant.PDF_VIEW_KEY); + return "redirect:"+pdfPath + "/customLayoutBasic.jsp?encdata="+encData; + + } else */ if (StringUtils.isNotEmpty(path)) { // prepareCustomLayout.jsp 에서 암호화 후 POST 전송 (직접 redirect 하면 "Request-URI Too Long" 에러 발생 + // 목차 + 분할파일 열 경우 및 원본파일 일 경우 모두 신규방식 사용 (2019.12.27) + request.setAttribute("path", path); + request.setAttribute("title", title); + request.setAttribute("searchData", searchData); + request.setAttribute("orginTitle", orginTitle); + request.setAttribute("ogData", ogData); + request.setAttribute("pNumber", pNumber); + + return "kccf/cmm/prepareCustomLayout"; + } else { + LOGGER.error("nPdfView() encData, path empty... npdf={}", npdf); + return "/code404.jsp"; + } + } + + /** + * 테스트용 PDF 호출 + * @param request + * @param response + * @param model + * @return + */ + @RequestMapping(value="/cmm/pdfView.do") + public String cmmPdfView(HttpServletRequest request, HttpServletResponse response, ModelMap model) { + DataMap paramMap = DataMap.getParamMap(request); + String fileNm = paramMap.getString("fileNm"); + model.addAttribute("fileNm", fileNm); + return "/kccf/cmm/pdfTestView"; + } + /** + * 테스트용 vod 호출 (ams에서 동영상 확인위해 사용한다고 함) + * @param request + * @param response + * @param model + * @return + */ + @RequestMapping(value="/cmm/vodView.do") + public String cmmVodView(HttpServletRequest request, HttpServletResponse response, ModelMap model) { + DataMap paramMap = DataMap.getParamMap(request); + + // 동영상파일명 + String fileNm = paramMap.getString("fileNm"); + model.addAttribute("fileNm", fileNm); + + // 자막파일명 + String sFileNm = paramMap.getString("sFileNm"); + model.addAttribute("sFileNm", sFileNm); + + return "/kccf/cmm/vodTestView"; + } + + + + /** + * 테스트용 audio 호출 + * @param request + * @param response + * @param model + * @return + */ + @RequestMapping(value="/cmm/audioView.do") + public String cmmAudioView(HttpServletRequest request, HttpServletResponse response, ModelMap model) { + DataMap paramMap = DataMap.getParamMap(request); + String fileNm = paramMap.getString("fileNm"); + String fileNmOri = paramMap.getString("fileNmOri"); + model.addAttribute("fileNm", fileNm); + model.addAttribute("fileNmOri", fileNmOri); + return "/kccf/cmm/audioTestView"; + } + + // 미디어 활동이력 (원문보기 이력) 등록 (2019.08.26) + @RequestMapping(value="/cmm/regCmmMediaHst.do") + public ModelAndView insertCmmActivityMediaHst( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + LOGGER.info("insertCmmActivityMediaHst() start... req.getRequestURI()={}, req.getQueryString()={}", req.getRequestURI(), req.getQueryString()); + + DataMap paramMap = DataMap.getParamMap(req); + paramMap.setString("mid", paramMap.getString("mId")); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + DataMap responseMap = new DataMap(); + DataMap resultMap = cmmService.selectCmmAmsAssetsOriginViewDetail(paramMap); + responseMap.put("result", resultMap); + + + // 미디어 활동이력 (원문보기 이력) 등록 (2019.08.26) + DataMap hstParamMap = new DataMap(); + hstParamMap.put("jsessionId", CmmUtil.getCookieId(req)); + hstParamMap.put("contentId", paramMap.getString("mId")); + hstParamMap.put("assetType", resultMap.getString("assetType")); + hstParamMap.put("linkUrl", req.getRequestURI()+"?"+req.getQueryString()); + hstParamMap.put("uaType", CmmUtil.isMobile(req) ? Constant.UA_TYPE_M : Constant.UA_TYPE_W); + cmmService.insertCmmActivityMediaHst(hstParamMap); + + + model.addAttribute("responseData", hstParamMap); + return modelAndView; + } + + /** + * [상세검색] 레이어 - 지역문화원 정보 + * @param cmmVO + * @param model + * @param commandMap + * @param req + * @param res + * @return + * @throws Exception + */ + @RequestMapping(value="/cmm/cmmSearchLayerCouncilInfo-data.do") + public String selectCmmSearchLayerCouncilInfoAjax( + @ModelAttribute("searchVO") SearchVO searchVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws Exception { + DataMap paramMap = DataMap.getParamMap(req); + LOGGER.info("selectCmmCouncilInfoListAjax() paramMap={}, searchVO={}", paramMap, searchVO); + + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS018); + model.addAttribute("couSidoList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + List councilList = resourcesService.selectCouncilList(); + model.addAttribute("councilList", councilList); + + model.addAttribute("searchVO", searchVO); + + return "kccf/cmm/searchLayerCouncilAjax"; + } + + + + @RequestMapping(value="/cmm/risDownloadFile.do") + public void risFileDownload(HttpServletRequest request, HttpServletResponse response) throws Exception { + + DataMap paramMap = DataMap.getParamMap(request); + LOGGER.info("risFileDownload() paramMap={}", paramMap); + DataMap media = cmmService.selectCmmAmsAssetsMediaDetail2(paramMap); // asset id로 조회 + String mediaId = media.getString("mediaId"); + String mediaInterfaceId = media.getString("mediaInterfaceId"); + + List tagsList = null; + tagsList = cmmService.selectCmmAmsAssetsTagKeyList(paramMap); + + StringBuffer msb = new StringBuffer(); + msb.append("TY - BOOK\n"); + if(media.get("title") != null){ msb.append("TI - " + media.get("title").toString() + "\n");} //제목 + + if(media.get("author") != null){ msb.append("AU - " + media.get("author").toString() + "\n");} //저자 + + if(media.get("summary") != null){ //요약 + msb.append("AB - " + media.get("summary").toString() + "\n"); + }else{ + msb.append("AB - 한국문화원연합회 지역문화 포털에서 제공하는 지방문화원 소장자료 입니다.\n"); + } + + if(media.get("mgntNo") != null){ msb.append("CN - " + media.get("mgntNo").toString() + "\n");} //도서번호 + + if(media.get("genyear") != null){ msb.append("DA - " + media.get("genyear").toString() + "\n");} //발행일자 + + if(media.get("genyear") != null){ msb.append("PY - " + media.get("genyear").toString() + "\n");} //발행년도 + + if(media.get("totalPage") != null){ msb.append("SP - " + media.get("totalPage").toString() + "\n");} //총페이지수 + + msb.append("LA - Korean\n"); //언어 + + if(media.get("copyright") != null){ msb.append("PB - " + media.get("copyright").toString() + "\n");} //출판사 + + if (StringUtils.isNotEmpty(mediaInterfaceId)) { // mediaInterfaceId가 존재할 경우만 URL 정보 생성 + if(media.get("assetType") != null){ + if(media.get("assetType").toString().equals("문서") ){ + + String url = CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+"/npdfView.do?"; + url += "npdf="+Constant.UA_TYPE_R+mediaInterfaceId; // MEDIA 의 INTERFACE_ID 사용 + + if(media.get("orgOpenAt").toString().equals("Y")){ //원문공개여부 + msb.append("UR - "+url+"\n"); + } + + }else if(media.get("assetType").toString().equals("링크")){ + msb.append("UR - " + media.get("linkData").toString() + "\n"); + }else{ + String url = CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY)+"/lib/libraryDetail.do?contentId="+mediaId; + url += "&rfType="+Constant.UA_TYPE_R; // 히스토리 등록 시 사용 + msb.append("UR - " + url + "\n"); + } + } + } + + if(media.get("source") != null){ msb.append("DB - " + media.get("source").toString() + "\n");} //아카이브 + + for(int i = 0; i < tagsList.size() ; i++){ + if(tagsList.get(i).get("tagName").toString() != "-"){ msb.append("KW - " + tagsList.get(i).get("tagName").toString() + "\n");} //키워드 + } + + if(media.get("subtitle") != null){ msb.append("T2 - " + media.get("subtitle").toString() + "\n");} //부제목 + + msb.append("ER - "); + + byte[] content = msb.toString().getBytes(); + + String fileName = media.get("title").toString() + ".ris"; + //FileOutputStream fos = null; + BufferedOutputStream outs = null; + try + { + String orglFileNm = new String(fileName.getBytes("euc-kr"), "iso-8859-1"); + response.setHeader("Content-Disposition", "attachment; filename=\""+ orglFileNm +"\""); + outs = new BufferedOutputStream(response.getOutputStream()); + outs.write(content); + outs.close(); + } + catch (IOException e){ + LOGGER.error("fail in risFileDownload()", e); + } catch (Exception e){ + LOGGER.error("fail in risFileDownload()", e); + } + + response.getOutputStream().flush(); + response.getOutputStream().close(); + + } + + @RequestMapping(value="/cmm/cmmWebzineSubScribe.do") + public String selectCmmWebzineCnfirm(ModelMap model, HttpServletRequest request, HttpServletResponse response) { + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + String successYn = "N"; + int cnt = 0; + try { + cnt = cmmService.selectCmmWebzineCnfirm(paramMap); + if(cnt < 1){ + cmmService.insertCmmWebzineSubScribe(paramMap); + successYn = "Y"; + }else{ + successYn = "F"; + } + + } catch (EgovBizException e) { + LOGGER.error("Error in selectCmmWebzineCnfirm()", e); + } + model.addAttribute("successYn", successYn); + return "/kccf/cmm/webzineMessage"; + } + + @RequestMapping(value="/cmm/nvodView.do") + public String cmmNvodView(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(request); + String nvod = paramMap.getString("nvod"); + + String rfType = ""; // RIS일 경우 "R" (Constant.UA_TYPE_R) + String contentId = ""; // asset media id + String assetType = ""; + String fileNm = ""; + String sFileNm = ""; + String mainImg = ""; + if (nvod.startsWith("Z")) { // nvod="Z+인터페이스ID" (웹진) + if (nvod.length() > 1) { + // interface_id 로 media_id 구하기 + DataMap mediaParamMap = new DataMap(); + mediaParamMap.put("interfaceId", nvod.substring(1)); + mediaParamMap.put("useAt", "Y"); + DataMap mediaMap = cmmService.selectCmmAmsAssetsMediaDetailByInterfaceId(mediaParamMap); + if (mediaMap != null){ + contentId = mediaMap.getString("id"); + assetType = mediaMap.getString("assetType"); + } + + // 동영상파일명 + fileNm = mediaMap.getString("streFileName"); + model.addAttribute("fileNm", fileNm); + // 자막파일명 + sFileNm = mediaMap.getString("subtitleStreFileName"); + model.addAttribute("sFileNm", sFileNm); + // 자막파일명 + mainImg = mediaMap.getString("mainImg"); + model.addAttribute("mainImg", mainImg); + + model.addAttribute("mediaMap", mediaMap); + } + + } + + if (StringUtils.isNotEmpty(contentId)) { + String jsessionId = CmmUtil.getCookieId(request); + // 미디어 활동이력 (원문보기 이력) 등록 + DataMap hstParamMap = new DataMap(); + hstParamMap.put("jsessionId", jsessionId); + hstParamMap.put("contentId", contentId); + hstParamMap.put("assetType", assetType); + hstParamMap.put("linkUrl", request.getRequestURI()+"?"+request.getQueryString()); + String uaType = rfType; // rfType 값이 넘어온 경우 그대로 사용 + if (StringUtils.isEmpty(uaType)) { + if (CmmUtil.isMobile(request)) uaType = Constant.UA_TYPE_M; + else uaType = Constant.UA_TYPE_W; + } + hstParamMap.put("uaType", uaType); + cmmService.insertCmmActivityMediaHst(hstParamMap); + } + + return "/kccf/cmm/vodView"; + } + + // 미디어 기준의 목록(레이어 원문보기용) + @RequestMapping(value="/cmm/cmmNvodViewLayer.do") + public String cmmNvodViewLayer( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + DataMap paramMap = DataMap.getParamMap(req); + + paramMap.setString("aid", paramMap.getString("aId")); + paramMap.setString("mid", paramMap.getString("mId")); + + // AssetMedia 목록 + String rsUrl = ""; + String assetType = ""; + + // 비디오 + rsUrl = "/kccf/cmm/layerNvodViewAjax"; + assetType = Constant.M_TYPE_ARRAY[1]; + + paramMap.setString("assetType", assetType); + model.addAttribute("mType", paramMap.getString("mType")); + model.addAttribute("pageIndex", 1); + model.addAttribute("lastPageNo", 1); + + model.addAttribute("cmmOriginViewList", cmmService.selectCmmAmsAssetsOriginViewList(paramMap)); + // ams 서버 패스 정보 + CmmUtil.setAmsPathModelMap(req,model); + + return rsUrl; + } + + + /** + * YOURLS의 API를 통해서 단축URL 가져오기 + * @param cmmVO + * @param model + * @param commandMap + * @param req + * @param res + * @return + * @throws EgovBizException + */ + @RequestMapping(value="/cmm/shorturl-data.do") + public ModelAndView shorturl ( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + String returnUrl = ""; + DataMap paramMap = DataMap.getParamMap(req); + try { + String originUrl = URLEncoder.encode(paramMap.getString("url"), "UTF-8"); + URL url = new URL( propertiesService.getString("shorturl.api") + "&action=shorturl&format=xml&title=nculture&url=" + originUrl); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + //con.setRequestProperty("Authorization", header); + int responseCode = con.getResponseCode(); + BufferedReader br; + if(responseCode==200) { // 정상 호출 + br = new BufferedReader(new InputStreamReader(con.getInputStream())); + } else { // 에러 발생 + br = new BufferedReader(new InputStreamReader(con.getErrorStream())); + } + + String inputLine; + StringBuffer response = new StringBuffer(); + while ((inputLine = br.readLine()) != null) { + response.append(inputLine); + } + br.close(); + + String str = response.toString(); + Pattern pattern = Pattern.compile("(.+?)"); + Matcher matcher = pattern.matcher(str); + while (matcher.find()) { + //System.out.println(matcher.group(1)); + returnUrl = matcher.group(1); + if(matcher.group(1) == null){ + break; + } + } + } catch (Exception e) { + System.err.println(e.toString()); + } + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + model.addAttribute("responseData", returnUrl); + return modelAndView; + } + + @RequestMapping(value="/cmm/cmmAssetSecondCategory.do") + public ModelAndView selectCmmAssetSecondCategoryList(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception{ + DataMap paramMap = DataMap.getParamMap(request); + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS015); + CodeVO.setCode(paramMap.getString("code")); + + // DDDDDDDDDDDDDDDDDDDDD cmmUseService.selectCmmCodeDetail2 부재로 임시 막음 (2021.08.13) + // model.addAttribute("resultList", cmmUseService.selectCmmCodeDetail2(CodeVO)); + + + return modelAndView; + } + + @RequestMapping(value="/cmm/tableOfContentsView.do") + public String selectLocalCultureListAjax ( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws Exception { + + DataMap paramMap = DataMap.getParamMap(req); + + DataMap cmmAmsAssetsMediaDetail = null; + String mediaId = paramMap.getString("mId"); + if(StringUtils.isNotEmpty(mediaId)){ + // 미디어 ID 맵핑 + if (StringUtils.isEmpty(paramMap.getString("mId"))) paramMap.setString("mId", mediaId); + + // 에셋 미디어 상세정보(원문보기 쪽 상세정보) + cmmAmsAssetsMediaDetail = cmmService.selectCmmAmsAssetsMediaDetail(paramMap); + List tableOfContentsList = CmmUtil.parseTableOfContents(cmmAmsAssetsMediaDetail.getString("tableOfContents")); + cmmAmsAssetsMediaDetail.put("tableOfContentsList", tableOfContentsList); + + if (cmmAmsAssetsMediaDetail.getInt("ocrSplitNum") > 1) { + cmmAmsAssetsMediaDetail.put("mediaOcrList", cmmService.selectCmmAmsAssetsMediaOcrList(paramMap)); + } + } + + // 상세정보 + model.addAttribute("cmmAmsAssetsMediaDetail", cmmAmsAssetsMediaDetail); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); + CmmUtil.setAmsPathModelMap(req,model); + + return "/kccf/cmm/layerTableOfContentsAjax"; + } + +} 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 00000000..77e3d311 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/EgovMessageSource.java @@ -0,0 +1,87 @@ +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  이문준          최초 생성
+ *   2017.07.21  장동한 			args, locale 설정
+ *
+ * 
+ */ + +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()); + } + + /** + * 정의된 메세지 조회 + * @param code - 메세지 코드 + * @param locale - 로케일 + * @return String + */ + public String getMessage(String code, Locale locale) { + return getReloadableResourceBundleMessageSource().getMessage(code, null, locale); + } + + /** + * 정의된 메세지 조회 + * @param code - 메세지 코드 + * @param args - 매개변수 + * @return String + */ + public String getMessageArgs(String code, Object[] args) { + return getReloadableResourceBundleMessageSource().getMessage(code, args, Locale.getDefault()); + } + + /** + * 정의된 메세지 조회 + * @param code - 메세지 코드 + * @param args - 매개변수 + * @param locale - 로케일 + * @return String + */ + public String getMessageArgsLocale(String code, Object[] args, Locale locale) { + return getReloadableResourceBundleMessageSource().getMessage(code, args, locale); + } + +} 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 00000000..7d16307e --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/CmmnDetailCode.java @@ -0,0 +1,217 @@ +package egovframework.com.cmm.service; + +import java.io.Serializable; + +/** + * 공통상세코드 모델 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.04.01 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2009.04.01  이중호          최초 생성
+ *   2017.09.07	이정은		표준프레임워크 v3.7 개선(clCode 추가)
+ *
+ * 
+ */ +public class CmmnDetailCode implements Serializable { + + private static final long serialVersionUID = 1L; + + /* + * 분류코드 + */ + private String clCode = ""; + + /* + * 코드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 = ""; + + + /** + * clCode attribute 를 리턴한다. + * @return String + */ + public String getClCode() { + return clCode; + } + + /** + * clCode attribute 값을 설정한다. + * @param clCode String + */ + public void setClCode(String clCode) { + this.clCode = clCode; + } + + /** + * 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 00000000..54a0d032 --- /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/EgovUserDetailsService.java b/src/main/java/egovframework/com/cmm/service/EgovUserDetailsService.java new file mode 100644 index 00000000..796f5ef5 --- /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/impl/CmmUseDAO.java b/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java new file mode 100644 index 00000000..62a284ce --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/CmmUseDAO.java @@ -0,0 +1,62 @@ +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 00000000..680be705 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/impl/EgovCmmUseServiceImpl.java @@ -0,0 +1,91 @@ +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 + */ + public List selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectCmmCodeDetail(vo); + } + + /** + * ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다. + * + * @param voList + * @return + * @throws Exception + */ + 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 + */ + public List selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectOgrnztIdDetail(vo); + } + + /** + * 그룹정보를 코드형태로 리턴한다. + * + * @param 조회조건정보 vo + * @return 그룹정보 List + * @throws Exception + */ + public List selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception { + return cmmUseDAO.selectGroupIdDetail(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 00000000..0f67b141 --- /dev/null +++ b/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java @@ -0,0 +1,61 @@ +package egovframework.com.cmm.util; + +import java.util.List; + +import egovframework.com.cmm.service.EgovUserDetailsService; + +/** + * EgovUserDetails Helper 클래스 + * + * @author sjyoon + * @since 2009.06.01 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    -------------    ----------------------
+ *   2009.03.10  sjyoon         최초 생성
+ *   2011.07.01	 서준식          interface 생성후 상세 로직의 분리
+ * 
+ */ + +public class EgovUserDetailsHelper { + + static EgovUserDetailsService egovUserDetailsService; + + public EgovUserDetailsService getEgovUserDetailsService() { + return egovUserDetailsService; + } + + public void setEgovUserDetailsService(EgovUserDetailsService egovUserDetailsService) { + EgovUserDetailsHelper.egovUserDetailsService = egovUserDetailsService; + } + + /** + * 인증된 사용자객체를 VO형식으로 가져온다. + * @return Object - 사용자 ValueObject + */ + public static Object getAuthenticatedUser() { + return egovUserDetailsService.getAuthenticatedUser(); + } + + /** + * 인증된 사용자의 권한 정보를 가져온다. + * + * @return List - 사용자 권한정보 목록 + */ + public static List getAuthorities() { + return egovUserDetailsService.getAuthorities(); + } + + /** + * 인증된 사용자 여부를 체크한다. + * @return Boolean - 인증된 사용자 여부(TRUE / FALSE) + */ + public static Boolean isAuthenticated() { + return egovUserDetailsService.isAuthenticated(); + } +} diff --git a/src/main/java/kccf/res/service/ResourcesService.java b/src/main/java/kccf/res/service/ResourcesService.java new file mode 100644 index 00000000..78104b20 --- /dev/null +++ b/src/main/java/kccf/res/service/ResourcesService.java @@ -0,0 +1,50 @@ +package kccf.res.service; + +import java.util.List; + +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmCouncilInfoVO; +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + +public interface ResourcesService { + + int selectResourcesListTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + int selectResourcesListSchTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + int selectResourcesListProvideTotCnt() throws EgovBizException; + int selectResourcesListOpenTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + List selectResourcesList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + List selectCouncilList() throws EgovBizException; + + CmmCouncilInfoVO selectCouncilInfo(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + List selectCouMainBannerList(DataMap param) throws EgovBizException; + List selectCouMainResTagList(DataMap param) throws EgovBizException; + List selectCouMainSeeResList(DataMap param) throws EgovBizException; + List selectCouMainRecommendResList(DataMap param) throws EgovBizException; + List selectCouMainBestYearList(DataMap param) throws EgovBizException; + List selectCouMainYearDataList(DataMap param) throws EgovBizException; + + + + int selectResourcesCouListTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + int selectResourcesCouListSchTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + List selectResourcesCouList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + + + + +// CmmAmsAssetMediaVO selectResourcesDetail(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesKeywordsList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesTagsList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesThemeList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesAddrList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesCouncilList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesUserGroupList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesRelatedThemeList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesRelatedLibraryList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesFilter(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesFilterCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesCouncilFilter(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; +// List selectResourcesCouncilFilterCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException; + +} diff --git a/src/main/java/kccf/res/service/impl/ResourcesDAO.java b/src/main/java/kccf/res/service/impl/ResourcesDAO.java new file mode 100644 index 00000000..4a2c3277 --- /dev/null +++ b/src/main/java/kccf/res/service/impl/ResourcesDAO.java @@ -0,0 +1,183 @@ +package kccf.res.service.impl; + +import java.util.List; + +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Repository; + +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmCouncilInfoVO; +import cmm.util.DataMap; +import egovframework.com.cmm.service.impl.EgovComAbstractDAO; + +/** + * Resources 관리에 대한 데이터 접근 클래스를 정의한다 + * @Class Name : ResourcesDAO.java + * @author ecplaza + * @since 2018-05-11 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ * @
+ * @ 수정일		수정자		수정내용
+ * @ ---------	---------	-------------------------------
+ * @ 2018-05-11	ecplaza		최초생성
+ * 
+ * 
+ */ +@Repository("resourcesDAO") +public class ResourcesDAO extends EgovComAbstractDAO { + + @SuppressWarnings("deprecation") + public int selectResourcesListTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesListTotCnt", cmmAmsAssetMediaVO); + return 0; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("deprecation") + public int selectResourcesListSchTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesListSchTotCnt", cmmAmsAssetMediaVO); + return 0; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("deprecation") + public int selectResourcesListProvideTotCnt() throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesListProvideTotCnt"); + return 0; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + @SuppressWarnings("deprecation") + public int selectResourcesListOpenTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesListOpenTotCnt", cmmAmsAssetMediaVO); + return 0; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("unchecked") + public List selectResourcesList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + return (List)list("resourcesDAO.selectResourcesList", cmmAmsAssetMediaVO); + } + + @SuppressWarnings("unchecked") + public List selectCouncilList() throws DataAccessException { + //return (List)list("resourcesDAO.selectCouncilList"); + return null; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("deprecation") + public CmmCouncilInfoVO selectCouncilInfo(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + //return (CmmCouncilInfoVO)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectCouncilInfo", cmmAmsAssetMediaVO); + return null; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("unchecked") + public List selectCouMainBannerList(DataMap param) throws DataAccessException { + return (List)list("resourcesDAO.selectCouMainBannerList", param); + } + @SuppressWarnings("unchecked") + public List selectCouMainResTagList(DataMap param) throws DataAccessException { + return (List)list("resourcesDAO.selectCouMainResTagList", param); + } + @SuppressWarnings("unchecked") + public List selectCouMainSeeResList(DataMap param) throws DataAccessException { + return (List)list("resourcesDAO.selectCouMainSeeResList", param); + } + @SuppressWarnings("unchecked") + public List selectCouMainRecommendResList(DataMap param) throws DataAccessException { + return (List)list("resourcesDAO.selectCouMainRecommendResList", param); + } + @SuppressWarnings("unchecked") + public List selectCouMainBestYearList(DataMap param) throws DataAccessException { + return (List)list("resourcesDAO.selectCouMainBestYearList", param); + } + @SuppressWarnings("unchecked") + public List selectCouMainYearDataList(DataMap param) throws DataAccessException { + return (List)list("resourcesDAO.selectCouMainYearDataList", param); + } + + + + + + @SuppressWarnings("deprecation") + public int selectResourcesCouListTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesCouListTotCnt", cmmAmsAssetMediaVO); + return 0; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("deprecation") + public int selectResourcesCouListSchTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + //return (Integer)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesCouListSchTotCnt", cmmAmsAssetMediaVO); + return 0; // DDDDDDDDDDDDDD 임시 처리 (2021.08.13) + } + + @SuppressWarnings("unchecked") + public List selectResourcesCouList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { + return (List)list("resourcesDAO.selectResourcesCouList", cmmAmsAssetMediaVO); + } + +// @SuppressWarnings("deprecation") +// public CmmAmsAssetMediaVO selectResourcesDetail(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (CmmAmsAssetMediaVO)getSqlMapClientTemplate().queryForObject("resourcesDAO.selectResourcesDetail", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesKeywordsList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesKeywordsList", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesTagsList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesTagsList", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesThemeList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesThemeList",cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesAddrList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesAddrList",cmmAmsAssetMediaVO); +// } +// @SuppressWarnings("unchecked") +// public List selectResourcesCouncilList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesCouncilList",cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesUserGroupList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesUserGroupList",cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesRelatedThemeList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesRelatedThemeList", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesRelatedLibraryList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesRelatedLibraryList", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesFilter(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesFilter", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesFilterCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesFilterCnt", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesCouncilFilter(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesCouncilFilter", cmmAmsAssetMediaVO); +// } +// +// @SuppressWarnings("unchecked") +// public List selectResourcesCouncilFilterCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws DataAccessException { +// return (List)list("resourcesDAO.selectResourcesCouncilFilterCnt", cmmAmsAssetMediaVO); +// } + +} diff --git a/src/main/java/kccf/res/service/impl/ResourcesServiceImpl.java b/src/main/java/kccf/res/service/impl/ResourcesServiceImpl.java new file mode 100644 index 00000000..68b24222 --- /dev/null +++ b/src/main/java/kccf/res/service/impl/ResourcesServiceImpl.java @@ -0,0 +1,189 @@ +package kccf.res.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import kccf.res.service.ResourcesService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmCouncilInfoVO; +import cmm.service.impl.CmmCmsServiceImpl; +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + +/** + * Resources 관리에 대한 서비스 클래스를 구현한다 + * @Class Name : ResourcesServiceImpl.java + * @author ecplaza + * @since 2018-05-11 + * @version 1.0 + */ + +@Service("resourcesService") +public class ResourcesServiceImpl extends EgovAbstractServiceImpl implements ResourcesService{ + + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(CmmCmsServiceImpl.class); + + /** LibraryDAO */ + @Resource(name="resourcesDAO") + private ResourcesDAO resourcesDAO; + + @Override + public int selectResourcesListTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesListTotCnt(cmmAmsAssetMediaVO); + } + @Override + public int selectResourcesListSchTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesListSchTotCnt(cmmAmsAssetMediaVO); + } + + @Override + @Cacheable(value="resProvideCntCache") + public int selectResourcesListProvideTotCnt() throws EgovBizException { + return resourcesDAO.selectResourcesListProvideTotCnt(); + } + @Override + public int selectResourcesListOpenTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesListOpenTotCnt(cmmAmsAssetMediaVO); + } + + @Override + public List selectResourcesList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesList(cmmAmsAssetMediaVO); + } + + @Override + @Cacheable(value="councilCache") + public List selectCouncilList() throws EgovBizException { + return resourcesDAO.selectCouncilList(); + } + + @Override + public CmmCouncilInfoVO selectCouncilInfo(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectCouncilInfo(cmmAmsAssetMediaVO); + } + + @Override + public List selectCouMainBannerList(DataMap param) throws EgovBizException { + return (List)resourcesDAO.selectCouMainBannerList(param); + } + @Override + public List selectCouMainResTagList(DataMap param) throws EgovBizException { + return (List)resourcesDAO.selectCouMainResTagList(param); + } + + @Override + public List selectCouMainSeeResList(DataMap param) throws EgovBizException { + return resourcesDAO.selectCouMainSeeResList(param); + } + + @Override + public List selectCouMainRecommendResList(DataMap param) throws EgovBizException { + return resourcesDAO.selectCouMainRecommendResList(param); + } + @Override + public List selectCouMainBestYearList(DataMap param) throws EgovBizException { + return (List)resourcesDAO.selectCouMainBestYearList(param); + } + + @Override + public List selectCouMainYearDataList(DataMap param) throws EgovBizException { + return resourcesDAO.selectCouMainYearDataList(param); + } + + + + + + + + + @Override + public int selectResourcesCouListTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesCouListTotCnt(cmmAmsAssetMediaVO); + } + @Override + public int selectResourcesCouListSchTotCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesCouListSchTotCnt(cmmAmsAssetMediaVO); + } + + @Override + public List selectResourcesCouList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { + return resourcesDAO.selectResourcesCouList(cmmAmsAssetMediaVO); + } + +// @Override +// public CmmAmsAssetMediaVO selectResourcesDetail(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesDetail(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesKeywordsList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesKeywordsList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesTagsList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesTagsList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesThemeList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesThemeList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesAddrList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesAddrList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesCouncilList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesCouncilList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesUserGroupList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesUserGroupList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesRelatedThemeList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesRelatedThemeList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesRelatedLibraryList(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesRelatedLibraryList(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesFilter(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesFilter(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesFilterCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesFilterCnt(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesCouncilFilter(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesCouncilFilter(cmmAmsAssetMediaVO); +// } +// +// @Override +// public List selectResourcesCouncilFilterCnt(CmmAmsAssetMediaVO cmmAmsAssetMediaVO) throws EgovBizException { +// return resourcesDAO.selectResourcesCouncilFilterCnt(cmmAmsAssetMediaVO); +// } + +} diff --git a/src/main/java/kccf/res/web/ResourcesController.java b/src/main/java/kccf/res/web/ResourcesController.java new file mode 100644 index 00000000..82430ce4 --- /dev/null +++ b/src/main/java/kccf/res/web/ResourcesController.java @@ -0,0 +1,489 @@ +package kccf.res.web; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kccf.res.service.ResourcesService; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import cmm.Constant; +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmCouncilInfoVO; +import cmm.service.CmmMetaVO; +import cmm.service.CmmService; +import cmm.util.CmmUtil; +import cmm.util.CmmVO; +import cmm.util.DataMap; +import cmm.util.DateUtil; +import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.service.EgovCmmUseService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * 이용문의에 대한 controller 클래스를 구현한다. + * @Class Name : ResourcesController.java + * @author ecplaza + * @since 2018-04-19 + * @version 1.0 + */ + +@Controller +public class ResourcesController { + + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(ResourcesController.class); + + /** ResourcesService */ + @Resource(name = "resourcesService") + private ResourcesService resourcesService; + + /** CmmService */ + @Resource(name = "cmmService") + private CmmService cmmService; + + /** EgovCmmUseService */ + @Resource(name="EgovCmmUseService") + private EgovCmmUseService cmmUseService; + + @RequestMapping(value="/res/resourcesList.do") + public String selectResourcesList ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , BindingResult bindingResult + , ModelMap model + ,HttpServletRequest req + ) throws Exception { + + cmmAmsAssetMediaVO.setSearchType(CmmUtil.clearXSS(cmmAmsAssetMediaVO.getSearchType())); // XSS 방지 + cmmAmsAssetMediaVO.setSearchType3(CmmUtil.clearXSS(cmmAmsAssetMediaVO.getSearchType3())); // XSS 방지 + cmmAmsAssetMediaVO.setSearchKeyword(CmmUtil.clearXSS(cmmAmsAssetMediaVO.getSearchKeyword())); // XSS 방지 + cmmAmsAssetMediaVO.setSearchKeyword2(CmmUtil.clearXSS(cmmAmsAssetMediaVO.getSearchKeyword2())); // XSS 방지 + cmmAmsAssetMediaVO.setReSearch(CmmUtil.clearXSS(cmmAmsAssetMediaVO.getReSearch())); // XSS 방지 + + if(!StringUtils.isBlank(cmmAmsAssetMediaVO.getParameter1())){ + if(StringUtils.defaultString(cmmAmsAssetMediaVO.getParameter1()).indexOf(",") > -1) { + cmmAmsAssetMediaVO.setCouncilList(cmmAmsAssetMediaVO.getParameter1().split(",")); + }else{ + cmmAmsAssetMediaVO.setCouncilList(new String[]{cmmAmsAssetMediaVO.getParameter1()}); + } + + } + + if(!StringUtils.isBlank(cmmAmsAssetMediaVO.getParameter2())){ + if(StringUtils.defaultString(cmmAmsAssetMediaVO.getParameter2()).indexOf(",") > -1) { + cmmAmsAssetMediaVO.setCategoryList(cmmAmsAssetMediaVO.getParameter2().split(",")); + }else{ + cmmAmsAssetMediaVO.setCategoryList(new String[]{cmmAmsAssetMediaVO.getParameter2()}); + } + + } + + CmmUtil.setNfsPathModelMap(req,model); + + /**** paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmAmsAssetMediaVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmAmsAssetMediaVO.getPageUnit30()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmAmsAssetMediaVO.getMobilePageSize() : cmmAmsAssetMediaVO.getPageSize()); + + cmmAmsAssetMediaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmAmsAssetMediaVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmAmsAssetMediaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** paging ****/ + + //cmmAmsAssetMediaVO.setSearchUseYn(Constant.RES_SEARCHTYPE); + //cmmAmsAssetMediaVO.setAssetClassArray(Constant.ASSETS_CLASS_ARRAY); + int totCnt = 0; + if((cmmAmsAssetMediaVO.getSearchStartStr() == null && cmmAmsAssetMediaVO.getSearchEndStr() == null) || StringUtils.isEmpty(cmmAmsAssetMediaVO.getTitle())){ + totCnt = resourcesService.selectResourcesListTotCnt(cmmAmsAssetMediaVO); + }else{ + totCnt = resourcesService.selectResourcesListSchTotCnt(cmmAmsAssetMediaVO); + } + + paginationInfo.setTotalRecordCount(totCnt); + + List resultList = resourcesService.selectResourcesList(cmmAmsAssetMediaVO); + + for(int i = 0 ; i < resultList.size() ; i++){ + CmmAmsAssetMediaVO res = resultList.get(i); + res.setLinkUrl(CmmUtil.getLinkUrl(res.getAssetId(), res.getMediaId())); + } + + List councilList = resourcesService.selectCouncilList(); + + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS014); + model.addAttribute("firstCategoryList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + CodeVO.setCodeId(Constant.CODE_ID_FMS015); + model.addAttribute("secondCategoryList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS018); + model.addAttribute("couSidoList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + model.addAttribute("resultList", resultList); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totCnt); +// model.addAttribute("filterList", filterList); + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + model.addAttribute("councilList", councilList); + model.addAttribute("isMobile", CmmUtil.isMobile(req)); +// model.addAttribute("councilFilterList", councilFilterList); + + // 메타태그정보 + CmmMetaVO metaVO = new CmmMetaVO(); + metaVO.setTitle("지방문화원자료"); + metaVO.setDescription("전국 지방문화원에서 소장하고 있는 지역문화자료 데이터를 자유롭게 열람할 수 있습니다."); + metaVO.setUrl(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/res/resourcesList.do"); + metaVO.setImage(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/images/kccf/bg/bg-subvisual-resources.jpg"); + model.addAttribute("metaResult", metaVO); + + return "kccf/res/resourcesList.kccf"; + } + +/* @RequestMapping(value="/res/resourceInfo.do") + public String selectResourceInfo ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , BindingResult bindingResult + , ModelMap model + ,HttpServletRequest req + ) throws EgovBizException { + + CmmUtil.setNfsPathModelMap(req,model); + + if("".equals(cmmAmsAssetMediaVO.getSojangCouncil())){ + return "redirect:/man/main.do"; + } + + *//**** paging ****//* + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmAmsAssetMediaVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmAmsAssetMediaVO.getPageUnit30()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmAmsAssetMediaVO.getMobilePageSize() : cmmAmsAssetMediaVO.getPageSize()); + + cmmAmsAssetMediaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmAmsAssetMediaVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmAmsAssetMediaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + *//**** paging ****//* + + int totCnt = 0; + if(cmmAmsAssetMediaVO.getSearchStartStr() == null && cmmAmsAssetMediaVO.getSearchEndStr() == null && cmmAmsAssetMediaVO.getFirstClass().equals("") && cmmAmsAssetMediaVO.getSecondClass().equals("")){ + totCnt = resourcesService.selectResourcesListTotCnt2(cmmAmsAssetMediaVO); + }else{ + totCnt = resourcesService.selectResourcesListSchTotCnt2(cmmAmsAssetMediaVO); + } + paginationInfo.setTotalRecordCount(totCnt); + + CmmCouncilInfoVO result = resourcesService.selectCouncilInfo(cmmAmsAssetMediaVO); + + List resultList = resourcesService.selectResourcesList2(cmmAmsAssetMediaVO); + + model.addAttribute("result", result); + model.addAttribute("resultList", resultList); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totCnt); + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + + // 메타태그정보 + CmmMetaVO metaVO = new CmmMetaVO(); + if (result != null) { + if (StringUtils.isNotEmpty(result.getCouncilNm())) metaVO.setTitle(result.getCouncilNm()+ " 소장자료"); + } + if (result != null) { + if (StringUtils.isNotEmpty(cmmAmsAssetMediaVO.getSojangCouncil())) metaVO.setUrl(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/res/resourceInfo.do?sojangCouncil="+cmmAmsAssetMediaVO.getSojangCouncil()); + } + metaVO.setDescription("지방문화원이 생산,발굴한 독특하고 고유한 지역문화 콘텐츠 및 소장자료를 모든 국민이 향유할수 있도록 제공하는 지역문화 대표 포털"); + metaVO.setOgType("website"); + metaVO.setImage("https://www.nculture.org/images/cmm/open-graph-image.jpg"); + metaVO.setImageType("image/jpeg"); + model.addAttribute("metaResult", metaVO); + + return "kccf/res/resourceInfo.kccf_res"; + }*/ + + @RequestMapping(value="/cou/{link_nm}") + public String selectResourceInfo2 ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , @PathVariable("link_nm") String link_nm + , BindingResult bindingResult + , ModelMap model + ,HttpServletRequest req + ) throws Exception { + + CmmUtil.setNfsPathModelMap(req,model); + + if(StringUtils.isEmpty(link_nm)){ + return "redirect:/man/main.do"; + } + + //문화원 정보 + cmmAmsAssetMediaVO.setLinkNm(link_nm); + CmmCouncilInfoVO result = resourcesService.selectCouncilInfo(cmmAmsAssetMediaVO); + model.addAttribute("result", result); + + if(result == null){ + return "redirect:/man/main.do"; + } + + //배너정보 + DataMap paramMap= new DataMap(); + paramMap.setString("councilCd", result.getCouncilCd()); + paramMap.setString("menuCd", Constant.CODE_ID_FMS017_M99); + paramMap.put("bannerNowStr", DateUtil.getNowString("yyyyMMddHHmm")); + model.addAttribute("bannerList", resourcesService.selectCouMainBannerList(paramMap)); + + //주요키워드 + model.addAttribute("resTagList", resourcesService.selectCouMainResTagList(paramMap)); + + //많이 본 자료 + List seeResList = resourcesService.selectCouMainSeeResList(paramMap); + + for(int i = 0 ; i < seeResList.size() ; i++){ + CmmAmsAssetMediaVO res = seeResList.get(i); + res.setLinkUrl(CmmUtil.getLinkUrl(res.getAssetId(), res.getMediaId())); + } + model.addAttribute("seeResList", seeResList); + + + //많이 본 자료 + List recommendResList = resourcesService.selectCouMainRecommendResList(paramMap); + + for(int i = 0 ; i < recommendResList.size() ; i++){ + CmmAmsAssetMediaVO res = recommendResList.get(i); + res.setLinkUrl(CmmUtil.getLinkUrl(res.getAssetId(), res.getMediaId())); + } + model.addAttribute("recommendResList", recommendResList); + + //연도별 인기자료(년도) + model.addAttribute("bestYearList", resourcesService.selectCouMainBestYearList(paramMap)); + + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS014); + model.addAttribute("firstCategoryList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS012); + model.addAttribute("firstClassList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + + // 메타태그정보 + CmmMetaVO metaVO = new CmmMetaVO(); + if (result != null) { + if (StringUtils.isNotEmpty(result.getCouncilNm())) metaVO.setTitle(result.getCouncilNm()+ " 소장자료"); + } + if (result != null) { + if (StringUtils.isNotEmpty(result.getCouncilNm())) metaVO.setUrl(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/cou/"+link_nm); + } + metaVO.setDescription("지방문화원이 생산,발굴한 독특하고 고유한 지역문화 콘텐츠 및 소장자료를 모든 국민이 향유할수 있도록 제공하는 지역문화 대표 포털"); + metaVO.setOgType("website"); + metaVO.setImage("https://www.nculture.org/images/cmm/open-graph-image.jpg"); + metaVO.setImageType("image/jpeg"); + model.addAttribute("metaResult", metaVO); + + return "kccf/res/resourceInfo.kccf_res"; + } + + @RequestMapping(value="/res/mainYearBestList-data.do") + public String selectLocalCultureListAjax ( + @ModelAttribute("cmmVO") CmmVO cmmVO + , ModelMap model + , @RequestParam Map commandMap + , HttpServletRequest req + , HttpServletResponse res + ) throws Exception { + + model.addAttribute("paramVO", cmmVO); + + DataMap paramMap = new DataMap(); + paramMap.setString("councilCd", cmmVO.getsCouncilCd()); + paramMap.setString("yyyy", cmmVO.getSearchCondition()); + + //년도별 인기자료 + List yearDataList = resourcesService.selectCouMainYearDataList(paramMap); + + for(int i = 0 ; i < yearDataList.size() ; i++){ + CmmAmsAssetMediaVO yearData = yearDataList.get(i); + yearData.setLinkUrl(CmmUtil.getLinkUrl(yearData.getAssetId(), yearData.getMediaId())); + } + model.addAttribute("yearDataList", yearDataList); + + paramMap.setString("jsessionId", CmmUtil.getCookieId(req)); + CmmUtil.setAmsPathModelMap(req,model); + + return "kccf/res/resourceYearBestListAjax"; + } + + @RequestMapping(value="/res/resourceCouList.do") + public String selectResourceCouList ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , BindingResult bindingResult + , ModelMap model + ,HttpServletRequest req + ) throws Exception { + + CmmUtil.setNfsPathModelMap(req,model); + + //태그검색 후 일반검색시 태그검색값 초기화 + if(!StringUtils.isBlank(cmmAmsAssetMediaVO.getSearchKeyword())){ + cmmAmsAssetMediaVO.setTagsName(""); + } + + if("".equals(cmmAmsAssetMediaVO.getSojangCouncil())){ + return "redirect:/man/main.do"; + } + + /**** paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmAmsAssetMediaVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmAmsAssetMediaVO.getPageUnit30()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmAmsAssetMediaVO.getMobilePageSize() : cmmAmsAssetMediaVO.getPageSize()); + + cmmAmsAssetMediaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmAmsAssetMediaVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmAmsAssetMediaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** paging ****/ + + if(!StringUtils.isBlank(cmmAmsAssetMediaVO.getParameter1())){ + if(StringUtils.defaultString(cmmAmsAssetMediaVO.getParameter1()).indexOf(",") > -1) { + cmmAmsAssetMediaVO.setCategoryList(cmmAmsAssetMediaVO.getParameter1().split(",")); + }else{ + cmmAmsAssetMediaVO.setCategoryList(new String[]{cmmAmsAssetMediaVO.getParameter1()}); + } + } + + if(!StringUtils.isBlank(cmmAmsAssetMediaVO.getParameter2())){ + if(StringUtils.defaultString(cmmAmsAssetMediaVO.getParameter2()).indexOf(",") > -1) { + cmmAmsAssetMediaVO.setClassList(cmmAmsAssetMediaVO.getParameter2().split(",")); + }else{ + cmmAmsAssetMediaVO.setClassList(new String[]{cmmAmsAssetMediaVO.getParameter2()}); + } + } + + int totCnt = 0; + if(cmmAmsAssetMediaVO.getParameter1().equals("") && cmmAmsAssetMediaVO.getParameter2().equals("") && cmmAmsAssetMediaVO.getSearchKeyword().equals("") && cmmAmsAssetMediaVO.getTagsName().equals("")){ + totCnt = resourcesService.selectResourcesCouListTotCnt(cmmAmsAssetMediaVO); + }else{ + totCnt = resourcesService.selectResourcesCouListSchTotCnt(cmmAmsAssetMediaVO); + } + paginationInfo.setTotalRecordCount(totCnt); + + CmmCouncilInfoVO result = resourcesService.selectCouncilInfo(cmmAmsAssetMediaVO); + + List resultList = resourcesService.selectResourcesCouList(cmmAmsAssetMediaVO); + for(int i = 0 ; i < resultList.size() ; i++){ + CmmAmsAssetMediaVO res = resultList.get(i); + res.setLinkUrl(CmmUtil.getLinkUrl(res.getAssetId(), res.getMediaId())); + } + + ComDefaultCodeVO CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS014); + model.addAttribute("firstCategoryList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + CodeVO = new ComDefaultCodeVO(); + CodeVO.setCodeId(Constant.CODE_ID_FMS012); + model.addAttribute("firstClassList", cmmUseService.selectCmmCodeDetail(CodeVO)); + + model.addAttribute("result", result); + model.addAttribute("resultList", resultList); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totCnt); + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + + // 메타태그정보 + CmmMetaVO metaVO = new CmmMetaVO(); + if (result != null) { + if (StringUtils.isNotEmpty(result.getCouncilNm())) metaVO.setTitle(result.getCouncilNm()+ " 소장자료"); + } + if (result != null) { + if (StringUtils.isNotEmpty(cmmAmsAssetMediaVO.getSojangCouncil())) metaVO.setUrl(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/res/resourceCouList.do?sojangCouncil="+cmmAmsAssetMediaVO.getSojangCouncil()); + } + metaVO.setDescription("지방문화원이 생산,발굴한 독특하고 고유한 지역문화 콘텐츠 및 소장자료를 모든 국민이 향유할수 있도록 제공하는 지역문화 대표 포털"); + metaVO.setOgType("website"); + metaVO.setImage("https://www.nculture.org/images/cmm/open-graph-image.jpg"); + metaVO.setImageType("image/jpeg"); + model.addAttribute("metaResult", metaVO); + + return "kccf/res/resourceCouList.kccf_res"; + } + + + + +/* @RequestMapping(value="/cou/{link_nm}") + public String selectResourceInfo2 ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , @PathVariable("link_nm") String link_nm + , BindingResult bindingResult + , ModelMap model + ,HttpServletRequest req + ) throws EgovBizException { + + CmmUtil.setNfsPathModelMap(req,model); + + if(StringUtils.isEmpty(link_nm)){ + return "redirect:/man/main.do"; + } + cmmAmsAssetMediaVO.setLinkNm(link_nm); + *//**** paging ****//* + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmAmsAssetMediaVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmAmsAssetMediaVO.getPageUnit30()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmAmsAssetMediaVO.getMobilePageSize() : cmmAmsAssetMediaVO.getPageSize()); + + cmmAmsAssetMediaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmAmsAssetMediaVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmAmsAssetMediaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + *//**** paging ****//* + + int totCnt = 0; + if(cmmAmsAssetMediaVO.getSearchStartStr() == null && cmmAmsAssetMediaVO.getSearchEndStr() == null && cmmAmsAssetMediaVO.getFirstClass().equals("") && cmmAmsAssetMediaVO.getSecondClass().equals("")){ + totCnt = resourcesService.selectResourcesListTotCnt2(cmmAmsAssetMediaVO); + }else{ + totCnt = resourcesService.selectResourcesListSchTotCnt2(cmmAmsAssetMediaVO); + } + paginationInfo.setTotalRecordCount(totCnt); + + CmmCouncilInfoVO result = resourcesService.selectCouncilInfo(cmmAmsAssetMediaVO); + + List resultList = resourcesService.selectResourcesList2(cmmAmsAssetMediaVO); + + model.addAttribute("result", result); + model.addAttribute("resultList", resultList); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalCnt", totCnt); + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + + // 메타태그정보 + CmmMetaVO metaVO = new CmmMetaVO(); + if (result != null) { + if (StringUtils.isNotEmpty(result.getCouncilNm())) metaVO.setTitle(result.getCouncilNm()+ " 소장자료"); + } + if (result != null) { + if (StringUtils.isNotEmpty(cmmAmsAssetMediaVO.getSojangCouncil())) metaVO.setUrl(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/res/resourceInfo.do?sojangCouncil="+cmmAmsAssetMediaVO.getSojangCouncil()); + } + metaVO.setDescription("지방문화원이 생산,발굴한 독특하고 고유한 지역문화 콘텐츠 및 소장자료를 모든 국민이 향유할수 있도록 제공하는 지역문화 대표 포털"); + metaVO.setOgType("website"); + metaVO.setImage("https://www.nculture.org/images/cmm/open-graph-image.jpg"); + metaVO.setImageType("image/jpeg"); + model.addAttribute("metaResult", metaVO); + + return "kccf/res/resourceInfo.kccf_res"; + }*/ + +} diff --git a/src/main/java/kccf/sch/web/SearchController.java b/src/main/java/kccf/sch/web/SearchController.java index ad8e3b73..31f83c92 100644 --- a/src/main/java/kccf/sch/web/SearchController.java +++ b/src/main/java/kccf/sch/web/SearchController.java @@ -45,6 +45,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import egovframework.com.cmm.ComDefaultCodeVO; +import egovframework.com.cmm.service.EgovCmmUseService; import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; //추가 @@ -73,6 +74,10 @@ public class SearchController { /** CmmService */ @Resource(name = "cmmService") private CmmService cmmService; + + /** EgovCmmUseService */ + @Resource(name = "EgovCmmUseService") + private EgovCmmUseService cmmUseService; /** resourcesService */ @Resource(name = "resourcesService") diff --git a/src/main/java/kccf/ton/service/LocalToonService.java b/src/main/java/kccf/ton/service/LocalToonService.java new file mode 100644 index 00000000..55f9da81 --- /dev/null +++ b/src/main/java/kccf/ton/service/LocalToonService.java @@ -0,0 +1,21 @@ +package kccf.ton.service; + +import java.util.List; + +import cmm.service.CmmActivityHstVO; +import cmm.service.CmmAmsAssetMediaVO; +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + +public interface LocalToonService { + List selectLocalToonTopList(CmmAmsAssetMediaVO param) throws EgovBizException; + int selectLocalToonListTotCnt(CmmAmsAssetMediaVO param) throws EgovBizException; + List selectLocalToonList(CmmAmsAssetMediaVO param) throws EgovBizException; + List selectLocalToonOpenPageList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + List selectLocalToonOpenPageHotList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + CmmAmsAssetMediaVO selectLocalToonDetail(CmmAmsAssetMediaVO param) throws EgovBizException; + int selectLocalToonDetailListTotCnt(CmmAmsAssetMediaVO param) throws EgovBizException; + List selectLocalToonDetailList(CmmAmsAssetMediaVO param) throws EgovBizException; + List selectLocalToonOpenPageDetailList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException; + List selectLocalToonDetailListAll(CmmAmsAssetMediaVO param) throws EgovBizException; +} diff --git a/src/main/java/kccf/ton/service/LocalToonVO.java b/src/main/java/kccf/ton/service/LocalToonVO.java new file mode 100644 index 00000000..f282253a --- /dev/null +++ b/src/main/java/kccf/ton/service/LocalToonVO.java @@ -0,0 +1,251 @@ +package kccf.ton.service; + +import java.util.Date; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +import cmm.util.CmmVO; + +@SuppressWarnings("serial") +public class LocalToonVO extends CmmVO{ + + private String id = ""; + private String contType = ""; + private String contentId = ""; + private String contentType = ""; + private String contentTypeId = ""; + private String contentTypeName = ""; + private String cat1 = ""; + private String cat1Name = ""; + private String cat2 = ""; + private String cat2Name = ""; + private String cat3 = ""; + private String cat3Name = ""; + private String title = ""; + private String summary = ""; + private String zipCode = ""; + private String tel = ""; + private String mainImage = ""; + private String latitude = ""; + private String longitude = ""; + private String sidoName = ""; + private String sigunguName = ""; + private String addr1 = ""; + private String addr2 = ""; + private String ntceBgnde = ""; + private String ntceEndde = ""; + private String website = ""; + private Date createdTime = null; + private Date modifiedTime = null; + + private String [] categoryArray1; + private String [] categoryArray2; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getContType() { + return contType; + } + public void setContType(String contType) { + this.contType = contType; + } + public String getContentId() { + return contentId; + } + public void setContentId(String contentId) { + this.contentId = contentId; + } + public String getContentType() { + return contentType; + } + public void setContentType(String contentType) { + this.contentType = contentType; + } + public String getContentTypeId() { + return contentTypeId; + } + public void setContentTypeId(String contentTypeId) { + this.contentTypeId = contentTypeId; + } + public String getContentTypeName() { + return contentTypeName; + } + public void setContentTypeName(String contentTypeName) { + this.contentTypeName = contentTypeName; + } + public String getCat1() { + return cat1; + } + public void setCat1(String cat1) { + this.cat1 = cat1; + } + public String getCat1Name() { + return cat1Name; + } + public void setCat1Name(String cat1Name) { + this.cat1Name = cat1Name; + } + public String getCat2() { + return cat2; + } + public void setCat2(String cat2) { + this.cat2 = cat2; + } + public String getCat2Name() { + return cat2Name; + } + public void setCat2Name(String cat2Name) { + this.cat2Name = cat2Name; + } + public String getCat3() { + return cat3; + } + public void setCat3(String cat3) { + this.cat3 = cat3; + } + public String getCat3Name() { + return cat3Name; + } + public void setCat3Name(String cat3Name) { + this.cat3Name = cat3Name; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getZipCode() { + return zipCode; + } + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + public String getTel() { + return tel; + } + public void setTel(String tel) { + this.tel = tel; + } + public String getMainImage() { + return mainImage; + } + public void setMainImage(String mainImage) { + this.mainImage = mainImage; + } + public String getLatitude() { + return latitude; + } + public void setLatitude(String latitude) { + this.latitude = latitude; + } + public String getLongitude() { + return longitude; + } + public void setLongitude(String longitude) { + this.longitude = longitude; + } + public String getSidoName() { + return sidoName; + } + public void setSidoName(String sidoName) { + this.sidoName = sidoName; + } + public String getSigunguName() { + return sigunguName; + } + public void setSigunguName(String sigunguName) { + this.sigunguName = sigunguName; + } + public String getAddr1() { + return addr1; + } + public void setAddr1(String addr1) { + this.addr1 = addr1; + } + public String getAddr2() { + return addr2; + } + public void setAddr2(String addr2) { + this.addr2 = addr2; + } + public String getNtceBgnde() { + return ntceBgnde; + } + public void setNtceBgnde(String ntceBgnde) { + this.ntceBgnde = ntceBgnde; + } + public String getNtceEndde() { + return ntceEndde; + } + public void setNtceEndde(String ntceEndde) { + this.ntceEndde = ntceEndde; + } + public String getWebsite() { + return website; + } + public void setWebsite(String website) { + this.website = website; + } + public Date getCreatedTime() { + return createdTime; + } + public void setCreatedTime(Date createdTime) { + this.createdTime = createdTime; + } + public Date getModifiedTime() { + return modifiedTime; + } + public void setModifiedTime(Date modifiedTime) { + this.modifiedTime = modifiedTime; + } + public String[] getCategoryArray1() { + String[] ret = null; + if(this.categoryArray1 != null){ + ret = new String[categoryArray1.length]; + ret = this.categoryArray1; + } + return ret; + } + + public void setCategoryArray1(String[] categoryArray1) { + this.categoryArray1 = new String[categoryArray1.length]; + for(int i=0; i selectLocalToonTopList(CmmAmsAssetMediaVO param) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonTopList", param); + } + + @SuppressWarnings("deprecation") + public int selectLocalToonListTotCnt(CmmAmsAssetMediaVO param) throws DataAccessException{ + //return (Integer)getSqlMapClientTemplate().queryForObject("localToonDAO.selectLocalToonListTotCnt", param); + return 0; // DDDDDDDDD 임시 리턴값 처리 (2021.08.13) + } + @SuppressWarnings("unchecked") + public List selectLocalToonList(CmmAmsAssetMediaVO param) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonList", param); + } + @SuppressWarnings("unchecked") + public List selectLocalToonOpenPageList(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonOpenPageList",cmmActivityHstVO); + } + @SuppressWarnings("unchecked") + public List selectLocalToonOpenPageHotList(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonOpenPageHotList",cmmActivityHstVO); + } + public CmmAmsAssetMediaVO selectLocalToonDetail(CmmAmsAssetMediaVO param) throws DataAccessException{ + //return (CmmAmsAssetMediaVO)select("localToonDAO.selectLocalToonDetail", param); + return null; // DDDDDDDDD 임시 리턴값 처리 (2021.08.13) + } + @SuppressWarnings("deprecation") + public int selectLocalToonDetailListTotCnt(CmmAmsAssetMediaVO param) throws DataAccessException{ + //return (Integer)getSqlMapClientTemplate().queryForObject("localToonDAO.selectLocalToonDetailListTotCnt", param); + return 0; // DDDDDDDDD 임시 리턴값 처리 (2021.08.13) + } + @SuppressWarnings("unchecked") + public List selectLocalToonDetailList(CmmAmsAssetMediaVO param) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonDetailList", param); + } + @SuppressWarnings("unchecked") + public List selectLocalToonOpenPageDetailList(CmmActivityHstVO cmmActivityHstVO) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonOpenPageDetailList",cmmActivityHstVO); + } + @SuppressWarnings("unchecked") + public List selectLocalToonDetailListAll(CmmAmsAssetMediaVO param) throws DataAccessException { + return (List)list("localToonDAO.selectLocalToonDetailListAll", param); + } +} diff --git a/src/main/java/kccf/ton/service/impl/LocalToonServiceImpl.java b/src/main/java/kccf/ton/service/impl/LocalToonServiceImpl.java new file mode 100644 index 00000000..8b5f4a77 --- /dev/null +++ b/src/main/java/kccf/ton/service/impl/LocalToonServiceImpl.java @@ -0,0 +1,67 @@ +package kccf.ton.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import kccf.ton.service.LocalToonService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import cmm.service.CmmActivityHstVO; +import cmm.service.CmmAmsAssetMediaVO; +import cmm.util.DataMap; +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; + +@Service("localToonService") +public class LocalToonServiceImpl extends EgovAbstractServiceImpl implements LocalToonService{ + /** LOGGER */ + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(LocalToonServiceImpl.class); + + /** localToonDAO */ + @Resource(name="localToonDAO") + private LocalToonDAO localToonDAO; + + @Override + public List selectLocalToonTopList(CmmAmsAssetMediaVO param) throws EgovBizException { + return (List)localToonDAO.selectLocalToonTopList(param); + } + + @Override + public int selectLocalToonListTotCnt(CmmAmsAssetMediaVO param) throws EgovBizException { + return (Integer)localToonDAO.selectLocalToonListTotCnt(param); + } + @Override + public List selectLocalToonList(CmmAmsAssetMediaVO param) throws EgovBizException { + return (List)localToonDAO.selectLocalToonList(param); + } + public List selectLocalToonOpenPageList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (List)localToonDAO.selectLocalToonOpenPageList(cmmActivityHstVO); + } + public List selectLocalToonOpenPageHotList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (List)localToonDAO.selectLocalToonOpenPageHotList(cmmActivityHstVO); + } + @Override + public CmmAmsAssetMediaVO selectLocalToonDetail(CmmAmsAssetMediaVO param) throws EgovBizException { + return (CmmAmsAssetMediaVO)localToonDAO.selectLocalToonDetail(param); + } + @Override + public int selectLocalToonDetailListTotCnt(CmmAmsAssetMediaVO param) throws EgovBizException { + return (Integer)localToonDAO.selectLocalToonDetailListTotCnt(param); + } + + public List selectLocalToonDetailList(CmmAmsAssetMediaVO param) throws EgovBizException { + return (List)localToonDAO.selectLocalToonDetailList(param); + } + public List selectLocalToonOpenPageDetailList(CmmActivityHstVO cmmActivityHstVO) throws EgovBizException{ + return (List)localToonDAO.selectLocalToonOpenPageDetailList(cmmActivityHstVO); + } + public List selectLocalToonDetailListAll(CmmAmsAssetMediaVO param) throws EgovBizException { + return (List)localToonDAO.selectLocalToonDetailListAll(param); + } + +} diff --git a/src/main/java/kccf/ton/web/LocalToonController.java b/src/main/java/kccf/ton/web/LocalToonController.java new file mode 100644 index 00000000..f12fdcab --- /dev/null +++ b/src/main/java/kccf/ton/web/LocalToonController.java @@ -0,0 +1,242 @@ +package kccf.ton.web; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kccf.ton.service.LocalToonService; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import cmm.Constant; +import cmm.service.CmmActivityHstVO; +import cmm.service.CmmAmsAssetMediaVO; +import cmm.service.CmmAmsAssetsVO; +import cmm.service.CmmAmsDocTableOfContentsVO; +import cmm.service.CmmCmsContentsVO; +import cmm.service.CmmMetaVO; +import cmm.service.CmmService; +import cmm.service.ExtService; +import cmm.util.CmmUtil; +import cmm.util.DataMap; +import egovframework.com.cmm.EgovMessageSource; +import egovframework.rte.fdl.cmmn.exception.EgovBizException; +import egovframework.rte.fdl.property.EgovPropertyService; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + + + +@Controller +public class LocalToonController { + + @SuppressWarnings("unused") + private static final Logger LOGGER = LoggerFactory.getLogger(LocalToonController.class); + + @Resource(name = "propertiesService") + protected EgovPropertyService propertiesService; + + @Resource(name="egovMessageSource") + EgovMessageSource egovMessageSource; + + @Resource(name = "localToonService") + private LocalToonService localToonService; + + @Resource(name = "extService") + private ExtService extService; + + @Resource(name = "cmmService") + private CmmService cmmService; + + @RequestMapping(value="/ton/localToonList.do") + public String selectLocalToonList ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , ModelMap model + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + + /**** paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmAmsAssetMediaVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmAmsAssetMediaVO.getPageUnit()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmAmsAssetMediaVO.getMobilePageSize() : cmmAmsAssetMediaVO.getPageSize()); + + cmmAmsAssetMediaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmAmsAssetMediaVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmAmsAssetMediaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** paging ****/ + + + // 키 + cmmAmsAssetMediaVO.setSessionId(CmmUtil.getCookieId(req)); + // 이달의 툰 + model.addAttribute("resultTopList", localToonService.selectLocalToonTopList(cmmAmsAssetMediaVO)); + // 지역문화툰 + int totCnt = localToonService.selectLocalToonListTotCnt(cmmAmsAssetMediaVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("resultList", localToonService.selectLocalToonList(cmmAmsAssetMediaVO)); + model.addAttribute("totCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + // 최근열람툰 + CmmActivityHstVO cmmActivityHstVO = new CmmActivityHstVO(); + cmmActivityHstVO.setTargetId(CmmUtil.getCookieId(req)); + cmmActivityHstVO.setUaType(Constant.UA_TYPE_W); + cmmActivityHstVO.setActivityType(Constant.ACTIVITY_TYPE_O); + cmmActivityHstVO.setContentType(Constant.CONTENT_TYPE_T); + model.addAttribute("openPageList", localToonService.selectLocalToonOpenPageList(cmmActivityHstVO)); + model.addAttribute("openPageHotList", localToonService.selectLocalToonOpenPageHotList(cmmActivityHstVO)); + + // 메타태그정보 + CmmMetaVO metaVO = new CmmMetaVO(); + metaVO.setTitle("지역문화툰"); + metaVO.setDescription("지역문화와 관련된 다양한 이야기와 정보로 재미있게 구성된 웹툰을 만나실 수 있습니다."); + metaVO.setUrl(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/ton/localToonList.do"); + metaVO.setImage(CmmUtil.getPropertyStr(Constant.KCCF_HOME_KEY) + "/images/kccf/bg/bg-subvisual-toon.jpg"); + model.addAttribute("metaResult", metaVO); + + return "kccf/ton/localToonList.kccf"; + } + + @RequestMapping(value="/ton/openPageList-data.do") + public ModelAndView selectOpenPageListAjax ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , ModelMap model + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + CmmActivityHstVO cmmActivityHstVO = new CmmActivityHstVO(); + cmmActivityHstVO.setTargetId(CmmUtil.getCookieId(req)); + cmmActivityHstVO.setUaType(Constant.UA_TYPE_W); + cmmActivityHstVO.setActivityType(Constant.ACTIVITY_TYPE_O); + cmmActivityHstVO.setContentType(Constant.CONTENT_TYPE_T); + + DataMap responseMap = new DataMap(); + + responseMap.put("contentsList", localToonService.selectLocalToonOpenPageList(cmmActivityHstVO)); + model.addAttribute("responseData", responseMap); + return modelAndView; + } + + @RequestMapping(value="/ton/localToonDetailList.do") + public String selectLocalToonDetailList ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , ModelMap model + , HttpServletRequest req + , HttpServletResponse res + ) throws EgovBizException { + model.addAttribute("paramVO", cmmAmsAssetMediaVO); + + model.addAttribute("cookieId", CmmUtil.getCookieId(req)); + CmmUtil.setNfsPathModelMap(req,model); + + cmmAmsAssetMediaVO.setMediaId(cmmAmsAssetMediaVO.getContentId()); + CmmAmsAssetMediaVO result = localToonService.selectLocalToonDetail(cmmAmsAssetMediaVO); + model.addAttribute("result", result); + + /**** paging ****/ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(cmmAmsAssetMediaVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(cmmAmsAssetMediaVO.getPageUnit()); + paginationInfo.setPageSize((CmmUtil.isMobile(req)) ? cmmAmsAssetMediaVO.getMobilePageSize() : cmmAmsAssetMediaVO.getPageSize()); + + cmmAmsAssetMediaVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + cmmAmsAssetMediaVO.setLastIndex(paginationInfo.getLastRecordIndex()); + cmmAmsAssetMediaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + /**** paging ****/ + // 키 + cmmAmsAssetMediaVO.setSessionId(CmmUtil.getCookieId(req)); + + cmmAmsAssetMediaVO.setAssetId(result.getAssetId()); + int totCnt = localToonService.selectLocalToonDetailListTotCnt(cmmAmsAssetMediaVO); + paginationInfo.setTotalRecordCount(totCnt); + List resultList = localToonService.selectLocalToonDetailList(cmmAmsAssetMediaVO); + model.addAttribute("resultList", resultList); + model.addAttribute("totCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + // 최근열람툰 + CmmActivityHstVO cmmActivityHstVO = new CmmActivityHstVO(); + cmmActivityHstVO.setTargetId(CmmUtil.getCookieId(req)); + cmmActivityHstVO.setUaType(Constant.UA_TYPE_W); + cmmActivityHstVO.setActivityType(Constant.ACTIVITY_TYPE_O); + cmmActivityHstVO.setContentType(Constant.CONTENT_TYPE_T); + + cmmActivityHstVO.setParameter1(cmmAmsAssetMediaVO.getAssetId()); + cmmActivityHstVO.setParameter2(cmmAmsAssetMediaVO.getGroupId()); + + model.addAttribute("openPageDetailList", localToonService.selectLocalToonOpenPageDetailList(cmmActivityHstVO)); + + return "kccf/ton/localToonDetailList.kccf"; + } + + @RequestMapping(value="/ton/localToonDetail.do") + public String selectLocalToonDetail ( + @ModelAttribute("cmmAmsAssetMedia") CmmAmsAssetMediaVO cmmAmsAssetMediaVO + , BindingResult bindingResult + , ModelMap model + , HttpServletRequest req + ) throws EgovBizException { + + model.addAttribute("cookieId", CmmUtil.getCookieId(req)); + CmmUtil.setNfsPathModelMap(req,model); + + cmmAmsAssetMediaVO.setSessionId(CmmUtil.getCookieId(req)); + cmmAmsAssetMediaVO.setMediaId(cmmAmsAssetMediaVO.getContentId()); + CmmAmsAssetMediaVO result = localToonService.selectLocalToonDetail(cmmAmsAssetMediaVO); + model.addAttribute("result", result); + + cmmAmsAssetMediaVO.setSessionId(CmmUtil.getCookieId(req)); + cmmAmsAssetMediaVO.setAssetId(result.getAssetId()); + cmmAmsAssetMediaVO.setGroupId(result.getGroupId()); + List resultList = localToonService.selectLocalToonDetailListAll(cmmAmsAssetMediaVO); + model.addAttribute("resultList", resultList); + int defaultCount = 0; + for(int i=0; i-n*y2|9f9%WJE^B+OgM; zHRc>+jyY3a3K#?#0Q~oxNe)K@;6Gjv03ZM|BFX|Z60)LnUlRZTzyR`6VBmkP0Q&bb z`Ty(1$iG+o_r)>-vJ#>qO3Jh{q7O1tlhRT&wDT}hG?X(_vrUThOH6ymjPXYb=R|OXnM-Ksc2^J=Ly8qcS#UCp%|5*9^0ue_?J4ae0YXc{z7B02iC#P4X5u;c#(EU;;RY0P-td$LQK?pO@+G7g5L8gJ-imB*D<}(VpTc>ROVx8j?7rg(S&~ z$kGxP$#Ti@w{n|~Tmz3J(cx1acz*J88}mnMk}M>rk#2`VL-k`Mjai18`=7Y?ASCbn z1yo83A`$1~W68KOWQdZ?Wu;1uc?VSR~iWK)FfQ=SgQ*^ryTEZ$k&$xQ0HeuRP*K+FhnM0=&-!;G=2WM zN^YFAK>Qd9f~RmeXgXpJk9>VWFgzShUo!BSm`Oia$hX+oii*fkxA;iByky*)ux!PR znRS~RfKOrJ*RQ34cM=W1;+ZNbUB1b;wnoBd6OBD{&XmCUxu!_g3iCI2VHt7;gs&*< zrdFW++sLhl`}pBxX=2>RuhltYW_E;^%FEvmQp!TEN|+E^*!_Jxq@_UQ(Td=dnEk>& z1MdC{H?zY;b*PtCEn70`>L^q7BkU2ziSQam@)?S@s@SlzRQf2zT6R{rP)(q%`<9Qw zfT}8ZHOsM`nWVBjDKb|nNsO{TqMogXm#V zLN+2A@YZ#w;zr-J)^RdOrT%Kl zZftH2Zm1~b134CGqXFN?jU@OHP8(QY}c-k7r%?0)`axP1%p(0=i>_Dp{No1GGDvhX3O z?Tph&2K^$dbIZ}%GV0Ha6XIBC%V-@Qnawd-U>+khG>s4~6Fbzjo@=ZRUK3*B~;~ zN5IVGScRHIm}-SUBS0XHZ6nQklqFtqrg`zCCL2|jYLPK8sz8Xys3OJ{cFOpQF)RAc zYyb9V9fk;4x;IsXFYbz{STM-uar75U`7n)5urLhR?>j)Js930j^qhjQi7LV$3Qn1q z!EPs(?pC#c&5_lhTSC|B13msX!XKP{7YKf6doba<;Ogwy;T_^10X}l1IiZl{&ov;z|yBNbP8~azz6XvFeC?c7?lv)s($o z0_5M4Gd}quNf* z$xg&?B)VEI{2CHOnjZ?8r2SABancJz9nt9Ec3P}WdU&6m)e~+O5eb5xz(6LW zf>k$CH(S#mV?st}b=g?3(2C#j*>&Rlj0-GNfkFE!wqMwbb<{W_uQUWg3TZ6|(8rlbCPL>P9WT zZncVY2D_E|(E4&dbdJ4FCPNQ7seibH`<4uW$M1|YOLo%u3$xCCUfrlTWBO#EG)jme zTW)38AA-5_J`$@l+OAFr^Am6IniTVJBc(IH!pf~froC4*X2nB^;)P<2-TH--rR?&4 zCVJbo>*BbhN`i^mYQZKHB!g6Du2@2XSB9Y&y>uKoIWf!gsrJ6TT_YZJ&fL1&)A3}9 zTeH8;XisdBeBjAG(p~~1>C0y#j)G5i(mYY0u1~A|7#`Gc>rG(bO*WyfeNPF9jA8<= zI9~x;2Bhm{v66h$VluV8xE!U2I7E&zXe6I$Xk<859E?;VgbG+Tabb{px@Zd#Iq-Uq zo4WVJOHzH8oD*NABU~3myF}rdwwuOZ=Fm9>J)sW5Dn^H_N=d>OC=p&4)*{|uNB!Ek@@c;6a}CQ4te zSgBTZz@G8|8?H>_qWcg=_h+}G(V~;$6UZyF6YpSY9+4kd-HXtvO3*{9Kb&BRrhF%q zHcZM70Sk;*dSy%~$(Mk*BfP9nsK2o5e!2zb_FE^)f&OpUCHMooLI%zzW_FGqVvcq$ z_JSV&La~q1rtEJN>y#~?HxJ^k0u~^DQz%v{))q!0z%&oEutpAI5Wscbz#WgDftEFc z_Bq9ij=LRzqQj((5asQwyPf_n|B}HZZ^H+Rns(+JG;x94Vd2F9q9^9DPERu zAT9zOL^x4Qj;YE3L=>W+Enz4?-B?gAKX zn~WQ_Wk+3udU{&=07|u&mAl)1BqFh&Rdbcg z7>{}}mabZ3yj|*xc*?V)x>qNw|`Q0K102MkJ>AlQK&-8_p#WrwPHwl-rIs7p=nHP^FUxCTZl}sb=*e-(Iy@RrSx4;SzUoK>ap$Jy)5T7pKmINz;7wvP^nb&( z9Qc2OEAjsZS5XTSYvX?*)znI1W7YmPp5fbplpb?o1VeA;E7=FxkDL^9%y-9`9Hy5Uo|l=Iyu9x~?f#0` zNa;}ou^tc@5M;#0B-zpX$f$+vIHMTUmg)=fM)EjSqj?O(Ra`4lRZA_|vK18Eo9EhQ z>E;i;?h39xV)Bqo7zY80Ente^JftM7_B;(7my=@3`_EQG30SR0Q7qp`(sm8O)3#a7 z(knM$>wfm2zOdG)rX`>GM@3F|*@Uid{rV=oI5n9ov-;BNF`P=mWFmDNdjZ47y?V2Y zfohTxi&5-ymcHZwuEdF$zLJm}KhPZ74GRn!s=UYhK7nb>v-6zOdJGO@=8`RxK;X1{ zx^wF~sI9@Px3Ow^$#6Go(9<&5Hq2YWfepS>l%bPHyWls{u&o$miolG}=GnZk1jrb) zl2%qLe#(Dk%bar)bV-Up4OI*3iS zz2ST`A)wrtsa91_in;im1zih>$*E(cxaOQ`&>H8s>v3%YGg*jsFT+`o;`M`0TKTjY zlt&ROFB!I6ODm5ZX7iuk3=hJ)4fiM2ra#sT8>r~loggz;A=if@Esh}9y&fJK9ve%r zx|pOMiUxrrnmFKM3RN;E&wsk0zL>ZyHh?Cg;p;$u* z3W^{e&E3BUqa?N09emSN5w=$vMlJ>2s6?XOqlT|0zjL>dn!TNnX#nZ06ybEayPDBa zNQcR~E^MuF!WBAAK>@GcoQ+?Qrpei4z(DbH2x+_MH6|ZjXFsGti~6WSzuP8>x{B4C zyCwkzH=fXM5~Y)CU)U)dMcHW)!V7;x1v2fHDsn;gO09fE{rXp0sh6$3}B&sf>Z_97P}>iF?qV z5m!Wx@Jdogb}$7|McWlX_40vzkhC3(_(A3wc=>JIF8Gvni}H|qkaoNA9qn%;iq84-_;=jA{zGAq z{}DI;hr+P4wl*&XgopwG!Tf#&Pq`JkGI(#_gM~a9={|^_6BD{;Av-;OD7k}lAp@v0ot@b(+{w!T zytf`9z>=L;(XhkvLrCeIp9Nm?zvdkesmf65i&}tJBP8OTQ+3+R+(1k(>f9vorm?1^ zo<`c~Igg{^=k054Up=Q;wVH(_nmp@aG6G^{FvbQ0s+Oa7}gT)Bq_^S z;tbXn%Qjrzqi{c|;e+>PY@;@p&Mt-klefrU6x@@ctb#S!kc#N1+4Cw-->*qua8s9f zYbLoaP@mvY_E^kKQ3R&u7s{ZWR90cn5U@CtFA92`(Zq5_-&QZF9hsp%3H^}7yoH^( zNzRqYyoq?wX3e*q6YRC#&O27NL$=FW8B`Tq8&w9hnzByhKP# z;#2+!_ZKF{X3L<50RaGn{*g;5|G)(HpSje|#>UQ8!q(L8-(H`J*6*?jK6lYptFud; znk^y9%_hyOAF7a0b;%F~p*tAOW>RytkJdISB7!dhOhy<9&-SY%$J^&28G_6LQVt_?-6BJ0(l=y`Yes7NEu;3?TmOQg`mx*if~i|_kvOGh zVse`<7Q1bSi#iaK$s0;M%0n!aHs0QaM}%yYWbf}b?|662+x1v5qfTU6AA(VQpn7g; z99@?TIph$GRZ?FIsaI;5xw8c<0^2b(UPeV{KYMko4t5;J@*MLzE?CVQpPS!p*Zu$IREJL+YiH zXFs<|n$VwCs%y1%S)dPXN*Wq>ZHdUgx60uSn<78{LgI*rXOzL^K#9#R1!*ZTrDtn@ z5?W;sH`F}iRpZ2u35<`fX(nRWfGVqXs61!ZEb7@xH&hGsM3(tB?0NC4bAU1E^MC}< zu3Z}Y2Td3?A4jJx$VFs+?}5!b%X{vi*9>ycw9G6`hg~{#pK-h z-0_p3}r$6*KwB z^4@T}zCM@GCd$V3T%o(Z0!uyFpt~PB9{82MzL&VYSl=T1u>q*{#+&TGn`i?aJNOtr zc*Fznf_ND#I3jn@?FQN0U5i!fS_ym5NW8u{V==W&+Qyoc)}77*2K2YZ$SXxJ+wwS(N}mZ>8pLww$9b4)z@EJ;nJQWt-=<>o8K8mR7)Vw*Gzo;~clo0%)VzruInUhmE2cj#LF z?lSz3QU7O3|I_dgva|g!!^0-|LKaB?J@k74vLpwdFl^x-0gxpWVJ^RM7ncp%i@d2T z)-GXCih{uMVMqSjY7edI4Ra^&hVAN{5ZPclT7xG2SFEFDfz(*CZ^Wn27}7Y5S|@gw`vLI+UD=PCMXSW zu~gXmxKRDh-TBoTyfWUrTwFx-G;A~bru_vYC6Q2@QU~AKM;!^W?(Jlv=b#5jmKJngKTCMAR|7Wo{RD*L2rScq%>7lr0{8XBZ8OQE_z z521RE(hWrc`#*YPrgd;7q6g1#ZPned3!V_tqeW2c5Cfc(nFBMb7+s627DN`dmOBU? z7*okBV}H~J!7kBypg3?T)`uxzv*kyNe1!7vy4L7gUBQb}*Cj(d{)j1p57TV%JZs*? z3zn(#w2w?-wrkD`Gw3B1&@GQ{w-l;}!t6zRzpDQ!L6wn(Wu;Mph~Cv5dEGDJ9$s=} zYD&~3I#f`aJz}_K&6-&c!h^4;nI51kUbsRgi}aSDL~q}3aU>8D79VEBU3g1=pFVIn zh6E``C`aK9G{4-)8YfR4QYu4~<*654Q@QcpqON-%`&9S#0!43I` zrtjUY%YYdy6;$HgM9mk#y^Jq}v%{n@Lx7wRY|*d3>(zs=fRew&55{kM@P8uZ&z2VI z|3P%NuK%JqllW=LL4M?r*=Cu{kxHc+#Y4Ex3pmXdWNqYO)MWm zKyf_*Zy2;rL}70LJjtFUSrv02x0&pY)2<|M-yRmm3zFjUqF53;o3s1aqQYKByGK8Taf%&YtYObFHG-zv3hY2(e z+TE8QXQJMpOPnzEArRgO@5uED#Z*eRxof1`f2!4^AwoM;TJ8pm+6lJi%2NwkQGC@d zLn#EAT`Ru!`k5meeme!OLD$AIUyeWciDn&4?(o21A8izCiAwQyoWv|S8jjsc5;jfg znEuRW4bCYry(H<9YY&y)PuQP`o>H&#<_t)6R78SslCkMsUH583SNB*Vst99J$N2sT zwK`~y%0Z3f9DThNRx5S(2v7-=-!r=JjbULOKPVv<|MqwJH*pzR7y4VWSo}WC|2awO zKO_s*A15jN+bB~sur)LJx8Wc^E(t7vTtl& zjYM_^o)odicbvZmgv))hCl;}66pkn))N}o#QZ4S~=hGLUK86wlI(h^_ph6UVsXljP z1UV^aVTUIzYZPb=U@BDBCj! zsNdCI>y7iM4UejvQG_@ucvuh3SrOIZLoSAbD&hMmrhN^r+HKL8)@A z;;&&lu?Oqreg9di7vwG6!Tbj>=dr1Ic$>|Gb(wXK z#~qMNz>bBqeW0&qk}*>EC%T%ZN5uzIGpRLdPel06945{e^98+6k#UmvC&bFYo(D?z z9Ep2m{~~lQ0hfP&szW0RwnBfLO%y_+(~z@T#SXM#K_M0-=`R&{9AV#!1L&JUA0a+f+1*jRH$p_^9vkRY7_Hg@=J+>7q*%} zk*p;yAl_jh`T|GL_1+EulM;$X)RBH69>&Sfw%G_!jgaQlG3`!eGntvaKaGyg0(8Q+`u{hG1_UVQffG@FdmO zz%9y4j~Z@`VfJAVV(Y|}HQA2b6LlxM+=V7v`6zIv%vHxiu7?{&x_b=wUta7a&yOZk zg9%vB=Qfx!)fJ9j5@c^24^QC%vCcha$S9r1GCPciR`vR_wSJbw*jK^LRUMZ~(tTFV zpIG!n!MNI=EN@7OB}3Yz422-G>Xfl9$X+$_T;!;md|cDfVOl77r9xa59G9lFlpZ0u zD1;!I2;d}6jlC#eRtT}gK`CEyfMMapoF|r79TNdy>=DRBKzVWD?kkUFh*laA!yszm z;^f=LI(syG|21zw+h`z6A$4qWW=I`?N$K9AZSwsEM~>7LssGH6S>yqdr^CE8a@;jhq*C;;Tb}mZ*xXo#X6r0q4{Hl+1QZETnZyL%ZTQM3riD==k7BO}2;M1t)ouOr^8gJtR zht}a0Uv=o0rDJSQkv^BEiyLS(`QwZr%1q;`IGHWj2i!J`(?yi6Q@} z{OSKlnSai62-_LC*qGS<+a_~Sv5{NUN9NgZi>ZGssJ^Qp{*6F(AWy@^Z_w(x>rq5$bt_Ud! zvveWcfHCAVT^6Z!{JOI*x(_BG3#bjmG=!VXUTd&Bdu!faZ7?vfxXCh2ms}ndrF_O{ z(PKEj=(@wH)Xc$4-(u0*2$ix_iMHCk_A0r|{ia&O)nhP;+p?T)*E)mc8yJ@HZWC2V zm#L4@dUb-&TE>GFN|$(lhvockBeq@Z53a-<8dWNksOH$8f{T<+m_RgJe!qG?!FEU z+XI1T6(*BKKlyX7SwauKHz2)3cHR#vd?^t#lfn}_foL=-XSUTyo>yqxWw?{>=C1l8 z8Y^1aot%eHjgfj5{#--KLjcu!jPI=GgEd8i50I!tUkA(gxT*p0NiHa=wAQk!TO`;7F;f z*7I%E#TK3IH}Txlyj)F(K^>yaqI{+P3j5OcNpgMlWXWT1SoJuxto$@?{|pCe#`SFe zwa73gSC_Qw0LCYhc|=Rf8~;2??=?gZwHkyn7O zhv4;$ac4sujYG_LuWevbZy1E_jy=_K8}oB?-*9sJaBaIZ;1C46o7Rp|LaA$Cg)H+rt=DjunqI*%#_@1Ckw@WBC4dUEGKM|rsbtWN}w^v_0A?+-8f(3a_Yx5*`gtQG~ zvDO5rN!5tM1fuDXt{Mb7u}RZ`#<~bKLK7wfjWl)yZ+f+VsZt|fDM^Ljfyo2*ziAn~ zKPm9vf%%^e6!}d_pubvv84j6IvYDzoiDx2YXMvBX0?3N+3g|qqh_Sdof@2Gr1b!_^ z&4GHJ0l$@-=gm`-glfEBx;$%IIq`nq;RCqLHx?Xij6hc@#)-<> zg#GMi0k)z?*WE_@rCw^?cCTqps6qf{im{QDwlm_5iyJ zN@aBAes4fWUAk9cD1kt_zo5B5$QHG1HB*AhxacEz=6BLv`^?8d%_T5qj36{n{pP84%w9O zY~v%$U%Ev}em}|lw{Fq;hi>^Zo8tUm4o%7AzY^-dW(|1kN|{0m1Vwm~s~I#>PnBx541x0n%-0)&gSko*FyeubTRETSSiIO*>8 zoaTC+bo+9>zJm6dKx6!_#rTOlF(G;o--xxLi+25Ky*R%OphFW8=pRLO+?QVb)Pe)$ zR6Ds&-Cjsq!ZC9+w0<Z#UWfEZn~=*{|<&tcf(tnBV50vPM#{o;ns>zBYKeyx{9YU%RM0sKYR|pLCj2m*iXSM zHWz4G>X6t5PQ51mT#U=oAy64>Yuw#3|MRjl%SfWEtwfObHCXFxe-p!76D4wMOfOO! zGn=L#BQ(A?yrx@&8+2CG3vXa2=sp)MfN97yvOWMF6pNhn$Zct)R$ew%#HImiS=9|8 zF&{^!%~7^+gaY_Vd#7L4%U^LH=RL8ZkaRi?d{kFJiSoosdi})gOz{zTscxF!8zRUKz#C&!YD>9 za5Z#c8izXi0D7ncP8xj_0(Kx7mg|jerl8$UsWvL7pvhxnP=GIn z4vWaH|G6mmp@e830gz4N?|KaMetwgypHTnzjHb_nBOcmPPjH` zPorMc;9?R{u}toR>P3u*74wVde4HdI<|J8qv@!}|p>w%QA);|_#?--wvIk7c z%jSC%5ZgyF0JJS0g?jt*DxOa{6RMMiC-x05nhDpjwK>4qSB4?6n2}D`viaguR;VTa zw4Ws?E!;mMbH*4Y_V9o{PI-r^`1o8W0?Fc6HRYo`ID7F>5*%k0eGxQ)W^|qRw}r+J zme?`N&=AF|>U1dUo#59AQnR#YV`m2I85IGG2v)yw{GpUg67nSK$Ilk*2sw+uS-3Ug z19=mP5S4>q`Ak2+Q@Dj6N`G)haA3+iC0ExJXRKS3#fbg(O@;H2Ls%|pVlCt&F9t&3 z8SpS#;)@sQNXjtW6ZGvTajjFExb2f)dl`lq{x5VN?lAh%OMspVhtZ4_UC_)|!F5x% zyju!tcno5(n%~}gUVd25#Ob7C9WX5eELYvj7v5jNVW|Njx%xXe@ctp8{|pY?Ka&36 zEi)MdTLUwbe~(3nDC^i^slfBBcFk|rzp`AjxD+s<4-e=E!wV- zEs81!RoAp|vo_URwOrR|t2?tg9o`g+0s7vnf)$FDCMeBAM>wE99i7MIkG08^GhR>c zS+QNFcBvkPP|;F^WcB(5mut12b$^nqx6jH_c&drIS6q(9Fo%R zp&%iJXSpLe0JBMN1)Chubl2FwxrZJyA{Sm6YVa~SDXwK~tvIPo^O6TcEx&WMUR0|< zY}yQX>z%=hJl#nFJNuF<%hKT=^tiOQnAvD|6%->h7j5YrcN}o)Zg$h&d&m_ytT(F5I5TW*IW| zpk4gLMEJ@>RE>a;UfAb)3m;gRi%FZl9@kU3CNtIe%C*M|)!*n!30L zd}Zm(Z)QP9I3KuE!akm(?Bsb*5&c*oE{%)d%v*+6sJ2yq`a^E!tmxcFm~%6YWEe5; ziPIQ8j3fLodl1S!ETmiNhKdPq(iWEb{zInq_r<0~sxyB$X26Vp?XW~+3K)(#u=Q+MstG^J2+%@dz9#gXSIH;UvhBAL}GGU#0Ig7H0` zvlfo?ADJ_GS~pr-?lrBQ$qK=j^0!!9#^BEF9&=63i?r1VDw{SxvfMD;RC<(b(?d($ zDuJ*{mx-pieNLLq+FgR`Nt1J9`^X+z23!Dxq^pcV(}b5aY#*r)gYhg4r{ zupvMxh|v$&vcm&8gi(fq*9A2NzHLI!OB`m}-ovtin2Gfhx?-G^jw;>)ScDEyMPZ%3 z(^++GrraOpe$9F`nGO5P6is3(Ep6(a8%ea(53)5Hq^!12)_Gn}%AC=?!RnNGG%Kp80}E ztJ=wV51qW}PHW)_0Sw)n*$B(gD;)xNE}pou^GEi&g3+u{A5}sU)Y9 z6@?2yL>>f38gdwoGSD}{xoaspQ#=#=UG6h~k5&G*2=7DTpu+;QWrcrc+9%g(#wjri zkMFxTuszZ$47&N*8f&~jQ8-~OdT^DcmyC@YGP6sw^BT~b`)*3nARCbC&DhU9XVF-; z%g4dKr_h(R=jV?xsC85wK%+~r{pj!WUby3Xulr5cS6W>;U)4eiU%eL{`@jL#O;3va zn-6d$eUh_JM@eVf{NL!Z`@>OW=0PCsaxB8tZ!_6bsq5H&!7Qoxh7>>}`If9}CTlVr zY&8%CWl$w-*i1i0-xv2;~IP8ht;Nk4b3rSb^BbL)DXR7yCMo>~C*?>yX z%OuxR%YP}wqeE7I&3roB6T_vq6!(h#2R!Dt>%7{`#NbV>;-iK9}|7aEW6AGt z_m8gA7U2AMz3THjqy10A{Rs#|rL;k#*4o5oQenr`g*Zc6biKi3 zu#s*J5nLp3{#UxKsqb{|Vh-h%@kKV&E3LR1#V-wAoEw=m%HwR7w6s{C*s;VG9f~!h zto2n5oU8UiB76a{rdZVGAGZ?bLRI{?c&;vw_{wfR0$Dl5p4IU*wnMnpcA6YmKJhnL z^81N3uSbd7*=JQFtYobG;#xznxrNbz4fEWA^lIdQN=e{-GS+0S@pspnMgV>iFb;wf1xj2SM4n;N;Dbb90_`elL?Kfz}H9f zTtZ~zZD9P}_7VbB+A+%Q73culJ+tkbpi0N}kArQ+vXiC5c&DLjDW&bF3JSwn56e&< zm63WxHAKP^VnIb;Gyw}n=3GWmxcPR}T?Yrf@6nm6e7p4Z13$#7{iLs;b@)my%#>&K z;jN~+T`NfBdP>rUbWfu$-v90<-F{bB&-$Ge&|{tl20J*w%S{{wf$Hr*X}0bdV7j-eFGSE_}*Un49t-K77#8ekcOk zIg*|7WK{Su@^(@;59t$}-5@PP=kc=8EX;J&fh!QQTBx^=0d#Ux_7(3%E$lNv-^Gm^ zH4?;)d<^e$Vc@GB)jT3}P}7eaIR;vx?NNTS*MNp~Ve7nVv%A7G0G8$|A@$6jSk`2? ztdC>u9L}E311Sm??i$x()li^@r8oo_vBBJT=!jsNJK?$6 zwF#pAJwt~c6HDTvgL$EG?XEg#DyKl4e5bfiQP;uWzeN~0GjOX_UibnX_iWMd{nN+b zdhKm6lW)X9Jn9_?5^@5~kP_Bf;E?-!HzCg1O2M3k44mlE{bxWQkT;qG%@5}sQ6HI( zx`Wnal+vbc9>NS;S+wg`*rtd<>Yi?wj#;v{+4(`}gvRT3KGeLf0$^DH5ZeJ+;B7*w z+enaRB}hqjoj@BQfmNBhVM)y;U@8)nQV$o^ExbkdQ4$=o6{i+tYpEbTPT@smA&hNW zor2I<-*XX^j88>hf`r>TmqCA{hUZggcrlKNXBY~23_G0a5zb2<|17Y7S;-PXfBoDdXZrW z1eWra!{W$#a%Lm{;d=b3t=I`E#g?`k5V!SuYPTZw>4DUWad}CM?4 zbw9JG{llEC4`Tog?+p)v8AcF#pCg~A1pITN{khSn6W@-G+PT%Ld~m#EtaivduL67P zTUmj-ldI0?XbAQ0#rkLIe%1i#8%EGHgFJp!!;^g6(~qpc2f`Q>Wrft+Lm>9EIS8~y z1@II=9q6Peo3Wym5#cpTrc1`U7sSS&b@#h0vpL>F{@$3V_F+pIr6gNvNz!)5AdZP| z8J$8MI20@{JlH0yqBk6e6qO>$Sq&sHme1;um069jPo+ORNbQc-Oe~O(yLIXYQyEk} zU@|-3yu258NUdmyWGA;o_&zt?y4=(sa|_HFL?ZZUW!6>3n1q@ zSFmr2lM{}`Fzt*cXXrsWdqtfMd(BJ=PQd~(j+iA;Eq+`a)o8(R^`U$f6g@E7zvLUY zzQ&H*u%y)kIT>yguZS|E=ndcGBH2T4$b{{Eo z39v^Wglhu)k~qezsz-MY6TgD*B1lXn-Y3gA4DO9S#2X8SP_zuMWG9Qf3!nz%8dIWh zu0P#yPaQKXcn#_fZOU0ms?ax~>4DpN(9nc2b@q*lDIqp39awH|o}!a;Iyv`f24iJK zsrs>Oe1*xIX{KH$uVnbTnWnH5=!4rtig2>XG*!1`d%@TuaY&iyJGGq6d#FS;G0I{YmVPq#SUsd^IK9fW%Z^7nxzCuy7H%$J6xX!WXT#8xS{6$|y{q$y9LO=S0=jP7v& zJEjY_SLYrn-_fr^A527d4WoG@OriUpxQm38h=x zo_PMAQgVjRT;BzK643PA`-JHk=EY<_z`j8JKs-$=n3EIJNndt4oKCWx z%*y!UertXDPzg3o1O_=l2=AD3a5*`Xye7}sp zGcj&0p|sI3rE+h-E_P`9;7>O8$s^s9I&xpPy#9D0h&e~2TsRTN<5#Z{^eKl^6roz<@+y#c);07<+4RVkMcjl|cJYIEE zdmO);ch7l+-VT}~je%-!JXvw=w64xX)2@#79diR&`zc#KG(oDPzOFXe+kx(Z83QRarO$u8;+0@^M>*=lw5s93XW3fug`|-1eBFugT18fX5 za&xSNke`Zx@p(bn-^&O6U>aQe_=m8Czxa87g-FHX8THiNw{?ibV-UI~>=6N^AN>?t z7A!0yy4qGiF4t`QhtWQ%Xb?1xnp_XbiOKrATVCwe@0!f6!Kp1rT#u9E$FfV9x~dJy zts};MGj}PUp+CvazEJr_ZG2<7x>qfp&EN;AyPSk!_dI1h8d?3+_GmPL6Vn$C_K*2a(pC<%O7*^9Spx|%k zhJ}-D;^DUnbpMA9+`!tT}+G#NL*cS$7jiBK!k(JU9mq`9Z(|#Ut6im7EKgQF3^TXoVJmnCE8s zxHeK`h}_FD_l z#~?yy7KpV&$HfrcPP9XY#TeR-rzfrd=vCz_9}HxR%0VE&(9cCd`1vz{4PsL61lw=~ zgg8Z!eyK!t4#9>rbA;Rrj~$lfvvHdJ3%&NqgOUM%oHeZ*># zYfm^IJG$8`H-gH5ytGa`4#qlS^&wn=QxoND1uW6` z8$_~^f$IsWSjOa^d$q>c9D!eV9gX0ockOk?Ut<5{U5?>TQfJnpQ3PJC`0iBt@ROi2 z139$m>Y1_js+yo|e$K8W%uhC>(=f)tBSbL+Ch{fwrqmoku zs~fFej!~dvG6!<$;oyja1WWDNvDW5ft>8V#`=`_}8cqHS73_%5x2s<}Y7HJND(%kV>XNo)ZFGFJII_L#&)u?5Vk69Sc4!coF5 zib|RlXL|Xc0_EEvD*de(R6(a^R5*^9Hl+(q=nK86ih3;g(Y3(@?kk%czvb~HUV=x1 z_>(N~B$)%;vAa=qo-b_YN`pWnzH|23W4%}|v78bYb&Ke^ff$#QlAhRO$6xxjBE&d4 z$#e+o76>pDb5L{}B{N>Th8%(4xP~5~hdm#t^-Kw4_(fnDn8{oVI>t$7 zz#_{TW(s8~*Pj~@);7?f7(iqKPuVME?Y%JL2 zgN|FioK36hsH4A_9|^m=hh}n)#XDrAC6Dy04)?0E8y}?{ThyEC9RXtf zZwy#S!&6mwq?t5dgo>zt%vRAwYS%o+kH;!?V^M9VM|dF&r0h!Hp}u^u0J{1jwh9Ic ziN{FysLo_-sf0^}-qG{XyTrI@pv_NPe*5&sK!OTIy0V+!-pu`0 z!AYv7r<8J|$OLxI#5ndOz~i2%lI+zIE%T=Gys{O4{y{Wm>^0Q9zXrh_nEyQp{*Bv_ z{e73&*xQ;KSsC$L>sz`xm^u7!2+vAE`iql5=8pbeC{+ZyCSbv71!|%H19G9TwL1+y zo|O1`Cfd{y@WXYN37F|_24v|IGTD0FQ68z_OU;)^TKU0!>Xo1e$}r;gwCQr$a+T@E z>*MnYxlMWtS(rmES3?C5_64C97%BZ_K`0F=2GL9dkoNV%Vpuf#jj^AM+H`ga736v_ z%ta5?X|fU+x0jL`cHk~-kde|j1xn<(WUju+{ewK8S08-SW{F*}-k{-GuuJ`5GFQE! z1QD6ZAoYPmki#L@BE3Rnr`w@iC7(@WW~|@F_EZC}Z%I@VdX#_7#oTiVkti9rK66jC zeMFLa?y@-CZA}S>$#rKVX#0d%mHN-IJb5P!|?ul8w zYndbGrm?ZHLLK}vy}!smge(;!cX_si8_4^}M71nhY~D3ci5Yn%48oT*qz@JL!L11j z0K>)p=H(H#A>_l;E=3z~w}6*g=3|pgm7&aMHpuYD&<5d=>!lNAldb|u`TYY0iFh!; z?xT^j{^#mpByCJqCebrQu8+Q}nqidTuA!M9eT47~LyiSso+ zx%>xI{C9xL-z>NEmzUb?KllZ!*r|UdPz-kUy;Jsmqi%pqP|*iqAW|ak_6~xG(=k5> zN6_=5aTEX;f6Gj;0eUx^Yy+`aY3LB7rS89bVr=n!Tvm{W8OJ$XaX-CzAFVTPd3%0B z>Y;?wV2^VaNA(T*jmastwff(|(tu|a+09>dx>Awxu5QBV22FUU+^6v;4T@i3Ud2!F zXBoC9H+EYOh-YY{p+_Eo0XaBKM}o|)*&%L>WIN^EdoQ0b0w_|u6~~e&;DxwQ-Q^3- zR%J5~oZI{)_O^P%D)(2*i7yWRI34})=h_HwG*GU0X_>QRQIhx(Nsyyz3+e7`J=i4xS8KkGmS0*`u z3Ht;?SBB6DZU1=r2wIDt$io~6bhL12em1> z7-6U?>WtXlUDZGr*Js;$0 z69x~UL4}HP5QQ@tWiMD*$@4APC1{d$$#NYd6`}?|+)6*%PHe&4(EX}PiqpOv7SFxZ7b zG{+2MX2F>}iFqi zjK$>FB$0RAFKeM$h}vqQS;RR-~Xcl{&sTw ztuL4RQpNm_huG?iw)n?j#pHq6W{Sp)a$gathjJqgLJt0YMq)r!{0v>e9Ecv_UA7aP zX4{{)8;@iY!y-@t=xCCgeJk_e>}?OJ8&`wHk;&53RD-xoU=g|;%N8TTH3rnod7|5M z<{^#?HPah?K;F4Or=C+4+MKp!2l`-+?9k+8Bc>?1$5tSU!XTmb=(on&lkh6E8|je5 z`XA#Z=XG%)=#uk zatJ~$i2eFco@|Ht(3+04nbul4(Y7tMh6~;OrV7EWu*xC}x0^lftjJjo+K$g_s&OlheE#ou?ZjskhaFy@9%%(|5Xfo8(SlL$Nx$Y zvWn4^{E`y~KG_XoR2h|Qv@b{&!)Z9Wh2cl&<%G*WW9H)+3Yi$Bg}%#nfN19gd-L&9 zXn4#L-xysuEUuib1%Etz+=vUU)#DOnssMh^XduS{M(U6qDNdCTk?W?Y+Ke8(+=#@` zef4>wBHiAWPo9CzJYa^JxY<^HjWjoN@e8!fAQZ4BD}=VbNE0=xpEil?o zh^2`zecO+&s_uJk-+R&B@?-rJnm^J*@wC}H*J6L7I>bvawZvDlmOqSxG4ex5kdh4` z=9>B$P}zk+j%vNm;@~nzc4St(vVrgnoqEk(F4C@YuiTgdpH0_L2MUaLllQ0O4EmSG zZnICbuTvBQF>84Jl=sS?W~5R3?g$Id6$8l!qTj=dHQ?;Kr&e0p9@m>!8}Rc)c>l}R zC&B|v8=efxhUA9{Z!a~>m`mp$1D5+u06_(f9(&sw04QFGyB z5!2Dk*uu5d39l9V-2MRUU-}aRlxi7|uM#HxKTG(xEL`rtO8CD}Kqm#sFM|{^w{Fo~ zZ#|G7s2v3m51D^W7$y>mG$_P^N*OvL9zxM|AaseMf(DU?Pe7<$E*2{l-FI=OR^}VL zXOnq{A~>LubcdtP$(F5-yR)e!yl*smy?%l6P?>Bi;%p?g8ru=wYRKeJ@)08RxPkfb znq>(~js>SD55j@IMJ-^=+AG7zwaK(uvS_C*krt2}-gBumOYamG$|^m#cUfKAN#^eK zw(CpMKkYZ}I!<9giI_Wc;In9GEo%30C^?L*O+mZ8l|R9rBD@5Fh39-|)fC-=rWwd1B)EYvuD>pt+wCA+m!df!HNc@f4kq9}+RT@jclO ztjHm({Pand-t>wjF?ehuTnkNeTq_Z;9>{iB-HctVZ24_P@^cRII!M1u|EH5)MIHxQmwBhrT-7o_3wG{|F2R185#e}j~To1 zFL%*kwu{x1d@GFa$P!B?o*`vuA9|G>lAxcNA9#ii9^poLDeII7wHfUO?dP5MOi@ zFWLA-#L)(@uX8xJ44-F{>&?QCYJ5|1~nsXGuk+*3o%S#l~zkGb86 zX*(1;&c!hkH<3V!HaoFH-jLa6F&i*MLu=Y78K;a4qo|+uzx+9jamK@y^f*&|_i`u{ z{PU~ZvrnJTAF`g_S492{w)UR0?X>lT@<>eYq|@A4q>zC}{(%G;gx4I>1&_Igf>qdhFmyw{B*w{v8!FQT>yn%YW_uT5Q;n$(pJq7Gk|18 zv((bw{nK;8biY_TuYbYWr~4V|Ze1JAP%(y@pJg0toW%xz9}yM9BDG0#$1_nIiTV>c zoBHrv#hX)dd8-Oxz;Zd42ElgC+&jIxQeL%CqeA?Q!^x?%fz50qhoz2o?)9H^k(x5O z)!DCeOzJ=8g1?nYf5#L2lRo_Kw#ZbLR>W3D=AIa*qhkVQ^c4T~iylufGL;J4BNOoD@!Q^iq(3(*&ZOF-E7w8gpqxaB_DMG8;Ni}5>{dg? zdgQdl^VH#R*{9eb9vRO<4EYGMCF5ba0qRAQWNc+)I!0@qB|G&bBXz1!ReNaC z#DvKaH5unD^rKzklxlK~eaXJ`YGYs}?yY`%`O=y>;ab3=Fuq~kZEe(Q!SsRAA{XT> z^gv0yV}O0Gp%%2LR+V{O6+y-RLd$*8ZhS+y?N~u`iJv3&=3Ss?lGe+dy-?E@eVPH& zAbn}VATf7iY1+MKa_y1?CU^e1HRxJPe{9z}+hI-OsD!Fl{t;q}*>k9aGf_e{v4fz5AOi2mG;WMqDglcja4MxbGmOTNFbg zBj&3H`<@;?7C3Q=ef7hv+ZfECHCg{hR|uPgVY;l?YfVsS8Pb_@<>VmaFydY83gFb}lhfx!TkT8AGU&ll&2GJ&JK9d+1ST=xE17 zzoJ+{et^R2^9e@pmL9W3$m0NjY<5GUnrxMZV)mh-BEY%2*>T`%a`zCVBp^o(U${`} z#!^q}ism}Uf2__PvOrB}D%R`DIfQ^hYyE-*h*ZjjM5UkZ_!JH5d;$UCm?A`bnj@rd zavWC$zdH@<27fs9>z*uY4!tLKb|fyg!1Bd&Aj)1_Wt0szY`B6>EQ^j!dCtTT4kFwJ z1mxz!WJW|S%{o6z&lbW|M8xo^;S)}qzXu(6sG3qbEUf~@!INk714gIMM6pFV>3zZD zLUO^h9k(R6@|Db{ZPIj#jurRT0(|a6s@M$PfxN03mCMkuNn{p_k$4*X=cltn0-gjs zzIzNkAK_CdL}c}o^WI>WE%Y**NriCZ-XmHWF}dxR-7Ju(uue3nrxw)3UrctzL^>9N^>ggF^o(ab^INij zM7!G5@gDn6?_|~&P@6LoLv1B@QyBN>3|DdS3uuKdd>s{qJ^s_={-?zGO8f`PT}vyP zK~Hn6l8d)v*r>s!eoE{f$hS1!j{M%NWzk(&JcIbpK8vDftj28;$wz7*{7wLQ*U?g0 z#?fe@=ts?r(Oj+<@gF`}xqG;NHzSdAW(;1$DmUJ|rGGCg#fTv{a$omV`B(n=|IEjK zFDrlFS^thi{}-m_{@+r5tJr@+u!63d#IdmQD=tpw8?C*6u|Ss%PZr|);UjO@o_EK` zHYeXoNE6fud`M?OJNkire)CCijUxe(sMSQs^Si3s`{9r~FPWxyoyBZMw6Dg$XxSGn&# z!|w+o`au~%U-0axPwKweNrP1|hgsS4A`aD7r$2RBIsQ{&if|HDjIe}pGsO<@XghTs ztWukjxcOpLSSe{~Yca(m`Vx?OL79ju4hq$6V{e;p8INarxewIYVFPnAE=@e%kjTZ% zF(x}JOBzn3H^I@6h(rDiwLQTH(!xKQ*;dax-QusC=>9(@>c6w^|6YpzDf<5?x?^N5 zzCf*ksfqNF`Vr#HRS}EA64Vl6B(rx_Rv2M&aNoQngj}cG_(}M}d5A&ro{p_v<&EZ( zJU?alQh}@W+ry~AE{4U{PxmJ##`eeoPe?VEmu}*}|eoWaSBZFF9F@3U%_guk&Va@cZ zv65As)_jmm}nT)6~k8`lEO!YTfpyu62ieDD-4KM zLHKFRuLqznmZ32;7&0+$R;uK(J#PZRq(Bg*BWy^$1G4=p=U9YSU#I^oP*TI;_3Zx4 zcaweMTrX~XnrJ`PEeg-W^A&O?bm6y*76&uyf6*t3qxqJoG z;bNq~j6KU;lr_oSKt`WrETX9fokL+fyqv&J5qA2x3AFE`5u-^tvP%<;hvHVF>z=q~ zkhKFXx(r2MPp-Q$Vs||C(VF0n$oz*psl%X@-tX^HzKl%_85B)K01ty5HUFn9l=~cff^W@9Cs00Sf1xGQ4wZs;pBZc8}jt8XnABN zq-6U~#WMP|H#T>u18*JXhbf8<`=(M0>{F!!&+cvm(`?9=k|(b&Pa11dMR~IwfBAs0 zYAFyBB_pe?a#C<6+Nu)##?fkXg>*n$_liXV|J2HMgFilW{|>o?DqwCJl-RgnO9tz(=J027KU2$=XBJv7EA}i!TLIlfUnI`AaQ%M?5AYL%P+2i zSx&?nHpmP9J}%LBNt4PgBLsmb`;ub^OL=VbKXF=Z7R z5S~g43xBrWHVxxOB*7)|2|x^yz~6RrfQ1CU!H|B3$ou6dh~CQ=2N5sy-DO~dLTMl` zghj=yLdB9mt*J3gQn2F0bKQKLfALi6=w%ELy-n3VtRqw{Jg`cK=_`WMr1wC*s; z?Xq1W_{0mX*N%(X4ePl(lnp%nObq3+P3!GRu{HJnT;|F9v={!ZHlwEt6kJ#0jMBG? z@g_3jL)-X|pvD$tA1~-9$%c>QSxmPNI3$n+9~3%J;V)Ty!EV|Z@)#0$_+iv)5PJ~& zmfF)pRkzs_noQi;Q}SubZ+JWe#h$*K-=CH7^vQEVO678@_+t5ZeGPm+fq+4x;L*wG z#Pn?WVB`fsqo9lRXE6(dpd#SO5YRE?^08M8(CzxceMDI)L+W=(e zYrJCtQLLg~s+>t+TiDHkp@t`iR zCyMW?;aXf>?zL0S-PXj_tjW5-)vgu6v;a^NVqYfKK2fDh1x1w144O)o_|bdz3xL*T z7zSD=&J2nxjX_@yJp@G`oA-6X>@Xwj6o&@vHI$umYYU_N zfYoIn5{@VpYo{S(sdGtX@H@R1qq0?S3}m(A^HW0!XRQch5*o$qdpJwapTG@{mK?kP zgqVDZT@?d_cc>fHw+sNr@d1Ihuu`^@mR6vtjWygoJlvIY+(yM5>+lG%l&xIF zI{O#ld4Z=7!eiD2_IrYMx*3^;Iw3ZqyWsH+P|n#^{JpEv&_p zeZ$Ig8J)1(%JR`VW0RPMh8@^a#JLn)qUX#j>`jkPaH2Wix=DzHvk zbmlTD(FCzp=516;ueXk0log6!1HFV_Cb(Ag&E6sJYMoQyMO$o}-|&8blH4F7;taH} z>ZV<&dN)rlaF#66zPKrSqk6D7S&uHFe)!exKkFrSQ8V9HyJce-xCMFPa*EL9KCj?W zaF^n~UX@inAK!cD;addq2*FkH__n~9#DPD?UG}M0ax{PEEgauftaDqIO#Kk%zMxPA zadie{13rbfknZg?tzZLTRCWH^*v$!a1=;@dy0aUMum|=bSJ%t1gcsrf;42&OZesQ! zyshXv1@cL8-4fwVK=>iOE%}hB>t$79W7q~3uyb{a=lxJo@LBSCp!%nAo?snN^2hYK zp|-wI(##*($~?P(5#${xm1C?5IBD|mb`^0LVR&KVonvZtqhQY8<2Y+w@Ck7k?U;I6 zG>0!o?)eoGS)OAf8g*uXp`vU02RL@_qo#Y#^pBICBwW9u6GLqwd5Pt5?anlWfwD^W zxaO-=l{z<+75%;#17e4APh~b8A}Vd2#f)7Sg>Kgtopa{j#U-KEA+Cb)hQ$Iwo?6ug zfdZsmkDygC1BBJ&*wIwm!d5LOD>~~4gC%SRPLskN__&pk)lK-T@SzO~WR$C1tUSr7 zwCjlBYfp~`VbmEAQRm7#hiPICbqT*FF6c<_WA;j4`lu2#M`&Tj|{6^f8%d0_L^aB1{i)6y^}4nuw9s zYX`{{PE*%aJ!NC#1{n(!H7@JLd}gRmK5GZ+ZRB0?83b4j`$@tgT?}R=#M%(jlG^n}mos>^Xai{V2BeWGH!$%a_$`2gHm$v5&_9 zauWH-yl=BN``mZX)Dgr+e$kwns?qZcbmkG4>UI3ne1>)B2M7jzW8Tsr_1RaEDe z6gFfVO5zUhj?^c&^hPGSsx70olJx~n!oA-Q=oK(5$|Vbpe%7$(xnfuPuIJS=tim@a zx}wntjkLND7IuYe!pLj#){&vEs&!_$N+I;ACv? z1EK!=Ki06D+>xHY?Q70a$^oih#2U8?UPpj__QLpl^;gQ%^{a+~^ukz%gScCxW7KxS z&iz*q2W5{Oij@|6rA=gW$2CV&ay*;Ok}|`^mbSr!c7K4hOf*C?tK_VD{9dYpDlygW z=l=F1#jNKfvvL)&f^u_#b7Bfn;#}flXH({qI#{%%nB`W7KNBrtRix`uo1kRpN^3!^ zA{lc-J8TMPairXO0EU|XdHFqhxFXSpX|35+0A z?vo|u#Y$Yg$>#lf#|u2QA4ukE3?^JJHzgcS?+iQ&1;8f1v(&t`QJSJVGd}cS@9aKi zxZF<^3b)N4teh!ZA{1;AsX$~}8dLRKloi1m&3=OA`Ci-7DB4mq%kyQ)QuN9Bo{at} z$7H0K`}knifwhTfi;OzS7;7;RxhelCFXjruaR1}2GEQI%_f+ke@iC|S5_xrbX^;@> zZAHxz;DZIW>>3aWY=v#Or-v21%r-wr#EQwZOhPEZ8MJ{iI=tqL_An}pcb;ztS>6Ac z6;^a!1&EY%RoE6ciwJ@PnC{wT&_i?}>_-4hSHHs0=n&@Ym`3U2eM;%m%arukDG&y< z`swg0*dR=HkhQwCX$BPDe?>V_tLRal+Cr)9IWtYOryqw*tUp0>^*iAXxJ%f7U4hsV zcQG!Q{1QZ>8%b<1D5K9l>@j=mz$0SVVnJT`{Rk|mt7?V-UaYq@wtkVJP7kiPSDZKJ zBF;@I4^(-J7n(knx3gszW>MeB`D26CC&W`H@>)A~laFtK%|UhE!@t^5_i6%Bx5CIX zys(e5#mcA!u?V40nW2vwpm!NDI*+CW&}K$xiyA5kwjQ2gZd~@g6F7OsvjBqeoMECi zOobQ)6!%>ZCx&OzXGdx_mf~GB8|*tnQD9G7#byP-CpsyjR#W-Pud|~2ZQw_%x^204l`!2#`Fs+6dnllYlvzkiv9SwUW8V<2v`E`h4;%kx44=a@4Jv$)iz_ApVf`rA{_Ak&9l8ygti2s4I8n}7}Cv9+D{+oX9T%AaS*Sz zb#7ZbXI{W2SVK%$rk`a4IJ-H-?SdJ4ZjwO)2M#}qNK2`3qQ(eD^p2fswH5OC{*zLE zeVyLWpC`Xa#Gbg{*lPs|fE4kZMY+)*5-Vcl>10M33M`7FDiUs_1zN#w=D?_wBQ>(y zBQ!Lkj2HGwXox;jw&&w%9;%pU1^r$TYQYa=gMRCmFT$(@ZDP-6-x}sRr++%0$59p) zRr(cFid3!&oqBWKbx0aI>g>7?!wt5WQZWbpdz~3TzVdV88UYx zW8o)Foy6t@j)a!D8L%n9grmVyl^2KeIBwZT!d@OfuDQeN(k(@Tcd$>?=x4~r;YJ?J zwX(8tfs;AQ8PqX9AqK4+>CUBGD6d^3jnGJNVu@oRE3Iq@=1Fj;gE^|ior;Cnva6+H zF4tzNftq~keJ=+`&&xG#_`(^X9Boj$8jf))J}xgyR1S+@nAP{=0ff?J;>`} zwP~Xgh@zPIHpbDV*k+5$V{^QwIe-fv`>GfbrqzdMzVDw{-p`}DpJ5}PYTeIm(D6O> z!)Hd%w6c<(07=aRrsRgp<-P$raYG8+;Z@EEOlJh`Dsh7-9U&@>Jj!tWH6Pg4ONIc+ zSs}sq#ODj~HM)5IXpZ1Er{vFK$-53-RGkY(qtlED1x3ZU?(G!QLnYr^1tO;%=7qFN z3QsANE00PfxOEqfF`d$Ma!&6@O2xDD7S9Gw1v-SZ#aE4Qw{kqn(jV-d%6POJPBdCi z!(B%vERR}KE9NT@N=@0kOH<(? zNRR7q`lJHm(DR>bLxGgZwTgmttC-#6y%cCl_xSjpJ-6*t9u8sx!36?gX)Xpal0Tm zf~IVDG{8ScpPe3jt4^L2VL+&XI2tom66FTPxE?b41d;!t<0cOB5S|0-sYG=Rk~#4c z{N5UJRfhkGF5(h^{*jjC{f+zHpKQ8o0RIDA;$8>x4|>$1Y>pIfD3Tbb{M8Up2OQJ` zBl4S*Y$%piGMP)Fo}DC&3=&L|b1r{wNGH{P$Yne>K9J9Gi!jet<{Y=LVEbLJ?(c3| z`R!!#Yf9v2X2-cIB3(Sgj4tUWS2V!=Tgvz&(+7RwSv2}twp=+Y7eQB{h1iC-cyNr= zr^vLdyeyi0AB23B)zGb{1Lv8^(Yr<4btuXRlWG-0o+|Nv{M2a9mg1C7VroPG;+@e9 zqvAbP?~CVLL3`jm+Wei({GH_K3(CWL8rU7o-5PK4SrfFsAo{3~oB=u+GXve$aIXOo zmVRF^MLyOdrrR>#>Wc^u4TJlxfxmF;JD}adKYayI;18)>Q2GLyd+L<;N@1=TCq{fO zS_V-j*vKvNv$i2MO9(sNMK>$A{FV!F{sPJZI}K!eVVIn*v}rYpX?-R&>bPFRF5U-- zJtqjXvvT{g`){(tO!=VnjPq&?U-aFQB0z#d1)yZnu~a$e7d?Pcs}G_WJ`+qyk4OlB1L2%+Xx$I5k`3RteRhn9mnpVLOr@Zg&SRN?W!nT;%KLA z@aQ-wm28AwA;NfGlC-^=MVZwJ-qkg4V;vG^EWstVR&HuPVWuDQ!^m>`3j1Y}5EZGc z-q7v1VBw-%P`pK4>N3U!jkCy5tBEty5=lhHPI)a)icxx+upq?3=+yX>d7oZ7d$!Yf zP`}hk21yA)Ji%QMwnR59#)9_4E$o4ajvn2q8yQSOQEV{cUM|y(+#=yrNPf{w#HI*k zSOg4PFB{ZeL>>JITQHadk1;x0&R{cq5jqwI4_batGxo$F%Cf0e=vZXgwcsA+`|xr= zHb(jl)SkxsYBQ`ygF9>z5G?k>t9Zb;7LJl&O2+u{Eg6Q|iEOGlnkexBQs~5D_D6?=d z^>k!Xudk3R8#fVWe&k_J$7mEP^%itJS331m)IP~U(XvNnsx?wdj?PsZ<7v8;(`>`T zY(sapwJXobWv2CljPA0?2yZ|BOh1Cf+dp)WDB@J~V{2*DXSlG?8 zF39fN5$4n`!)zssPCx1%vn8`mkM!VK{mj~yL%tS%P;2#GsF7;XfYmXl1eJsQZ6x8t zKG5Ey?e80mLG)|@!`fU#75&C@9L*if zfcp^AEud+6Szv~RBXE#Liz-T6gQ|kX(l#_1S#~*45~=gzk+x3o7p7|fOTte^tt^`; zyR$-&6UaE0pNMIaZL|7y%9~cY^jH{K3wcd&>2}&_n}7VKKyIZ1I}3dg=Y)pucR=Q% z3yev3jZtZg|42mHu(a)PFoG?myUo98%U&%l$EVlJ!v?#Jx{0u}o+#T3@v0#kw5F!+ zPpE=<^;@L;UaJ}Dz?7~s6-N%n2o37Gn`4+OfmYFvESmDnq8#U$HvTSE7h_gJ3uKI7 zKkhwW#d|x!kFEzhK<9uilHNx@gY63#mrv1;D(nPQcVmaoO?-*XqXsb>DmT|#BG#-*Vl9$p=on2?QimB#2$stEd>mkZq$YCRQ-Dmkkue|TkMENh z(RAA#il+dwBHRwYG+yefY2h{NTrg!51*R;?JC=8j93tqd>0>A82$syMfb)(D10W2=V;^iH1*({06K=&}rG#1pIg2DsWHoOE@cSNG45qvBcE*O*Og>#2*>A< z&aK#^!9!SCGfmZSj3W80GshMucy{gp#*Ui6&E>GH!&EY+r5U0nK(QO{U>cfUts6pN zI+nb?&N$jA3fn|`nn+jBW-|o!VFS~vQ}gh;U)ea;v1Gb!z8li&c)DGY8`NbXB&WJl zV|vpL|D7|J@usiIal8-RRe#wbw`*TJmQ5O`8#bP6tj8}5NiKKkSBre=lZKv4s}q!~ zKM$aY`rD+?%wXK6#oA2s)|jQ4SQojum-)GuqHuTLkyE+`$nIS3r$vu*J?O_gp%V|0 zn5N^^L^S%>r(!llrxH|$gR|_@i!+d$80$teW}P>ki`Zf{9f+A<#8bB~WSkuPjY4(J z70y->t12IIk&UwEk<^ZQJ+l1s20%34>3L<12O?b-vWLCKecYu zWJ7SM^o`~fWgy&wf+h_Qym}SOvIah=1sLj_hQD^{D$j|ral)zG(Z<4caTK(77%q8()2L?mjFS8mr{wCjt9V7Two;RY6W zDPX*}dGo99%l_G}^43<~r#*W*Qq?T7uGhcO78Vc5;k*xpGaFu7z+^q>S5~?9dT85C z>shAUuO(>v)`H~7@PC8Leq*ud!|F4Q0J_I4chsMEGG+vc0~ zqPW%zL?6z|p<}L>=9Ze6T%YP$u%Tm^UqlZH#OA`n2=~~Mv5hLa>@y%0fHEaSVfHL{ z!xEvwhpNi7=7oxB>4i?`bVD_k&*Yfc5~eo~oWPI}^$-xjui%p8HJW(!hD25z!_@0e zFRohP!7F(ul1GE|0X!nmV>_|;U(XeLJMw4LJdK9I!@Zo?r$6V#MOQnKt9j5;*pYyL zvaSulFSUMI_`9qC|r1iAl&q?nPdeSp1ple==bsc7-Jc5#~NK zu;?n@iNI7=9_R2|ap#8EnHjjIBdo!%qZam)&^;~`Bfvq=z7)RW#vN@4F1k4>)+xrL zT!BYb#>lX2iRy-zOravf6|5-KmQ>Esg|<%4L??nAGT~5)^Otd#+{HTH)vO@9I_oAu zG0k~XaiC<(r5i}e03TxIKNg|KTlaecYCY=N4oX3`dW27$1{faCAl&=*XgDKO|-k0I?NZ!TDYFh z<8izR2Kj5l9o+ZglB!TLvDa&N663>)-#i)(W+X;+p7R&!3y2uXa*XYs%bSSiD7^A& zPI4H?*^@ND9;OZ|kx4iZA7<1OqSDd!xvGG#OZ)!nS2bVD%6lBd%y;yI+nY3i4% zjuA(owPtc%h#To5+^1i5c@#>|QQ7w}o-r3QZ--&3{lPAp7d3W6s`7gee!d1GW7g>i z-JPRx8&cS9@(W5ZZWor%!Zqh;+?5a^pJKw{x7^#fpzCym{w1H`SZP+!*X;~@`iDN% z5n4akz;P0L7NJ*WfX3nVcsZ~->fsnrI!`e@6Ai;r*<+0JX4?_P?3y2iOJHGF66MtU z0Le#+oIKr;sXjPRZFo_Y2Z%~2SnG6lq`XBy z#bL9!P9OUrSIiSYmqAAt=>r4w&dMC=lZ(z|4~od@V01k0l-Y6B@HFn*!f<#vO313Z zSld!-Ig$8aR!Jr3U^I|Q2{o>zE`2y!O0Sv})KUvHo(RFZr2qDT;1Rj%Oow-fS+^vw ziQA-VJf~GvbFpH@%WGWaaqd*rp<}_b^g~)B?fwVfT}}+P?XVAa+8<&_793H1M4DRb zT48b5VbpkP@m|Tsgz_vQj1~J@6mg}vOuj~n&``s&kws#8$;PPj-^8aQGNfmcdA^oJ zD|c}z0?rgGX5vymIsMOH#K-St$+)~qnL^cj*TYxDnT()KAEWzxA`Z=6DNit!Vv~A7 zaZt$ix|Zz6iI;*T9It7wB(kc8gbGX2daCsCEl%8VHY43Ve;osxcH^+Y>GmU=uO~x7 zX5|e6RrUo+erO<43miUUB(?NTAXPTlmPG&9l)1XbEc|)P1)_BXv^qh(Go@i|#Qeg*N~hOcOZ-W-W>w`5#-?x0inZttX4g2jD^SLG z^NP8E+qO=S>3oRO(vwKF1cg=GnmsKDEwxu?)@4_lrG6kN36bN7zgasN3a$u`%w)n> z`#@hevAT?jw11|My;NG$bPgq@VB^{OR-u~PCeAx@ zITFlLJl*j-ySE4@M^UNRajW7v0@$$?azoS|3zmb=q;&e@cN3>^nR=kajW=qxWU{TV zdQpLQHq$3Ii+3S*1!8CHfh&^aov{S(lz7~qsFvVFmkSA&7ZvY#nUG6UDea$(AG+jd5vIB-R(j zDTkW2O7eDS%GiWH0kgD4KgWSMag{wycfKEMt=c$YGr2ezp%I9m$YYN&@cS|G|Bz1q z?b6v5OT>A0LxE)L$Im_zld(HsPb=HGo6^C;>;dyEkNSmi=K8LzVX5=v)G3?tz@rs6SP!#NhW2tm|Aww*ZfEPC9vfwU0E0fYIVF}r^wyBGc zpl>kkO>%`yr? zO3cScKsk!$`1@}M5R&lo(0Obm0a84hxSX64O5-(Wb!a{+sL~=5g|dYO>P0oGorkPW zMKe#!`n#vo(bsgBgH8OHkmtWl#*^$D&xsq2X_wB z@3Ig{7)`9enQ!|vzli{d)d)&|oa)7%>iL1C^m7TXS1jNa^YV*F+pgkve)x>1dlBx< z!W7nvJv8pk@{o3%v^5>)AmUtkq(4m$RWQe!~Mo?oSE$7gM{9r|T~FR#~47 z#6g+M`JQX|eITwaO9&e5aGrB$qGyAgcZ<+`*2cX=Yr6DQ)u9!8Zy4p)H+6$H6 zmb*^C;2@t(Q&CYB1=J-Fk68}xj?#{X9vXrNqXz|5ls`|Ce*2jk2sSPi-&UJeYfQAo zNUvd7mE*D3P;bvF$@WjWR2T66i_~wjFYDij0S<<7nCI7K3#+c4p6ZsH zRkNPr3PrRko7-rHb=bGyq#Jl1LTv;D6$LklfdERKa=na6Ib)_Wf{K;JUQgkwp5Bha zL_Mxdm~TrX>&0?v_mmVeMOLXGWJBs3*c-)2zN%Ilf({FbP0VvkhxF~GCt>^6<|H}9 z1C|kbDj*>5=%_DXexx}ou%P=(NKq}r$3yvd>q*OG8j*ZXbM@rhfb-#Y4z!vW0CU!| z<=(89jXT#iPE9n6@P)zM_&$XnjO46;Fo$UGuM0sZhfX6SOD9Wv#YQ_T3&Dy8&hy)S zkI>NuHfJD189|GTf!f~n%;oL*RXOY*hKfbCm5wxrif%J(Aj!zvGOM~u3QR}uElRb- z9+!yJzg0D>J5#Hag#~N__43}``~mkCoBc+k5|7&Y(~_AlCLv&Ct^_@oHFVtIE@LDa zx-?81YnwXq%?IRvyyqmKvBz6veH(W%s0$4W1l!a`oMrHo1gzrz74MTdlt;CM{oGNu zMQrr)(wbOQAX`;HGOctx7a0c@iZ|I9Hr8Q78}ZJ6Dl#2iSXDbp<-PSgJl_$PR|W+aA#J9D9aT!xx2!jFm!MlSiP$?)uCzhx=)>W zWm@j{G$!_(?$x~Z4pK0szkD_V@Bid4~C< zzoK_D%tbSUeUA*Tyy_tT8)hY)9#jMC{-N?7e|F(|_r{P;kANYExQ0OLL6IktbEO~j z1g@a)=wbBRg!@8Z5l#{Fw-Yc(#gW%b#ZkXwvKK>yX(~P)e;7VCaT> z%Ik*v>C444W>RDth;AD544jOb^+9WhHXrPxh+K{xVoLcy0|)WxN06z z!l@>H6gx)vLPYJ1o}>=TLTB#*YndJ_;5|Zm#>&33+~Aiil$==GMoOS(WR`($lB>>lUr^48u|dJ-YnW+|?f zFtenN_Kk2#SYCjjkHcfy+>a9R;;8zI-CBC-u9%UAsvEi>>Z&f=`uaMsTb<-Z-BB}h zlbl3Ri4<^^jblI7vXOOe2_vna zO5_cf) z24_Oa&dw3DTGm;c0#%(sbu1F&ZDj7yF-=tk5_8_`^R2g_skWagI-*b9DDA@H#v*WcR213nC#hTXjePGqmx5FDH^glGZYNMRoZ zY6oGNT#9&y=yW;4XM8PqOp>199^kYr9EZIlw$Q|&Lv9e#Xg-~L6xHYiE^9G(|J41(fd@V7N@Q2#@uiNmg{B+UIqCcbVNNY<*A8}(%BU(2y43<=|*rMGB zdn5Er)B*{la(M>gP89j%i+5xdj0p$fiRmR|3E91MXih9;IAUE3VzGG?o#p){6fl52 z6;z;Xse*p5N6lrwZb#kec&Ht#TcfYmib79Xfv_d`4kmGM`zLxL!@$ptOT|B@DtlX| zp;sY14y?`LVzHU;v|%7G8zuvNwI;OvXbqJJX*)nW&Y6h!XH{LJ4Ml7dKwBwqTPdJf z6M+(ba=i}VN$}uhcYGF{E5*m|v69wiZslI4x7A{D*My{Le^L2^MKPo6jv>~o++eGl zk1b52vTu5Ump}1wTaL+Y{h510Wh>tlJx!)|E}Y{Vt|C0-ChZ{SbR>GH1bzKX=Kazh zU3lB=5gbY|o)Wvm?dHVJrc%Svj14m9mIcn4*p)W!J1Xj+R}?y?Twz${J2q}{tV^6->i_jbbbWGLmfaL3!|!5W8V7WWh+XCtdjy4v zmRU`Pq1J6iqh9i8Rua#WA^t(QcZP&8FzAH~9UQ*D2D&py@x8t9y(RmtFEn}s7O2BH zb@RS@;?7v77uH&l!P+(GL~i$&c>Zd+GnnnC)wBHk!_|9^&2`k0NewOQI*%mlY9rW<2oXE(c)GuJ0PwI3`Owd;2~bTTy7x zX5i9A_c`T7sv|ZD`@7oAgx-A%=fCxP-`!QbuSDSjgp4(qf%iy5hny6iO`%x)1yKFe*IWS7DYr5dq-{6}qq)tBsuCdtSzDc>DTRd#Ed!PTK@(b*`1e$DS_OaNxk z%Dk}-uSXwTTKGIdD2)@+tq%n?$OMDNC{J82M`)Z--{-W(a1VLE8K9*#{P_x5^CtLh zt^Hv2xS=g+NrfEed)4H7(Byl?Ea)+1>o73OnY;pHmA7{soU#*?gdGMe*}p~e3y77~ zS-ow}c$bEZMJ@15iRc}hmUT~6(4*GOC$nk=(-HDz-4evcHfnF?A!Z#m-+FX9j zt)4B)S}P2zF5Fs6x?;LlVosu^d9KPr6|gc_b)s9q2Cotd+bXOXO3mev(u%=3MAE9G zDKb{lVXYl!>mW|Sx{(aqRP!lA_Tbe!;gxC;;B*syVKyM`cs=EKU4`+tSvPf6V(X?b z5K!6H+zH^i*y9Rz={U(7iJd|_3Qe~U=dQoR3>+tSN$tL#80Vz(oO5=@d9Q9k%laCo z%bL~)=h7#`4*ZCt!R5oN!*1KxgF%RqJJtUE{1>!FL{Z>Y8EQFr8qGndsZ=~w^5VFa z9_9YlT~gAs+L<>cG5JbZ9&(9syjdek)K2>C8iEtK9!?i*0~9o=^Fm= zRPph&VH9nKK$dI9)+cPdD_DNtDH0u=P77yH>JF`ZkW;BSP27aCBO1fZNVHU(FkY^4 zr_etmE@hTxpS%E<1XNEJTmo}qT%4D7p*rv#<*u93?ulYKD3%6G1Zapk1!*g9 zdz8=~1Kn_m8&=aI@Cio%6?tGq)kA1E*qM4`jXCm5$ug3{#9J|_6fh}FzGx{yKdBMj zG`~CsY$FEn14EkVgfIFe4*&yR!qVI5Pe6iso6pqDfEZfA5>#VqlnaDiTe$TF= zOM`D*Fguo22wG&lC2x4G-CRvt!fh!z1P1L94rfS1#e)dPFgH?S_FH!+vxf3xTIo{A zq_*R)VdG#`Taq@<2D2x5hUut2miF%&svw_7%b zb*ZFe2F01tZT6(c6BL<*CI!OE1xY*0<85pj(*y2pzP^nQ(~aEka6ofGO+3PSS8#%9 z&E3ESSLP;b*`^ko|a<^{#Sjpz?M2(fSdZqZeLf%(Mn` zWlpd;L+B8PWpWHqIhuaHl|>^LvET*8ug3@Z8YCu+TD!c>rj~<78l4#<0hh zPB1Y4Y}ldi!vHxPVguEro2J_8C7-ZbHR}olxIiCVB&{9x4vspKDl_0s&_!Yvmf)lLQP&sS5I<1;lw1$P9px)S6CdldlJV72u z3#;TW205N+vZE(={+@`m3D>@!sNhFAcgb9Q+$$X9V;LjWR)STDhTBq=b@e5iGPtsY zs~phkJe=VI-Th$d4k_LO-6M`}IcN7k{`W+OV?7Nbp8ovzj3QI$TpiQYhO%^UU+-pV ze+^;0#xoby4&VIRrgw3N6i5k!H3l>BMATN%SvYJjr;&poqNSv!XSR%i*}a4VSUY(WQR z>i!WYbC(K;F@pqSiFAZ4T6^o(FRE4^ynD`T z4l<@x9M~46`&TS6>DxsIfMOGG@dj8$U923oDD5A)LwA~^-=(WxX_k;nX!D1*u~bQ| zbe)Mi#mrQk^$U!WdognCY<1a5L4%Jm4DK*i<+sw>VY{kc#SD4{nqla*&rpP)s6M!N zrB3Y2yI z!}Z$L!`Q>K^7Ttf)gi2KC;^npWz2yuRFx_xx(OUHv)aDcOQf6P=~w3|t+HC-S?Bfw zUD+I~dM)g8N23rTXL^QP?bB(@0=V)S(efIMRD-WGh^*{ zj4Z^Y-QZJ(YWj{Jg{Z$FZ^D(t=)$jZmA`wxwp?S^Zb?ZxqkfFo3fjFP{!>qG_b{p{ zjw-nhZGZ76sWQfpU{xqgqwcdJ?-*5$|1emkB4ZZ7h{=@Z@DgZ5}%l zmqL^ti3ILghqp?Uo*jnQQvwet-}fzs*H|%1x=U!`^y)?RlScwTKbs>RM(n9jzi%$PZgu?&78C)HH2yKEtCRY<1`~Ss-5|)+z zfpj5wEi^_&)s@NfbGa?zL@IER`=cZZ+*RxY;#&g~9f>ZgXCv@<#{?0%UV(o)23ZPq zc5boWOl73i+{DQK@=$%46{rayO{NZ{QP!+PT2GTI-cLq|CLJ?CN(q}hs8bG_gs)V` zEK@5YNEi@6dk@{UwAw*P4>*@W@RuhTN=qvi&>}M%L$%SwObScrkALFN7uGIYD=VM; zN^+$u+OA9RbX9$v3%)P_`qMvLglO*UNxyk>Gu$)Wqb+db)Ary<$Pgvnoj+8<%*PVw zW9V?6V#!i4Q>nx0i|-CD%p^)=e{8#Let={!%HNB8z}V808=<1y?&Nq2{9n-w993QT z^#j3GY9nN%8*~&HqWh`EQ)2D24y(t%JawqUF3*p9pnN&}533r!_|?qC+gA z=x?SVX%;3v0K9pveI8#gnXHAZ9o5q>s^fV#6bKt8;_d4*=#w|SmHZcrSNo?ZxXJEt zy!r8V5u*6Z#g-BjIRzF*PhC{`os#@7LjgY7R3wuMtfruLy4s%=r%C!kXRSFWb59*h z#z^ItS7_~X`x-^_V806|T)M(Pb_hH=M+7zPAp~3X&E?o}5Yf0RlrPsbNm%=I=fOs} z;n8?F+>oEAxitQOHKDEb@SlcFf?!2*p2NAxUZQl7N?Nju`CrWtEN&f=m;szJ@L_uO za&K8;MXChN(!5ZXb;sk$We$uUQ!Pe0VG$V2^pQ*h{XPoJ^!|}y*r}{__|ibaf0Dy8 z#4=O|xdt|QbC(O_VbbsxS2jHQi-Q`41mdIT;LJL9l%9!X&)Ly32hJ-pKQhLNFCTL% zm}Z~dY0KBf5Zvzw-tl{Xr7i{$lA>Rmh|$y=IPS}l3-XS005zya0#PRX10e}6uQaSO zC@ry}Bk+1AN?e8n%c#Nd__&(*0J%q6!#p+2L6U<7TmGS9<6zZ}(&{CcAEchfc!=lN z$9fX+Yw`p?V-0k%VGD9joWCq-ujZ?6h2`Y{Xd){nBIqM?X4){wkG5z%)f>OjrnW?I zIR^`(L~TRoXtvU&3{&6X{%c-k-1u4i`mvx(|5#=J-{%$e|Np#_GqM*lvUN25zYsc3 zu`?1sDLdR_X0C5wSy9%6-j|UcAU~KO92>6iSN-4aP(b0;eDNT$HH!e=#DC@NFP=m; z?5Ewn30B6P=}%`D9-f_TpvwZIfkAUnXxk>H#!59)byc!dqPX%gV88ajb2>Tw%uzM6 zF@vFEO5tSD@&|*LeyI-Zm#zxU(KYcN57*igoquQS`o^4*f=*I&%`VpvM=}gZf$Fr8 zL&D!|2=^=)LYJ$o;xr-qRExqF=(aQoTwli5G65&OegQ_{XlQ?w8dp^bEx-Qx|DHv^ zSNazzw}QY6wO{AMo*JIlPfFW+xP*Zpbri|e779a4c&4FNq1hzA4`b?DgFlm6P&jmJ z8htN0r)6NpfGQ?GjJ!ZBYiyhM+BoeENvZQ+p&wiP!o&Yb=eYkPrT?=kPx${F`u}Ji z6s2S)i}l0Uh4-7Y8$^BaqRdCFYRYiVQ>_fAj1uo@Z*2|!k^FeMf?J3X;$3R(fQ^DiPSJ?EtyuTYI(%_HMI8>nJY%ub+G)lQ z;vk*55ezC>ZMJIOXmhr~c|`Q!|f|KlXIbp zwXA_E$JHv$x2813c^cF|?^tcsTc@~v2VLD3Tbc4o-b1@E&4NSdoCnpv7RWKGy(U=(DSxPVKZ*(|xL z5tsF{4zwao- zCM9@W$H*R6WlK17DTF&6#^sBwmWQkcQ2?gbl7?}7j;ucF+jWa7^a{>pQ!}gJm$E2& zUc*OVMPgOKM`A^`L~)7_8|$n*E4(hfuE=lmiv8YAm(@#Xhif&+;+mJA&~izq!xI8m zc^kjAo4|InqV*`(<)}4F2>sJ?6FvgUpXG4{2~3sR)f-Q-jH{|46{{FCX0aPfERk1N-__AHRoSR zRJHfWSA-bN!g8u8WW0m0h(^I=Tm;tIGs3I*qLRT98O-`dmE>+B9+&Pxbf2FU3>=~v zv9|~OXEm$(KiX*iXIlN|VV9zjp1r~UTD+FLKy^_^o?p_^nmSzk4ugOB{pu40Axo6Y zW#jh;F^f%()fB*AhDdxb&_0JNLMfH=OKxUL6woT|__-dwj9qGuw~4)uKK}LGbd6kI zPiC@noMgsjy!@PGZwU$kCn-uhBkJTmB$3*6_Ycq<9&yyri97L7IB6Tj?|CX+eEtns z!RTDxbpoqleWeJfVR@Yc(=oU;FibIU^3D{$%KRS5_$w1@LpHuotoA92W?^JkPbCvK zR94R>jaGtvX$|QZJUzoyhOR>p(IC|wokK0dWxMNZ$tkMfUOhH*aB}haJE8t9h@)q; z@Vnl{$GeV-X6~)%-Yrc$;O&S*hnANmHF2OOcGEI(D2Zdo@V4SGHp8fey523~vUN!J zCGGG?!^p0wuO`l`ItinOaTWN!O&V^dt(*Ly5P#9zn1K9MJ9loWTa#1u;p$;x;tV=ueRh!G+@l-ffM$*^7H3~j#urs=9xp62M-wU zn!t8h?@ihWaF}QRO1D{E+OeAu$M4!cJo>WCo0Oq~de_O_7)jD>y4QsJx5PdxrJ2-E zHSeB2?KmPXlUkLdmj|RHXfO{gzcb2*ym)ZjXdCLf$dmn z8>~<2x4Y&~*Ad;D(UT5RpO_vSx{o)%zU_n=c-ZG|PjACoc#^>pumQ?(S(xXtJ|4!^ z6R?kdT^+1T$^b8eS{vBstiEp6Rd}!uc>z!Td)YS=(tnvg1UubKZz?#yc*oLfjz(6% zKGf9rSi$}+AMV`UNPh$Wo73$PGj;q(`=?*KbNHYV@MUfL@#GTlMV{k>aY_63xuEMa zaiRmpiJ#+xoq721O9agj!q^t>(LX}~VrUm?7J6xyf(<>L+);0|KfwQnu@!E!pQ%;P z7Ty#^J0RoU40Dq*Lmd;Rrs~kbBA|ud)xXaROqRh_BY+IMGYh9ViX2H7noyqShSfFv zGFto3PrSfxh#@5ygf+Z-cgteye;JxUu1zCc!Ory|kO!ZdhROtsF$A;aQQp|FVW6BX0w1`omr za>FN`IOhrg7WGdhv?v}=Hv_{v^AjtcAlxA`4o$0fPwo@#iyX8Jh)F&`8`Y2Q8xcEn zfaOtEV1efmo@5=|yDyOQrlK1Zc+)J57$VK+Q^DAW2s;<^3?&Kv8;>V>BwB}4I*8!? zrU|w~AOTy4vn`M~rXNIA7=U(EUm7c1^hiQ>nm=whWb0X}sx-0xmt7!=!2GCT8sRBe zwJ2hVlrkl2+^EFfu909FV;@8Ow62~_25n?wA4DzlZ$tvj9iCui(qfins3MGAdEqmY zV5W5_BaB@!!F0UU#V*s(nr+TLj#efmB&RIa(_3&WpG*ietX&)d4a*=&aO)yMinyJo zb?8&@YHkFjV_jUF&2ylC8sj}QDGqyy?QtMcNep@Fc<2$mIdgS+eRFkby|uQyTbB;P z*)-DVxGG2zVJBg?q@^b(P$%Z^d?-gryY?i&6CU0gDS7Oc$>K`T z%MHdHZztj}<)_v1cxHo(6zYeSTv{DAw1CBB6&01GMd?ziY6|iSsw!c@c>$Be`~30w zZ(kAS+zqNfDuDeO8j7cxXY`~>e%|I^O{m}L3O?FL_2ulsk`rI0(oqQgkD40x6k*fvl zh4hpam2}GYWR<0NVD3Au-I@dlV}G$#6&Nwdl-=iw($exqcEd#)w0OCl-#%8?>Gg#`J+<&)s(Z4tiLa*;*MS92XE_HUU;nupihNpWVIEwJH+7%e_0 z#-pQ4(^ZwVPipKc;xEhTpPVKt%*W4{Tbm;ONq#jhj&fAv!o=*+Y8<%`n-@5Jf)`ZZ zVUH~0Y6BsbFfSQMR57{g)ItwpVzhZ3NVp8b)v0I32^>n*l$U8=*W7MAF#dtti({pq+7u+ z=*qY{*uPxxkA_oEJtX$g!WUXm`7LR$n)F9t^L;V($t}s*w1Esh{b~$(BS2Q~&@T9I zxhAG-N&{`P$K(YzC5^jP>6`aRQ&U|J4$wS|b9VVv z2ep|D zR*Rd|$*%eDjdgFh8UTRC3B?e4Ib@jqIlm-IVJSzeA~&HFYT}=R78Mw`JX6F=eB=){ zu#3r@_jv^>;x7`Q35l4sH9K?r=7S9<^E{=R+}848yuHQzb$^*Ed9RDzUhD9aLfwQ< zz`?}fc{>I`^ixNw`F;~bep&&ObYKPKN^nU&%&bIC@-@>*qazR&on4qHUaLdU^v~S3 zxO0H@gbuo9#wb_2{1;nc!8cZCV9|0{=3;wVw{uTwYyL+Q95l7__B?52|Cns%sb!4| z@YfZ5NLjP|_r?|a)$#zo`-pnTFk}~oL3R&mlZtVgkaoI#4lG+46`us{F|m`}Zkg`fybMc3{k^}gd5VJho6xk> zpiC*G3ljzDM0I6K)>Ka)*}#NcpY?Cv^0Zz5iO9u#Y(OA6Jx66xm>OGsEutY90*f)- z-xzZ{xoGBEDX{?&Bc}VE*s!_C_1wCWl95?Qn7io#Vo1I}YLp9+XnoAA3Pq6%)L7)Q zzug0Thd?8Xzgn0EizzH`J=w>;C;F@eru@s_)Af1L_G)!&km=vYs?jlQUWydIOKcv#aQp63wVR6|YvWAbPv7n6ap^S0tM`!oefJ4+RIXC_c5At!Wd6P3-u==Fy$pD!)m**CKd-_v}VpC%8$)xuqYLl`FGpZoxV@ z6j%`PwG`blro*Q9e2LkBUJ^xFeyNzEd}--kyaXs(T7UKn*<89zVUc-XZEQdKZtP4` zGh;NF%uYyBR#HP+n%Wn=C8D;&2BEe-381Qz>;-EFk3CdbDr)PPGV^xnV6U>4Zo>1G zbd4jy8nl+&B#+?Ur;)rw{h+dIX=mobB7a-35|lqsX4^o4wsdl4PUKob9_wcJ}(|sUjCHNeriq!QjU?`USxGfk?1T zo(qqCO713ekI)@XC^(TfpPyfhk8iOvm6#Xx)K6~18>uNQ)Tr(Q?$SxLPf`ggdq}ns zZ1l?`bL8lzk!-}n!szdxtnQ*|wwqQbU^KhPnjU!!$F&V+Ix0#+9i`CmRQCm)dq{YY z@Gka|$F3>Sa>h*5_7%r2dP!ZYXd{g6dwqd+?J;Sa22J)IBs~eb7l%}mU)AeBqZY4P z?yorSx`s;XO{jQsxXU8&sJvTW<?utx0|8fxGe2V z1B#>sqv@PmQbqW9Uzr2S;kk0Y(2KH!g_fBCIV2KQ+*J!oPJAJy6*Y<4`8lHPB=cW2 zGcs@++B5b{bahW49aHi@i6~lUp{F~6p_GQfnaUIcZ}ZG|SLMKoRgMY@PDKqxj(%WC z)e=~fhWOvGd`LLGzJ^U$jBaiK?qRj_k$>mPA74pkz(t%GFa!IbZ}k}97U|SF^3e-P z*2(i)XMLv1x|!?%fElWAlEr+!y<&(WCslQ&CNkVJ|slnnZH7p@szS>(97WV&=juqPk{?CiW#W2w|2}vL`c0 zNjxE_!K4UR`x6(q;B)~xBxf7z$C3WceK{V9`HczUm%@^1lemqq2xV(rQuIdQt9Wdiz2_6zYRL?MG-L9G zJ+!=DF|aE#aw(&Vu@4#XA?Np9^7I|^_qlW61Tptd680_?YhcbP-*39e|8 zo1&v*His%jYv88I_J#F>3gLxq$$_2PZf@$8Bm(X_Wf86s;Eib11Meh_A6a|EK&Gn7 zI%Y1xp(*#Be5X**uLc(rui_;NQK60>i_wPz|sfs*?z zbT?H74BrTNZTVG&ts3l`M8B4&Nx|`Z34tcpV=zrwvO;3HFzJI*@*-KV(@CPMs4{-Y z{K!;NjVQvv(5}+nF;&v3wVbBBENUMzbdkP+Y)a!V>?s>t&5$0Vsb^APIk=P&H;T4J zhPJvqwJ{SC5j#$%eO6+deW#(ToB^MYFf$jQrS7&)=6q?1)$@G6Gmgqg%CyLzY!F!I2NfAP)?N_~SkZu!&7~Miw1j zD>?+R(qjWDmw zRKKCmbMZb_Q{~m&cSbva{fZ%vyj_Y`%EF9IdS~l8AFgoXIW-XfED)u{=CQzR(Ktsm zv}XjU1&JTwxXeVjCu1o+`oyWhd>1}_1D$2WAX`2}V zqI@*vtvWZLpf`g`GwMgqm}k@mJ3g|iZaE5!!TQbRvxxb{br4i%+g~uu{|%9VxfIT# zg6UYD9t+43Tv;4w>6ijg+}!wahgsX(XWPcEuuXu88>dzY#_52mXB9S7pGI@czx)^h zw+V9Vr}cs-r36IjMb8H;{hDiPVkB#D85jMjOLe?c}bmN$jdE3FJgSE6-UBN3wpE96lKfXy&*sz6knn%YXIH6 z=5|f(hcIU2#1E*;GjtUIK9cU_?HD1M=ipGJ%$xuOvwrNeT{^zxSY?9;t#m%~AYD(T z_1h~0f;zEmvjFiCI{{dIy`W*X7lS&MT^f-(YG1J_Ah1tNBU?jx-&~N=o;ILSGN#Gu zoFiqIT?~dYsbv8Rz_HLc=M}fyB;O)zC_MOMA6Oq|6^7dfLUwl>_vhww#m;Hrhl_7j7=VG3Z z$uqM}OdEokBt(S0NmVc6ON7<7SqhgLQdD?K?#hj3&o{xw);C+8>`iO zj~rI3%oKp-mX|MW_UIIzIRBbLPTa^HaFrly;(s{iIRO;m5>VojcyI6$VA#&O109(x zf}JJluZHFAK$zSYm88f*F2bzpC+PGCP|?dqv(oJg8>}MHC!F11BI1C#%t2_5%#OrB zu3z~p$INa7dYrPU%=yGzcX6%fuxM_~XXVt9v0m^I#tfteSXMi$hcNMeh^^EHJ&K*r zD5kg;T=u{0PpphMbw>wE z;~orqGEIz`1nfe+N&8|Rl;PFBWi&Yx5!ELDjtLScqNh`Ciqn5}eu{AYoV4AWMX%i% ztVDo(KdYi|Hs}P&i6v4p>X&SaC5T|3c$$I2z-db>#pdRSJxSj}h%b>QE3B;6gxErG zh>z$(Q2eLSvA-F%E!PxxlG@8I>KGu+Xc)#lt8VGn72kn8|}nt#@6NpcqQ4u^`ATmgRWn z=q*n0sHP$r%P5(Z-zAR$>aqSz?|#8GOv6p#hr>xM&Q+!D>pGD4^%{aNd%;YnEyap>XsqdGJFOgKI6kPo0< z9LLlT#MeO@?tHZMbv9ZMgSHN@4OIqz{w!Hyx)H;ppF{1eHC>vq4|F1B96|IBAQy{< z+f&i%xu@3RlD>+W%nI&BA{z*fJCB;EDr`KbNSHa;glTfHhN^2V2(I+C+)g=T+Uua# zgoO?ZP@L&I0x>#JbTYMqZzcx1R}MS`S6@(Hw=tf*NWQJ~Rn~4Y*3drMlC-RNYxGvu zXD(J*KHRuF`nfoRCsrjpZCS%O#ri73Rj%OX@630X9Kh2sA+tNiH2!)j^XKhb0OU&F z)zMMRyIDYk+G+E0XKzW+P)JRA@FccU0_Sg=s9OW#=|wmr=f2_2e+iMt%M3r~U&;i3 zva^vhg|5%)o{I^Vq94s7GG&gNf&gaoc6D`Pw^5(rFGAmqeA}Wi@tYDnC6k0r)Ewi4 zRn!W{maXegar;yFNyqJWe+&<#KqrRgl5U9t3#HIUity?DXG{t8W@z}=#xHEHYV2pP zv~xAxxNT4q07ivGsl3{)MF%31hpt8F%_r+z9(_6BBHEqkVd-nbApLP-OQpGu|`=+!54O?YZtBLB8$dDm;MYD11Jf%C@^!2F+Wl* z%~77-VO8a^o~pj5Mgs?X1Ypg88%LXn%0a=2?#&hXiE!flX^u)XYgtE&lltS|=tK;A zbe4MoV=irye}&Un9gsXD9P_dIb-iknm-8w9R@P0wpw>Mq&rqK}Z*B}6l@+W#CgE>F z=`;=kJ2nQjK1`k=z9EvWh|+x38&dBEJxMG7xsRQb)RsXy2(a;H8O}`2>x~?G&W)2P z6iQ5q&6VWe{wY;o5NyLD+=z@9N+aAEr`{-sx*CZ>3?T?*6l9~oGXW5aPLInX7xILj4hEvMn_55gLc&^N^I0SKa$XOtVKR#!G zpHuI|d9fxfLSh^&S`^`R3r?ew{jy#Y6?h$m_gO(z`7iRWG>I7sGu5>wEh@V zR8vV?B`~%AAD|~!+jE=WMG72}UJWG?^3pRN;=fJF|Kc>ofw>%KkRv*LFz(=ZSlbjV zzrHWAvQA6E7p%bXRC1nP@l#v~hgGsZ>7Ft98u@NhVU2((@L)?wt`hjV`g5Pnzn5MV z%iK*hWGOi(3>uq|Pu0dR@jXC0Bt|h2t3lc&{OOZ+ZrEIHNdE(7J9D>c3Unavi2u}4HHVZ z8Vg^R0teW%2M{rGH%~r-sb^XgV(_2ru;0d4g6u5H8L|;dRV(iHg=YO~%Z6yn25GAf z(v%I>lr7S`WEwXx=?$JPWN3!7=f<|@PFZevI3;xk+8U!N99bKB#F<~`T?31JwVZAC zcC@;1---J-+MFKmKOdQy(Nsy&Y{VR|0F269-&hqpx)eLg9Q%VV8D$YW1QRLPzCogX&^>)#`q^U{M=cHBrRlCzjK&{P2O?jHE zG-lJGV7JNL7veC3R=5|sYpVh2b7Flncw9knOcAfJ%AG$ggn&Z3)NalA*t5pML#F4GRPIeD3OOJ zd6ae1O{mmmQ2fbLswz=`t9<^m#K+v$K1#3f=&?x6#3if(_GXS_9 zy7D`T+L)Q>1fVcYm$x(*_FERe4_W*`{P4i4jLb$9*wq7TLh)~oOCbqYl7yQ{`K}hw zlLX!CGk-chGHA`ssplwKor83u-z^VDE3LUU?C&e!P|a24k7%f zYU>L$kiof&h&k^-co3t2zI%lGTby681w5W?PX}#Gsdy3vZ(`|#q5)s@N~0t55b)_u7u9%ex4LhLIy*jlVwULX)LH{}dY#8|l(!szI*$WZ(&TQaN?U%NX8}J= z7pQsipgstc??dZW{G3X3r%s=U{(gVLsNQ{zrDP*eUnnZPWmxP)Tzm|vrexc2(T`y6 z8k~C+r)T1(FQ%+L9PCN>PA~|Zx<=kt?aP{zNx%agTNGe$s`Ur_Qir8f1*T*JQ?|va z+;vs$3sdU-C;0HHu0AQ7XY}b4QGlIt;c!?ROH(_p?ZS#B1-mMjB2XEJyZmtQI!y-Qa)WQ>7k zZ=CrxI{59r+)?SiTm$5u_o=$pobxBtina>hCJ{3Do9XnpNn7kv>^+qFh2q$L9 zO0_GaK7Hf={37t-vJmvCy*_zUvhgbDi0%VY(23mm1-4SN@;VK<=FKRHjHoj+HJ#yb z)aeJzL+g&(pA#I!3k>aphW5?XtK%Eg19IVwX_2Zz|4(P&(>iX$us7sOHO;geRJ9qhsST@`d3vW`ojX3PKbL z@6(3i)r;DN@;Y-_!C|caEtCP> zbzJns0=|X9rh_YM0Ad4Y&Kdf(X$m|{(1hR%E&t#K(@P0dIz-fj;p@HVi3n_)0E-c_ zi2934bSj1ZS4}<8L2S4wmAU)_D#H~*u0F7}NO+l~f}+7MTw9V)AxBb7uf?o9Jd_~j}XTrAoPy0#VaiI4ug0G{r8fRL%=h@^pQImFSK^wM4i^q z@hj--oWVQ31Hd`eBFTU|?9?H`l-UkEmFny=+I96s&pG;Qy_QI<$VCg!G6hte3CS#nEc#Hafwxt`TXOiST&LSGd=#9cn2~e znmgQ4C4!pAH%(Kk-wJ~EwJ!{bT)Wx7HxrC#C6Po^kfXyiD-_QP_FFQ~ADs{D|z39SPaV$lf!Kb?k^Qna3VwJ63iw zvof;DvA43xD0}Z5mF$)5{eRB)H@=j9|C@Mtb>6P~b6?kWKhNvM=dMXnX^q2KQk}m$ zG29-TtEb=?+npy@0#8^`RkPg*V@x4)?lq5lv84oatFKElkz`H9(LJ9 z<)c0FDK9v>)ySlqePm{wTsbm=4&#E^A#kM16jbj#M-jn9bt8A&zDcml4AHuSDrxl; z<)Ekz^m)x=CEeEiWK|lTn{p$=oG)s*5G^hI$p_Z{7FcTVZarw#9cyfx%WS%U;MDrd zj~huP_43fJ=}HCn;67DE)^_avGS|HHRJP}}jjAsXBn^JB^WUR(6!@sS;Ibumnz#z2Sd_)3Z~04H5H6Ep_WdSZm0qTsE7AFuS64jEYZ{iGyeZi+EDjEPV` z%Z!Obbs|;Tz7{tu`zT}eQTT?ss8gENkoTzH#145~V1KX+j=_sA`O)fZ_&UfO4Id93 zRpE&QY+yfASS_c9w=T$gN`5TWF@VTBz%aB^OlrXYI4J1TRyKLxO~0Go0bgE$F=Y>K z`Y~>HJ{}z;NM}m8owmfT z_x9*XIS21aLC=9~;;p9J^Fkx?hNfJ3E5r(#x$5}NLeRWJ9)%QnqR~m3jxfm{R*aAY z?W_l15BC9j4~&&41M-Fp&>3_N-ev0dhs zyfO7^U9kTMjH09%olOf@7a<@}x%T4i{KEmiH7$J{U1fB(T)+5XiSFg}d8L7&m+xFG z1>1Yw&5jT@PL3RAr1v)yY1*3R0}c}0OQ!@_wK!OkVsZ8*9N5r0k!?9Un(lMip5-RGd*O=bl8eyLGfMolX1w3tPP$`jt zy1BR%Hlm-Dpq^8j=G#l&vDX0a>aXN9Vz}4ihn^C6Z_!a?bR~S|LucCrP7~U&^^3Qc zz;U436(0DBYH@h8@&s4c8-=aOFMd|Cn>u}-V<7srvhNZf2S{6Oe(XYP}1xWeRUPhaOt`Yz=ms;vom z;Y{oCos;wp?hDhVs>L|rDUk{oq#5%=z3t!hv_dUV|&W|46C5NzmS5gBCk zXh5WhgTz{=QmOUYqcdK5>^HZCG8;~OzGZzshN*)JY01{)~- zJo?{v*&&cEarh`+mZvQ)+hB)U9$%_eWr&j>Ut-_*+o7B(r>AcS=a^5q_nA+(;j!|` zIP{Mzenvcq7;3WELMiB8f89%+)tN-Cz>(uUwbls-76 zkd*yMg7}dp{L!$&I&=PrRf~M?mwW3&U-XXdAy(=V8K%a$9q&xv*MzU}40xbZ<)?(yIFsV;*bF34@N_jtyH#yY`&Uy~O+F*D z*{EBRCRsP`saE8iW^cEtyIo-`x;t9je197A8~>o*`n`$Iq?j<)QS0&Nuli7A4{SL7 zpoGHX`={ruxg+A=t%hhS=(zVwyu=qM8tWWH8`B(mOYb9+zcrYnT2ABDN032r+|}!i zRf~P`N6%Ez=QHcU72+e3&w0P!Kw+JfGUuLDkgE&wycP2D+wtT~z?W$vLI>R(H_xVt zOn)zlNGJ(&X*hTgWe*!SdtLZvV_lzJ6t6ABUd`y1)aBAukrM*zCVcwG0lhdc8oq{KyWyl?Y~zol!d5GZ>g0catdEacSzjGu$sxPs+C#Y8FMN_1dXkR zI0Yg|*IaLOe2tv(@*j>Sw{~Kcg5H#zIK-Xn&x;yYN3Ek*4sXrybQN@nY{3`so!WCf zV((~u5)&s`mwPi!wkBHx$`9Y zGizYtLQf;&KdI^Fo&B~{m!34H% z=qrq>Xh6H=i`MYu5ycdo8ui&7u*dG)GRx^hn3{M9VsKn4R@C1EpQ*+Je>gf}(ZF7e zlUuyb*F9^<;nYcehg)vA|880%p2pJcuCe}{!K1?jF|y}LPs-qBc!az~nRzwDBYNmo zWBy4u(#`1LHH0I2*RA;clMrQaORp%nB@v{zDt$pn)ln2)gEI0N&8pfzDOs|YE&Z*^ zQ||BH{OiJEAqnz8;he;Gy@2CXCZC?AYW3Dm@+ zlo91w>E)v*6!6WgXGfwukR~!&ck#nrj0gSHD8kES6PCwK?aB^3!Ya>Gm|FTY3>R;e zZr`79zq3{ka(Qx1n8QCsyQOc{aFMNan4eU*>zq`0J#*5Xdd(B$B8DbR?VqC3+-GjM z=vcbVFmZ^z=85Xkh$<}ZmlD>IdrQ9XR8pjmV5Lc**N|#$luQxpjag~LVD7D>w5L%% zEs|%DCq2b@=vlbZ1Dw(sBGOrhLCVmeV69t>DMpW-QU_nMb59L0wqk5>yT?-+sL#y! z21h^6eLRhN{wT^$XjNN-xTtf_tk^+Hz=5GzonJMXSd>*b#JK}I-Z`YP&Dx26bm?Kx zD{L%h-+)>vDa$BTemS^sFE?z!fsTrB1qTZ{#2`y*%Y8K1E9+y$i9UqdK_GW8dEaq8 zyXm-KicjgR8SkJ@x!cCjk~X_&K8JEn^;-us*Nqyi*);s8zUHW!cAG9L#xq|G=J86n zgHCp7R_|<|42ZqvWqf6<#Mt|ZF7iPfVYp?iRZn)YEJ_FUCybi8$c}@bT`I@)V z36JS{Vk&u!h;)AX39nK)H_b@k8PNoDcC{E^-+hp8@j?wk6i#uE)2h>cMEbBG{Uj^n zgje;fjG#3togCrllk7gmUBnLxf>G3RlozaBI^qynzn=dZI zIG`Bz@89X;zozQ*G)%T}wYns(*)kndG*Re%vc3ye8GK`XlH?dZi|`t1OE;Zxo+Z_r zd*_w?Omyu;b|`#3)^siXNe9~x&^z^rXO!VwE`!8bzHce(EF;Q-NhyzMQtD_^JeI^e zybPZ{ehS`a7$;ztGuAo(u5#-nA%-K?fNEG_!6xNCR@e{UvYCw6?^>-6nZMRFJl410_W zQpIE~J4`r6g+ftweF>qUEX%V@-LS(c7DO)YOD^tDE*?zY6fk{&Z8t~xxa(bI&q1nH zIQ5d|98>M5gT!K9?;PQc{rp*PC zj_;kop9WYNqGtWHiwq`?d`&1q>bzh1);pEYDd8j7J(XT}Ngh3s&aV?RhP}60B+O7I z>1!(S{Zs1}sm$}YNfpUwyFp4=Noe@*&+Yn1Wa=2lsAM2#T9^+#qD8sDeYT*Y!lNRQ0^_7-1r7|}U0T9iT9R9WV+!eFQ^iSu zy_ev`Lb`ZVMFA1_(zEU@!O?~CgCn$tlT&$jA^>ku>e)1ya(amf(;#(fRbkws=8}b} zDwr&gap(mn)#-V5I<+76R6E{`!p!{rsdiaL5A=28EY6rQF!S=RPk#0wEdyH?G4rw~ z^YS(3Whv(6yUfdkE8lBk%SB&n6q}1ew)G?fQ^PBVDniEGiZh*4i=1i}DQY_$sd(M& z((6R|hvrh(6CU!L5YG6?JJB%?+9o`#;|!tT4B3;A%({CP?T5RZ96e!lE=?=yM)%i^ zPJ<9fhUth+lT4qIWp@HD7$z4iAX@Y|FLLog*OrKKjHt?xXTOH#f_spbM`~7#D8~Rp z>TAoa#YaCxgx-Iw;CtFm9};f6#e4YS!%4y*W1Vj}PFBggo;xC&cZcf1NsC@+Dfp6e z;PfpbitmT99UfvBDF%M2t!HT`4Wg7jrQY_Nhamxr=9pi#f4X~TrKXC1fu3cTr8Zf< zT?Dc5-g=buMwyF5Xhw5cN+TEYHrOSJlsBPh$xb5`5g8H}r-BKcC(0^!s1VIF!v=js z-|TgE^?`b56DE%gX&B0V^*JKjw=q`qd1miI*S@A)JL#`fK~}}>p;4QteA?T{)7F#S z+H*h2W-m){0hDBqmrd8xQu*Pw)aZh$P+w0*)dHBdubdwKZ)RSQTyMHkYq&T zrx66<1^nB&999~i(|LgSqHkvMJy;xh@SToe_80KAizMKbr^UXEa1hk|33!9l^ z{2Gl?g%!lZ25nK7L$F`pQS7%d)Yy;VaGI44o{MH<)O{PsT=9;i=g~l))z2hrc(VKb zU9L!sh)$9IcD1h?YPj$Andsx``Mk_A6^$`N7wVjIL+K6dj3?GiWoA;iRIUq~M|~8D z(M?>12fO3#^7Uu6EFALm)DysS(E@pHuPMHAneH|t-Z10dkABA)(mT~_#$W13&$p<| zN5*l(2GPf?V^70=p4R)usFI^Or#{HL~7P1uHvI zXNXp1Z?-v4>0x-dh>nhm|Cjg0nfIOQUcy?}PvYC~g1M)Au}xah&Z;%6>z$b~WV?r~D&J?;)|bLx7av0K2*JE_F;Nw$TQ%^=!@ zv0L0_oQmUC=Yp8@SzNRJh_m>v^Vt`*iuZN_wyVitKqAwkGOugu!wLFZgQP5#sRelZ1 z;N_gXSuv&3y<0VihC=eU>e1FYk694t3o2!V(;HTX-RgxSeN2-oHDqP?>DrSG*UfSQ z1?5z}8~7d3g|NMj?kvR`G2uh$nCR`ocC193yGM~y$Z)cLqLwEfGl4zXdYGl|!%!C2 zi{;M2ijhcCQ>3md&&8^t%UgQyz4>tl6D1ZX@EP+D`O)6+xIzPYo#ta#LgD=De#0@n z*3A5LI@<9kj&qnV!3wlG=daaEF^1dTsHXLWgz*jgSKrtOEpK_|z{2iY_`^QbNus!+ zGcjMFRmzdD0EhS>M6tg zlST8vn0Exx;&eYw?CQKmjbzQ>osTY=Pm|)FW@^9UAE{xhXhXAF9yPQ2F^Y_+!HUQ0D@w)2l zDkiCt%rSto5W16p$mM0#C^egCKVZL*9MiIyKV)I$5jP3#;m`>@ zBq`u)f__Y%EsN=)o^)SOS(Dn!RX_p;vc9uH3ku_Dkmb{V&b?YTCWAz!8IQw}WbwZ&Se!~3^g78ww!^hKjbkn>J-1gux>oiy=e}+wIp8Qe}ubRlRln`*u5b zSW+GoW0&O3Hhaz1b8GDAA;#7Og0G_Q#I!{?8#AlR zexH;t?b(c(c$UbLbPE3I*<$}_tWB<b*>s!8bUm#ni~eCev(XTsvsLvVMA5c@q!z*@HDZzTf=4&d2rQ5#_cOabBG#a*7bGl8mfxoH1?6 z4_Wq))Sg9qKB6NZou^{p%rB+iqyFBHB0FOb8RO}Nr|`M&KObxu>F~gZ{6v6<>-YU@ zFf4QSX@wAV)VMw0E0}lctPU52$IJD&i&9`)Bmu$RTa5W3hAj+&ZPLO7jbmRkQtX=0 z-8eNwzKSHMiMW|U6y4m=MMS_M2(pYfuPuZ2NrZ-uDIUQLa%1Z4eS;_Ko9B)4J^Zy` z1MG=+t9(=LS1*425yB}_gVUXR=gFs*hU(c=-6%+ZMVaZiMJBP5SWdTqD7$9Ned=T%T6S9aj8=;U+zga$g9ES8=hlbY*U6iHErfa5#YrT{myz z;v-HX>JMD9>Lo#mX&aw2Uk{&8)4QOPcGp=_g}&dmK9^Tx4G!Q95|qB+u*<+Lc7;AQlS9Y5 zv1O`yjqrpfgP8t)Fs_yaIxDTe!>4q@r2<;ux8R-zoCY`1V}Ye)h91kBqfs>r^{grH zorqJ~>r~?lU_h%+U5dFk=hH~RQ$tuXx~RgNW6UYk_}(h%YGWZ1)d6JJeT?bW!fZVi zU!_E?6QgennxJ#g zvXhADF~5iF28X zFAml5_hM=Il68&7%}B=5w{I+aX6$sz5~x}~g_HQ9JQ{p-{`e%={oxy;%mh2hGwhTV zqrcw&ef|lpKlR>MKncN1J{G@fMfs~%_6|-Ll+ustRiKk34peb=U7K(*&g^K~<7W?J z6X;4W;H2>*AmC0iGVBPHt&1XsNKfB1;}3Pm(XLGlr);4n*g{!=dZO-X<~_i@@oqzO zbg{r=vnjU@1B65FYG{&9L`CjI9;8XGm1Azw)&YM`)$SV>`R;mH(aY!4@O&796(6CM zpE_93CZLlHrGjT$zgair8p}WfDc^V4wuN@b>`Gm*CfCY4U1Fw!3=v$kp6y3j{g*t4(TY<5E+IfbVB#Z9HH zx33ShKW9F{R{fzoIM1?hOT8n|&S@hvu+!n5VbXRVXIhT#z+Y=VC`gNi0NSJTJYcom z0OJ@{MU-pAAYu?E@W%b``T)ND_rL<7{rl=apCB@tl5FzIvK(h!zrVDQ!ub#k{7>XR z;{Uwj@6SLbg8utbh@`T-tc->xJ46=w!?8htvpFz+b$G!2`@8@7&;eXrEY*u)vjAb& z!%c~wqJuy=1RxM_md}Op*rhrD*ZbxV>u?Xi4gEAYat2UVm>|&Y3-N(KQ$T86#@X81+sWIR+5f&6$iTjx z`Q{+!dJD*o%PX1)n21~^*Zj9fZ`T;#1}hJ)lh>uzE-zlz)a6^)Dc(iM{C+ z6i$F*;;pEl22ezSyuMs9&3AvH*qb=pLhY_dcI31)RKLbp0Mq&lm=^HkFAN>Vt2uv2 zOk_}o^=co(0T2XeJjmVopMl4GHB19~MO?@wv(mv*7)QqRn@S6S&Duq|W$dn22}ubj ziIT_wRKf#Py7Nyoz!fU{FBD``ff(5tnM1GWEy(SZfr6!23y6pYnA~N>e>}L%`dgtZ zXNFXqqt*_z3@Gje#08uPabZO8T;}|-tsu4j(e(InG7wJWZ(29;oS0a06smjQSrz^pH)EREV_o+^;{S2tl~T*f4&${qkG{x?pM`Y#*@`=?L` zrz^HXBxeai$fyS}9soIex!F9`yqfce1?C_Vj83CQku)kZ+?+~QiwVvAsa3G=`V2YO`>easj@^^N@u4*^Po2e!n zTfY$i*87|09}KR5UD_LzXFjir@yZuGDR;sebQW# zs|k1*y}0lEtMLAF3wSl{qQ4`sZCw~QQvVn2?@awe?jxhTXkLhPhx}(i)Bj)YWv|GK z-5V+6MFY3H|8Rk;FBw;&|9e09y97wy#b^1;%fg>?nRn3y?qXEP&G+I{?&UiR&$+88 pf6xwzy7>5X`9==@{TI~bhh$a7>%d+F0 + \ No newline at end of file diff --git a/src/main/webapp/test/callback.html b/src/main/webapp/test/callback.html new file mode 100644 index 00000000..9f77aa2d --- /dev/null +++ b/src/main/webapp/test/callback.html @@ -0,0 +1,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/test/naverLogin.html b/src/main/webapp/test/naverLogin.html new file mode 100644 index 00000000..47b19256 --- /dev/null +++ b/src/main/webapp/test/naverLogin.html @@ -0,0 +1,22 @@ + + + + + 네이버 로그인 + + + + + + + + + \ No newline at end of file