init commit
This commit is contained in:
commit
b35ceb5cfd
1
.codetogether.ignore
Normal file
1
.codetogether.ignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
/**
|
||||||
200
.gitignore
vendored
Normal file
200
.gitignore
vendored
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
HELP.md
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### STS ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
|
||||||
|
.metadata
|
||||||
|
bin/
|
||||||
|
deploy/
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*~.nib
|
||||||
|
local.properties
|
||||||
|
.settings
|
||||||
|
.loadpath
|
||||||
|
.recommenders
|
||||||
|
|
||||||
|
# External tool builders
|
||||||
|
.externalToolBuilders/
|
||||||
|
|
||||||
|
# Locally stored "Eclipse launch configurations"
|
||||||
|
*.launch
|
||||||
|
|
||||||
|
# PyDev specific (Python IDE for Eclipse)
|
||||||
|
*.pydevproject
|
||||||
|
|
||||||
|
# CDT-specific (C/C++ Development Tooling)
|
||||||
|
.cproject
|
||||||
|
|
||||||
|
# Java annotation processor (APT)
|
||||||
|
.factorypath
|
||||||
|
|
||||||
|
# PDT-specific (PHP Development Tools)
|
||||||
|
.buildpath
|
||||||
|
|
||||||
|
# sbteclipse plugin
|
||||||
|
.target
|
||||||
|
|
||||||
|
# Tern plugin
|
||||||
|
.tern-project
|
||||||
|
|
||||||
|
# TeXlipse plugin
|
||||||
|
.texlipse
|
||||||
|
|
||||||
|
# STS (Spring Tool Suite)
|
||||||
|
.springBeans
|
||||||
|
|
||||||
|
# Code Recommenders
|
||||||
|
.recommenders/
|
||||||
|
|
||||||
|
# Scala IDE specific (Scala & Java development for Eclipse)
|
||||||
|
.cache-main
|
||||||
|
.scala_dependencies
|
||||||
|
.worksheet
|
||||||
|
|
||||||
|
### Eclipse Patch ###
|
||||||
|
# Eclipse Core
|
||||||
|
*.project
|
||||||
|
|
||||||
|
# JDT-specific (Eclipse Java Development Tools)
|
||||||
|
*.classpath
|
||||||
|
|
||||||
|
# End of https://www.gitignore.io/api/eclipse
|
||||||
|
|
||||||
|
# Maven
|
||||||
|
target/
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
release.properties
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
buildNumber.properties
|
||||||
|
.mvn/timing.properties
|
||||||
|
.mvn
|
||||||
|
|
||||||
|
### Intellij ###
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff:
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/compiler.xml
|
||||||
|
.idea/**/encodings.xml
|
||||||
|
.idea/**/jarRepositories.xml
|
||||||
|
.idea/**/misc.xml
|
||||||
|
.idea/**/vcs.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/dictionaries
|
||||||
|
|
||||||
|
# Sensitive or high-churn files:
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.xml
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
|
||||||
|
# Gradle:
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
cmake-build-debug/
|
||||||
|
|
||||||
|
# Mongo Explorer plugin:
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
## File-based project format:
|
||||||
|
*.iws
|
||||||
|
/.idea/
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
compiler.xml
|
||||||
|
|
||||||
|
## Plugin-specific files:
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# Ruby plugin and RubyMine
|
||||||
|
/.rakeTasks
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
### Intellij Patch ###
|
||||||
|
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
|
||||||
|
|
||||||
|
# modules.xml
|
||||||
|
# .idea/misc.xml
|
||||||
|
# *.ipr
|
||||||
|
|
||||||
|
# Sonarlint plugin
|
||||||
|
.idea/sonarlint
|
||||||
|
|
||||||
|
|
||||||
|
# End of https://www.gitignore.io/api/intellij
|
||||||
|
# /src/main/resources/db.properties
|
||||||
|
# /src/main/resources/ako.properties
|
||||||
|
# /src/main/resources/ako.properties
|
||||||
|
# /src/main/resources/db.properties
|
||||||
|
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# jrebel
|
||||||
|
rebel.xml
|
||||||
|
/mvnw
|
||||||
|
/mvnw.cmd
|
||||||
BIN
DATABASE/excel_batch_template/menu_program_excel_ebt_sample.xls
Normal file
BIN
DATABASE/excel_batch_template/menu_program_excel_ebt_sample.xls
Normal file
Binary file not shown.
BIN
DATABASE/excel_batch_template/zip_excel_sample.xls
Normal file
BIN
DATABASE/excel_batch_template/zip_excel_sample.xls
Normal file
Binary file not shown.
365
DATABASE/mysql/all_ebt_data_mysql.sql
Normal file
365
DATABASE/mysql/all_ebt_data_mysql.sql
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
#아래순서로 테이블생성 및 기초데이터 입력
|
||||||
|
|
||||||
|
# ID Generation
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('BBS_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('FILE_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('GROUP_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('LOGINLOG_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('ROLE_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('SAMPLE',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('SYSLOG_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('TMPLAT_ID',1);
|
||||||
|
INSERT INTO IDS(TABLE_NAME,NEXT_ID) VALUES ('USRCNFRM_ID',2);
|
||||||
|
|
||||||
|
|
||||||
|
# 분류코드
|
||||||
|
INSERT INTO LETTCCMMNCLCODE(CL_CODE,CL_CODE_NM,CL_CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('LET','전자정부 프레임워크 경량환경 템플릿','전자정부 프레임워크 경량환경 템플릿1','Y','2011-08-02 21:13:03','SYSTEM','2011-08-09 17:17:08',null);
|
||||||
|
|
||||||
|
|
||||||
|
# 공통코드
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM001','등록구분','게시판, 커뮤니티, 동호회 등록구분코드1','Y','LET','2011-08-02 21:13:03','SYSTEM','2011-08-09 17:56:24',null);
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM003','업무구분','업무구분코드','Y','LET','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM004','게시판유형','게시판유형구분코드','Y','LET','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM005','템플릿유형','템플릿유형구분코드','Y','LET','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM009','게시판속성','게시판 속성','Y','LET','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM013','회원상태','회원 가입 신청/승인/삭제를 위한 상태 구분','Y','LET','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM014','성별구분','남녀 성별 구분','Y','LET','2011-08-11 11:32:50','SYSTEM','2011-08-11 11:32:50','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM022','비밀번호 힌트','비밀번호 힌트 구분코드','Y','LET','2011-08-11 11:31:02','SYSTEM','2011-08-11 11:31:02','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM025','소속기관','소속기관정보를 관리할때 사용하는 구분코드(시스템별로 재정의)','Y','LET','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNCODE(CODE_ID,CODE_ID_NM,CODE_ID_DC,USE_AT,CL_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM029','롤유형코드','','Y','LET','2011-08-12 10:45:16','SYSTEM','2011-08-12 10:45:16','SYSTEM');
|
||||||
|
|
||||||
|
|
||||||
|
# 공통상세코드
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM001','REGC01','단일 게시판 이용등록','단일 게시판 이용등록','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM001','REGC07','게시판사용자등록','게시판사용자등록','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM003','BBS','게시판','게시판','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM004','BBST01','일반게시판','일반게시판','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM004','BBST02','익명게시판','익명게시판','N','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM004','BBST03','공지게시판','공지게시판','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM005','TMPT01','게시판템플릿','게시판템플릿','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM009','BBSA01','유효게시판','유효게시판','N','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM009','BBSA02','갤러리','갤러리','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM009','BBSA03','일반게시판','일반게시판','Y','2011-08-02 21:13:03','SYSTEM','2011-08-02 21:13:03','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM013','A','회원 가입 신청 상태','회원 가입 신청 상태','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM013','D','회원 가입 삭제 상태','회원 가입 삭제 상태','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM013','P','회원 가입 승인 상태','회원 가입 승인 상태','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM014','F','여자','여자','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM014','M','남자','남자','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM022',' P01','가장 기억에 남는 장소는?','가장 기억에 남는 장소는?','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM022',' P02','나의 좌우명은?','나의 좌우명은?','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM022',' P03','나의 보물 제1호는?','나의 보물 제1호는?','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM022',' P04','가장 기억에 남는 선생님 성함은?','가장 기억에 남는 선생님 성함은?','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM022',' P05','다른 사람은 모르는 나만의 신체비밀은?','다른 사람은 모르는 나만의 신체비밀은?','Y','2011-08-11 11:32:57','SYSTEM','2011-08-11 11:32:57','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM025','00000001','공공기관','공공기관','Y','2011-08-11 11:33:10','SYSTEM','2011-08-11 11:33:10','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM025','00000002','금융기관','금융기관','Y','2011-08-11 11:33:10','SYSTEM','2011-08-11 11:33:10','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM025','00000003','교육기관','교육기관','Y','2011-08-11 11:33:10','SYSTEM','2011-08-11 11:33:10','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM025','00000004','의료기관','의료기관','Y','2011-08-11 11:33:10','SYSTEM','2011-08-11 11:33:10','SYSTEM');
|
||||||
|
INSERT INTO LETTCCMMNDETAILCODE(CODE_ID,CODE,CODE_NM,CODE_DC,USE_AT,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('COM029','url','URL','URL','Y','2011-08-12 10:46:18','SYSTEM','2011-08-12 10:46:18','SYSTEM');
|
||||||
|
|
||||||
|
|
||||||
|
# 조직정보
|
||||||
|
INSERT INTO LETTNORGNZTINFO(ORGNZT_ID,ORGNZT_NM,ORGNZT_DC) VALUES ('ORGNZT_0000000000000','기본조직','기본조직');
|
||||||
|
|
||||||
|
|
||||||
|
# 그룹정보
|
||||||
|
INSERT INTO LETTNAUTHORGROUPINFO(GROUP_ID,GROUP_NM,GROUP_CREAT_DE,GROUP_DC) VALUES ('GROUP_00000000000000','기본 그룹입니다','2011-08-02 21:01:59','기본 그룹');
|
||||||
|
|
||||||
|
|
||||||
|
# 권한정보
|
||||||
|
INSERT INTO LETTNAUTHORINFO(AUTHOR_CODE,AUTHOR_NM,AUTHOR_DC,AUTHOR_CREAT_DE) VALUES ('ROLE_ADMIN','관리자','시스템관리자','2011-08-03');
|
||||||
|
INSERT INTO LETTNAUTHORINFO(AUTHOR_CODE,AUTHOR_NM,AUTHOR_DC,AUTHOR_CREAT_DE) VALUES ('ROLE_ANONYMOUS','오픈기능','오픈기능','2011-08-03');
|
||||||
|
INSERT INTO LETTNAUTHORINFO(AUTHOR_CODE,AUTHOR_NM,AUTHOR_DC,AUTHOR_CREAT_DE) VALUES ('ROLE_USER_MEMBER','사용자','일반사용자','2011-08-03');
|
||||||
|
|
||||||
|
|
||||||
|
# 권한(롤)계층정보
|
||||||
|
INSERT INTO LETTNROLES_HIERARCHY(PARNTS_ROLE,CHLDRN_ROLE) VALUES ('ROLE_USER_MEMBER','ROLE_ADMIN');
|
||||||
|
INSERT INTO LETTNROLES_HIERARCHY(PARNTS_ROLE,CHLDRN_ROLE) VALUES ('ROLE_ANONYMOUS','ROLE_USER_MEMBER');
|
||||||
|
|
||||||
|
|
||||||
|
# 롤정보
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('cop-bbs','cop-bbs','/cop/bbs/.*.do.*','게시판','url','1','2011-08-31 15:41:24');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('cop-com','cop-com','/cop/com/.*.do.*','게시판사용','url','2','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sec-gmt','sec-gmt','/sec/gmt/.*.do.*','그룹관리','url','3','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sec-ram','sec-ram','/sec/ram/.*.do.*','권한관리','url','4','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sec-rgm','sec-rgm','/sec/rgm/.*.do.*','권한그룹관리','url','5','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sec-rmt','sec-rmt','/sec/rmt/.*.do.*','롤관리','url','6','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sts-cst','sts-cst','/sts/cst/.*.do.*','접속통계','url','7','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-ccm-cca','sym-ccm-cca','/sym/ccm/cca/.*.do.*','공통코드 등록','url','8','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-ccm-ccc','sym-ccm-ccc','/sym/ccm/ccc/.*.do.*','공통분류코드 상세조회','url','9','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-ccm-cde','sym-ccm-cde','/sym/ccm/cde/.*.do.*','공통상세코드 등록','url','10','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-ccm-zip','sym-ccm-zip','/sym/ccm/zip/.*.do.*','우편번호','url','11','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-cmm','sym-cmm','/sym/cmm/.*.do.*','우편번호 찾기','url','12','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-log-clg','sym-log-clg','/sym/log/clg/.*.do.*','로그인로그조회','url','13','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-mnu-mcm','sym-mnu-mcm','/sym/mnu/mcm/.*.do.*','메뉴생성관리','url','14','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-mnu-mpm','sym-mnu-mpm','/sym/mnu/mpm/.*.do.*','메뉴관리','url','15','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('sym-prm','sym-prm','/sym/prm/.*.do.*','프로그램목록관리','url','16','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('uat-uap','uat-uap','/uat/uap/.*.do.*','로그인정책관리','url','17','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('uat-uia','uat-uia','/uat/uia/.*.do.*','로그인메인','url','18','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('uss-ion-uas','uss-ion-uas','/uss/ion/uas/.*.do.*','사용자부재관리','url','19','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('uss-umt-cmm','uss-umt-cmm','/uss/umt/cmm/.*.do.*','아이디중복확인','url','20','2011-08-24 0:00');
|
||||||
|
INSERT INTO LETTNROLEINFO(ROLE_CODE,ROLE_NM,ROLE_PTTRN,ROLE_DC,ROLE_TY,ROLE_SORT,ROLE_CREAT_DE) VALUES ('uss-umt-user','uss-umt-user','/uss/umt/user/.*.do.*','사용자등록','url','21','2011-08-24 0:00');
|
||||||
|
|
||||||
|
|
||||||
|
# 권한별 롤
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sec-gmt','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sec-ram','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sec-rgm','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sec-rmt','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-ccm-cca','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-ccm-ccc','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-ccm-cde','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-ccm-zip','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-mnu-mcm','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-mnu-mpm','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','sym-prm','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','uat-uap','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','uss-umt-cmm','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ADMIN','uss-umt-user','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ANONYMOUS','cop-bbs','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ANONYMOUS','sym-cmm','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_ANONYMOUS','uat-uia','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_USER_MEMBER','cop-com','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_USER_MEMBER','sts-cst','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_USER_MEMBER','sym-log-clg','2009-08-25 00:00:00');
|
||||||
|
INSERT INTO LETTNAUTHORROLERELATE(AUTHOR_CODE,ROLE_CODE,CREAT_DT) VALUES ('ROLE_USER_MEMBER','uss-ion-uas','2009-08-25 00:00:00');
|
||||||
|
|
||||||
|
|
||||||
|
# 사용자정보
|
||||||
|
INSERT INTO LETTNEMPLYRINFO(EMPLYR_ID,ORGNZT_ID,USER_NM,PASSWORD,EMPL_NO,IHIDNUM,SEXDSTN_CODE,BRTHDY,FXNUM,HOUSE_ADRES,PASSWORD_HINT,PASSWORD_CNSR,HOUSE_END_TELNO,AREA_NO,DETAIL_ADRES,ZIP,OFFM_TELNO,MBTLNUM,EMAIL_ADRES,OFCPS_NM,HOUSE_MIDDLE_TELNO,GROUP_ID,PSTINST_CODE,EMPLYR_STTUS_CODE,ESNTL_ID,CRTFC_DN_VALUE,SBSCRB_DE) VALUES ('admin','ORGNZT_0000000000000','관리자','JfQ7FIatlaE5jj7rPYO8QBABX8yb7bNbQy4AKY1QIfc=','','','','','','','P01','123','','','','','','123456789','admin@test.com','','','GROUP_00000000000000','00000000','P','USRCNFRM_00000000000','','2011-08-02 21:13:03');
|
||||||
|
INSERT INTO LETTNEMPLYRINFO(EMPLYR_ID,ORGNZT_ID,USER_NM,PASSWORD,EMPL_NO,IHIDNUM,SEXDSTN_CODE,BRTHDY,FXNUM,HOUSE_ADRES,PASSWORD_HINT,PASSWORD_CNSR,HOUSE_END_TELNO,AREA_NO,DETAIL_ADRES,ZIP,OFFM_TELNO,MBTLNUM,EMAIL_ADRES,OFCPS_NM,HOUSE_MIDDLE_TELNO,GROUP_ID,PSTINST_CODE,EMPLYR_STTUS_CODE,ESNTL_ID,CRTFC_DN_VALUE,SBSCRB_DE) VALUES ('user1','ORGNZT_0000000000000','유저1','gRFeMeIqWAGxl3UOwS16Ua1pOqAX7Mi8oDPL1QCpKLY=','','','','','','','P01','123','','','','','','123456789','test01@test.com','','','GROUP_00000000000000','00000000','P','USRCNFRM_00000000001','','2011-08-11 17:00:18');
|
||||||
|
|
||||||
|
|
||||||
|
# 사용자별권한설정
|
||||||
|
INSERT INTO LETTNEMPLYRSCRTYESTBS(SCRTY_DTRMN_TRGET_ID,MBER_TY_CODE,AUTHOR_CODE) VALUES ('USRCNFRM_00000000000','USR','ROLE_ADMIN');
|
||||||
|
INSERT INTO LETTNEMPLYRSCRTYESTBS(SCRTY_DTRMN_TRGET_ID,MBER_TY_CODE,AUTHOR_CODE) VALUES ('USRCNFRM_00000000001','USR','ROLE_USER_MEMBER');
|
||||||
|
|
||||||
|
|
||||||
|
# 게시판템플릿
|
||||||
|
INSERT INTO LETTNTMPLATINFO(TMPLAT_ID,TMPLAT_NM,TMPLAT_COURS,USE_AT,TMPLAT_SE_CODE,FRST_REGISTER_ID,FRST_REGIST_PNTTM,LAST_UPDUSR_ID,LAST_UPDT_PNTTM) VALUES ('TMPLAT_BOARD_DEFAULT','게시판 기본템플릿','/css/egovframework/cop/bbs/egovbbsTemplate.css','Y','TMPT01','USRCNFRM_00000000000','2011-08-02 21:01:59','USRCNFRM_00000000000','2011-08-08 16:12:57');
|
||||||
|
|
||||||
|
|
||||||
|
# 게시판마스터
|
||||||
|
INSERT INTO LETTNBBSMASTER(BBS_ID,BBS_NM,BBS_INTRCN,BBS_TY_CODE,BBS_ATTRB_CODE,REPLY_POSBL_AT,FILE_ATCH_POSBL_AT,ATCH_POSBL_FILE_NUMBER,ATCH_POSBL_FILE_SIZE,USE_AT,TMPLAT_ID,FRST_REGISTER_ID,FRST_REGIST_PNTTM,LAST_UPDUSR_ID,LAST_UPDT_PNTTM) VALUES ('BBSMSTR_AAAAAAAAAAAA','공지사항','공지사항게시판','BBST03','BBSA03','Y','Y',2,5242880,'Y','TMPLAT_BOARD_DEFAULT','USRCNFRM_00000000000','2011-08-31 12:00:00','USRCNFRM_00000000000','2011-08-31 12:00:00');
|
||||||
|
INSERT INTO LETTNBBSMASTER(BBS_ID,BBS_NM,BBS_INTRCN,BBS_TY_CODE,BBS_ATTRB_CODE,REPLY_POSBL_AT,FILE_ATCH_POSBL_AT,ATCH_POSBL_FILE_NUMBER,ATCH_POSBL_FILE_SIZE,USE_AT,TMPLAT_ID,FRST_REGISTER_ID,FRST_REGIST_PNTTM,LAST_UPDUSR_ID,LAST_UPDT_PNTTM) VALUES ('BBSMSTR_BBBBBBBBBBBB','갤러리','갤러리게시판','BBST01','BBSA02','Y','Y',2,5242880,'Y','TMPLAT_BOARD_DEFAULT','USRCNFRM_00000000000','2011-08-31 12:00:00','USRCNFRM_00000000000','2011-08-31 12:00:00');
|
||||||
|
INSERT INTO LETTNBBSMASTER(BBS_ID,BBS_NM,BBS_INTRCN,BBS_TY_CODE,BBS_ATTRB_CODE,REPLY_POSBL_AT,FILE_ATCH_POSBL_AT,ATCH_POSBL_FILE_NUMBER,ATCH_POSBL_FILE_SIZE,USE_AT,TMPLAT_ID,FRST_REGISTER_ID,FRST_REGIST_PNTTM,LAST_UPDUSR_ID,LAST_UPDT_PNTTM) VALUES ('BBSMSTR_CCCCCCCCCCCC','자료실','자료실게시판','BBST01','BBSA03','Y','Y',2,5242880,'Y','TMPLAT_BOARD_DEFAULT','USRCNFRM_00000000000','2011-08-31 12:00:00','USRCNFRM_00000000000','2011-08-31 12:00:00');
|
||||||
|
|
||||||
|
|
||||||
|
# 게시판사용
|
||||||
|
INSERT INTO LETTNBBSUSE(BBS_ID,TRGET_ID,USE_AT,REGIST_SE_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('BBSMSTR_AAAAAAAAAAAA','SYSTEM_DEFAULT_BOARD','Y','REGC01','2011-08-31 12:00:00','USRCNFRM_00000000000','2011-08-31 12:00:00','USRCNFRM_00000000000');
|
||||||
|
INSERT INTO LETTNBBSUSE(BBS_ID,TRGET_ID,USE_AT,REGIST_SE_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('BBSMSTR_BBBBBBBBBBBB','SYSTEM_DEFAULT_BOARD','Y','REGC01','2011-08-31 12:00:00','USRCNFRM_00000000000','2011-08-31 12:00:00','USRCNFRM_00000000000');
|
||||||
|
INSERT INTO LETTNBBSUSE(BBS_ID,TRGET_ID,USE_AT,REGIST_SE_CODE,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES ('BBSMSTR_CCCCCCCCCCCC','SYSTEM_DEFAULT_BOARD','Y','REGC01','2011-08-31 12:00:00','USRCNFRM_00000000000','2011-08-31 12:00:00','USRCNFRM_00000000000');
|
||||||
|
|
||||||
|
|
||||||
|
#프로그램목록
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('dir','/','디렉토리','디렉토리','/');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovAuthorGroupManage','/sec/rgm/','권한그룹관리','권한그룹관리','/sec/rgm/EgovAuthorGroupListView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovAuthorInsert','/sec/ram/','권한등록','권한등록','/sec/ram/EgovAuthorInsertView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovAuthorManage','/sec/ram/','권한관리','권한관리','/sec/ram/EgovAuthorList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovAuthorRoleManage','/sec/ram/','사용자별권한관리','사용자별권한롤관리','/sec/rgm/EgovAuthorGroupListView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovAuthorUpdt','/sec/ram/','권한수정','권한수정','/sec/ram/EgovAuthor.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovBoardMstrList','/cop/bbs/','게시판 목록조회','게시판 목록조회','/cop/bbs/SelectBBSMasterInfs.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovBoardMstrRegist','/cop/bbs/','게시판 생성','게시판 생성','/cop/bbs/addBBSMaster.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovBoardMstrUpdt','/cop/bbs/','게시판 수정','게시판 수정','/cop/bbs/SelectBBSMasterInf.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovBoardUseInfInqire','/cop/com/','게시판사용여부 상세조회','게시판사용여부 상세조회','/cop/com/selectBBSUseInf.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovBoardUseInfList','/cop/com/','게시판사용여부 목록 조회','게시판사용여부 목록 조회','/cop/com/selectBBSUseInfs.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovBoardUseInfRegist','/cop/com/','게시판사용여부 등록','게시판사용여부 등록','/cop/com/addBBSUseInf.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnClCodeDetail','/sym/ccm/ccc/','공통분류코드 상세조회','공통분류코드 상세조회','/sym/ccm/ccc/EgovCcmCmmnClCodeDetail.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnClCodeList','/sym/ccm/ccc/','공통분류코드목록 조회','공통분류코드목록 조회','/sym/ccm/ccc/EgovCcmCmmnClCodeList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnClCodeModify','/sym/ccm/ccc/','공통분류코드 수정','공통분류코드 수정','/sym/ccm/ccc/EgovCcmCmmnClCodeModify.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnClCodeRegist','/sym/ccm/ccc/','공통분류코드 등록','공통분류코드 등록','/sym/ccm/ccc/EgovCcmCmmnClCodeRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnCodeDetail','/sym/ccm/cca/','공통코드 상세조회','공통코드 상세조회','/sym/ccm/cca/EgovCcmCmmnCodeDetail.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnCodeList','/sym/ccm/cca/','공통코드목록 조회','공통코드목록 조회','/sym/ccm/cca/EgovCcmCmmnCodeList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnCodeModify','/sym/ccm/cca/','공통코드 수정','공통코드 수정','/sym/ccm/cca/EgovCcmCmmnCodeModify.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnCodeRegist','/sym/ccm/cca/','공통코드 등록','공통코드 등록','/sym/ccm/cca/EgovCcmCmmnCodeRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnDetailCodeDetail','/sym/ccm/cde/','공통상세코드 상세조회','공통상세코드 상세조회','/sym/ccm/cde/EgovCcmCmmnDetailCodeDetail.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnDetailCodeList','/sym/ccm/cde/','공통상세코드목록 조회','공통상세코드목록 조회','/sym/ccm/cde/EgovCcmCmmnDetailCodeList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnDetailCodeModify','/sym/ccm/cde/','공통상세코드 수정','공통상세코드 수정','/sym/ccm/cde/EgovCcmCmmnDetailCodeModify.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmCmmnDetailCodeRegist','/sym/ccm/cde/','공통상세코드 등록','공통상세코드 등록','/sym/ccm/cde/EgovCcmCmmnDetailCodeRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmExcelZipRegist','/sym/ccm/zip/','우편번호 엑셀파일 등록','우편번호 엑셀파일 등록','/sym/ccm/zip/EgovCcmExcelZipRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmZipDetail','/sym/ccm/zip/','우편번호 상세조회','우편번호 상세조회','/sym/ccm/zip/EgovCcmZipDetail.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmZipList','/sym/ccm/zip/','우편번호목록 조회','우편번호목록 조회','/sym/ccm/zip/EgovCcmZipList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmZipModify','/sym/ccm/zip/','우편번호 수정','우편번호 수정','/sym/ccm/zip/EgovCcmZipModify.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmZipRegist','/sym/ccm/zip/','우편번호 등록','우편번호 등록','/sym/ccm/zip/EgovCcmZipRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovCcmZipSearchPopup','/sym/cmm/','우편번호 찾기','우편번호 찾기','/sym/cmm/EgovCcmZipSearchPopup.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovConectStats','/sts/cst/','접속통계','접속통계','/sts/cst/selectConectStats.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovFileNmSearch','/sym/prm/','파일명검색','파일명검색','/sym/prm/EgovProgramListSearch.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovGroupInsert','/sec/gmt/','그룹등록','그룹등록','/sec/gmt/EgovGroupInsertView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovGroupManage','/sec/gmt/','그룹관리','그룹관리','/sec/gmt/EgovGroupList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovGroupUpdt','/sec/gmt/','그룹수정','그룹수정','/sec/gmt/EgovGroup.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovIdDplctCnfirm','/uss/umt/cmm/','아이디중복확인','아이디중복확인','/uss/umt/cmm/EgovIdDplctCnfirmView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovInfoNotice','/cop/bbs/','공지사항','공지사항','/cop/bbs/selectBoardList.do?bbsId=BBSMSTR_AAAAAAAAAAAA');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovInfoNoticeAdmin','/cop/bbs/','공지사항관리','공지사항관리','/cop/bbs/selectBoardList.do?bbsId=BBSMSTR_AAAAAAAAAAAA');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovInfoWork','/cop/bbs/','업무게시판','업무게시판','/cop/bbs/selectBoardList.do?bbsId=BBSMSTR_CCCCCCCCCCCC');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovInfoWorkAdmin','/cop/bbs/','업무게시판관리','업무게시판관리','/cop/bbs/selectBoardList.do?bbsId=BBSMSTR_CCCCCCCCCCCC');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovJoinHistory','/','입퇴사정보 관리','입퇴사정보 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovLoginLogInqire','/sym/log/clg/','로그인로그상세조회','로그인로그상세조회','/sym/log/clg/SelectLoginLogList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovLoginLogList','/sym/log/clg/','로그인로그조회','로그인로그조회','/sym/log/clg/SelectLoginLogList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovLoginPolicyList','/uat/uap/','로그인정책관리','로그인정책관리','/uat/uap/selectLoginPolicyList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovLoginPolicyRegist','/uat/uap/','로그인정책등록','로그인정책등록','/uat/uap/getLoginPolicy.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovLoginPolicyUpdt','/uat/uia/','로그인정책수정','로그인정책수정','/uat/uap/getLoginPolicy.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovLoginUsr','/uat/uia/','내부업무 로그인','내부업무 로그인','/uat/uia/egovLoginUsr.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMainHome','/uat/uia/','내부업무 메인','내부업무 메인','/uat/uia/actionMain.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMberPositionl','/','직위정보 관리','직위정보 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMberRank','/','직급정보 관리','직급정보 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMenuBndeRegist','/sym/mnu/mpm/','메뉴일괄등록','메뉴일괄등록','/sym/mnu/mpm/EgovMenuBndeRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMenuCreat','/sym/mnu/mcm/','메뉴생성','메뉴생성','/sym/mnu/mcm/EgovMenuCreatSelect.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMenuCreatManage','/sym/mnu/mcm/','메뉴생성관리','메뉴생성관리','/sym/mnu/mcm/EgovMenuCreatManageSelect.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMenuDetailSelectUpdt','/sym/mnu/mpm/','메뉴상세조회/수정','메뉴상세조회/수정','/sym/mnu/mpm/EgovMenuManageListDetailSelect.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMenuManage','/sym/mnu/mpm/','메뉴관리','메뉴관리','/sym/mnu/mpm/EgovMenuManageSelect.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovMenuRegist','/sym/mnu/mpm/','메뉴등록','메뉴등록','/sym/mnu/mpm/EgovMenuRegistInsert.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovNoticeInqire','/cop/bbs/','게시물조회','게시물조회','/cop/bbs/selectBoardArticle.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovNoticeList','/cop/bbs/','게시물 목록','게시물 목록','/cop/bbs/selectBoardList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovNoticeRegist','/cop/bbs/','게시물 등록','게시물 등록','/cop/bbs/addBoardArticle.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovNoticeReply','/cop/bbs/','답글 작성','답글 작성','/cop/bbs/addReplyBoardArticle.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovNoticeUpdt','/cop/bbs/','게시물 수정','게시물 수정','/cop/bbs/forUpdateBoardArticle.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovProgramListDetailSelectUpdt','/sym/prm/','프로그램목록상세조회/수정','프로그램목록상세조회/수정','/sym/prm/EgovProgramListDetailSelect.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovProgramListManage','/sym/prm/','프로그램목록관리','프로그램목록관리','/sym/prm/EgovProgramListManageSelect.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovProgramListRegist','/sym/prm/','프로그램목록등록','프로그램목록등록','/sym/prm/EgovProgramListRegist.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovRoleInsert','/sec/rmt/','롤등록','롤등록','/sec/rmt/EgovRoleInsertView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovRoleManage','/sec/rmt/','롤관리','롤관리','/sec/rmt/EgovRoleList.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovRoleUpdt','/sec/rmt/','롤수정','롤수정','/sec/rmt/EgovRole.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovTemplateInqirePopup','/cop/com/','템플릿 조회팝업','템플릿 조회팝업','/cop/com/selectTemplateInfs.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovTemplateList','/cop/com/','템플릿 목록 조회','템플릿 목록 조회','/cop/com/selectTemplateInfs.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovTemplateRegist','/cop/com/','템플릿 등록','템플릿 등록','/cop/com/addTemplateInf.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovTemplateUpdt','/cop/com/','템플릿 수정','템플릿 수정','/cop/com/selectTemplateInf.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserAbsnceList','/uss/ion/uas/','사용자부재관리','사용자부재관리','/uss/ion/uas/selectUserAbsnceListView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserAbsnceRegist','/uss/ion/uas/','사용자부재등록','사용자부재등록','/uss/ion/uas/addViewUserAbsnce.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserAbsnceUpdt','/uss/ion/uas/','사용자부재수정','사용자부재수정','/uss/ion/uas/getUserAbsnce.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserInsert','/uss/umt/user/','사용자등록','사용자등록','/uss/umt/user/EgovUserInsertView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserManage','/uss/umt/user/','사용자관리(조회,삭제)','사용자관리(조회,삭제)','/uss/umt/user/EgovUserManage.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserPasswordUpdt','/uss/umt/user/','사용자암호수정','사용자암호수정','/uss/umt/user/EgovUserPasswordUpdtView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovUserSelectUpdt','/uss/umt/user/','사용자상세조회,수정','사용자상세조회,수정','/uss/umt/user/EgovUserSelectUpdtView.do');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovWorkAttendance','/','출퇴근정보 관리','출퇴근정보 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovWorkAward','/','상벌정보 관리','상벌정보 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovWorkEstimation','/','업무평가점수 관리','업무평가점수 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
INSERT INTO LETTNPROGRMLIST(PROGRM_FILE_NM,PROGRM_STRE_PATH,PROGRM_KOREAN_NM,PROGRM_DC,URL) VALUES ('EgovWorkVacation','/','휴무정보 관리','휴무정보 관리','/EgovPageLink.do?link=main/sample_menu/Sample');
|
||||||
|
|
||||||
|
|
||||||
|
#메뉴목록
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('root','dir',0,0,1,'root','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('알림정보','dir',1000000,0,1,'알림정보','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('공지사항','EgovInfoNotice',1010000,1000000,1,'공지사항','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('업무게시판','EgovInfoWork',1020000,1000000,2,'업무게시판','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('직급체계관리','dir',2000000,0,2,'직급체계관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('입퇴사정보 관리','EgovJoinHistory',2010000,2000000,1,'입퇴사정보 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('직급정보 관리','EgovMberRank',2020000,2000000,2,'직급정보 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('직위정보 관리','EgovMberPositionl',2030000,2000000,3,'직위정보 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('진급관리','dir',3000000,0,3,'진급관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('업무평가점수 관리','EgovWorkEstimation',3010000,3000000,1,'업무평가점수 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('상벌정보 관리','EgovWorkAward',3040000,3000000,2,'상벌정보 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('근태관리','dir',4000000,0,4,'근태관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('출퇴근정보 관리','EgovWorkAttendance',4010000,4000000,1,'출퇴근정보 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('휴무정보 관리','EgovWorkVacation',4020000,4000000,2,'휴무정보 관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('내부서비스관리','dir',5000000,0,5,'내부서비스관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('내부업무게시판관리','dir',5010000,5000000,1,'내부업무게시판관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('게시판템플릿관리','EgovTemplateList',5010100,5010000,1,'게시판템플릿관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('게시판생성관리','EgovBoardMstrList',5010200,5010000,2,'게시판생성관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('게시판사용관리','EgovBoardUseInfList',5010300,5010000,3,'게시판사용관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('공지사항관리','EgovInfoNoticeAdmin',5010400,5010000,4,'공지사항관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('업무게시판관리','EgovInfoWorkAdmin',5010500,5010000,5,'업무게시판관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용현황관리','dir',5020000,5000000,2,'사용현황관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('접속로그관리','EgovLoginLogList',5020100,5020000,1,'접속로그관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('접속통계관리','EgovConectStats',5020200,5020000,2,'접속통계관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('로그인정책관리','EgovLoginPolicyList',5020300,5020000,3,'로그인정책관리','','');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('내부시스템관리','dir',6000000,0,6,'내부시스템관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용자관리','dir',6010000,6000000,1,'사용자관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용자등록관리','EgovUserManage',6010100,6010000,1,'사용자등록관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용자부재관리','EgovUserAbsnceList',6010200,6010000,2,'사용자부재관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용자권한관리','dir',6020000,6000000,2,'사용자권한관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('권한관리','EgovAuthorManage',6020100,6020000,1,'권한관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용자그룹관리','EgovGroupManage',6020200,6020000,2,'사용자그룹관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('사용자별권한관리','EgovAuthorRoleManage',6020300,6020000,3,'사용자별권한관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('롤관리','EgovRoleManage',6020400,6020000,4,'롤관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('메뉴관리','dir',6030000,6000000,3,'메뉴관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('프로그램목록관리','EgovProgramListManage',6030100,6030000,1,'프로그램목록관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('메뉴생성관리','EgovMenuCreatManage',6030200,6030000,2,'메뉴생성관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('메뉴목록관리','EgovMenuManage',6030300,6030000,4,'메뉴목록관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('코드관리','dir',6040000,6000000,4,'코드관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('분류코드관리','EgovCcmCmmnClCodeList',6040100,6040000,1,'분류코드관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('공통코드관리','EgovCcmCmmnCodeList',6040200,6040000,2,'공통코드관리','/','/');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('상세코드관리','EgovCcmCmmnDetailCodeList',6040300,6040000,3,'상세코드관리','','');
|
||||||
|
INSERT INTO LETTNMENUINFO(MENU_NM,PROGRM_FILE_NM,MENU_NO,UPPER_MENU_NO,MENU_ORDR,MENU_DC,RELATE_IMAGE_PATH,RELATE_IMAGE_NM) VALUES ('우편번호관리','EgovCcmZipList',6040400,6040000,4,'우편번호관리','/','/');
|
||||||
|
|
||||||
|
|
||||||
|
#메뉴생성목록
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (1000000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (1000000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (1010000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (1010000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (1020000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (1020000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2000000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2000000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2010000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2010000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2020000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2020000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2030000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (2030000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (3000000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (3000000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (3010000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (3010000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (3040000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (3040000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (4000000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (4000000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (4010000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (4010000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (4020000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (4020000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5000000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5000000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010100,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010100,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010200,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010200,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010300,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010300,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010400,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010400,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010500,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5010500,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020000,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020100,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020100,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020200,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020200,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020300,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (5020300,'ROLE_USER_MEMBER',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6000000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6010000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6010100,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6010200,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6020000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6020100,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6020200,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6020300,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6020400,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6030000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6030100,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6030200,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6030300,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6040000,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6040100,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6040200,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6040300,'ROLE_ADMIN',null);
|
||||||
|
INSERT INTO LETTNMENUCREATDTLS(MENU_NO,AUTHOR_CODE,MAPNG_CREAT_ID) VALUES (6040400,'ROLE_ADMIN',null);
|
||||||
|
|
||||||
|
#게시물
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (1,'BBSMSTR_AAAAAAAAAAAA',1,'홈페이지 샘플공지1','홈페이지 샘플공지1','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (2,'BBSMSTR_AAAAAAAAAAAA',1,'홈페이지 샘플공지2','홈페이지 샘플공지2','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (3,'BBSMSTR_AAAAAAAAAAAA',1,'홈페이지 샘플공지3','홈페이지 샘플공지3','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (4,'BBSMSTR_AAAAAAAAAAAA',1,'홈페이지 샘플공지4','홈페이지 샘플공지4','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (5,'BBSMSTR_AAAAAAAAAAAA',1,'홈페이지 샘플공지5','홈페이지 샘플공지5','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (6,'BBSMSTR_CCCCCCCCCCCC',1,'홈페이지 샘플업무1','홈페이지 샘플업무1','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (7,'BBSMSTR_CCCCCCCCCCCC',1,'홈페이지 샘플업무2','홈페이지 샘플업무2','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (8,'BBSMSTR_CCCCCCCCCCCC',1,'홈페이지 샘플업무3','홈페이지 샘플업무3','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (9,'BBSMSTR_CCCCCCCCCCCC',1,'홈페이지 샘플업무4','홈페이지 샘플업무4','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
INSERT INTO LETTNBBS(NTT_ID,BBS_ID,NTT_NO,NTT_SJ,NTT_CN,ANSWER_AT,PARNTSCTT_NO,ANSWER_LC,SORT_ORDR,RDCNT,USE_AT,NTCE_BGNDE,NTCE_ENDDE,NTCR_ID,NTCR_NM,PASSWORD,ATCH_FILE_ID,FRST_REGIST_PNTTM,FRST_REGISTER_ID,LAST_UPDT_PNTTM,LAST_UPDUSR_ID) VALUES (10,'BBSMSTR_CCCCCCCCCCCC',1,'홈페이지 샘플업무5','홈페이지 샘플업무5','N',0,0,2,0,'Y','10000101','99991231','','','',null,NOW(),'USRCNFRM_00000000000',null,null);
|
||||||
|
|
||||||
|
#우편번호
|
||||||
|
INSERT INTO LETTCZIP(ZIP, SN, CTPRVN_NM, SIGNGU_NM, EMD_NM, LI_BULD_NM, LNBR_DONG_HO, FRST_REGIST_PNTTM, FRST_REGISTER_ID, LAST_UPDT_PNTTM, LAST_UPDUSR_ID) VALUES ('100775',7381,'서울','중구','무교동','한국정보화진흥원','',SYSDATE(),'SYSTEM',SYSDATE(),'SYSTEM');
|
||||||
495
DATABASE/mysql/all_ebt_ddl_mysql.sql
Normal file
495
DATABASE/mysql/all_ebt_ddl_mysql.sql
Normal file
@ -0,0 +1,495 @@
|
|||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE IDS (
|
||||||
|
TABLE_NAME varchar(20) NOT NULL,
|
||||||
|
NEXT_ID decimal(30,0) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (TABLE_NAME)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTCCMMNCLCODE (
|
||||||
|
CL_CODE char(3) NOT NULL,
|
||||||
|
CL_CODE_NM varchar(60) DEFAULT NULL,
|
||||||
|
CL_CODE_DC varchar(200) DEFAULT NULL,
|
||||||
|
USE_AT char(1) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (CL_CODE)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTCCMMNCODE (
|
||||||
|
CODE_ID varchar(6) NOT NULL,
|
||||||
|
CODE_ID_NM varchar(60) DEFAULT NULL,
|
||||||
|
CODE_ID_DC varchar(200) DEFAULT NULL,
|
||||||
|
USE_AT char(1) DEFAULT NULL,
|
||||||
|
CL_CODE char(3) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (CODE_ID),
|
||||||
|
KEY R_179 (CL_CODE),
|
||||||
|
CONSTRAINT LETTCCMMNCODE_ibfk_1 FOREIGN KEY (CL_CODE) REFERENCES LETTCCMMNCLCODE (CL_CODE)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTCCMMNDETAILCODE (
|
||||||
|
CODE_ID varchar(6) NOT NULL,
|
||||||
|
CODE varchar(15) NOT NULL,
|
||||||
|
CODE_NM varchar(60) DEFAULT NULL,
|
||||||
|
CODE_DC varchar(200) DEFAULT NULL,
|
||||||
|
USE_AT char(1) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (CODE_ID,CODE),
|
||||||
|
CONSTRAINT LETTCCMMNDETAILCODE_ibfk_1 FOREIGN KEY (CODE_ID) REFERENCES LETTCCMMNCODE (CODE_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNORGNZTINFO (
|
||||||
|
ORGNZT_ID char(20) NOT NULL DEFAULT '',
|
||||||
|
ORGNZT_NM varchar(20) NOT NULL,
|
||||||
|
ORGNZT_DC varchar(100) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ORGNZT_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNAUTHORGROUPINFO (
|
||||||
|
GROUP_ID char(20) NOT NULL DEFAULT '',
|
||||||
|
GROUP_NM varchar(60) NOT NULL,
|
||||||
|
GROUP_CREAT_DE char(20) NOT NULL,
|
||||||
|
GROUP_DC varchar(100) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (GROUP_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNAUTHORINFO (
|
||||||
|
AUTHOR_CODE varchar(30) NOT NULL DEFAULT '',
|
||||||
|
AUTHOR_NM varchar(60) NOT NULL,
|
||||||
|
AUTHOR_DC varchar(200) DEFAULT NULL,
|
||||||
|
AUTHOR_CREAT_DE char(20) NOT NULL,
|
||||||
|
PRIMARY KEY (AUTHOR_CODE)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNROLES_HIERARCHY (
|
||||||
|
PARNTS_ROLE varchar(30) NOT NULL,
|
||||||
|
CHLDRN_ROLE varchar(30) NOT NULL,
|
||||||
|
PRIMARY KEY (PARNTS_ROLE,CHLDRN_ROLE),
|
||||||
|
KEY R_308 (CHLDRN_ROLE),
|
||||||
|
CONSTRAINT LETTNROLES_HIERARCHY_ibfk_2 FOREIGN KEY (CHLDRN_ROLE) REFERENCES LETTNAUTHORINFO (AUTHOR_CODE) ON DELETE CASCADE,
|
||||||
|
CONSTRAINT LETTNROLES_HIERARCHY_ibfk_1 FOREIGN KEY (PARNTS_ROLE) REFERENCES LETTNAUTHORINFO (AUTHOR_CODE) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNROLEINFO (
|
||||||
|
ROLE_CODE varchar(50) NOT NULL DEFAULT '',
|
||||||
|
ROLE_NM varchar(60) NOT NULL,
|
||||||
|
ROLE_PTTRN varchar(300) DEFAULT NULL,
|
||||||
|
ROLE_DC varchar(200) DEFAULT NULL,
|
||||||
|
ROLE_TY varchar(80) DEFAULT NULL,
|
||||||
|
ROLE_SORT varchar(10) DEFAULT NULL,
|
||||||
|
ROLE_CREAT_DE char(20) NOT NULL,
|
||||||
|
PRIMARY KEY (ROLE_CODE)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNAUTHORROLERELATE (
|
||||||
|
AUTHOR_CODE varchar(30) NOT NULL,
|
||||||
|
ROLE_CODE varchar(50) NOT NULL,
|
||||||
|
CREAT_DT datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (AUTHOR_CODE,ROLE_CODE),
|
||||||
|
KEY R_292 (ROLE_CODE),
|
||||||
|
CONSTRAINT LETTNAUTHORROLERELATE_ibfk_2 FOREIGN KEY (ROLE_CODE) REFERENCES LETTNROLEINFO (ROLE_CODE) ON DELETE CASCADE,
|
||||||
|
CONSTRAINT LETTNAUTHORROLERELATE_ibfk_1 FOREIGN KEY (AUTHOR_CODE) REFERENCES LETTNAUTHORINFO (AUTHOR_CODE) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNEMPLYRINFO (
|
||||||
|
EMPLYR_ID varchar(20) NOT NULL,
|
||||||
|
ORGNZT_ID char(20) DEFAULT NULL,
|
||||||
|
USER_NM varchar(60) NOT NULL,
|
||||||
|
PASSWORD varchar(200) NOT NULL,
|
||||||
|
EMPL_NO varchar(20) DEFAULT NULL,
|
||||||
|
IHIDNUM varchar(200) DEFAULT NULL,
|
||||||
|
SEXDSTN_CODE char(1) DEFAULT NULL,
|
||||||
|
BRTHDY char(20) DEFAULT NULL,
|
||||||
|
FXNUM varchar(20) DEFAULT NULL,
|
||||||
|
HOUSE_ADRES varchar(100) DEFAULT NULL,
|
||||||
|
PASSWORD_HINT varchar(100) NOT NULL,
|
||||||
|
PASSWORD_CNSR varchar(100) NOT NULL,
|
||||||
|
HOUSE_END_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
AREA_NO varchar(4) DEFAULT NULL,
|
||||||
|
DETAIL_ADRES varchar(100) DEFAULT NULL,
|
||||||
|
ZIP varchar(6) DEFAULT NULL,
|
||||||
|
OFFM_TELNO varchar(20) DEFAULT NULL,
|
||||||
|
MBTLNUM varchar(20) DEFAULT NULL,
|
||||||
|
EMAIL_ADRES varchar(50) DEFAULT NULL,
|
||||||
|
OFCPS_NM varchar(60) DEFAULT NULL,
|
||||||
|
HOUSE_MIDDLE_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
GROUP_ID char(20) DEFAULT NULL,
|
||||||
|
PSTINST_CODE char(8) DEFAULT NULL,
|
||||||
|
EMPLYR_STTUS_CODE varchar(15) NOT NULL,
|
||||||
|
ESNTL_ID char(20) NOT NULL,
|
||||||
|
CRTFC_DN_VALUE varchar(20) DEFAULT NULL,
|
||||||
|
SBSCRB_DE datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (EMPLYR_ID),
|
||||||
|
KEY LETTNEMPLYRINFO_ibfk_2 (GROUP_ID),
|
||||||
|
KEY LETTNEMPLYRINFO_ibfk_1 (ORGNZT_ID),
|
||||||
|
CONSTRAINT LETTNEMPLYRINFO_ibfk_2 FOREIGN KEY (GROUP_ID) REFERENCES LETTNAUTHORGROUPINFO (GROUP_ID) ON DELETE CASCADE,
|
||||||
|
CONSTRAINT LETTNEMPLYRINFO_ibfk_1 FOREIGN KEY (ORGNZT_ID) REFERENCES LETTNORGNZTINFO (ORGNZT_ID) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNEMPLYRSCRTYESTBS (
|
||||||
|
SCRTY_DTRMN_TRGET_ID varchar(20) NOT NULL,
|
||||||
|
MBER_TY_CODE varchar(15) DEFAULT NULL,
|
||||||
|
AUTHOR_CODE varchar(30) NOT NULL,
|
||||||
|
PRIMARY KEY (SCRTY_DTRMN_TRGET_ID),
|
||||||
|
KEY LETTNEMPLYRSCRTYESTBS_ibfk_4 (AUTHOR_CODE),
|
||||||
|
CONSTRAINT LETTNEMPLYRSCRTYESTBS_ibfk_4 FOREIGN KEY (AUTHOR_CODE) REFERENCES LETTNAUTHORINFO (AUTHOR_CODE)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNTMPLATINFO (
|
||||||
|
TMPLAT_ID char(20) NOT NULL DEFAULT '',
|
||||||
|
TMPLAT_NM varchar(255) DEFAULT NULL,
|
||||||
|
TMPLAT_COURS varchar(2000) DEFAULT NULL,
|
||||||
|
USE_AT char(1) DEFAULT NULL,
|
||||||
|
TMPLAT_SE_CODE char(6) DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (TMPLAT_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNBBSMASTER (
|
||||||
|
BBS_ID char(20) NOT NULL,
|
||||||
|
BBS_NM varchar(255) NOT NULL,
|
||||||
|
BBS_INTRCN varchar(2400) DEFAULT NULL,
|
||||||
|
BBS_TY_CODE char(6) NOT NULL,
|
||||||
|
BBS_ATTRB_CODE char(6) NOT NULL,
|
||||||
|
REPLY_POSBL_AT char(1) DEFAULT NULL,
|
||||||
|
FILE_ATCH_POSBL_AT char(1) NOT NULL,
|
||||||
|
ATCH_POSBL_FILE_NUMBER decimal(2,0) NOT NULL,
|
||||||
|
ATCH_POSBL_FILE_SIZE decimal(8,0) DEFAULT NULL,
|
||||||
|
USE_AT char(1) NOT NULL,
|
||||||
|
TMPLAT_ID char(20) DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) NOT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime NOT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (BBS_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNBBSUSE (
|
||||||
|
BBS_ID char(20) NOT NULL,
|
||||||
|
TRGET_ID char(20) NOT NULL DEFAULT '',
|
||||||
|
USE_AT char(1) NOT NULL,
|
||||||
|
REGIST_SE_CODE char(6) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) NOT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (BBS_ID,TRGET_ID),
|
||||||
|
CONSTRAINT LETTNBBSUSE_ibfk_1 FOREIGN KEY (BBS_ID) REFERENCES LETTNBBSMASTER (BBS_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNBBS (
|
||||||
|
NTT_ID decimal(20,0) NOT NULL,
|
||||||
|
BBS_ID char(20) NOT NULL,
|
||||||
|
NTT_NO decimal(20,0) DEFAULT NULL,
|
||||||
|
NTT_SJ varchar(2000) DEFAULT NULL,
|
||||||
|
NTT_CN mediumtext,
|
||||||
|
ANSWER_AT char(1) DEFAULT NULL,
|
||||||
|
PARNTSCTT_NO decimal(10,0) DEFAULT NULL,
|
||||||
|
ANSWER_LC int(11) DEFAULT NULL,
|
||||||
|
SORT_ORDR decimal(8,0) DEFAULT NULL,
|
||||||
|
RDCNT decimal(10,0) DEFAULT NULL,
|
||||||
|
USE_AT char(1) NOT NULL,
|
||||||
|
NTCE_BGNDE char(20) DEFAULT NULL,
|
||||||
|
NTCE_ENDDE char(20) DEFAULT NULL,
|
||||||
|
NTCR_ID varchar(20) DEFAULT NULL,
|
||||||
|
NTCR_NM varchar(20) DEFAULT NULL,
|
||||||
|
PASSWORD varchar(200) DEFAULT NULL,
|
||||||
|
ATCH_FILE_ID char(20) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime NOT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) NOT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (NTT_ID,BBS_ID),
|
||||||
|
KEY LETTNBBS_ibfk_1 (BBS_ID),
|
||||||
|
CONSTRAINT LETTNBBS_ibfk_1 FOREIGN KEY (BBS_ID) REFERENCES LETTNBBSMASTER (BBS_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTCZIP (
|
||||||
|
ZIP varchar(6) NOT NULL,
|
||||||
|
SN decimal(10,0) NOT NULL DEFAULT '0',
|
||||||
|
CTPRVN_NM varchar(20) DEFAULT NULL,
|
||||||
|
SIGNGU_NM varchar(20) DEFAULT NULL,
|
||||||
|
EMD_NM varchar(60) DEFAULT NULL,
|
||||||
|
LI_BULD_NM varchar(60) DEFAULT NULL,
|
||||||
|
LNBR_DONG_HO varchar(20) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ZIP,SN)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTHEMPLYRINFOCHANGEDTLS (
|
||||||
|
EMPLYR_ID varchar(20) NOT NULL,
|
||||||
|
CHANGE_DE DATETIME NOT NULL,
|
||||||
|
ORGNZT_ID char(20) DEFAULT NULL,
|
||||||
|
GROUP_ID char(20) DEFAULT NULL,
|
||||||
|
EMPL_NO varchar(20) DEFAULT NULL,
|
||||||
|
SEXDSTN_CODE char(1) DEFAULT NULL,
|
||||||
|
BRTHDY char(20) DEFAULT NULL,
|
||||||
|
FXNUM varchar(20) DEFAULT NULL,
|
||||||
|
HOUSE_ADRES varchar(100) DEFAULT NULL,
|
||||||
|
HOUSE_END_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
AREA_NO varchar(4) DEFAULT NULL,
|
||||||
|
DETAIL_ADRES varchar(100) DEFAULT NULL,
|
||||||
|
ZIP varchar(6) DEFAULT NULL,
|
||||||
|
OFFM_TELNO varchar(20) DEFAULT NULL,
|
||||||
|
MBTLNUM varchar(20) DEFAULT NULL,
|
||||||
|
EMAIL_ADRES varchar(50) DEFAULT NULL,
|
||||||
|
HOUSE_MIDDLE_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
PSTINST_CODE char(8) DEFAULT NULL,
|
||||||
|
EMPLYR_STTUS_CODE varchar(15) DEFAULT NULL,
|
||||||
|
ESNTL_ID char(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (EMPLYR_ID,CHANGE_DE)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNBBSMASTEROPTN (
|
||||||
|
BBS_ID char(20) NOT NULL DEFAULT '',
|
||||||
|
ANSWER_AT char(1) NOT NULL DEFAULT '',
|
||||||
|
STSFDG_AT char(1) NOT NULL DEFAULT '',
|
||||||
|
FRST_REGIST_PNTTM datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) NOT NULL DEFAULT '',
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (BBS_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNENTRPRSMBER (
|
||||||
|
ENTRPRS_MBER_ID varchar(20) NOT NULL DEFAULT '',
|
||||||
|
ENTRPRS_SE_CODE char(15) DEFAULT NULL,
|
||||||
|
BIZRNO varchar(10) DEFAULT NULL,
|
||||||
|
JURIRNO varchar(13) DEFAULT NULL,
|
||||||
|
CMPNY_NM varchar(60) NOT NULL,
|
||||||
|
CXFC varchar(50) DEFAULT NULL,
|
||||||
|
ZIP varchar(6) DEFAULT NULL,
|
||||||
|
ADRES varchar(100) DEFAULT NULL,
|
||||||
|
ENTRPRS_MIDDLE_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
FXNUM varchar(20) DEFAULT NULL,
|
||||||
|
INDUTY_CODE char(15) DEFAULT NULL,
|
||||||
|
APPLCNT_NM varchar(50) DEFAULT NULL,
|
||||||
|
APPLCNT_IHIDNUM varchar(200) DEFAULT NULL,
|
||||||
|
SBSCRB_DE datetime DEFAULT NULL,
|
||||||
|
ENTRPRS_MBER_STTUS varchar(15) DEFAULT NULL,
|
||||||
|
ENTRPRS_MBER_PASSWORD varchar(200) NOT NULL,
|
||||||
|
ENTRPRS_MBER_PASSWORD_HINT varchar(100) NOT NULL,
|
||||||
|
ENTRPRS_MBER_PASSWORD_CNSR varchar(100) NOT NULL,
|
||||||
|
GROUP_ID char(20) DEFAULT NULL,
|
||||||
|
DETAIL_ADRES varchar(100) DEFAULT NULL,
|
||||||
|
ENTRPRS_END_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
AREA_NO varchar(4) DEFAULT NULL,
|
||||||
|
APPLCNT_EMAIL_ADRES varchar(50) DEFAULT NULL,
|
||||||
|
ESNTL_ID char(20) NOT NULL,
|
||||||
|
PRIMARY KEY (ENTRPRS_MBER_ID),
|
||||||
|
KEY LETTNENTRPRSMBER_ibfk_1 (GROUP_ID),
|
||||||
|
CONSTRAINT LETTNENTRPRSMBER_ibfk_1 FOREIGN KEY (GROUP_ID) REFERENCES LETTNAUTHORGROUPINFO (GROUP_ID) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNFILE (
|
||||||
|
ATCH_FILE_ID char(20) NOT NULL,
|
||||||
|
CREAT_DT datetime NOT NULL,
|
||||||
|
USE_AT char(1) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ATCH_FILE_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNFILEDETAIL (
|
||||||
|
ATCH_FILE_ID char(20) NOT NULL,
|
||||||
|
FILE_SN decimal(10,0) NOT NULL,
|
||||||
|
FILE_STRE_COURS varchar(2000) NOT NULL,
|
||||||
|
STRE_FILE_NM varchar(255) NOT NULL,
|
||||||
|
ORIGNL_FILE_NM varchar(255) DEFAULT NULL,
|
||||||
|
FILE_EXTSN varchar(20) NOT NULL,
|
||||||
|
FILE_CN mediumtext,
|
||||||
|
FILE_SIZE decimal(8,0) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (ATCH_FILE_ID,FILE_SN),
|
||||||
|
CONSTRAINT LETTNFILEDETAIL_ibfk_1 FOREIGN KEY (ATCH_FILE_ID) REFERENCES LETTNFILE (ATCH_FILE_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNGNRLMBER (
|
||||||
|
MBER_ID varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PASSWORD varchar(200) NOT NULL,
|
||||||
|
PASSWORD_HINT varchar(100) DEFAULT NULL,
|
||||||
|
PASSWORD_CNSR varchar(100) DEFAULT NULL,
|
||||||
|
IHIDNUM varchar(200) DEFAULT NULL,
|
||||||
|
MBER_NM varchar(50) NOT NULL,
|
||||||
|
ZIP varchar(6) DEFAULT NULL,
|
||||||
|
ADRES varchar(100) DEFAULT NULL,
|
||||||
|
AREA_NO varchar(4) DEFAULT NULL,
|
||||||
|
MBER_STTUS varchar(15) DEFAULT NULL,
|
||||||
|
DETAIL_ADRES varchar(100) DEFAULT NULL,
|
||||||
|
END_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
MBTLNUM varchar(20) DEFAULT NULL,
|
||||||
|
GROUP_ID char(20) DEFAULT NULL,
|
||||||
|
MBER_FXNUM varchar(20) DEFAULT NULL,
|
||||||
|
MBER_EMAIL_ADRES varchar(50) DEFAULT NULL,
|
||||||
|
MIDDLE_TELNO varchar(4) DEFAULT NULL,
|
||||||
|
SBSCRB_DE datetime DEFAULT NULL,
|
||||||
|
SEXDSTN_CODE char(1) DEFAULT NULL,
|
||||||
|
ESNTL_ID char(20) NOT NULL,
|
||||||
|
PRIMARY KEY (MBER_ID),
|
||||||
|
KEY LETTNGNRLMBER_ibfk_1 (GROUP_ID),
|
||||||
|
CONSTRAINT LETTNGNRLMBER_ibfk_1 FOREIGN KEY (GROUP_ID) REFERENCES LETTNAUTHORGROUPINFO (GROUP_ID) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNLOGINLOG (
|
||||||
|
LOG_ID char(20) NOT NULL,
|
||||||
|
CONECT_ID varchar(20) DEFAULT NULL,
|
||||||
|
CONECT_IP varchar(23) DEFAULT NULL,
|
||||||
|
CONECT_MTHD char(4) DEFAULT NULL,
|
||||||
|
ERROR_OCCRRNC_AT char(1) DEFAULT NULL,
|
||||||
|
ERROR_CODE char(3) DEFAULT NULL,
|
||||||
|
CREAT_DT datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (LOG_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNLOGINPOLICY (
|
||||||
|
EMPLYR_ID varchar(20) NOT NULL DEFAULT '',
|
||||||
|
IP_INFO varchar(23) NOT NULL,
|
||||||
|
DPLCT_PERM_AT char(1) NOT NULL,
|
||||||
|
LMTT_AT char(1) NOT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (EMPLYR_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNPROGRMLIST (
|
||||||
|
PROGRM_FILE_NM varchar(60) NOT NULL DEFAULT '',
|
||||||
|
PROGRM_STRE_PATH varchar(100) NOT NULL,
|
||||||
|
PROGRM_KOREAN_NM varchar(60) DEFAULT NULL,
|
||||||
|
PROGRM_DC varchar(200) DEFAULT NULL,
|
||||||
|
URL varchar(100) NOT NULL,
|
||||||
|
PRIMARY KEY (PROGRM_FILE_NM)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNMENUINFO (
|
||||||
|
MENU_NM varchar(60) NOT NULL,
|
||||||
|
PROGRM_FILE_NM varchar(60) NOT NULL,
|
||||||
|
MENU_NO decimal(20,0) NOT NULL,
|
||||||
|
UPPER_MENU_NO decimal(20,0) DEFAULT NULL,
|
||||||
|
MENU_ORDR decimal(5,0) NOT NULL,
|
||||||
|
MENU_DC varchar(250) DEFAULT NULL,
|
||||||
|
RELATE_IMAGE_PATH varchar(100) DEFAULT NULL,
|
||||||
|
RELATE_IMAGE_NM varchar(60) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (MENU_NO),
|
||||||
|
KEY R_2 (PROGRM_FILE_NM),
|
||||||
|
KEY R_4 (UPPER_MENU_NO),
|
||||||
|
CONSTRAINT LETTNMENUINFO_ibfk_2 FOREIGN KEY (UPPER_MENU_NO) REFERENCES LETTNMENUINFO (MENU_NO),
|
||||||
|
CONSTRAINT LETTNMENUINFO_ibfk_1 FOREIGN KEY (PROGRM_FILE_NM) REFERENCES LETTNPROGRMLIST (PROGRM_FILE_NM) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNMENUCREATDTLS (
|
||||||
|
MENU_NO decimal(20,0) NOT NULL,
|
||||||
|
AUTHOR_CODE varchar(30) NOT NULL,
|
||||||
|
MAPNG_CREAT_ID varchar(30) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (MENU_NO,AUTHOR_CODE),
|
||||||
|
KEY R_247 (MAPNG_CREAT_ID),
|
||||||
|
KEY R_303 (AUTHOR_CODE),
|
||||||
|
CONSTRAINT LETTNMENUCREATDTLS_ibfk_3 FOREIGN KEY (AUTHOR_CODE) REFERENCES LETTNAUTHORINFO (AUTHOR_CODE),
|
||||||
|
CONSTRAINT LETTNMENUCREATDTLS_ibfk_1 FOREIGN KEY (MENU_NO) REFERENCES LETTNMENUINFO (MENU_NO) ON DELETE CASCADE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTNUSERABSNCE (
|
||||||
|
EMPLYR_ID varchar(20) NOT NULL DEFAULT '',
|
||||||
|
USER_ABSNCE_AT char(1) NOT NULL,
|
||||||
|
FRST_REGISTER_ID varchar(20) DEFAULT NULL,
|
||||||
|
FRST_REGIST_PNTTM datetime DEFAULT NULL,
|
||||||
|
LAST_UPDUSR_ID varchar(20) DEFAULT NULL,
|
||||||
|
LAST_UPDT_PNTTM datetime DEFAULT NULL,
|
||||||
|
PRIMARY KEY (EMPLYR_ID)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE LETTSSYSLOGSUMMARY (
|
||||||
|
OCCRRNC_DE char(20) NOT NULL,
|
||||||
|
SRVC_NM varchar(255) NOT NULL,
|
||||||
|
METHOD_NM varchar(60) NOT NULL,
|
||||||
|
CREAT_CO decimal(10,0) DEFAULT NULL,
|
||||||
|
UPDT_CO decimal(10,0) DEFAULT NULL,
|
||||||
|
RDCNT decimal(10,0) DEFAULT NULL,
|
||||||
|
DELETE_CO decimal(10,0) DEFAULT NULL,
|
||||||
|
OUTPT_CO decimal(10,0) DEFAULT NULL,
|
||||||
|
ERROR_CO decimal(10,0) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (OCCRRNC_DE,SRVC_NM,METHOD_NM)
|
||||||
|
) ;
|
||||||
|
|
||||||
|
CREATE OR REPLACE VIEW COMVNUSERMASTER ( ESNTL_ID,USER_ID,PASSWORD,USER_NM,USER_ZIP,USER_ADRES,USER_EMAIL,GROUP_ID, USER_SE, ORGNZT_ID )
|
||||||
|
AS
|
||||||
|
SELECT ESNTL_ID, MBER_ID,PASSWORD,MBER_NM,ZIP,ADRES,MBER_EMAIL_ADRES,' ','GNR' AS USER_SE, ' ' ORGNZT_ID
|
||||||
|
FROM LETTNGNRLMBER
|
||||||
|
UNION ALL
|
||||||
|
SELECT ESNTL_ID,EMPLYR_ID,PASSWORD,USER_NM,ZIP,HOUSE_ADRES,EMAIL_ADRES,GROUP_ID ,'USR' AS USER_SE, ORGNZT_ID
|
||||||
|
FROM LETTNEMPLYRINFO
|
||||||
|
UNION ALL
|
||||||
|
SELECT ESNTL_ID,ENTRPRS_MBER_ID,ENTRPRS_MBER_PASSWORD,CMPNY_NM,ZIP,ADRES,APPLCNT_EMAIL_ADRES,' ' ,'ENT' AS USER_SE, ' ' ORGNZT_ID
|
||||||
|
FROM LETTNENTRPRSMBER
|
||||||
|
;
|
||||||
743
pom.xml
Normal file
743
pom.xml
Normal file
@ -0,0 +1,743 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>mjon</artifactId>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<name>mjon</name>
|
||||||
|
<url>http://www.egovframe.go.kr</url>
|
||||||
|
|
||||||
|
<!-- <profiles>
|
||||||
|
<profile>
|
||||||
|
<id>local</id>
|
||||||
|
<activation>
|
||||||
|
<activeByDefault>true</activeByDefault> activeByDefault 기본
|
||||||
|
</activation>
|
||||||
|
<properties>
|
||||||
|
resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치
|
||||||
|
<env>local</env>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<id>dev</id>
|
||||||
|
<properties>
|
||||||
|
resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치
|
||||||
|
<env>dev</env>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<id>real</id>
|
||||||
|
<properties>
|
||||||
|
resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치
|
||||||
|
<env>real</env>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
</profiles> -->
|
||||||
|
|
||||||
|
<licenses>
|
||||||
|
<license>
|
||||||
|
<name>The Apache Software License, Version 2.0</name>
|
||||||
|
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||||
|
</license>
|
||||||
|
</licenses>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<spring.maven.artifact.version>4.3.22.RELEASE</spring.maven.artifact.version>
|
||||||
|
<egovframework.rte.version>3.9.0</egovframework.rte.version>
|
||||||
|
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>mvn2</id>
|
||||||
|
<url>https://repo1.maven.org/maven2/</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>egovframe</id>
|
||||||
|
<url>https://www.egovframe.go.kr/maven/</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>egovframe2</id>
|
||||||
|
<url>http://maven.egovframe.kr:8080/maven/</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
<!-- Komoran 형태소분석기 -->
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
|
<!-- Komoran 형태소분석기 -->
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.rte</groupId>
|
||||||
|
<artifactId>egovframework.rte.fdl.security</artifactId>
|
||||||
|
<version>${egovframework.rte.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.rte</groupId>
|
||||||
|
<artifactId>egovframework.rte.fdl.excel</artifactId>
|
||||||
|
<version>${egovframework.rte.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.rte</groupId>
|
||||||
|
<artifactId>egovframework.rte.ptl.mvc</artifactId>
|
||||||
|
<version>${egovframework.rte.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.rte</groupId>
|
||||||
|
<artifactId>egovframework.rte.fdl.idgnr</artifactId>
|
||||||
|
<version>${egovframework.rte.version}</version>
|
||||||
|
<!--<version>4.2.0</version>-->
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.rte</groupId>
|
||||||
|
<artifactId>egovframework.rte.fdl.property</artifactId>
|
||||||
|
<version>${egovframework.rte.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>servlet-api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
<version>2.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>jstl</artifactId>
|
||||||
|
<version>1.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-dbcp</groupId>
|
||||||
|
<artifactId>commons-dbcp</artifactId>
|
||||||
|
<version>1.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>taglibs</groupId>
|
||||||
|
<artifactId>standard</artifactId>
|
||||||
|
<version>1.1.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cglib</groupId>
|
||||||
|
<artifactId>cglib</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.antlr</groupId>
|
||||||
|
<artifactId>antlr</artifactId>
|
||||||
|
<version>3.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-compress</artifactId>
|
||||||
|
<version>1.8.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>oro</groupId>
|
||||||
|
<artifactId>oro</artifactId>
|
||||||
|
<version>2.0.8</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>5.1.31</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- oracle 10g driver -->
|
||||||
|
<!-- <dependency>
|
||||||
|
<groupId>ojdbc</groupId>
|
||||||
|
<artifactId>ojdbc</artifactId>
|
||||||
|
<version>14</version>
|
||||||
|
</dependency> -->
|
||||||
|
|
||||||
|
<!-- altibase driver -->
|
||||||
|
<!--
|
||||||
|
<dependency>
|
||||||
|
<groupId>altibase</groupId>
|
||||||
|
<artifactId>altibase-jdbc-driver</artifactId>
|
||||||
|
<version>5.1.3.18</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- tibero driver -->
|
||||||
|
<!--
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.tmax.tibero</groupId>
|
||||||
|
<artifactId>tibero-jdbc</artifactId>
|
||||||
|
<version>3.0</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- cubrid driver -->
|
||||||
|
<!--
|
||||||
|
<dependency>
|
||||||
|
<groupId>cubrid</groupId>
|
||||||
|
<artifactId>cubrid-jdbc</artifactId>
|
||||||
|
<version>8.4</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-fileupload</groupId>
|
||||||
|
<artifactId>commons-fileupload</artifactId>
|
||||||
|
<version>1.3.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Cross-Site Scripting -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet.jsp</groupId>
|
||||||
|
<artifactId>jsp-api</artifactId>
|
||||||
|
<version>2.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ibm.icu</groupId>
|
||||||
|
<artifactId>icu4j</artifactId>
|
||||||
|
<version>53.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- quartz -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.quartz-scheduler</groupId>
|
||||||
|
<artifactId>quartz-weblogic</artifactId>
|
||||||
|
<version>2.1.7</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.quartz-scheduler</groupId>
|
||||||
|
<artifactId>quartz-jboss</artifactId>
|
||||||
|
<version>2.1.7</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 공통 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.javacrumbs.shedlock</groupId>
|
||||||
|
<artifactId>shedlock-spring</artifactId>
|
||||||
|
<version>2.5.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JDBC TEMPLATE -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.javacrumbs.shedlock</groupId>
|
||||||
|
<artifactId>shedlock-provider-jdbc-template</artifactId>
|
||||||
|
<version>2.5.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- user config add -->
|
||||||
|
<!-- json 추가 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-core</artifactId>
|
||||||
|
<version>2.5.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-annotations</artifactId>
|
||||||
|
<version>2.5.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>2.5.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.jackson</groupId>
|
||||||
|
<artifactId>jackson-mapper-asl</artifactId>
|
||||||
|
<version>1.9.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- site mesh -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>opensymphony</groupId>
|
||||||
|
<artifactId>sitemesh</artifactId>
|
||||||
|
<version>2.4.2</version>
|
||||||
|
</dependency>
|
||||||
|
<!--// site mesh -->
|
||||||
|
|
||||||
|
<!-- log4j -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.lazyluke</groupId>
|
||||||
|
<artifactId>log4jdbc-remix</artifactId>
|
||||||
|
<version>0.2.7</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
<version>2.20.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-slf4j-impl</artifactId>
|
||||||
|
<version>2.20.0</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- ckeditor -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ckeditor</groupId>
|
||||||
|
<artifactId>ckeditor-java-core</artifactId>
|
||||||
|
<version>3.5.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- json-simple -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.json-simple</groupId>
|
||||||
|
<artifactId>json-simple</artifactId>
|
||||||
|
<version>1.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-lang</groupId>
|
||||||
|
<artifactId>commons-lang</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-httpclient</groupId>
|
||||||
|
<artifactId>commons-httpclient</artifactId>
|
||||||
|
<version>3.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>nl.captcha</groupId>
|
||||||
|
<artifactId>simplecaptcha</artifactId>
|
||||||
|
<version>1.2.1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1_exp.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- sci 평가 siren24. 본인인증 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>sciSecuPCC</groupId>
|
||||||
|
<artifactId>sciSecuPCC</artifactId>
|
||||||
|
<version>2</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/sciSecuPCC.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>sciSecuPIN_v3</groupId>
|
||||||
|
<artifactId>sciSecuPIN_v3</artifactId>
|
||||||
|
<version>2</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/sciSecuIPIN_v3.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- KG모빌리언스 결제모듈 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>McashCipher</groupId>
|
||||||
|
<artifactId>McashCipher</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/McashCipher.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- NiceID 본인인증 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>NiceID</groupId>
|
||||||
|
<artifactId>NiceID</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/NiceID.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 디아모 모듈 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>damo</groupId>
|
||||||
|
<artifactId>damo</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/scpdb.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- ARS 전화인증 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>arsAuto</groupId>
|
||||||
|
<artifactId>arsAuto</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/hjhseed.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>hjhauth</groupId>
|
||||||
|
<artifactId>hjhauth_1.8</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/hjhauth.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Jsoup HTML 파서 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jsoup</groupId>
|
||||||
|
<artifactId>jsoup</artifactId>
|
||||||
|
<version>1.11.3</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/jsoup-1.11.3.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Email -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-email</artifactId>
|
||||||
|
<version>1.3.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.com.ems</groupId>
|
||||||
|
<artifactId>sndng-mail</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- eGov 호환성 인증을 위한 패키지명 변경 작업하고, was 에러가 발생하여 추가함. -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-validator-annotation-processor</artifactId>
|
||||||
|
<version>4.1.0.Final</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Solr -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpclient</artifactId>
|
||||||
|
<version>4.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpmime</artifactId>
|
||||||
|
<version>4.5</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.solr</groupId>
|
||||||
|
<artifactId>solr-solrj</artifactId>
|
||||||
|
<version>5.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Java thumbnailator -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.coobird</groupId>
|
||||||
|
<artifactId>thumbnailator</artifactId>
|
||||||
|
<version>[0.4, 0.5)</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi</artifactId>
|
||||||
|
<version>3.16</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-ooxml</artifactId>
|
||||||
|
<version>3.16</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- <dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.16.22</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency> -->
|
||||||
|
|
||||||
|
<!-- 자동완성기능 gson 사용 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.8.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- ITN 홈페이지 메일전송(네이버 SMTP 사용) -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.mail</groupId>
|
||||||
|
<artifactId>mail</artifactId>
|
||||||
|
<version>1.4.7</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>30.0-jre</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- html parse -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>3.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- kmc 본인인증 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>kmc</groupId>
|
||||||
|
<artifactId>ICERTSecu_JDK18</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- crpyto -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>egovframework.rte</groupId>
|
||||||
|
<artifactId>egovframework.rte.fdl.crypto</artifactId>
|
||||||
|
<version>${egovframework.rte.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.mashape.unirest/unirest-java -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.mashape.unirest</groupId>
|
||||||
|
<artifactId>unirest-java</artifactId>
|
||||||
|
<version>1.4.9</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.thetransactioncompany</groupId>
|
||||||
|
<artifactId>cors-filter</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-httpclient</groupId>
|
||||||
|
<artifactId>commons-httpclient</artifactId>
|
||||||
|
<version>3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.pdfbox</groupId>
|
||||||
|
<artifactId>pdfbox</artifactId>
|
||||||
|
<version>2.0.27</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.pdfbox</groupId>
|
||||||
|
<artifactId>pdfbox-tools</artifactId>
|
||||||
|
<version>2.0.27</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.jai-imageio</groupId>
|
||||||
|
<artifactId>jai-imageio-core</artifactId>
|
||||||
|
<version>1.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Komoran 형태소 분석기 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.shin285</groupId>
|
||||||
|
<artifactId>KOMORAN</artifactId>
|
||||||
|
<version>3.3.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.24</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Komoran 형태소 분석기 -->
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
</resource>
|
||||||
|
<!-- <resource>
|
||||||
|
<directory>src/main/resources-${env}</directory>
|
||||||
|
</resource> -->
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<defaultGoal>install</defaultGoal>
|
||||||
|
<directory>${basedir}/target</directory>
|
||||||
|
<finalName>mjon</finalName>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.tomcat.maven</groupId>
|
||||||
|
<artifactId>tomcat7-maven-plugin</artifactId>
|
||||||
|
<version>2.2</version>
|
||||||
|
<configuration>
|
||||||
|
<port>80</port>
|
||||||
|
<path>/</path>
|
||||||
|
<systemProperties>
|
||||||
|
<JAVA_OPTS>-Xms256m -Xmx768m -XX:MaxPermSize=256m</JAVA_OPTS>
|
||||||
|
</systemProperties>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>hibernate3-maven-plugin</artifactId>
|
||||||
|
<version>2.1</version>
|
||||||
|
<configuration>
|
||||||
|
<components>
|
||||||
|
<component>
|
||||||
|
<name>hbm2ddl</name>
|
||||||
|
<implementation>annotationconfiguration</implementation>
|
||||||
|
</component>
|
||||||
|
</components>
|
||||||
|
</configuration>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hsqldb</groupId>
|
||||||
|
<artifactId>hsqldb</artifactId>
|
||||||
|
<version>2.3.2</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</plugin>
|
||||||
|
<!-- EMMA -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>emma-maven-plugin</artifactId>
|
||||||
|
<version>1.0-alpha-3</version>
|
||||||
|
</plugin>
|
||||||
|
<!-- PMD manven plugin -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-pmd-plugin</artifactId>
|
||||||
|
<version>3.1</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<!-- EMMA -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
<forkMode>once</forkMode>
|
||||||
|
<reportFormat>xml</reportFormat>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/Abstract*.java</exclude>
|
||||||
|
<exclude>**/*Suite.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
<includes>
|
||||||
|
<include>**/*Test.java</include>
|
||||||
|
</includes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>emma-maven-plugin</artifactId>
|
||||||
|
<inherited>true</inherited>
|
||||||
|
</plugin>
|
||||||
|
<!-- JavaDoc -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>2.9.1</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<reporting>
|
||||||
|
<outputDirectory>${basedir}/target/site</outputDirectory>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||||
|
<version>2.7</version>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<id>sunlink</id>
|
||||||
|
<reports>
|
||||||
|
<report>javadoc</report>
|
||||||
|
</reports>
|
||||||
|
<inherited>true</inherited>
|
||||||
|
<configuration>
|
||||||
|
<links>
|
||||||
|
<link>http://docs.oracle.com/javase/6/docs/api/</link>
|
||||||
|
</links>
|
||||||
|
</configuration>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
|
<!-- JUnit Test Results & EMMA Coverage Reporting -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>emma-maven-plugin</artifactId>
|
||||||
|
<inherited>true</inherited>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>surefire-report-maven-plugin</artifactId>
|
||||||
|
<inherited>true</inherited>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<reports>
|
||||||
|
<report>report-only</report>
|
||||||
|
</reports>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
|
<!-- Generating JavaDoc Report -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<minmemory>128m</minmemory>
|
||||||
|
<maxmemory>512m</maxmemory>
|
||||||
|
<encoding>${encoding}</encoding>
|
||||||
|
<docencoding>${encoding}</docencoding>
|
||||||
|
<charset>${encoding}</charset>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!-- Generating Java Source in HTML -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jxr-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<inputEncoding>${encoding}</inputEncoding>
|
||||||
|
<outputEncoding>${encoding}</outputEncoding>
|
||||||
|
<linkJavadoc>true</linkJavadoc>
|
||||||
|
<javadocDir>apidocs</javadocDir>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</reporting>
|
||||||
|
<groupId>mjon</groupId>
|
||||||
|
</project>
|
||||||
|
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package egovframework.com.idgen;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.exception.FdlException;
|
||||||
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
|
||||||
|
public interface CustomIdGnrService extends EgovIdGnrService {
|
||||||
|
List<String> getNextStringId(int count) throws FdlException;
|
||||||
|
}
|
||||||
@ -0,0 +1,196 @@
|
|||||||
|
package egovframework.com.idgen.impl;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement; // java.sql.PreparedStatement로 임포트
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.springframework.jdbc.datasource.DataSourceUtils;
|
||||||
|
|
||||||
|
import egovframework.com.idgen.CustomIdGnrService;
|
||||||
|
import egovframework.rte.fdl.cmmn.exception.FdlException;
|
||||||
|
import egovframework.rte.fdl.idgnr.EgovIdGnrStrategy;
|
||||||
|
|
||||||
|
public class CustomTableIdGnrServiceImpl implements CustomIdGnrService {
|
||||||
|
|
||||||
|
private long allocatedId;
|
||||||
|
private long allocatedMaxId;
|
||||||
|
private int blockSize = 10; // 기본값, 필요에 따라 변경
|
||||||
|
private DataSource dataSource;
|
||||||
|
private String table; // 실제 테이블 이름 (예: IDS)
|
||||||
|
private String tableName; // TABLE_NAME 컬럼에서 사용할 값 (예: MSG_ID)
|
||||||
|
private String columnName = "NEXT_ID"; // NEXT_ID 컬럼명
|
||||||
|
private String prefix;
|
||||||
|
private String fillChar = "0"; // 채울 문자 (예: 0)
|
||||||
|
private int cipers = 13; // 자리수 (예: 14)
|
||||||
|
private boolean applyYear;
|
||||||
|
private boolean useBigDecimals = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized List<String> getNextStringId(int count) throws FdlException {
|
||||||
|
List<String> idList = new ArrayList<>(count);
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
if (allocatedId >= allocatedMaxId) {
|
||||||
|
allocateIdBlock(count);
|
||||||
|
}
|
||||||
|
long id = allocatedId++;
|
||||||
|
idList.add(createStringId(id));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new FdlException("ID Generation Error", e);
|
||||||
|
}
|
||||||
|
return idList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void allocateIdBlock(int requiredCount) throws SQLException, FdlException {
|
||||||
|
Connection conn = DataSourceUtils.getConnection(dataSource);
|
||||||
|
try {
|
||||||
|
conn.setAutoCommit(false);
|
||||||
|
|
||||||
|
int newBlockSize = Math.max(this.blockSize, requiredCount);
|
||||||
|
|
||||||
|
// SELECT 쿼리 수정
|
||||||
|
String query = "SELECT " + columnName + " FROM " + table + " WHERE TABLE_NAME = ? FOR UPDATE";
|
||||||
|
try (PreparedStatement stmt = conn.prepareStatement(query)) {
|
||||||
|
stmt.setString(1, tableName);
|
||||||
|
try (ResultSet rs = stmt.executeQuery()) {
|
||||||
|
long oldId = 0;
|
||||||
|
if (rs.next()) {
|
||||||
|
oldId = rs.getLong(1);
|
||||||
|
} else {
|
||||||
|
throw new FdlException(
|
||||||
|
"ID Generation Error: No record found in " + table + " for TABLE_NAME = " + tableName);
|
||||||
|
}
|
||||||
|
|
||||||
|
long newId = oldId + newBlockSize;
|
||||||
|
|
||||||
|
// UPDATE 쿼리 수정
|
||||||
|
String update = "UPDATE " + table + " SET " + columnName + " = ? WHERE TABLE_NAME = ? AND "
|
||||||
|
+ columnName + " = ?";
|
||||||
|
try (PreparedStatement updateStmt = conn.prepareStatement(update)) {
|
||||||
|
updateStmt.setLong(1, newId);
|
||||||
|
updateStmt.setString(2, tableName);
|
||||||
|
updateStmt.setLong(3, oldId);
|
||||||
|
int row = updateStmt.executeUpdate();
|
||||||
|
|
||||||
|
if (row == 0) {
|
||||||
|
throw new FdlException(
|
||||||
|
"ID Generation Error: Failed to update ID. Possible concurrent modification.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.commit();
|
||||||
|
|
||||||
|
allocatedId = oldId;
|
||||||
|
allocatedMaxId = newId;
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
conn.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new FdlException("ID Generation Error", e);
|
||||||
|
} finally {
|
||||||
|
DataSourceUtils.releaseConnection(conn, dataSource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String createStringId(long id) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (prefix != null) {
|
||||||
|
sb.append(prefix);
|
||||||
|
}
|
||||||
|
if (applyYear) {
|
||||||
|
sb.append(new SimpleDateFormat("yyyy").format(new Date()));
|
||||||
|
}
|
||||||
|
String idStr = String.format("%0" + cipers + "d", id);
|
||||||
|
sb.append(idStr);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 인터페이스의 다른 메서드 구현 (필요에 따라 UnsupportedOperationException 또는 직접 구현)
|
||||||
|
@Override
|
||||||
|
public BigDecimal getNextBigDecimalId() throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextBigDecimalId is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getNextLongId() throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextLongId is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getNextIntegerId() throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextIntegerId is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getNextShortId() throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextShortId is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getNextByteId() throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextByteId is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNextStringId() throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextStringId is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNextStringId(String strategyId) throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextStringId(String strategyId) is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNextStringId(EgovIdGnrStrategy strategy) throws FdlException {
|
||||||
|
throw new UnsupportedOperationException("getNextStringId(EgovIdGnrStrategy strategy) is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 필요한 setter 메서드들 추가
|
||||||
|
public void setDataSource(DataSource dataSource) {
|
||||||
|
this.dataSource = dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTable(String table) {
|
||||||
|
this.table = table;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTableName(String tableName) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumnName(String columnName) {
|
||||||
|
this.columnName = columnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrefix(String prefix) {
|
||||||
|
this.prefix = prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFillChar(String fillChar) {
|
||||||
|
this.fillChar = fillChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCipers(int cipers) {
|
||||||
|
this.cipers = cipers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApplyYear(boolean applyYear) {
|
||||||
|
this.applyYear = applyYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlockSize(int blockSize) {
|
||||||
|
this.blockSize = blockSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package egovframework.migration.impl;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import itn.com.cmm.service.impl.EgovComAbstractDAO;
|
||||||
|
|
||||||
|
@Repository("mariaMigrationDAO")
|
||||||
|
public class MariaMigrationDAO extends EgovComAbstractDAO {
|
||||||
|
|
||||||
|
}
|
||||||
169
src/main/java/egovframework/migration/service/KcdfNewBbsVO.java
Normal file
169
src/main/java/egovframework/migration/service/KcdfNewBbsVO.java
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
package egovframework.migration.service;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultVO;
|
||||||
|
|
||||||
|
public class KcdfNewBbsVO extends ComDefaultVO implements Serializable{
|
||||||
|
String NTT_ID = "" ;
|
||||||
|
String BBS_ID = "" ;
|
||||||
|
String NTT_NO = "" ;
|
||||||
|
String NTT_SJ = "" ;
|
||||||
|
String NTT_CN = "" ;
|
||||||
|
String ANSWER_AT = "" ;
|
||||||
|
String PARNTSCTT_NO = "" ;
|
||||||
|
String ANSWER_LC = "" ;
|
||||||
|
String SORT_ORDR = "" ;
|
||||||
|
String RDCNT = "" ;
|
||||||
|
String USE_AT = "" ;
|
||||||
|
String NTCE_BGNDE = "" ;
|
||||||
|
String NTCE_ENDDE = "" ;
|
||||||
|
String NTCR_ID = "" ;
|
||||||
|
String NTCR_NM = "" ;
|
||||||
|
String PASSWORD = "" ;
|
||||||
|
String ATCH_FILE_ID = "" ;
|
||||||
|
String FRST_REGIST_PNTTM = "" ;
|
||||||
|
String FRST_REGISTER_ID = "" ;
|
||||||
|
String LAST_UPDT_PNTTM = "" ;
|
||||||
|
String LAST_UPDUSR_ID = "" ;
|
||||||
|
String NOTICE_AT = "" ;
|
||||||
|
String SECRET_AT = "" ;
|
||||||
|
public String getNTT_ID() {
|
||||||
|
return NTT_ID;
|
||||||
|
}
|
||||||
|
public void setNTT_ID(String nTT_ID) {
|
||||||
|
NTT_ID = nTT_ID;
|
||||||
|
}
|
||||||
|
public String getNTT_NO() {
|
||||||
|
return NTT_NO;
|
||||||
|
}
|
||||||
|
public void setNTT_NO(String nTT_NO) {
|
||||||
|
NTT_NO = nTT_NO;
|
||||||
|
}
|
||||||
|
public String getNTT_SJ() {
|
||||||
|
return NTT_SJ;
|
||||||
|
}
|
||||||
|
public void setNTT_SJ(String nTT_SJ) {
|
||||||
|
NTT_SJ = nTT_SJ;
|
||||||
|
}
|
||||||
|
public String getNTT_CN() {
|
||||||
|
return NTT_CN;
|
||||||
|
}
|
||||||
|
public void setNTT_CN(String nTT_CN) {
|
||||||
|
NTT_CN = nTT_CN;
|
||||||
|
}
|
||||||
|
public String getANSWER_AT() {
|
||||||
|
return ANSWER_AT;
|
||||||
|
}
|
||||||
|
public void setANSWER_AT(String aNSWER_AT) {
|
||||||
|
ANSWER_AT = aNSWER_AT;
|
||||||
|
}
|
||||||
|
public String getPARNTSCTT_NO() {
|
||||||
|
return PARNTSCTT_NO;
|
||||||
|
}
|
||||||
|
public void setPARNTSCTT_NO(String pARNTSCTT_NO) {
|
||||||
|
PARNTSCTT_NO = pARNTSCTT_NO;
|
||||||
|
}
|
||||||
|
public String getANSWER_LC() {
|
||||||
|
return ANSWER_LC;
|
||||||
|
}
|
||||||
|
public void setANSWER_LC(String aNSWER_LC) {
|
||||||
|
ANSWER_LC = aNSWER_LC;
|
||||||
|
}
|
||||||
|
public String getSORT_ORDR() {
|
||||||
|
return SORT_ORDR;
|
||||||
|
}
|
||||||
|
public void setSORT_ORDR(String sORT_ORDR) {
|
||||||
|
SORT_ORDR = sORT_ORDR;
|
||||||
|
}
|
||||||
|
public String getRDCNT() {
|
||||||
|
return RDCNT;
|
||||||
|
}
|
||||||
|
public void setRDCNT(String rDCNT) {
|
||||||
|
RDCNT = rDCNT;
|
||||||
|
}
|
||||||
|
public String getUSE_AT() {
|
||||||
|
return USE_AT;
|
||||||
|
}
|
||||||
|
public void setUSE_AT(String uSE_AT) {
|
||||||
|
USE_AT = uSE_AT;
|
||||||
|
}
|
||||||
|
public String getNTCE_BGNDE() {
|
||||||
|
return NTCE_BGNDE;
|
||||||
|
}
|
||||||
|
public void setNTCE_BGNDE(String nTCE_BGNDE) {
|
||||||
|
NTCE_BGNDE = nTCE_BGNDE;
|
||||||
|
}
|
||||||
|
public String getNTCE_ENDDE() {
|
||||||
|
return NTCE_ENDDE;
|
||||||
|
}
|
||||||
|
public void setNTCE_ENDDE(String nTCE_ENDDE) {
|
||||||
|
NTCE_ENDDE = nTCE_ENDDE;
|
||||||
|
}
|
||||||
|
public String getNTCR_ID() {
|
||||||
|
return NTCR_ID;
|
||||||
|
}
|
||||||
|
public void setNTCR_ID(String nTCR_ID) {
|
||||||
|
NTCR_ID = nTCR_ID;
|
||||||
|
}
|
||||||
|
public String getNTCR_NM() {
|
||||||
|
return NTCR_NM;
|
||||||
|
}
|
||||||
|
public void setNTCR_NM(String nTCR_NM) {
|
||||||
|
NTCR_NM = nTCR_NM;
|
||||||
|
}
|
||||||
|
public String getPASSWORD() {
|
||||||
|
return PASSWORD;
|
||||||
|
}
|
||||||
|
public void setPASSWORD(String pASSWORD) {
|
||||||
|
PASSWORD = pASSWORD;
|
||||||
|
}
|
||||||
|
public String getATCH_FILE_ID() {
|
||||||
|
return ATCH_FILE_ID;
|
||||||
|
}
|
||||||
|
public void setATCH_FILE_ID(String aTCH_FILE_ID) {
|
||||||
|
ATCH_FILE_ID = aTCH_FILE_ID;
|
||||||
|
}
|
||||||
|
public String getFRST_REGIST_PNTTM() {
|
||||||
|
return FRST_REGIST_PNTTM;
|
||||||
|
}
|
||||||
|
public void setFRST_REGIST_PNTTM(String fRST_REGIST_PNTTM) {
|
||||||
|
FRST_REGIST_PNTTM = fRST_REGIST_PNTTM;
|
||||||
|
}
|
||||||
|
public String getFRST_REGISTER_ID() {
|
||||||
|
return FRST_REGISTER_ID;
|
||||||
|
}
|
||||||
|
public void setFRST_REGISTER_ID(String fRST_REGISTER_ID) {
|
||||||
|
FRST_REGISTER_ID = fRST_REGISTER_ID;
|
||||||
|
}
|
||||||
|
public String getLAST_UPDT_PNTTM() {
|
||||||
|
return LAST_UPDT_PNTTM;
|
||||||
|
}
|
||||||
|
public void setLAST_UPDT_PNTTM(String lAST_UPDT_PNTTM) {
|
||||||
|
LAST_UPDT_PNTTM = lAST_UPDT_PNTTM;
|
||||||
|
}
|
||||||
|
public String getLAST_UPDUSR_ID() {
|
||||||
|
return LAST_UPDUSR_ID;
|
||||||
|
}
|
||||||
|
public void setLAST_UPDUSR_ID(String lAST_UPDUSR_ID) {
|
||||||
|
LAST_UPDUSR_ID = lAST_UPDUSR_ID;
|
||||||
|
}
|
||||||
|
public String getNOTICE_AT() {
|
||||||
|
return NOTICE_AT;
|
||||||
|
}
|
||||||
|
public void setNOTICE_AT(String nOTICE_AT) {
|
||||||
|
NOTICE_AT = nOTICE_AT;
|
||||||
|
}
|
||||||
|
public String getSECRET_AT() {
|
||||||
|
return SECRET_AT;
|
||||||
|
}
|
||||||
|
public void setSECRET_AT(String sECRET_AT) {
|
||||||
|
SECRET_AT = sECRET_AT;
|
||||||
|
}
|
||||||
|
public String getBBS_ID() {
|
||||||
|
return BBS_ID;
|
||||||
|
}
|
||||||
|
public void setBBS_ID(String bBS_ID) {
|
||||||
|
BBS_ID = bBS_ID;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
package egovframework.migration.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.ibatis.sqlmap.client.SqlMapClient;
|
||||||
|
|
||||||
|
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||||
|
|
||||||
|
@Repository("KcdfNewDAO")
|
||||||
|
public class KcdfNewDAO extends EgovAbstractDAO {
|
||||||
|
@Override
|
||||||
|
@Resource(name ="kcdfSqlMapClient")
|
||||||
|
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
|
||||||
|
super.setSuperSqlMapClient(sqlMapClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectKcdfBasicCount() {
|
||||||
|
return (int)select("KcdfNewDAO.selectKcdfBasicCount");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<KcdfNewBbsVO> selectKcdfBbsList(KcdfNewBbsVO tempKcdfNewBbsVO) throws Exception{
|
||||||
|
return (List<KcdfNewBbsVO>)list("KcdfNewDAO.selectKcdfBbsList", tempKcdfNewBbsVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
package egovframework.migration.service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service("MariaMigrationService")
|
||||||
|
public class MariaMigrationService {
|
||||||
|
|
||||||
|
@Resource(name = "KcdfNewDAO")
|
||||||
|
private KcdfNewDAO kcdfNewDAO;
|
||||||
|
|
||||||
|
@Resource(name = "NcmsDAO")
|
||||||
|
private NcmsDAO ncmsDAO;
|
||||||
|
|
||||||
|
|
||||||
|
public int selectOracleBasicCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectMariaBasicCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectOraclePublishCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectMariaPublishCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectOracleFileCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectMariaFileCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectOracleResrvationCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectMariaResrvationCount() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void selectOracleBasicList() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void selectOraclePublishList() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void selectOracleFileList() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void selectOracleResrvationList() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int selectKcdfBasicCount() {
|
||||||
|
return kcdfNewDAO.selectKcdfBasicCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void kcdfMigration() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
int selectKcdfBasicCount = kcdfNewDAO.selectKcdfBasicCount();
|
||||||
|
List<KcdfNewBbsVO> list = new ArrayList<KcdfNewBbsVO>();
|
||||||
|
KcdfNewBbsVO tempKcdfNewBbsVO = new KcdfNewBbsVO(); //limit 를 위해 사용
|
||||||
|
int enterval = 100;
|
||||||
|
int i = 0;
|
||||||
|
if(selectKcdfBasicCount > enterval){
|
||||||
|
for(i=0; i< selectKcdfBasicCount; i++){ //enterval 개씩 끊어서 insert
|
||||||
|
if (i % enterval == 0 ){ //0
|
||||||
|
tempKcdfNewBbsVO.setRecordCountPerPage(enterval);
|
||||||
|
tempKcdfNewBbsVO.setFirstIndex(i);
|
||||||
|
list = kcdfNewDAO.selectKcdfBbsList(tempKcdfNewBbsVO);
|
||||||
|
for(int j=0; j< list.size(); j++){
|
||||||
|
ncmsDAO.insertNcmsBbsInfo(list.get(j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if(selectKcdfBasicCount != tempKcdfNewBbsVO.getFirstIndex()) { // enterval 개씩 끊어서 insert 후 남은 데이터 insert
|
||||||
|
tempKcdfNewBbsVO.setFirstIndex(selectKcdfBasicCount);
|
||||||
|
tempKcdfNewBbsVO.setRecordCountPerPage(enterval);
|
||||||
|
list = kcdfNewDAO.selectKcdfBbsList(tempKcdfNewBbsVO);
|
||||||
|
for(i=0; i< list.size(); i++){
|
||||||
|
kcdfNewDAO.insertNcmsBbsInfo(list.get(i));
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}else{ //enterval 개 미만
|
||||||
|
tempKcdfNewBbsVO.setFirstIndex(0);
|
||||||
|
tempKcdfNewBbsVO.setRecordCountPerPage(enterval);
|
||||||
|
list = kcdfNewDAO.selectKcdfBbsList(tempKcdfNewBbsVO);
|
||||||
|
for(i=0; i< selectKcdfBasicCount; i++){
|
||||||
|
ncmsDAO.insertNcmsBbsInfo(list.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
16
src/main/java/egovframework/migration/service/NcmsDAO.java
Normal file
16
src/main/java/egovframework/migration/service/NcmsDAO.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package egovframework.migration.service;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||||
|
|
||||||
|
@Repository("NcmsDAO")
|
||||||
|
public class NcmsDAO extends EgovAbstractDAO{
|
||||||
|
|
||||||
|
public void insertNcmsBbsInfo(KcdfNewBbsVO kcdfNewBbsVO) {
|
||||||
|
insert("NcmsDAO.insertNcmsBbsInfo",kcdfNewBbsVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
163
src/main/java/egovframework/migration/service/NcmsVO.java
Normal file
163
src/main/java/egovframework/migration/service/NcmsVO.java
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
package egovframework.migration.service;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultVO;
|
||||||
|
|
||||||
|
public class NcmsVO extends ComDefaultVO implements Serializable{
|
||||||
|
|
||||||
|
String NTT_ID = "" ;
|
||||||
|
String NTT_NO = "" ;
|
||||||
|
String NTT_SJ = "" ;
|
||||||
|
String NTT_CN = "" ;
|
||||||
|
String ANSWER_AT = "" ;
|
||||||
|
String PARNTSCTT_NO = "" ;
|
||||||
|
String ANSWER_LC = "" ;
|
||||||
|
String SORT_ORDR = "" ;
|
||||||
|
String RDCNT = "" ;
|
||||||
|
String USE_AT = "" ;
|
||||||
|
String NTCE_BGNDE = "" ;
|
||||||
|
String NTCE_ENDDE = "" ;
|
||||||
|
String NTCR_ID = "" ;
|
||||||
|
String NTCR_NM = "" ;
|
||||||
|
String PASSWORD = "" ;
|
||||||
|
String ATCH_FILE_ID = "" ;
|
||||||
|
String FRST_REGIST_PNTTM = "" ;
|
||||||
|
String FRST_REGISTER_ID = "" ;
|
||||||
|
String LAST_UPDT_PNTTM = "" ;
|
||||||
|
String LAST_UPDUSR_ID = "" ;
|
||||||
|
String NOTICE_AT = "" ;
|
||||||
|
String SECRET_AT = "" ;
|
||||||
|
public String getNTT_ID() {
|
||||||
|
return NTT_ID;
|
||||||
|
}
|
||||||
|
public void setNTT_ID(String nTT_ID) {
|
||||||
|
NTT_ID = nTT_ID;
|
||||||
|
}
|
||||||
|
public String getNTT_NO() {
|
||||||
|
return NTT_NO;
|
||||||
|
}
|
||||||
|
public void setNTT_NO(String nTT_NO) {
|
||||||
|
NTT_NO = nTT_NO;
|
||||||
|
}
|
||||||
|
public String getNTT_SJ() {
|
||||||
|
return NTT_SJ;
|
||||||
|
}
|
||||||
|
public void setNTT_SJ(String nTT_SJ) {
|
||||||
|
NTT_SJ = nTT_SJ;
|
||||||
|
}
|
||||||
|
public String getNTT_CN() {
|
||||||
|
return NTT_CN;
|
||||||
|
}
|
||||||
|
public void setNTT_CN(String nTT_CN) {
|
||||||
|
NTT_CN = nTT_CN;
|
||||||
|
}
|
||||||
|
public String getANSWER_AT() {
|
||||||
|
return ANSWER_AT;
|
||||||
|
}
|
||||||
|
public void setANSWER_AT(String aNSWER_AT) {
|
||||||
|
ANSWER_AT = aNSWER_AT;
|
||||||
|
}
|
||||||
|
public String getPARNTSCTT_NO() {
|
||||||
|
return PARNTSCTT_NO;
|
||||||
|
}
|
||||||
|
public void setPARNTSCTT_NO(String pARNTSCTT_NO) {
|
||||||
|
PARNTSCTT_NO = pARNTSCTT_NO;
|
||||||
|
}
|
||||||
|
public String getANSWER_LC() {
|
||||||
|
return ANSWER_LC;
|
||||||
|
}
|
||||||
|
public void setANSWER_LC(String aNSWER_LC) {
|
||||||
|
ANSWER_LC = aNSWER_LC;
|
||||||
|
}
|
||||||
|
public String getSORT_ORDR() {
|
||||||
|
return SORT_ORDR;
|
||||||
|
}
|
||||||
|
public void setSORT_ORDR(String sORT_ORDR) {
|
||||||
|
SORT_ORDR = sORT_ORDR;
|
||||||
|
}
|
||||||
|
public String getRDCNT() {
|
||||||
|
return RDCNT;
|
||||||
|
}
|
||||||
|
public void setRDCNT(String rDCNT) {
|
||||||
|
RDCNT = rDCNT;
|
||||||
|
}
|
||||||
|
public String getUSE_AT() {
|
||||||
|
return USE_AT;
|
||||||
|
}
|
||||||
|
public void setUSE_AT(String uSE_AT) {
|
||||||
|
USE_AT = uSE_AT;
|
||||||
|
}
|
||||||
|
public String getNTCE_BGNDE() {
|
||||||
|
return NTCE_BGNDE;
|
||||||
|
}
|
||||||
|
public void setNTCE_BGNDE(String nTCE_BGNDE) {
|
||||||
|
NTCE_BGNDE = nTCE_BGNDE;
|
||||||
|
}
|
||||||
|
public String getNTCE_ENDDE() {
|
||||||
|
return NTCE_ENDDE;
|
||||||
|
}
|
||||||
|
public void setNTCE_ENDDE(String nTCE_ENDDE) {
|
||||||
|
NTCE_ENDDE = nTCE_ENDDE;
|
||||||
|
}
|
||||||
|
public String getNTCR_ID() {
|
||||||
|
return NTCR_ID;
|
||||||
|
}
|
||||||
|
public void setNTCR_ID(String nTCR_ID) {
|
||||||
|
NTCR_ID = nTCR_ID;
|
||||||
|
}
|
||||||
|
public String getNTCR_NM() {
|
||||||
|
return NTCR_NM;
|
||||||
|
}
|
||||||
|
public void setNTCR_NM(String nTCR_NM) {
|
||||||
|
NTCR_NM = nTCR_NM;
|
||||||
|
}
|
||||||
|
public String getPASSWORD() {
|
||||||
|
return PASSWORD;
|
||||||
|
}
|
||||||
|
public void setPASSWORD(String pASSWORD) {
|
||||||
|
PASSWORD = pASSWORD;
|
||||||
|
}
|
||||||
|
public String getATCH_FILE_ID() {
|
||||||
|
return ATCH_FILE_ID;
|
||||||
|
}
|
||||||
|
public void setATCH_FILE_ID(String aTCH_FILE_ID) {
|
||||||
|
ATCH_FILE_ID = aTCH_FILE_ID;
|
||||||
|
}
|
||||||
|
public String getFRST_REGIST_PNTTM() {
|
||||||
|
return FRST_REGIST_PNTTM;
|
||||||
|
}
|
||||||
|
public void setFRST_REGIST_PNTTM(String fRST_REGIST_PNTTM) {
|
||||||
|
FRST_REGIST_PNTTM = fRST_REGIST_PNTTM;
|
||||||
|
}
|
||||||
|
public String getFRST_REGISTER_ID() {
|
||||||
|
return FRST_REGISTER_ID;
|
||||||
|
}
|
||||||
|
public void setFRST_REGISTER_ID(String fRST_REGISTER_ID) {
|
||||||
|
FRST_REGISTER_ID = fRST_REGISTER_ID;
|
||||||
|
}
|
||||||
|
public String getLAST_UPDT_PNTTM() {
|
||||||
|
return LAST_UPDT_PNTTM;
|
||||||
|
}
|
||||||
|
public void setLAST_UPDT_PNTTM(String lAST_UPDT_PNTTM) {
|
||||||
|
LAST_UPDT_PNTTM = lAST_UPDT_PNTTM;
|
||||||
|
}
|
||||||
|
public String getLAST_UPDUSR_ID() {
|
||||||
|
return LAST_UPDUSR_ID;
|
||||||
|
}
|
||||||
|
public void setLAST_UPDUSR_ID(String lAST_UPDUSR_ID) {
|
||||||
|
LAST_UPDUSR_ID = lAST_UPDUSR_ID;
|
||||||
|
}
|
||||||
|
public String getNOTICE_AT() {
|
||||||
|
return NOTICE_AT;
|
||||||
|
}
|
||||||
|
public void setNOTICE_AT(String nOTICE_AT) {
|
||||||
|
NOTICE_AT = nOTICE_AT;
|
||||||
|
}
|
||||||
|
public String getSECRET_AT() {
|
||||||
|
return SECRET_AT;
|
||||||
|
}
|
||||||
|
public void setSECRET_AT(String sECRET_AT) {
|
||||||
|
SECRET_AT = sECRET_AT;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,81 @@
|
|||||||
|
package egovframework.migration.web;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import egovframework.migration.service.MariaMigrationService;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class MariaMigrationController {
|
||||||
|
|
||||||
|
@Resource(name = "MariaMigrationService")
|
||||||
|
private MariaMigrationService mariaMigrationService;
|
||||||
|
|
||||||
|
@RequestMapping(value="/maria/migration.do")
|
||||||
|
public String mariaTestPage(ModelMap model) throws Exception{
|
||||||
|
|
||||||
|
int selectKcdfBasicCount = mariaMigrationService.selectKcdfBasicCount();
|
||||||
|
|
||||||
|
mariaMigrationService.kcdfMigration();
|
||||||
|
|
||||||
|
/*List<OrcaleTestVO> list = orcalTestDAO.selectOracleBasicList();*/
|
||||||
|
mariaMigrationService.selectOracleBasicList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int selectMariaBasicCount = mariaMigrationService.selectMariaBasicCount();
|
||||||
|
|
||||||
|
int selectOraclePublishCount = mariaMigrationService.selectOraclePublishCount();
|
||||||
|
int selectMariaPublishCount = mariaMigrationService.selectMariaPublishCount();
|
||||||
|
|
||||||
|
int selectOracleFileCount = mariaMigrationService.selectOracleFileCount();
|
||||||
|
int selectMariaFileCount = mariaMigrationService.selectMariaFileCount();
|
||||||
|
|
||||||
|
int selectOracleResrvationCount = mariaMigrationService.selectOracleResrvationCount();
|
||||||
|
int selectMariaResrvationCount = mariaMigrationService.selectMariaResrvationCount();
|
||||||
|
|
||||||
|
/*model.addAttribute("selectOracleBasicCount", selectOracleBasicCount );
|
||||||
|
model.addAttribute("selectMariaBasicCount", selectMariaBasicCount );
|
||||||
|
|
||||||
|
model.addAttribute("selectOraclePublishCount", selectOraclePublishCount );
|
||||||
|
model.addAttribute("selectMariaPublishCount", selectMariaPublishCount );
|
||||||
|
|
||||||
|
model.addAttribute("selectOracleFileCount", selectOracleFileCount );
|
||||||
|
model.addAttribute("selectMariaFileCount", selectMariaFileCount );
|
||||||
|
|
||||||
|
model.addAttribute("selectOracleResrvationCount", selectOracleResrvationCount );
|
||||||
|
model.addAttribute("selectMariaResrvationCount", selectMariaResrvationCount );*/
|
||||||
|
return "test/oracle/TestOracle";
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value="/maria/dataBaseAjax.do")
|
||||||
|
public ModelAndView mariaDataBaseAjax(@RequestParam Map<String, Object> commandMap){
|
||||||
|
ModelAndView modelAndView = new ModelAndView();
|
||||||
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
|
|
||||||
|
String type = (String) commandMap.get("type");
|
||||||
|
|
||||||
|
System.out.println("type : " + type);
|
||||||
|
if(type =="basic" || type.equals("basic")){
|
||||||
|
mariaMigrationService.selectOracleBasicList();
|
||||||
|
}else if(type =="Publish" || type.equals("Publish")){
|
||||||
|
mariaMigrationService.selectOraclePublishList();
|
||||||
|
}else if(type =="file" || type.equals("file")){
|
||||||
|
mariaMigrationService.selectOracleFileList();
|
||||||
|
}else if(type =="Resrvation" || type.equals("Resrvation")){
|
||||||
|
mariaMigrationService.selectOracleResrvationList();
|
||||||
|
}
|
||||||
|
|
||||||
|
modelAndView.addObject("result", "TEST");
|
||||||
|
return modelAndView;
|
||||||
|
}
|
||||||
|
}
|
||||||
89
src/main/java/itn/com/api/web/ApiRestController.java
Normal file
89
src/main/java/itn/com/api/web/ApiRestController.java
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
package itn.com.api.web;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO;
|
||||||
|
import itn.let.kakao.admin.statistics.service.KakaoStatisticsService;
|
||||||
|
import itn.let.mail.service.StatusResponse;
|
||||||
|
import itn.let.mjo.msg.service.MjonMsgService;
|
||||||
|
import itn.let.mjo.msg.service.MjonMsgStatVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : ApiRestController.java
|
||||||
|
* @date : 2023.01.05
|
||||||
|
* @description :
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.01.05 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
public class ApiRestController {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(ApiRestController.class);
|
||||||
|
|
||||||
|
|
||||||
|
@Resource(name = "mjonMsgService")
|
||||||
|
private MjonMsgService mjonMsgService;
|
||||||
|
|
||||||
|
@Resource(name = "KakaoStatisticsService")
|
||||||
|
private KakaoStatisticsService kakaoStatisticsService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : mailSendItnContactUs
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.01.05
|
||||||
|
* @description :
|
||||||
|
* @param mjonMsgStatVO
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@GetMapping(value = "/web/api/insertAgentSmsCountStatApi.do")
|
||||||
|
public ResponseEntity<StatusResponse> insertAgentSmsCountStatApi(MjonMsgStatVO mjonMsgStatVO) throws Exception {
|
||||||
|
try {
|
||||||
|
mjonMsgService.insertAgentSmsCountStat(mjonMsgStatVO);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: handle exception
|
||||||
|
e.printStackTrace();
|
||||||
|
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "문자 발송건수 통계 생성을 실패하였습니다.", LocalDateTime.now()));
|
||||||
|
}
|
||||||
|
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "문자 발송건수 통계 생성을 성공적으로 마쳤습니다.", LocalDateTime.now()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : insertKakaoAtCountStatApi
|
||||||
|
* @author : 안주영
|
||||||
|
* @date : 2023.03.23
|
||||||
|
* @description :
|
||||||
|
* @param kakaoAtStatVO
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@GetMapping(value = "/web/api/insertKakaoAtCountStatApi.do")
|
||||||
|
public ResponseEntity<StatusResponse> insertKakaoAtCountStatApi(MjonKakaoAtStatVO kakaoAtStatVO) throws Exception {
|
||||||
|
try {
|
||||||
|
kakaoStatisticsService.insertKakaoAtCountStat(kakaoAtStatVO);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO: handle exception
|
||||||
|
e.printStackTrace();
|
||||||
|
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "알림톡 발송건수 통계 생성을 실패하였습니다.", LocalDateTime.now()));
|
||||||
|
}
|
||||||
|
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "알림톡 발송건수 통계 생성을 성공적으로 마쳤습니다.", LocalDateTime.now()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
106
src/main/java/itn/com/cmm/AltibaseClobStringTypeHandler.java
Normal file
106
src/main/java/itn/com/cmm/AltibaseClobStringTypeHandler.java
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2002-2005 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.jdbc.support.lob.LobCreator;
|
||||||
|
import org.springframework.jdbc.support.lob.LobHandler;
|
||||||
|
import egovframework.rte.psl.orm.ibatis.support.AbstractLobTypeHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* iBATIS TypeHandler implementation for Strings that get mapped to CLOBs.
|
||||||
|
* Retrieves the LobHandler to use from SqlMapClientFactoryBean at config time.
|
||||||
|
*
|
||||||
|
* <p>Particularly useful for storing Strings with more than 4000 characters in an
|
||||||
|
* Oracle database (only possible via CLOBs), in combination with OracleLobHandler.
|
||||||
|
*
|
||||||
|
* <p>Can also be defined in generic iBATIS mappings, as DefaultLobCreator will
|
||||||
|
* work with most JDBC-compliant database drivers. In this case, the field type
|
||||||
|
* does not have to be BLOB: For databases like MySQL and MS SQL Server, any
|
||||||
|
* large enough binary type will work.
|
||||||
|
*
|
||||||
|
* @author Juergen Hoeller
|
||||||
|
* @since 1.1.5
|
||||||
|
* @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#setLobHandler
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class AltibaseClobStringTypeHandler extends AbstractLobTypeHandler {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(AltibaseClobStringTypeHandler.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor used by iBATIS: fetches config-time LobHandler from
|
||||||
|
* SqlMapClientFactoryBean.
|
||||||
|
* @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#getConfigTimeLobHandler
|
||||||
|
*/
|
||||||
|
public AltibaseClobStringTypeHandler() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor used for testing: takes an explicit LobHandler.
|
||||||
|
*/
|
||||||
|
protected AltibaseClobStringTypeHandler(LobHandler lobHandler) {
|
||||||
|
super(lobHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setParameterInternal(PreparedStatement ps, int index, Object value, String jdbcType, LobCreator lobCreator) throws SQLException {
|
||||||
|
lobCreator.setClobAsString(ps, index, (String) value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Object getResultInternal(ResultSet rs, int index, LobHandler lobHandler) throws SQLException {
|
||||||
|
|
||||||
|
StringBuffer read_data = new StringBuffer("");
|
||||||
|
int read_length;
|
||||||
|
|
||||||
|
char[] buf = new char[1024];
|
||||||
|
|
||||||
|
Reader rd = lobHandler.getClobAsCharacterStream(rs, index);
|
||||||
|
try {
|
||||||
|
while ((read_length = rd.read(buf)) != -1) {
|
||||||
|
read_data.append(buf, 0, read_length);
|
||||||
|
}
|
||||||
|
} catch (IOException ie) {
|
||||||
|
LOGGER.debug("ie: {}", ie);
|
||||||
|
} finally {
|
||||||
|
if (rd != null) {
|
||||||
|
try {
|
||||||
|
rd.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORE: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return read_data.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object valueOf(String s) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
185
src/main/java/itn/com/cmm/ComDefaultCodeVO.java
Normal file
185
src/main/java/itn/com/cmm/ComDefaultCodeVO.java
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 클래스
|
||||||
|
* @author 공통서비스개발팀 이삼섭
|
||||||
|
* @since 2009.06.01
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.3.11 이삼섭 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class ComDefaultCodeVO implements Serializable {
|
||||||
|
/** 코드 ID */
|
||||||
|
private String codeId = "";
|
||||||
|
|
||||||
|
/** 상세코드 */
|
||||||
|
private String code = "";
|
||||||
|
|
||||||
|
/** 코드명 */
|
||||||
|
private String codeNm = "";
|
||||||
|
|
||||||
|
/** 코드설명 */
|
||||||
|
private String codeDc = "";
|
||||||
|
|
||||||
|
/** 특정테이블명 */
|
||||||
|
private String tableNm = ""; //특정테이블에서 코드정보를추출시 사용
|
||||||
|
|
||||||
|
/** 상세 조건 여부 */
|
||||||
|
private String haveDetailCondition = "N";
|
||||||
|
|
||||||
|
/** 상세 조건 */
|
||||||
|
private String detailCondition = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeId attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the codeId
|
||||||
|
*/
|
||||||
|
public String getCodeId() {
|
||||||
|
return codeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeId attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param codeId
|
||||||
|
* the codeId to set
|
||||||
|
*/
|
||||||
|
public void setCodeId(String codeId) {
|
||||||
|
this.codeId = codeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* code attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the code
|
||||||
|
*/
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* code attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param code
|
||||||
|
* the code to set
|
||||||
|
*/
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeNm attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the codeNm
|
||||||
|
*/
|
||||||
|
public String getCodeNm() {
|
||||||
|
return codeNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeNm attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param codeNm
|
||||||
|
* the codeNm to set
|
||||||
|
*/
|
||||||
|
public void setCodeNm(String codeNm) {
|
||||||
|
this.codeNm = codeNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeDc attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the codeDc
|
||||||
|
*/
|
||||||
|
public String getCodeDc() {
|
||||||
|
return codeDc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeDc attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param codeDc
|
||||||
|
* the codeDc to set
|
||||||
|
*/
|
||||||
|
public void setCodeDc(String codeDc) {
|
||||||
|
this.codeDc = codeDc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tableNm attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the tableNm
|
||||||
|
*/
|
||||||
|
public String getTableNm() {
|
||||||
|
return tableNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tableNm attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param tableNm
|
||||||
|
* the tableNm to set
|
||||||
|
*/
|
||||||
|
public void setTableNm(String tableNm) {
|
||||||
|
this.tableNm = tableNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* haveDetailCondition attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the haveDetailCondition
|
||||||
|
*/
|
||||||
|
public String getHaveDetailCondition() {
|
||||||
|
return haveDetailCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* haveDetailCondition attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param haveDetailCondition
|
||||||
|
* the haveDetailCondition to set
|
||||||
|
*/
|
||||||
|
public void setHaveDetailCondition(String haveDetailCondition) {
|
||||||
|
this.haveDetailCondition = haveDetailCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* detailCondition attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the detailCondition
|
||||||
|
*/
|
||||||
|
public String getDetailCondition() {
|
||||||
|
return detailCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* detailCondition attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param detailCondition
|
||||||
|
* the detailCondition to set
|
||||||
|
*/
|
||||||
|
public void setDetailCondition(String detailCondition) {
|
||||||
|
this.detailCondition = detailCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* toString 메소드를 대치한다.
|
||||||
|
*/
|
||||||
|
public String toString() {
|
||||||
|
return ToStringBuilder.reflectionToString(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
392
src/main/java/itn/com/cmm/ComDefaultVO.java
Normal file
392
src/main/java/itn/com/cmm/ComDefaultVO.java
Normal file
@ -0,0 +1,392 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : ComDefaultVO.java
|
||||||
|
* @Description : ComDefaultVO class
|
||||||
|
* @Modification Information
|
||||||
|
* @
|
||||||
|
* @ 수정일 수정자 수정내용
|
||||||
|
* @ ------- -------- ---------------------------
|
||||||
|
* @ 2009.02.01 조재영 최초 생성
|
||||||
|
*
|
||||||
|
* @author 공통서비스 개발팀 조재영
|
||||||
|
* @since 2009.02.01
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ComDefaultVO implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -6062858939907510631L;
|
||||||
|
|
||||||
|
/** 검색조건 */
|
||||||
|
private String searchCondition = "";
|
||||||
|
|
||||||
|
/** 검색Keyword */
|
||||||
|
private String searchKeyword = "";
|
||||||
|
|
||||||
|
/** 검색사용여부 */
|
||||||
|
private String searchUseYn = "";
|
||||||
|
|
||||||
|
/** 현재페이지 */
|
||||||
|
private int pageIndex = 1;
|
||||||
|
|
||||||
|
/** 페이지갯수 */
|
||||||
|
private int pageUnit = 10;
|
||||||
|
|
||||||
|
/** 페이지사이즈 */
|
||||||
|
private int pageSize = 10;
|
||||||
|
|
||||||
|
/** firstIndex */
|
||||||
|
private int firstIndex = 1;
|
||||||
|
|
||||||
|
/** lastIndex */
|
||||||
|
private int lastIndex = 1;
|
||||||
|
|
||||||
|
/** recordCountPerPage */
|
||||||
|
private int recordCountPerPage = 10;
|
||||||
|
|
||||||
|
/** 검색KeywordFrom */
|
||||||
|
private String searchKeywordFrom = "";
|
||||||
|
|
||||||
|
/** 검색KeywordTo */
|
||||||
|
private String searchKeywordTo = "";
|
||||||
|
|
||||||
|
/** 최초등록 일자 */
|
||||||
|
private String frstRegistPnttm = "";
|
||||||
|
|
||||||
|
/** 최초등록 ID */
|
||||||
|
private String frstRegisterId = "";
|
||||||
|
|
||||||
|
/** 마지막 수정 일자 */
|
||||||
|
private String lastUpdtPnttm = "";
|
||||||
|
|
||||||
|
/** 마지막 수정 ID*/
|
||||||
|
private String lastUpdusrId = "";
|
||||||
|
|
||||||
|
|
||||||
|
private String siteId = "";
|
||||||
|
|
||||||
|
private String siteNm = "";
|
||||||
|
|
||||||
|
private String searchConditionSite;
|
||||||
|
|
||||||
|
private String sortOver = "A"; //재정렬시 차순(A:오름차순 , D:내림차순)
|
||||||
|
|
||||||
|
private String seCd = ""; //게시판 구분 및 게시판ID추가 구분
|
||||||
|
|
||||||
|
private int sort = 0;
|
||||||
|
|
||||||
|
private int beSort = 0; //이전 sort번호
|
||||||
|
|
||||||
|
private int totCnt = 0;
|
||||||
|
|
||||||
|
private String searchSortCnd = ""; // 정렬 항목
|
||||||
|
private String searchSortOrd = ""; // 정렬 구분(오름/내림)
|
||||||
|
|
||||||
|
private String searchStartDate = ""; // 검색 시작일자
|
||||||
|
|
||||||
|
private String searchEndDate = ""; // 검색 종료일자
|
||||||
|
|
||||||
|
private String searchNm = ""; //상세검색 이름
|
||||||
|
|
||||||
|
private String tempSortNum ;
|
||||||
|
|
||||||
|
private String pageType = "";
|
||||||
|
|
||||||
|
private String searchCampaignYn;
|
||||||
|
|
||||||
|
private String calMonth; // select 기간 조건 [관리자]
|
||||||
|
|
||||||
|
public String getPageType() {
|
||||||
|
return pageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getSearchStartDate() {
|
||||||
|
return searchStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setSearchStartDate(String searchStartDate) {
|
||||||
|
this.searchStartDate = searchStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getSearchEndDate() {
|
||||||
|
return searchEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setSearchEndDate(String searchEndDate) {
|
||||||
|
this.searchEndDate = searchEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setPageType(String pageType) {
|
||||||
|
this.pageType = pageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFrstRegistPnttm() {
|
||||||
|
return frstRegistPnttm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrstRegistPnttm(String frstRegistPnttm) {
|
||||||
|
this.frstRegistPnttm = frstRegistPnttm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFrstRegisterId() {
|
||||||
|
return frstRegisterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrstRegisterId(String frstRegisterId) {
|
||||||
|
this.frstRegisterId = frstRegisterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastUpdtPnttm() {
|
||||||
|
return lastUpdtPnttm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastUpdtPnttm(String lastUpdtPnttm) {
|
||||||
|
this.lastUpdtPnttm = lastUpdtPnttm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastUpdusrId() {
|
||||||
|
return lastUpdusrId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastUpdusrId(String lastUpdusrId) {
|
||||||
|
this.lastUpdusrId = lastUpdusrId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBeSort() {
|
||||||
|
return beSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBeSort(int beSort) {
|
||||||
|
this.beSort = beSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFirstIndex() {
|
||||||
|
return firstIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstIndex(int firstIndex) {
|
||||||
|
this.firstIndex = firstIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLastIndex() {
|
||||||
|
return lastIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastIndex(int lastIndex) {
|
||||||
|
this.lastIndex = lastIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRecordCountPerPage() {
|
||||||
|
return recordCountPerPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRecordCountPerPage(int recordCountPerPage) {
|
||||||
|
this.recordCountPerPage = recordCountPerPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchCondition() {
|
||||||
|
return searchCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchCondition(String searchCondition) {
|
||||||
|
this.searchCondition = searchCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchKeyword() {
|
||||||
|
return searchKeyword;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchKeyword(String searchKeyword) {
|
||||||
|
this.searchKeyword = searchKeyword;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchUseYn() {
|
||||||
|
return searchUseYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchUseYn(String searchUseYn) {
|
||||||
|
this.searchUseYn = searchUseYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageIndex() {
|
||||||
|
return pageIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageIndex(int pageIndex) {
|
||||||
|
this.pageIndex = pageIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageUnit() {
|
||||||
|
return pageUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageUnit(int pageUnit) {
|
||||||
|
this.pageUnit = pageUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageSize() {
|
||||||
|
return pageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageSize(int pageSize) {
|
||||||
|
this.pageSize = pageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return ToStringBuilder.reflectionToString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* searchKeywordFrom attribute를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSearchKeywordFrom() {
|
||||||
|
return searchKeywordFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* searchKeywordFrom attribute 값을 설정한다.
|
||||||
|
* @param searchKeywordFrom String
|
||||||
|
*/
|
||||||
|
public void setSearchKeywordFrom(String searchKeywordFrom) {
|
||||||
|
this.searchKeywordFrom = searchKeywordFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* searchKeywordTo attribute를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSearchKeywordTo() {
|
||||||
|
return searchKeywordTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* searchKeywordTo attribute 값을 설정한다.
|
||||||
|
* @param searchKeywordTo String
|
||||||
|
*/
|
||||||
|
public void setSearchKeywordTo(String searchKeywordTo) {
|
||||||
|
this.searchKeywordTo = searchKeywordTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSiteId() {
|
||||||
|
return siteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSiteId(String siteId) {
|
||||||
|
this.siteId = siteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSortOver() {
|
||||||
|
return sortOver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSortOver(String sortOver) {
|
||||||
|
this.sortOver = sortOver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSiteNm() {
|
||||||
|
return siteNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSiteNm(String siteNm) {
|
||||||
|
this.siteNm = siteNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchConditionSite() {
|
||||||
|
return searchConditionSite;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchConditionSite(String searchConditionSite) {
|
||||||
|
this.searchConditionSite = searchConditionSite;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSeCd() {
|
||||||
|
return seCd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSeCd(String seCd) {
|
||||||
|
this.seCd = seCd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSort() {
|
||||||
|
return sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSort(int sort) {
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotCnt() {
|
||||||
|
return totCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotCnt(int totCnt) {
|
||||||
|
this.totCnt = totCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchSortCnd() {
|
||||||
|
return searchSortCnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchSortCnd(String searchSortCnd) {
|
||||||
|
this.searchSortCnd = searchSortCnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchSortOrd() {
|
||||||
|
return searchSortOrd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchSortOrd(String searchSortOrd) {
|
||||||
|
this.searchSortOrd = searchSortOrd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTempSortNum() {
|
||||||
|
return tempSortNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTempSortNum(String tempSortNum) {
|
||||||
|
this.tempSortNum = tempSortNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchNm() {
|
||||||
|
return searchNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchNm(String searchNm) {
|
||||||
|
this.searchNm = searchNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getSerialversionuid() {
|
||||||
|
return serialVersionUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchCampaignYn() {
|
||||||
|
return searchCampaignYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchCampaignYn(String searchCampaignYn) {
|
||||||
|
this.searchCampaignYn = searchCampaignYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCalMonth() {
|
||||||
|
return calMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCalMonth(String calMonth) {
|
||||||
|
this.calMonth = calMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
406
src/main/java/itn/com/cmm/EgovComCrossSiteHndlr.java
Normal file
406
src/main/java/itn/com/cmm/EgovComCrossSiteHndlr.java
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Reader;
|
||||||
|
|
||||||
|
import javax.servlet.jsp.JspException;
|
||||||
|
import javax.servlet.jsp.JspWriter;
|
||||||
|
import javax.servlet.jsp.PageContext;
|
||||||
|
import javax.servlet.jsp.tagext.BodyTagSupport;
|
||||||
|
|
||||||
|
import org.apache.taglibs.standard.tag.common.core.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cross-Site Scripting 체크하여 값을 되돌려 받는 핸들러 JSP TLD, 자바에서 사용가능
|
||||||
|
*
|
||||||
|
* @author 공통서비스 장동한
|
||||||
|
* @since 2010.11.09
|
||||||
|
* @version 1.0
|
||||||
|
* @see <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2010.11.09 장동한 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class EgovComCrossSiteHndlr extends BodyTagSupport {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (One almost wishes XML and JSP could support "anonymous tags," given the
|
||||||
|
* amount of trouble we had naming this one!) :-) - sb
|
||||||
|
*/
|
||||||
|
|
||||||
|
// *********************************************************************
|
||||||
|
// Internal state
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -6750233818675360686L;
|
||||||
|
|
||||||
|
protected Object value; // tag attribute
|
||||||
|
protected String def; // tag attribute
|
||||||
|
protected boolean escapeXml; // tag attribute
|
||||||
|
private boolean needBody; // non-space body needed?
|
||||||
|
|
||||||
|
// *********************************************************************
|
||||||
|
// Construction and initialization
|
||||||
|
|
||||||
|
private String m_sDiffChar ="()[]{}\"',:;= \t\r\n%!+-";
|
||||||
|
//private String m_sDiffChar ="()[]{}\"',:;=%!+-";
|
||||||
|
private String m_sArrDiffChar [] = {
|
||||||
|
"(",")",
|
||||||
|
"[","]",
|
||||||
|
"{","}",
|
||||||
|
""","'",
|
||||||
|
",",":",
|
||||||
|
";","=",
|
||||||
|
" ","\t", //" ","\t",
|
||||||
|
"\r","\n", //"\r","\n",
|
||||||
|
"%","!",
|
||||||
|
"+","-"
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new handler. As with TagSupport, subclasses should not
|
||||||
|
* provide other constructors and are expected to call the superclass
|
||||||
|
* constructor.
|
||||||
|
*/
|
||||||
|
public EgovComCrossSiteHndlr() {
|
||||||
|
super();
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// resets local state
|
||||||
|
private void init() {
|
||||||
|
value = def = null;
|
||||||
|
escapeXml = true;
|
||||||
|
needBody = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Releases any resources we may have (or inherit)
|
||||||
|
public void release() {
|
||||||
|
super.release();
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// *********************************************************************
|
||||||
|
// Tag logic
|
||||||
|
|
||||||
|
// evaluates 'value' and determines if the body should be evaluted
|
||||||
|
public int doStartTag() throws JspException {
|
||||||
|
|
||||||
|
needBody = false; // reset state related to 'default'
|
||||||
|
this.bodyContent = null; // clean-up body (just in case container is
|
||||||
|
// pooling tag handlers)
|
||||||
|
|
||||||
|
JspWriter out = pageContext.getOut();
|
||||||
|
//System.out.println("EgovComCrossSiteFilter> ============================");
|
||||||
|
try {
|
||||||
|
// print value if available; otherwise, try 'default'
|
||||||
|
if (value != null) {
|
||||||
|
//System.out.println("EgovComCrossSiteFilter> =value");
|
||||||
|
String sWriteEscapedXml = getWriteEscapedXml();
|
||||||
|
//System.out.println("EgovComCrossSiteFilter sWriteEscapedXml>" + sWriteEscapedXml);
|
||||||
|
out.print(sWriteEscapedXml);
|
||||||
|
return SKIP_BODY;
|
||||||
|
} else {
|
||||||
|
// if we don't have a 'default' attribute, just go to the body
|
||||||
|
if (def == null) {
|
||||||
|
needBody = true;
|
||||||
|
return EVAL_BODY_BUFFERED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("EgovComCrossSiteFilter def> ="+def);
|
||||||
|
|
||||||
|
// if we do have 'default', print it
|
||||||
|
if (def != null) {
|
||||||
|
// good 'default'
|
||||||
|
out(pageContext, escapeXml, def);
|
||||||
|
//System.out.println("EgovComCrossSiteFilter> ="+def);
|
||||||
|
}
|
||||||
|
return SKIP_BODY;
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new JspException(ex.toString(), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// prints the body if necessary; reports errors
|
||||||
|
public int doEndTag() throws JspException {
|
||||||
|
try {
|
||||||
|
//System.out.println("EgovComCrossSiteFilter ==== doEndTag");
|
||||||
|
if (!needBody){
|
||||||
|
return EVAL_PAGE; // nothing more to do
|
||||||
|
}
|
||||||
|
|
||||||
|
// trim and print out the body
|
||||||
|
if (bodyContent != null && bodyContent.getString() != null){
|
||||||
|
//String sWriteEscapedXml = getWriteEscapedXml();
|
||||||
|
//out2(pageContext, escapeXml, sWriteEscapedXml.toString());
|
||||||
|
//System.out.println("EgovComCrossSiteFilter> end");
|
||||||
|
//System.out.println("EgovComCrossSiteFilter sWriteEscapedXml > sWriteEscapedXml");
|
||||||
|
out(pageContext, escapeXml, bodyContent.getString().trim());
|
||||||
|
|
||||||
|
}
|
||||||
|
return EVAL_PAGE;
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new JspException(ex.toString(), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// *********************************************************************
|
||||||
|
// Public utility methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outputs <tt>text</tt> to <tt>pageContext</tt>'s current JspWriter. If
|
||||||
|
* <tt>escapeXml</tt> is true, performs the following substring replacements
|
||||||
|
* (to facilitate output to XML/HTML pages):
|
||||||
|
*
|
||||||
|
* & -> & < -> < > -> > " -> " ' -> '
|
||||||
|
*
|
||||||
|
* See also Util.escapeXml().
|
||||||
|
*/
|
||||||
|
public static void out(PageContext pageContext, boolean escapeXml,
|
||||||
|
Object obj) throws IOException {
|
||||||
|
JspWriter w = pageContext.getOut();
|
||||||
|
|
||||||
|
if (!escapeXml) {
|
||||||
|
// write chars as is
|
||||||
|
if (obj instanceof Reader) {
|
||||||
|
Reader reader = (Reader) obj;
|
||||||
|
char[] buf = new char[4096];
|
||||||
|
int count;
|
||||||
|
while ((count = reader.read(buf, 0, 4096)) != -1) {
|
||||||
|
w.write(buf, 0, count);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
w.write(obj.toString());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// escape XML chars
|
||||||
|
if (obj instanceof Reader) {
|
||||||
|
Reader reader = (Reader) obj;
|
||||||
|
char[] buf = new char[4096];
|
||||||
|
int count;
|
||||||
|
while ((count = reader.read(buf, 0, 4096)) != -1) {
|
||||||
|
writeEscapedXml(buf, count, w);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String text = obj.toString();
|
||||||
|
writeEscapedXml(text.toCharArray(), text.length(), w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public static void out2(PageContext pageContext, boolean escapeXml,
|
||||||
|
Object obj) throws IOException {
|
||||||
|
JspWriter w = pageContext.getOut();
|
||||||
|
|
||||||
|
w.write(obj.toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Optimized to create no extra objects and write directly to the JspWriter
|
||||||
|
* using blocks of escaped and unescaped characters
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static void writeEscapedXml(char[] buffer, int length, JspWriter w)
|
||||||
|
throws IOException {
|
||||||
|
int start = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
char c = buffer[i];
|
||||||
|
if (c <= Util.HIGHEST_SPECIAL) {
|
||||||
|
char[] escaped = Util.specialCharactersRepresentation[c];
|
||||||
|
if (escaped != null) {
|
||||||
|
// add unescaped portion
|
||||||
|
if (start < i) {
|
||||||
|
w.write(buffer, start, i - start);
|
||||||
|
}
|
||||||
|
// add escaped xml
|
||||||
|
w.write(escaped);
|
||||||
|
start = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add rest of unescaped portion
|
||||||
|
if (start < length) {
|
||||||
|
w.write(buffer, start, length - start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Optimized to create no extra objects and write directly to the JspWriter
|
||||||
|
* using blocks of escaped and unescaped characters
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private String getWriteEscapedXml() throws IOException {
|
||||||
|
String sRtn = "";
|
||||||
|
|
||||||
|
Object obj = this.value;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
int start = 0;
|
||||||
|
String text = obj.toString();
|
||||||
|
|
||||||
|
int length = text.length();
|
||||||
|
char[] buffer = text.toCharArray();
|
||||||
|
boolean booleanDiff = false;
|
||||||
|
//String sDiffChar
|
||||||
|
//String sArrDiffChar
|
||||||
|
char[] cDiffChar = this.m_sDiffChar.toCharArray();
|
||||||
|
|
||||||
|
for(int i = 0; i < length; i++) {
|
||||||
|
char c = buffer[i];
|
||||||
|
|
||||||
|
booleanDiff = false;
|
||||||
|
|
||||||
|
for(int k = 0; k < cDiffChar.length; k++){
|
||||||
|
if(c == cDiffChar[k]){
|
||||||
|
sRtn = sRtn + m_sArrDiffChar[k];
|
||||||
|
booleanDiff = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(booleanDiff) continue;
|
||||||
|
|
||||||
|
if (c <= Util.HIGHEST_SPECIAL) {
|
||||||
|
char[] escaped = Util.specialCharactersRepresentation[c];
|
||||||
|
if (escaped != null) {
|
||||||
|
// add unescaped portion
|
||||||
|
//if (start < i) {
|
||||||
|
// sRtn = sRtn + text.substring(start, i - start);
|
||||||
|
//}
|
||||||
|
// add escaped xml
|
||||||
|
//sRtn = sRtn + escaped;
|
||||||
|
//System.out.println(buffer[i]+" :: " + escaped);
|
||||||
|
for (int j = 0; j < escaped.length; j++) {
|
||||||
|
//System.out.println(buffer[i]+" :>: " + escaped[j]);
|
||||||
|
sRtn = sRtn + escaped[j];
|
||||||
|
}
|
||||||
|
//sRtn = sRtn+ escaped.toString();
|
||||||
|
//sRtn = sRtn + String.valueOf(buffer[i]);
|
||||||
|
start = i + 1;
|
||||||
|
}else{
|
||||||
|
sRtn = sRtn + c;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sRtn = sRtn + c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sRtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Optimized to create no extra objects and write directly to the JspWriter
|
||||||
|
* using blocks of escaped and unescaped characters
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private String getWriteEscapedXml(String sWriteString) throws IOException {
|
||||||
|
|
||||||
|
String sRtn = "";
|
||||||
|
|
||||||
|
Object obj = sWriteString;
|
||||||
|
|
||||||
|
int start = 0;
|
||||||
|
String text = obj.toString();
|
||||||
|
|
||||||
|
int length = text.length();
|
||||||
|
char[] buffer = text.toCharArray();
|
||||||
|
boolean booleanDiff = false;
|
||||||
|
//String sDiffChar
|
||||||
|
//String sArrDiffChar
|
||||||
|
char[] cDiffChar = this.m_sDiffChar.toCharArray();
|
||||||
|
|
||||||
|
for(int i = 0; i < length; i++) {
|
||||||
|
char c = buffer[i];
|
||||||
|
|
||||||
|
booleanDiff = false;
|
||||||
|
|
||||||
|
for(int k = 0; k < cDiffChar.length; k++){
|
||||||
|
if(c == cDiffChar[k]){
|
||||||
|
sRtn = sRtn + m_sArrDiffChar[k];
|
||||||
|
booleanDiff = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(booleanDiff) continue;
|
||||||
|
|
||||||
|
if (c <= Util.HIGHEST_SPECIAL) {
|
||||||
|
char[] escaped = Util.specialCharactersRepresentation[c];
|
||||||
|
if (escaped != null) {
|
||||||
|
// add unescaped portion
|
||||||
|
//if (start < i) {
|
||||||
|
// sRtn = sRtn + text.substring(start, i - start);
|
||||||
|
//}
|
||||||
|
// add escaped xml
|
||||||
|
//sRtn = sRtn + escaped;
|
||||||
|
//System.out.println(buffer[i]+" :: " + escaped);
|
||||||
|
for (int j = 0; j < escaped.length; j++) {
|
||||||
|
//System.out.println(buffer[i]+" :>: " + escaped[j]);
|
||||||
|
sRtn = sRtn + escaped[j];
|
||||||
|
}
|
||||||
|
//sRtn = sRtn+ escaped.toString();
|
||||||
|
//sRtn = sRtn + String.valueOf(buffer[i]);
|
||||||
|
start = i + 1;
|
||||||
|
}else{
|
||||||
|
sRtn = sRtn + c;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sRtn = sRtn + c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sRtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for tag attribute
|
||||||
|
public void setValue(Object value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for tag attribute
|
||||||
|
public void setDefault(String def) {
|
||||||
|
this.def = def;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for tag attribute
|
||||||
|
public void setEscapeXml(boolean escapeXml) {
|
||||||
|
this.escapeXml = escapeXml;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public static void main(String[] args) throws IOException
|
||||||
|
{
|
||||||
|
|
||||||
|
EgovComCrossSiteHndlr egovComCrossSiteHndlr = new EgovComCrossSiteHndlr();
|
||||||
|
|
||||||
|
egovComCrossSiteHndlr.value = "TRNSMIT";
|
||||||
|
|
||||||
|
String sCrossSiteHndlr = egovComCrossSiteHndlr.getWriteEscapedXml();
|
||||||
|
//System.out.println("writeEscapedXml " + egovComCrossSiteHndlr.getWriteEscapedXml());
|
||||||
|
|
||||||
|
System.out.println("sCrossSiteHndlr|"+ sCrossSiteHndlr + "|");
|
||||||
|
|
||||||
|
try{
|
||||||
|
System.out.println("TRY TEST 1");
|
||||||
|
throw new Exception();
|
||||||
|
}catch(Exception e){
|
||||||
|
System.out.println("TRY TEST 2");
|
||||||
|
}finally{
|
||||||
|
System.out.println("TRY TEST 3");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
35
src/main/java/itn/com/cmm/EgovComExcepHndlr.java
Normal file
35
src/main/java/itn/com/cmm/EgovComExcepHndlr.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovComExcepHndlr.java
|
||||||
|
* @Description : 공통서비스의 exception 처리 클래스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2009. 3. 13. 이삼섭
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 3. 13.
|
||||||
|
* @version
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class EgovComExcepHndlr implements ExceptionHandler {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovComExcepHndlr.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 발생된 Exception을 처리한다.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void occur(Exception ex, String packageName) {
|
||||||
|
LOGGER.debug("[HANDLER][PACKAGE]::: {}", packageName);
|
||||||
|
LOGGER.debug("[HANDLER][Exception]:::", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
17
src/main/java/itn/com/cmm/EgovComOthersExcepHndlr.java
Normal file
17
src/main/java/itn/com/cmm/EgovComOthersExcepHndlr.java
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class EgovComOthersExcepHndlr implements ExceptionHandler {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovComOthersExcepHndlr.class);
|
||||||
|
|
||||||
|
public void occur(Exception exception, String packageName) {
|
||||||
|
//log.debug(" EgovServiceExceptionHandler run...............");
|
||||||
|
LOGGER.error(packageName, exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
34
src/main/java/itn/com/cmm/EgovComTraceHandler.java
Normal file
34
src/main/java/itn/com/cmm/EgovComTraceHandler.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.trace.handler.TraceHandler;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovComTraceHandler.java
|
||||||
|
* @Description : 공통서비스의 trace 처리 클래스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2011. 09. 30. JJY
|
||||||
|
*
|
||||||
|
* @author JJY
|
||||||
|
* @since 2011. 9. 30.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class EgovComTraceHandler implements TraceHandler {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovComTraceHandler.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 발생된 메시지를 출력한다.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void todo(Class<?> clazz, String message) {
|
||||||
|
LOGGER.debug("[TRACE]CLASS::: {}", clazz.getName());
|
||||||
|
LOGGER.debug("[TRACE]MESSAGE::: {}", message);
|
||||||
|
//이곳에서 후속처리로 필요한 액션을 취할 수 있다.
|
||||||
|
}
|
||||||
|
}
|
||||||
55
src/main/java/itn/com/cmm/EgovMessageSource.java
Normal file
55
src/main/java/itn/com/cmm/EgovMessageSource.java
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package itn.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
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.03.11 이문준 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
213
src/main/java/itn/com/cmm/EgovMultiPartEmail.java
Normal file
213
src/main/java/itn/com/cmm/EgovMultiPartEmail.java
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
|
||||||
|
import org.apache.commons.mail.DefaultAuthenticator;
|
||||||
|
import org.apache.commons.mail.Email;
|
||||||
|
import org.apache.commons.mail.EmailAttachment;
|
||||||
|
import org.apache.commons.mail.EmailException;
|
||||||
|
import org.apache.commons.mail.HtmlEmail;
|
||||||
|
import org.apache.commons.mail.MultiPartEmail;
|
||||||
|
import org.apache.commons.mail.SimpleEmail;
|
||||||
|
import org.springframework.mail.MailException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 발송메일에 첨부파일용으로 사용되는 VO 클래스
|
||||||
|
* @author 공통서비스 개발팀 이기하
|
||||||
|
* @since 2011.12.06
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ---------- -------- ---------------------------
|
||||||
|
* 2011.12.06 이기하 최초 생성
|
||||||
|
* 2013.05.23 이기하 thread-safe 하게 변경
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EgovMultiPartEmail implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -4322006921324597283L;
|
||||||
|
private String id;
|
||||||
|
private String password;
|
||||||
|
private int port;
|
||||||
|
private String host;
|
||||||
|
private String emailAddress;
|
||||||
|
private String senderName;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPort(int port) {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHost() {
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHost(String host) {
|
||||||
|
this.host = host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmailAddress() {
|
||||||
|
return emailAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmailAddress(String emailAddress) {
|
||||||
|
this.emailAddress = emailAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSenderName() {
|
||||||
|
return senderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSenderName(String senderName) {
|
||||||
|
this.senderName = senderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public String send() throws EmailException {
|
||||||
|
MultiPartEmail email = new MultiPartEmail();
|
||||||
|
|
||||||
|
email.setCharset("UTF-8");
|
||||||
|
email.setHostName(this.host);
|
||||||
|
email.setSmtpPort(this.port);
|
||||||
|
email.setStartTLSEnabled(true);
|
||||||
|
email.setAuthenticator(new DefaultAuthenticator(this.id, this.password));
|
||||||
|
email.setSocketConnectionTimeout(60000);
|
||||||
|
email.setSocketTimeout(60000);
|
||||||
|
email.setFrom(this.emailAddress, this.senderName);
|
||||||
|
|
||||||
|
return email.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple 메일
|
||||||
|
public String send(String addTo, String subject, String msg) throws Exception {
|
||||||
|
SimpleEmail email = new SimpleEmail();
|
||||||
|
|
||||||
|
setEmailInfo(addTo, subject, msg, email);
|
||||||
|
|
||||||
|
return email.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTML 메일
|
||||||
|
public String send(String addTo, String subject, String textMsg, String htmlMsg) throws MailException, MalformedURLException {
|
||||||
|
String result = "";
|
||||||
|
try {
|
||||||
|
HtmlEmail email = new HtmlEmail();
|
||||||
|
|
||||||
|
// 3번째 파라미터 'html' 의미 없음. 단 문자 없으면 error
|
||||||
|
setEmailInfo(addTo, subject, "html", email);
|
||||||
|
email.setHtmlMsg(htmlMsg);
|
||||||
|
|
||||||
|
// HTML 이메일을 지원하지 않는 클라이언트라면 다음 메세지를 뿌려웁니다
|
||||||
|
email.setTextMsg("Your email client does not support HTML messages");
|
||||||
|
// email.setTextMsg(textMsg);
|
||||||
|
|
||||||
|
// 이미지 Sample
|
||||||
|
// 삽입할 이미지와 그 Content Id를 설정합니다. URL 이미지 사용 시 메일전송 지연될 수 있음
|
||||||
|
// URL url = new URL("https://www.google.co.kr/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png");
|
||||||
|
// String cid = email.embed(url, "Apache logo");
|
||||||
|
// // HTML 메세지를 설정합니다
|
||||||
|
// email.setHtmlMsg("<html>The apache logo - <img src=\"cid:"+cid+"\"></html>");
|
||||||
|
|
||||||
|
result = email.send();
|
||||||
|
} catch (EmailException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : send
|
||||||
|
* @author : hylee
|
||||||
|
* @date : 2022.07.04
|
||||||
|
* @description :
|
||||||
|
* @param addTo
|
||||||
|
* @param subject
|
||||||
|
* @param textMsg
|
||||||
|
* @param htmlMsg
|
||||||
|
* @param attachment
|
||||||
|
* @return
|
||||||
|
* @throws MailException
|
||||||
|
* @throws MalformedURLException
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String send(String addTo, String subject, String textMsg, String htmlMsg, EmailAttachment attachment) throws MailException, MalformedURLException {
|
||||||
|
String result = "";
|
||||||
|
try {
|
||||||
|
HtmlEmail email = new HtmlEmail();
|
||||||
|
|
||||||
|
// 3번째 파라미터 'html' 의미 없음. 단 문자 없으면 error
|
||||||
|
setEmailInfo(addTo, subject, "html", email);
|
||||||
|
email.setHtmlMsg(htmlMsg);
|
||||||
|
|
||||||
|
email.setTextMsg("Your email client does not support HTML messages");
|
||||||
|
|
||||||
|
if (attachment != null) {
|
||||||
|
email.attach(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = email.send();
|
||||||
|
} catch (EmailException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 파일첨부 메일
|
||||||
|
public String send(String addTo, String subject, String msg, EmailAttachment attachment) throws Exception {
|
||||||
|
MultiPartEmail email = new MultiPartEmail();
|
||||||
|
|
||||||
|
setEmailInfo(addTo, subject, msg, email);
|
||||||
|
|
||||||
|
if (attachment != null) {
|
||||||
|
email.attach(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
return email.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setEmailInfo(String addTo, String subject, String msg, Email email) throws EmailException {
|
||||||
|
// 테스트 네이버s
|
||||||
|
email.setAuthenticator(new DefaultAuthenticator(this.id, this.password));
|
||||||
|
email.setStartTLSEnabled(true);
|
||||||
|
email.setSSLOnConnect(true);
|
||||||
|
// 테스트 네이버e
|
||||||
|
|
||||||
|
email.setCharset("UTF-8");
|
||||||
|
email.setHostName(this.host);
|
||||||
|
email.setSmtpPort(this.port);
|
||||||
|
email.setSocketConnectionTimeout(60000);
|
||||||
|
email.setSocketTimeout(60000);
|
||||||
|
email.setFrom(this.emailAddress, this.senderName);
|
||||||
|
email.addTo(addTo);
|
||||||
|
email.setSubject(subject);
|
||||||
|
email.setMsg(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
109
src/main/java/itn/com/cmm/EgovWebUtil.java
Normal file
109
src/main/java/itn/com/cmm/EgovWebUtil.java
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 교차접속 스크립트 공격 취약성 방지(파라미터 문자열 교체)
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2011.10.10 한성곤 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EgovWebUtil {
|
||||||
|
public static String clearXSSMinimum(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("\'", "'");
|
||||||
|
returnValue = returnValue.replaceAll("[.]", ".");
|
||||||
|
returnValue = returnValue.replaceAll("%2E", ".");
|
||||||
|
returnValue = returnValue.replaceAll("%2F", "/");
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String clearXSSMaximum(String value) {
|
||||||
|
String returnValue = value;
|
||||||
|
returnValue = clearXSSMinimum(returnValue);
|
||||||
|
|
||||||
|
returnValue = returnValue.replaceAll("%00", null);
|
||||||
|
|
||||||
|
returnValue = returnValue.replaceAll("%", "%");
|
||||||
|
|
||||||
|
// \\. => .
|
||||||
|
|
||||||
|
returnValue = returnValue.replaceAll("\\.\\./", ""); // ../
|
||||||
|
returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\
|
||||||
|
returnValue = returnValue.replaceAll("\\./", ""); // ./
|
||||||
|
returnValue = returnValue.replaceAll("%2F", "");
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String filePathBlackList(String value) {
|
||||||
|
String returnValue = value;
|
||||||
|
if (returnValue == null || returnValue.trim().equals("")) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
returnValue = returnValue.replaceAll("\\.\\./", ""); // ../
|
||||||
|
returnValue = returnValue.replaceAll("\\.\\.\\\\", ""); // ..\
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 행안부 보안취약점 점검 조치 방안.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String filePathReplaceAll(String value) {
|
||||||
|
String returnValue = value;
|
||||||
|
if (returnValue == null || returnValue.trim().equals("")) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
returnValue = returnValue.replaceAll("/", "");
|
||||||
|
returnValue = returnValue.replaceAll("\\", "");
|
||||||
|
returnValue = returnValue.replaceAll("\\.\\.", ""); // ..
|
||||||
|
returnValue = returnValue.replaceAll("&", "");
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String filePathWhiteList(String value) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isIPAddress(String str) {
|
||||||
|
Pattern ipPattern = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
|
||||||
|
|
||||||
|
return ipPattern.matcher(str).matches();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String removeCRLF(String parameter) {
|
||||||
|
return parameter.replaceAll("\r", "").replaceAll("\n", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String removeSQLInjectionRisk(String parameter) {
|
||||||
|
return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("%", "").replaceAll(";", "").replaceAll("-", "").replaceAll("\\+", "").replaceAll(",", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String removeOSCmdRisk(String parameter) {
|
||||||
|
return parameter.replaceAll("\\p{Space}", "").replaceAll("\\*", "").replaceAll("|", "").replaceAll(";", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
56
src/main/java/itn/com/cmm/ImagePaginationRenderer.java
Normal file
56
src/main/java/itn/com/cmm/ImagePaginationRenderer.java
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
|
import org.springframework.web.context.ServletContextAware;
|
||||||
|
|
||||||
|
import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer;
|
||||||
|
/**
|
||||||
|
* ImagePaginationRenderer.java 클래스
|
||||||
|
*
|
||||||
|
* @author 서준식
|
||||||
|
* @since 2011. 9. 16.
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------------- ----------------------
|
||||||
|
* 2011. 9. 16. 서준식 이미지 경로에 ContextPath추가
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ImagePaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{
|
||||||
|
|
||||||
|
private ServletContext servletContext;
|
||||||
|
|
||||||
|
public ImagePaginationRenderer() {
|
||||||
|
// no-op
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initVariables(){
|
||||||
|
/*firstPageLabel = "<li> </li><li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/mod/icon/icon_prevend.gif\" alt=\"처음\" border=\"0\"/></a></li>";
|
||||||
|
previousPageLabel = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/mod/icon/icon_prev.gif\" alt=\"이전\" border=\"0\"/></a></li>";
|
||||||
|
currentPageLabel = "<li><strong>{0}</strong></li>";
|
||||||
|
otherPageLabel = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">{2}</a></li>";
|
||||||
|
nextPageLabel = "<li> <a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/mod/icon/icon_next.gif\" alt=\"다음\" border=\"0\"/></a></li>";
|
||||||
|
lastPageLabel = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"><img src=\"" + servletContext.getContextPath() + "/images/egovframework/com/cmm/mod/icon/icon_nextend.gif\" alt=\"마지막\" border=\"0\"/></a></li>";*/
|
||||||
|
|
||||||
|
firstPageLabel = "<li><input type='button' class='pageFirst' onclick=\"{0}({1});return false;\"></li>";
|
||||||
|
previousPageLabel = "<li><input type='button' class='pageBefore' onclick=\"{0}({1});return false;\"></li>";
|
||||||
|
currentPageLabel = "<li><strong style='font-weight:bold;'>{0}</strong></li>";
|
||||||
|
otherPageLabel = "<li onclick=\"{0}({1});return false;\" style='cursor:pointer'>{2}</li>";
|
||||||
|
nextPageLabel = "<li><input type='button' class='pageNext' onclick=\"{0}({1});return false;\"></li>";
|
||||||
|
lastPageLabel = "<li><input type='button' class='pageLast' onclick=\"{0}({1});return false;\"></li>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setServletContext(ServletContext servletContext) {
|
||||||
|
this.servletContext = servletContext;
|
||||||
|
initVariables();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
47
src/main/java/itn/com/cmm/ImagePaginationRendererWeb.java
Normal file
47
src/main/java/itn/com/cmm/ImagePaginationRendererWeb.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
|
import org.springframework.web.context.ServletContextAware;
|
||||||
|
|
||||||
|
import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer;
|
||||||
|
/**
|
||||||
|
* ImagePaginationRenderer.java 클래스
|
||||||
|
*
|
||||||
|
* @author 서준식
|
||||||
|
* @since 2011. 9. 16.
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------------- ----------------------
|
||||||
|
* 2011. 9. 16. 서준식 이미지 경로에 ContextPath추가
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ImagePaginationRendererWeb extends AbstractPaginationRenderer implements ServletContextAware{
|
||||||
|
|
||||||
|
private ServletContext servletContext;
|
||||||
|
|
||||||
|
public ImagePaginationRendererWeb() {
|
||||||
|
// no-op
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initVariables(){
|
||||||
|
firstPageLabel = "<li class=\"page_first\"><a href='#' title='첫페이지' onclick=\"{0}({1});return false;\"><button type=\"button\"><img src=\"/publish/images/content/page_first.png\" alt=\"첫페이지\"></button></a></li>";
|
||||||
|
previousPageLabel = "<li class=\"page_prev\"><a href='#' title='이전10페이지' onclick=\"{0}({1});return false;\"><button type=\"button\"><img src=\"/publish/images/content/page_prev.png\" alt=\"이전10페이지\"></button></a></li>";
|
||||||
|
currentPageLabel = "<li class=\"on\"><button type=\"button\"><a href='#' title='현재페이지'>{0}</a></button></li>";
|
||||||
|
otherPageLabel = "<li><button type=\"button\" onclick=\"{0}({1});return false;\"><a href='#' title={2}페이지 >{2}</a></button></li>";
|
||||||
|
nextPageLabel = "<li class=\"page_next\"><a href='#' title='다음10페이지' onclick=\"{0}({1});return false;\"><button type=\"button\"><img src=\"/publish/images/content/page_next.png\" alt=\"다음10페이지\"></button></a></li>";
|
||||||
|
lastPageLabel = "<li class=\"page_last\"><a href='#' title='마지막페이지' onclick=\"{0}({1});return false;\"><button type=\"button\"><img src=\"/publish/images/content/page_last.png\" alt=\"마지막페이지\"></button></a></li>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setServletContext(ServletContext servletContext) {
|
||||||
|
this.servletContext = servletContext;
|
||||||
|
initVariables();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
106
src/main/java/itn/com/cmm/JsonResult.java
Normal file
106
src/main/java/itn/com/cmm/JsonResult.java
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공용 JSON 리턴 모델
|
||||||
|
* @author wimy
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class JsonResult implements Serializable{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -6362971805582357050L;
|
||||||
|
|
||||||
|
private boolean success;
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
private Object data;
|
||||||
|
|
||||||
|
private String redirectUrl = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* json 성공 여부
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isSuccess() {
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* json 성공 여부
|
||||||
|
* @param success
|
||||||
|
*/
|
||||||
|
public void setSuccess(boolean success) {
|
||||||
|
this.success = success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 코드
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 코드
|
||||||
|
* @param code
|
||||||
|
*/
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 메시지
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 메시지
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON 데이터
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Object getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON 데이터
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
public void setData(Object data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 리다이렉트 URL
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getRedirectUrl() {
|
||||||
|
return redirectUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 리다이렉트 URL
|
||||||
|
* @param redirectUrl
|
||||||
|
*/
|
||||||
|
public void setRedirectUrl(String redirectUrl) {
|
||||||
|
this.redirectUrl = redirectUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
427
src/main/java/itn/com/cmm/LoginVO.java
Normal file
427
src/main/java/itn/com/cmm/LoginVO.java
Normal file
@ -0,0 +1,427 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : LoginVO.java
|
||||||
|
* @Description : Login VO class
|
||||||
|
* @Modification Information
|
||||||
|
* @
|
||||||
|
* @ 수정일 수정자 수정내용
|
||||||
|
* @ ------- -------- ---------------------------
|
||||||
|
* @ 2009.03.03 박지욱 최초 생성
|
||||||
|
*
|
||||||
|
* @author 공통서비스 개발팀 박지욱
|
||||||
|
* @since 2009.03.03
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LoginVO implements Serializable{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -8274004534207618049L;
|
||||||
|
|
||||||
|
/** 아이디 */
|
||||||
|
private String id;
|
||||||
|
/** 이름 */
|
||||||
|
private String name;
|
||||||
|
/** 주민등록번호 */
|
||||||
|
private String ihidNum;
|
||||||
|
/** 이메일주소 */
|
||||||
|
private String email;
|
||||||
|
/** 비밀번호 */
|
||||||
|
private String password;
|
||||||
|
/** 비밀번호 */
|
||||||
|
private String password2;
|
||||||
|
/** 비밀번호 힌트 */
|
||||||
|
private String passwordHint;
|
||||||
|
/** 비밀번호 정답 */
|
||||||
|
private String passwordCnsr;
|
||||||
|
/** 사용자구분 */
|
||||||
|
private String userSe;
|
||||||
|
/** 조직(부서)ID */
|
||||||
|
private String orgnztId;
|
||||||
|
/** 조직(부서)명 */
|
||||||
|
private String orgnztNm;
|
||||||
|
/** 고유아이디 */
|
||||||
|
private String uniqId;
|
||||||
|
/** 로그인 후 이동할 페이지 */
|
||||||
|
private String url;
|
||||||
|
/** 사용자 IP정보 */
|
||||||
|
private String ip;
|
||||||
|
/** GPKI인증 DN */
|
||||||
|
private String dn;
|
||||||
|
|
||||||
|
private String siteId;
|
||||||
|
|
||||||
|
private String siteNm;
|
||||||
|
|
||||||
|
private String authority;
|
||||||
|
|
||||||
|
/** 로그인 후 리턴 url */
|
||||||
|
private String beforeUrl;
|
||||||
|
/** 회원탈퇴 사유 */
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
private int passMiss;
|
||||||
|
|
||||||
|
/** 등록안된 사용자도 검색(값이 있으면 모두 조회) */
|
||||||
|
private String statusAll; // 가입승인상태 상태값 없으면 'Y'로 설정 요망.
|
||||||
|
private String emplyrSttusCode; //상태코드
|
||||||
|
|
||||||
|
|
||||||
|
private int snsIdCnt = 0;
|
||||||
|
private String snsSite;
|
||||||
|
private String snsId; // SNS 회원정보 ID
|
||||||
|
private String snsEmail;
|
||||||
|
|
||||||
|
|
||||||
|
private String tel;
|
||||||
|
private String orgnztNo;
|
||||||
|
private String orgnztPosi ;
|
||||||
|
private String emplNo ;
|
||||||
|
private String userWork ;
|
||||||
|
|
||||||
|
private String loginYn;
|
||||||
|
|
||||||
|
//사용자 문자 추가정보
|
||||||
|
private float shortPrice;
|
||||||
|
private float longPrice;
|
||||||
|
private float picturePrice;
|
||||||
|
private float userMoney;
|
||||||
|
|
||||||
|
//IP 조회 후 KMC본인인증에 필요한 정보
|
||||||
|
private String mberNm; //사용자,회사명
|
||||||
|
private String managerNm; //기업회원일 시 담당자명
|
||||||
|
private String dept; //개인, 기업 회원 구분
|
||||||
|
private String moblphonNo; //핸드폰번호
|
||||||
|
private String birth; //생일
|
||||||
|
private String sexdstnCode; // 성별코드
|
||||||
|
private String nationality; //내국인 외국인
|
||||||
|
|
||||||
|
//관리자로그인 미 허용 IP에서 접속할때 인증 정보
|
||||||
|
// KMC 보인인증 값
|
||||||
|
private String crtfcDnValue;
|
||||||
|
//대리로그인 시 기록할 관리자 ID
|
||||||
|
private String adminId;
|
||||||
|
//미허용 IP 관리자 로그인 시 SMS인증번호
|
||||||
|
private String checkNo;
|
||||||
|
//관리자 SMS 문자인증 여부( Y : 문자인증함, N : 문자인증 안함)
|
||||||
|
private String outerCertYn;
|
||||||
|
|
||||||
|
private String dormantYn; // 휴먼회원여부 ( N:일반회원, Y:휴먼회원)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 보안로그인 여부
|
||||||
|
*/
|
||||||
|
private String secuLoginFlag;
|
||||||
|
|
||||||
|
public String getDormantYn() {
|
||||||
|
return dormantYn;
|
||||||
|
}
|
||||||
|
public void setDormantYn(String dormantYn) {
|
||||||
|
this.dormantYn = dormantYn;
|
||||||
|
}
|
||||||
|
public String getLoginYn() {
|
||||||
|
return loginYn;
|
||||||
|
}
|
||||||
|
public void setLoginYn(String loginYn) {
|
||||||
|
this.loginYn = loginYn;
|
||||||
|
}
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
public String getIhidNum() {
|
||||||
|
return ihidNum;
|
||||||
|
}
|
||||||
|
public void setIhidNum(String ihidNum) {
|
||||||
|
this.ihidNum = ihidNum;
|
||||||
|
}
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
public String getPassword2() {
|
||||||
|
return password2;
|
||||||
|
}
|
||||||
|
public void setPassword2(String password2) {
|
||||||
|
this.password2 = password2;
|
||||||
|
}
|
||||||
|
public String getPasswordHint() {
|
||||||
|
return passwordHint;
|
||||||
|
}
|
||||||
|
public void setPasswordHint(String passwordHint) {
|
||||||
|
this.passwordHint = passwordHint;
|
||||||
|
}
|
||||||
|
public String getPasswordCnsr() {
|
||||||
|
return passwordCnsr;
|
||||||
|
}
|
||||||
|
public void setPasswordCnsr(String passwordCnsr) {
|
||||||
|
this.passwordCnsr = passwordCnsr;
|
||||||
|
}
|
||||||
|
public String getUserSe() {
|
||||||
|
return userSe;
|
||||||
|
}
|
||||||
|
public void setUserSe(String userSe) {
|
||||||
|
this.userSe = userSe;
|
||||||
|
}
|
||||||
|
public String getOrgnztId() {
|
||||||
|
return orgnztId;
|
||||||
|
}
|
||||||
|
public void setOrgnztId(String orgnztId) {
|
||||||
|
this.orgnztId = orgnztId;
|
||||||
|
}
|
||||||
|
public String getOrgnztNm() {
|
||||||
|
return orgnztNm;
|
||||||
|
}
|
||||||
|
public void setOrgnztNm(String orgnztNm) {
|
||||||
|
this.orgnztNm = orgnztNm;
|
||||||
|
}
|
||||||
|
public String getUniqId() {
|
||||||
|
return uniqId;
|
||||||
|
}
|
||||||
|
public void setUniqId(String uniqId) {
|
||||||
|
this.uniqId = uniqId;
|
||||||
|
}
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
public String getIp() {
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
public void setIp(String ip) {
|
||||||
|
this.ip = ip;
|
||||||
|
}
|
||||||
|
public String getDn() {
|
||||||
|
return dn;
|
||||||
|
}
|
||||||
|
public void setDn(String dn) {
|
||||||
|
this.dn = dn;
|
||||||
|
}
|
||||||
|
public String getSiteId() {
|
||||||
|
return siteId;
|
||||||
|
}
|
||||||
|
public void setSiteId(String siteId) {
|
||||||
|
this.siteId = siteId;
|
||||||
|
}
|
||||||
|
public String getSiteNm() {
|
||||||
|
return siteNm;
|
||||||
|
}
|
||||||
|
public void setSiteNm(String siteNm) {
|
||||||
|
this.siteNm = siteNm;
|
||||||
|
}
|
||||||
|
public String getAuthority() {
|
||||||
|
return authority;
|
||||||
|
}
|
||||||
|
public void setAuthority(String authority) {
|
||||||
|
this.authority = authority;
|
||||||
|
}
|
||||||
|
public String getBeforeUrl() {
|
||||||
|
return beforeUrl;
|
||||||
|
}
|
||||||
|
public void setBeforeUrl(String beforeUrl) {
|
||||||
|
this.beforeUrl = beforeUrl;
|
||||||
|
}
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
public int getPassMiss() {
|
||||||
|
return passMiss;
|
||||||
|
}
|
||||||
|
public void setPassMiss(int passMiss) {
|
||||||
|
this.passMiss = passMiss;
|
||||||
|
}
|
||||||
|
public String getStatusAll() {
|
||||||
|
return statusAll;
|
||||||
|
}
|
||||||
|
public void setStatusAll(String statusAll) {
|
||||||
|
this.statusAll = statusAll;
|
||||||
|
}
|
||||||
|
public String getEmplyrSttusCode() {
|
||||||
|
return emplyrSttusCode;
|
||||||
|
}
|
||||||
|
public void setEmplyrSttusCode(String emplyrSttusCode) {
|
||||||
|
this.emplyrSttusCode = emplyrSttusCode;
|
||||||
|
}
|
||||||
|
public int getSnsIdCnt() {
|
||||||
|
return snsIdCnt;
|
||||||
|
}
|
||||||
|
public void setSnsIdCnt(int snsIdCnt) {
|
||||||
|
this.snsIdCnt = snsIdCnt;
|
||||||
|
}
|
||||||
|
public String getSnsSite() {
|
||||||
|
return snsSite;
|
||||||
|
}
|
||||||
|
public void setSnsSite(String snsSite) {
|
||||||
|
this.snsSite = snsSite;
|
||||||
|
}
|
||||||
|
public String getSnsId() {
|
||||||
|
return snsId;
|
||||||
|
}
|
||||||
|
public void setSnsId(String snsId) {
|
||||||
|
this.snsId = snsId;
|
||||||
|
}
|
||||||
|
public String getSnsEmail() {
|
||||||
|
return snsEmail;
|
||||||
|
}
|
||||||
|
public void setSnsEmail(String snsEmail) {
|
||||||
|
this.snsEmail = snsEmail;
|
||||||
|
}
|
||||||
|
public String getTel() {
|
||||||
|
return tel;
|
||||||
|
}
|
||||||
|
public void setTel(String tel) {
|
||||||
|
this.tel = tel;
|
||||||
|
}
|
||||||
|
public String getOrgnztNo() {
|
||||||
|
return orgnztNo;
|
||||||
|
}
|
||||||
|
public void setOrgnztNo(String orgnztNo) {
|
||||||
|
this.orgnztNo = orgnztNo;
|
||||||
|
}
|
||||||
|
public String getOrgnztPosi() {
|
||||||
|
return orgnztPosi;
|
||||||
|
}
|
||||||
|
public void setOrgnztPosi(String orgnztPosi) {
|
||||||
|
this.orgnztPosi = orgnztPosi;
|
||||||
|
}
|
||||||
|
public String getEmplNo() {
|
||||||
|
return emplNo;
|
||||||
|
}
|
||||||
|
public void setEmplNo(String emplNo) {
|
||||||
|
this.emplNo = emplNo;
|
||||||
|
}
|
||||||
|
public String getUserWork() {
|
||||||
|
return userWork;
|
||||||
|
}
|
||||||
|
public void setUserWork(String userWork) {
|
||||||
|
this.userWork = userWork;
|
||||||
|
}
|
||||||
|
public static long getSerialversionuid() {
|
||||||
|
return serialVersionUID;
|
||||||
|
}
|
||||||
|
public float getShortPrice() {
|
||||||
|
return shortPrice;
|
||||||
|
}
|
||||||
|
public void setShortPrice(float shortPrice) {
|
||||||
|
this.shortPrice = shortPrice;
|
||||||
|
}
|
||||||
|
public float getLongPrice() {
|
||||||
|
return longPrice;
|
||||||
|
}
|
||||||
|
public void setLongPrice(float longPrice) {
|
||||||
|
this.longPrice = longPrice;
|
||||||
|
}
|
||||||
|
public float getPicturePrice() {
|
||||||
|
return picturePrice;
|
||||||
|
}
|
||||||
|
public void setPicturePrice(float picturePrice) {
|
||||||
|
this.picturePrice = picturePrice;
|
||||||
|
}
|
||||||
|
public float getUserMoney() {
|
||||||
|
return userMoney;
|
||||||
|
}
|
||||||
|
public void setUserMoney(float userMoney) {
|
||||||
|
this.userMoney = userMoney;
|
||||||
|
}
|
||||||
|
public String getMberNm() {
|
||||||
|
return mberNm;
|
||||||
|
}
|
||||||
|
public void setMberNm(String mberNm) {
|
||||||
|
this.mberNm = mberNm;
|
||||||
|
}
|
||||||
|
public String getManagerNm() {
|
||||||
|
return managerNm;
|
||||||
|
}
|
||||||
|
public void setManagerNm(String managerNm) {
|
||||||
|
this.managerNm = managerNm;
|
||||||
|
}
|
||||||
|
public String getMoblphonNo() {
|
||||||
|
return moblphonNo;
|
||||||
|
}
|
||||||
|
public void setMoblphonNo(String moblphonNo) {
|
||||||
|
this.moblphonNo = moblphonNo;
|
||||||
|
}
|
||||||
|
public String getDept() {
|
||||||
|
return dept;
|
||||||
|
}
|
||||||
|
public void setDept(String dept) {
|
||||||
|
this.dept = dept;
|
||||||
|
}
|
||||||
|
public String getBirth() {
|
||||||
|
return birth;
|
||||||
|
}
|
||||||
|
public void setBirth(String birth) {
|
||||||
|
this.birth = birth;
|
||||||
|
}
|
||||||
|
public String getSexdstnCode() {
|
||||||
|
return sexdstnCode;
|
||||||
|
}
|
||||||
|
public void setSexdstnCode(String sexdstnCode) {
|
||||||
|
this.sexdstnCode = sexdstnCode;
|
||||||
|
}
|
||||||
|
public String getNationality() {
|
||||||
|
return nationality;
|
||||||
|
}
|
||||||
|
public void setNationality(String nationality) {
|
||||||
|
this.nationality = nationality;
|
||||||
|
}
|
||||||
|
public String getCrtfcDnValue() {
|
||||||
|
return crtfcDnValue;
|
||||||
|
}
|
||||||
|
public void setCrtfcDnValue(String crtfcDnValue) {
|
||||||
|
this.crtfcDnValue = crtfcDnValue;
|
||||||
|
}
|
||||||
|
public String getAdminId() {
|
||||||
|
return adminId;
|
||||||
|
}
|
||||||
|
public void setAdminId(String adminId) {
|
||||||
|
this.adminId = adminId;
|
||||||
|
}
|
||||||
|
public String getCheckNo() {
|
||||||
|
return checkNo;
|
||||||
|
}
|
||||||
|
public void setCheckNo(String checkNo) {
|
||||||
|
this.checkNo = checkNo;
|
||||||
|
}
|
||||||
|
public String getOuterCertYn() {
|
||||||
|
return outerCertYn;
|
||||||
|
}
|
||||||
|
public void setOuterCertYn(String outerCertYn) {
|
||||||
|
this.outerCertYn = outerCertYn;
|
||||||
|
}
|
||||||
|
public String getSecuLoginFlag() {
|
||||||
|
return secuLoginFlag;
|
||||||
|
}
|
||||||
|
public void setSecuLoginFlag(String secuLoginFlag) {
|
||||||
|
this.secuLoginFlag = secuLoginFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
129
src/main/java/itn/com/cmm/MjonMsgSendVO.java
Normal file
129
src/main/java/itn/com/cmm/MjonMsgSendVO.java
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@ToString
|
||||||
|
public class MjonMsgSendVO{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 수신자번호
|
||||||
|
*/
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : [*이름*] - 치환문자
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : [*1*] - 치환문자
|
||||||
|
*/
|
||||||
|
private String rep1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : [*2*] - 치환문자
|
||||||
|
*/
|
||||||
|
private String rep2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : [*3*] - 치환문자
|
||||||
|
*/
|
||||||
|
private String rep3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : [*4*] - 치환문자
|
||||||
|
*/
|
||||||
|
private String rep4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 문자ID
|
||||||
|
*/
|
||||||
|
private String msgId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 전송그룹ID (대량문자의 경우 하나의 그룹으로 세팅)
|
||||||
|
*/
|
||||||
|
private String msgGroupId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 문자온 일반회원ID
|
||||||
|
*/
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
|
||||||
|
*/
|
||||||
|
private String callFrom;
|
||||||
|
/**
|
||||||
|
* @description : 수신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
|
||||||
|
*/
|
||||||
|
private String callTo;
|
||||||
|
/**
|
||||||
|
* @description : 예약 발송일시
|
||||||
|
*/
|
||||||
|
private String reqDate;
|
||||||
|
/**
|
||||||
|
* @description :전송사(04:다우, 05:JJ, 07:IVT, 01:아이하트 , 02:현대퓨처넷, 03:아이엠오)
|
||||||
|
*/
|
||||||
|
private String agentCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : MMS용 메시지제목
|
||||||
|
*/
|
||||||
|
private String subject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : SMS용 메시지본문
|
||||||
|
*/
|
||||||
|
private String smsTxt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 메세지타입(4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)
|
||||||
|
*/
|
||||||
|
private String msgType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 첨부파일 갯수
|
||||||
|
*/
|
||||||
|
private String fileCnt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 파일이름1
|
||||||
|
*/
|
||||||
|
private String filePath1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 파일이름2
|
||||||
|
*/
|
||||||
|
private String filePath2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 파일이름3
|
||||||
|
*/
|
||||||
|
private String filePath3;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : event 여부 / group tb에 넣는 용도 / 기본값 N
|
||||||
|
*/
|
||||||
|
private String eventYn="N";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 개별단가
|
||||||
|
*/
|
||||||
|
private String eachPrice;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
37
src/main/java/itn/com/cmm/OptimalMsgResultDTO.java
Normal file
37
src/main/java/itn/com/cmm/OptimalMsgResultDTO.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import itn.let.mjo.event.service.MjonEventVO;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : OptimalMsgResultDTO.java
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : 이벤트 vo 생성 및 종료 vo 생성
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2024.11.26 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@ToString
|
||||||
|
@Builder
|
||||||
|
public class OptimalMsgResultDTO{
|
||||||
|
|
||||||
|
private List<MjonMsgSendVO> optimalMsgList;
|
||||||
|
private MjonEventVO eventInfo;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
39
src/main/java/itn/com/cmm/ReadVO.java
Normal file
39
src/main/java/itn/com/cmm/ReadVO.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class ReadVO implements Serializable {
|
||||||
|
|
||||||
|
private String menuNo = ""; //메뉴 번호
|
||||||
|
|
||||||
|
private String readId = ""; //읽음처리 ID
|
||||||
|
|
||||||
|
private String loginId = "";//로그인 ID
|
||||||
|
|
||||||
|
public String getMenuNo() {
|
||||||
|
return menuNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMenuNo(String menuNo) {
|
||||||
|
this.menuNo = menuNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReadId() {
|
||||||
|
return readId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReadId(String readId) {
|
||||||
|
this.readId = readId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLoginId() {
|
||||||
|
return loginId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoginId(String loginId) {
|
||||||
|
this.loginId = loginId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
65
src/main/java/itn/com/cmm/RestResponse.java
Normal file
65
src/main/java/itn/com/cmm/RestResponse.java
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @fileName : RestResponse.java
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2022.07.04
|
||||||
|
* @description : RestApi 응답에 사용할 Class
|
||||||
|
* @TODO :
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2022.07.04 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* • 1XX : 조건부 응답
|
||||||
|
* • 2XX : 성공
|
||||||
|
* • 3XX : 리다이렉션 완료
|
||||||
|
* • 4XX : 요청 오류
|
||||||
|
* • 500 : 서버 오류
|
||||||
|
*
|
||||||
|
* 참고 : https://km0830.tistory.com/33
|
||||||
|
*
|
||||||
|
* ====== 자주 사용하는 코드 =====
|
||||||
|
* 200 : Ok : 서버가 클라이언트의 요청을 성공적으로 처리, 웹 페이지에서는 페이지 요청이 정상적으로 완료 (Ok)
|
||||||
|
* 400 : Bad Request : 잘못 요청 (Bad Request)
|
||||||
|
* 401 : Unauthorized : 권한 없음, 예를 들면, 로그인 페이지가 필요한 페이지를 로그인 없이 접속하려는 경우 반환되는 코드 (인증 실패) (Unauthorized)
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class RestResponse {
|
||||||
|
|
||||||
|
private HttpStatus status;
|
||||||
|
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
private Object data;
|
||||||
|
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
public RestResponse(HttpStatus status, String msg, Object data) {
|
||||||
|
this.status = status;
|
||||||
|
this.msg = msg;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
121
src/main/java/itn/com/cmm/SessionVO.java
Normal file
121
src/main/java/itn/com/cmm/SessionVO.java
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 세션 VO 클래스
|
||||||
|
* @author 공통서비스 개발팀 박지욱
|
||||||
|
* @since 2009.03.06
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.03.06 박지욱 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class SessionVO implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -2848741427493626376L;
|
||||||
|
|
||||||
|
/** 아이디 */
|
||||||
|
private String sUserId;
|
||||||
|
/** 이름 */
|
||||||
|
private String sUserNm;
|
||||||
|
/** 이메일 */
|
||||||
|
private String sEmail;
|
||||||
|
/** 사용자구분 */
|
||||||
|
private String sUserSe;
|
||||||
|
/** 조직(부서)ID */
|
||||||
|
private String orgnztId;
|
||||||
|
/** 고유아이디 */
|
||||||
|
private String uniqId;
|
||||||
|
/**
|
||||||
|
* sUserId attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSUserId() {
|
||||||
|
return sUserId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sUserId attribute 값을 설정한다.
|
||||||
|
* @param sUserId String
|
||||||
|
*/
|
||||||
|
public void setSUserId(String userId) {
|
||||||
|
sUserId = userId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sUserNm attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSUserNm() {
|
||||||
|
return sUserNm;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sUserNm attribute 값을 설정한다.
|
||||||
|
* @param sUserNm String
|
||||||
|
*/
|
||||||
|
public void setSUserNm(String userNm) {
|
||||||
|
sUserNm = userNm;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sEmail attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSEmail() {
|
||||||
|
return sEmail;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sEmail attribute 값을 설정한다.
|
||||||
|
* @param sEmail String
|
||||||
|
*/
|
||||||
|
public void setSEmail(String email) {
|
||||||
|
sEmail = email;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sUserSe attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSUserSe() {
|
||||||
|
return sUserSe;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* sUserSe attribute 값을 설정한다.
|
||||||
|
* @param sUserSe String
|
||||||
|
*/
|
||||||
|
public void setSUserSe(String userSe) {
|
||||||
|
sUserSe = userSe;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* orgnztId attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getOrgnztId() {
|
||||||
|
return orgnztId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* orgnztId attribute 값을 설정한다.
|
||||||
|
* @param orgnztId String
|
||||||
|
*/
|
||||||
|
public void setOrgnztId(String orgnztId) {
|
||||||
|
this.orgnztId = orgnztId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* uniqId attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getUniqId() {
|
||||||
|
return uniqId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* uniqId attribute 값을 설정한다.
|
||||||
|
* @param uniqId String
|
||||||
|
*/
|
||||||
|
public void setUniqId(String uniqId) {
|
||||||
|
this.uniqId = uniqId;
|
||||||
|
}
|
||||||
|
}
|
||||||
139
src/main/java/itn/com/cmm/UserVO.java
Normal file
139
src/main/java/itn/com/cmm/UserVO.java
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
package itn.com.cmm;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : UserVO.java
|
||||||
|
* @Description : Login VO class
|
||||||
|
* @Modification Information
|
||||||
|
* @
|
||||||
|
* @ 수정일 수정자 수정내용
|
||||||
|
* @ ------- -------- ---------------------------
|
||||||
|
* @ 2018.09.27 ITN 최초 생성
|
||||||
|
*
|
||||||
|
* @author ITN
|
||||||
|
* @since 2018.09.27
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class UserVO implements Serializable{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 이름 */
|
||||||
|
private String name;
|
||||||
|
/** 이메일주소 */
|
||||||
|
private String email;
|
||||||
|
/** 사용자구분 */
|
||||||
|
private String userSe;
|
||||||
|
/** 고유아이디 */
|
||||||
|
private String uniqId;
|
||||||
|
/** 로그인 후 이동할 페이지 */
|
||||||
|
private String url;
|
||||||
|
/** 사용자 IP정보 */
|
||||||
|
private String ip;
|
||||||
|
/** GPKI인증 DN */
|
||||||
|
private String dn;
|
||||||
|
/** 핸드폰인증 DN */
|
||||||
|
private String mblDn;
|
||||||
|
/**
|
||||||
|
* @return the name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param name the name to set
|
||||||
|
*/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the email
|
||||||
|
*/
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param email the email to set
|
||||||
|
*/
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the userSe
|
||||||
|
*/
|
||||||
|
public String getUserSe() {
|
||||||
|
return userSe;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param userSe the userSe to set
|
||||||
|
*/
|
||||||
|
public void setUserSe(String userSe) {
|
||||||
|
this.userSe = userSe;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the uniqId
|
||||||
|
*/
|
||||||
|
public String getUniqId() {
|
||||||
|
return uniqId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param uniqId the uniqId to set
|
||||||
|
*/
|
||||||
|
public void setUniqId(String uniqId) {
|
||||||
|
this.uniqId = uniqId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the url
|
||||||
|
*/
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param url the url to set
|
||||||
|
*/
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the ip
|
||||||
|
*/
|
||||||
|
public String getIp() {
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param ip the ip to set
|
||||||
|
*/
|
||||||
|
public void setIp(String ip) {
|
||||||
|
this.ip = ip;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the dn
|
||||||
|
*/
|
||||||
|
public String getDn() {
|
||||||
|
return dn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param dn the dn to set
|
||||||
|
*/
|
||||||
|
public void setDn(String dn) {
|
||||||
|
this.dn = dn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return the mblDn
|
||||||
|
*/
|
||||||
|
public String getMblDn() {
|
||||||
|
return mblDn;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param mblDn the mblDn to set
|
||||||
|
*/
|
||||||
|
public void setMblDn(String mblDn) {
|
||||||
|
this.mblDn = mblDn;
|
||||||
|
}
|
||||||
|
}
|
||||||
106
src/main/java/itn/com/cmm/aspect/LoggerAspect.java
Normal file
106
src/main/java/itn/com/cmm/aspect/LoggerAspect.java
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
package itn.com.cmm.aspect;
|
||||||
|
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import itn.com.cmm.util.IpUtil;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class LoggerAspect {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(LoggerAspect.class);
|
||||||
|
|
||||||
|
|
||||||
|
public Object methodLogger(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
|
||||||
|
try {
|
||||||
|
StringBuffer logBuffer = new StringBuffer();
|
||||||
|
List<Object> logList = Lists.newArrayList();
|
||||||
|
|
||||||
|
|
||||||
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); // request 정보를 가져온다.
|
||||||
|
|
||||||
|
String controllerName = proceedingJoinPoint.getSignature().getDeclaringType().getSimpleName();
|
||||||
|
String methodName = proceedingJoinPoint.getSignature().getName();
|
||||||
|
logBuffer.append("\n┌ [●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● 요청정보 ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●]\n");
|
||||||
|
logBuffer.append("│ [Method] URL : [{}] {}\n");
|
||||||
|
logList.add(request.getMethod());
|
||||||
|
logList.add(request.getRequestURI());
|
||||||
|
|
||||||
|
logBuffer.append("│ Request IP : {}\n");
|
||||||
|
logList.add(IpUtil.getClientIP(request));
|
||||||
|
|
||||||
|
logBuffer.append("│ Request Browser : {}\n");
|
||||||
|
logList.add(IpUtil.getBrowser(request));
|
||||||
|
|
||||||
|
logBuffer.append("│ Controller : [{}] - [{}] \n");
|
||||||
|
logList.add(controllerName);
|
||||||
|
logList.add(methodName);
|
||||||
|
|
||||||
|
logBuffer.append("│ 요청Param : {}\n");
|
||||||
|
logList.add(getParams(request));
|
||||||
|
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
|
||||||
|
Object result = proceedingJoinPoint.proceed();
|
||||||
|
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
logBuffer.append("│ Time : [{}] sec\n");
|
||||||
|
logList.add( (double)(end - start)/1000d );
|
||||||
|
|
||||||
|
if( result instanceof ModelAndView ) {
|
||||||
|
logBuffer.append("│ Result : {}\n");
|
||||||
|
logList.add(result);
|
||||||
|
}else if( result instanceof String ) {
|
||||||
|
logBuffer.append("│ View : {}\n");
|
||||||
|
logList.add(result);
|
||||||
|
} else {
|
||||||
|
logBuffer.append("│ Result : {}\n");
|
||||||
|
logList.add(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
proceedingJoinPoint.getArgs();
|
||||||
|
|
||||||
|
logBuffer.append("└ [●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●]");
|
||||||
|
if(result!=null && result.toString().indexOf("web/com")<0) { // heder, footer, navi 로그는 찍지 않음.
|
||||||
|
log.info(logBuffer.toString(), logList.toArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Throwable throwable) {
|
||||||
|
throwable.printStackTrace();
|
||||||
|
throw throwable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* request 에 담긴 정보를 JSONObject 형태로 반환한다.
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private static JSONObject getParams(HttpServletRequest request) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
Enumeration<String> params = request.getParameterNames();
|
||||||
|
while (params.hasMoreElements()) {
|
||||||
|
String param = params.nextElement();
|
||||||
|
String replaceParam = param.replaceAll("\\.", "-");
|
||||||
|
jsonObject.put(replaceParam, request.getParameter(param));
|
||||||
|
}
|
||||||
|
return jsonObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
src/main/java/itn/com/cmm/captcha/AudioCaptCha.java
Normal file
40
src/main/java/itn/com/cmm/captcha/AudioCaptCha.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package itn.com.cmm.captcha;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import nl.captcha.Captcha;
|
||||||
|
import nl.captcha.audio.AudioCaptcha;
|
||||||
|
import nl.captcha.audio.producer.VoiceProducer;
|
||||||
|
import nl.captcha.servlet.CaptchaServletUtil;
|
||||||
|
|
||||||
|
public class AudioCaptCha {
|
||||||
|
public void getAudioCaptCha(HttpServletRequest req, HttpServletResponse resp, String answer) throws IOException
|
||||||
|
{
|
||||||
|
HttpSession session = req.getSession();
|
||||||
|
Captcha captcha = (Captcha) session.getAttribute(Captcha.NAME);
|
||||||
|
String getAnswer = answer;
|
||||||
|
AudioCaptcha audiocaptcha = null;
|
||||||
|
if ( getAnswer == null || "".equals(getAnswer) ) getAnswer = captcha.getAnswer();
|
||||||
|
|
||||||
|
String lan = req.getParameter("lan");
|
||||||
|
if( lan != null && "kor".equals(lan)) {
|
||||||
|
VoiceProducer vProd = new SetKorVoiceProducer(); //한글 음성을 생성해주는 객체 생성
|
||||||
|
audiocaptcha = new AudioCaptcha.Builder()
|
||||||
|
.addAnswer(new SetTextProducer(getAnswer))
|
||||||
|
.addVoice(vProd) //한글음성생성기를 AudioCaptcha에 적용
|
||||||
|
.addNoise()
|
||||||
|
.build();
|
||||||
|
} else {
|
||||||
|
audiocaptcha = new AudioCaptcha.Builder()
|
||||||
|
.addAnswer(new SetTextProducer(getAnswer))
|
||||||
|
.addNoise()
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
String agent = req.getParameter("agent"); //브라우저마다 응답을 달리해야할경우 이용.
|
||||||
|
CaptchaServletUtil.writeAudio(resp, audiocaptcha.getChallenge());
|
||||||
|
}
|
||||||
|
}
|
||||||
66
src/main/java/itn/com/cmm/captcha/CaptCha.java
Normal file
66
src/main/java/itn/com/cmm/captcha/CaptCha.java
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package itn.com.cmm.captcha;
|
||||||
|
|
||||||
|
import static nl.captcha.Captcha.NAME;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import nl.captcha.Captcha;
|
||||||
|
import nl.captcha.backgrounds.GradiatedBackgroundProducer;
|
||||||
|
import nl.captcha.gimpy.DropShadowGimpyRenderer;
|
||||||
|
import nl.captcha.servlet.CaptchaServletUtil;
|
||||||
|
import nl.captcha.text.producer.NumbersAnswerProducer;
|
||||||
|
import nl.captcha.text.renderer.DefaultWordRenderer;
|
||||||
|
|
||||||
|
public class CaptCha {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static int _width = 150; //이미지 가로크기
|
||||||
|
private static int _height = 50; //이미지 높이
|
||||||
|
private static int _fontsize = 44; //폰트크기
|
||||||
|
|
||||||
|
public CaptCha() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getCaptCha(HttpServletRequest req, HttpServletResponse resp)
|
||||||
|
throws IOException {
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 폰트 설정 =========================================================
|
||||||
|
List<Font> fontList = new ArrayList<Font>();
|
||||||
|
fontList.add(new Font("", Font.HANGING_BASELINE, 40));//
|
||||||
|
fontList.add(new Font("Courier", Font.ITALIC, 40));
|
||||||
|
fontList.add(new Font("", Font.PLAIN, 40));
|
||||||
|
|
||||||
|
List<Color> colorList = new ArrayList<Color>();
|
||||||
|
// colorList.add(Color.green);
|
||||||
|
// colorList.add(Color.pink);
|
||||||
|
// colorList.add(Color.gray);
|
||||||
|
colorList.add(Color.black);
|
||||||
|
// colorList.add(Color.blue);
|
||||||
|
// 폰트 설정 =========================================================
|
||||||
|
|
||||||
|
Captcha captcha = new Captcha.Builder( _width, _height)
|
||||||
|
// .addText(wordRenderer)
|
||||||
|
.addText(new NumbersAnswerProducer(6), //6자리 숫자로 된 문자를 추가
|
||||||
|
new DefaultWordRenderer(colorList, fontList)) //글자 꾸미기(색상, 폰트)
|
||||||
|
.gimp(new DropShadowGimpyRenderer()).gimp()
|
||||||
|
// BlockGimpyRenderer,FishEyeGimpyRenderer,RippleGimpyRenderer,ShearGimpyRenderer,StretchGimpyRenderer
|
||||||
|
.addNoise().addNoise().addBorder()
|
||||||
|
.addBackground(new GradiatedBackgroundProducer())
|
||||||
|
// FlatColorBackgroundProducer,SquigglesBackgroundProducer,TransparentBackgroundProducer
|
||||||
|
.build();
|
||||||
|
|
||||||
|
req.getSession().setAttribute(NAME, captcha);
|
||||||
|
CaptchaServletUtil.writeImage(resp, captcha.getImage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
59
src/main/java/itn/com/cmm/captcha/CaptchaUtil.java
Normal file
59
src/main/java/itn/com/cmm/captcha/CaptchaUtil.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package itn.com.cmm.captcha;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import nl.captcha.Captcha;
|
||||||
|
import nl.captcha.audio.AudioCaptcha;
|
||||||
|
import nl.captcha.audio.producer.VoiceProducer;
|
||||||
|
import nl.captcha.backgrounds.GradiatedBackgroundProducer;
|
||||||
|
import nl.captcha.servlet.CaptchaServletUtil;
|
||||||
|
import nl.captcha.text.producer.NumbersAnswerProducer;
|
||||||
|
|
||||||
|
public class CaptchaUtil {
|
||||||
|
public CaptchaUtil() {
|
||||||
|
|
||||||
|
}
|
||||||
|
public void captchaImg(HttpServletRequest request, HttpServletResponse response){
|
||||||
|
Captcha captcha = new Captcha.Builder(200, 60)
|
||||||
|
.addText(new NumbersAnswerProducer(6))
|
||||||
|
.addNoise().addNoise().addNoise()
|
||||||
|
.addBackground(new GradiatedBackgroundProducer())
|
||||||
|
.addBorder()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
response.setHeader("Cache-Control", "no-cache");
|
||||||
|
response.setDateHeader("Expires", 0);
|
||||||
|
response.setHeader("Pragma", "no-cache");
|
||||||
|
response.setDateHeader("Max-Age", 0);
|
||||||
|
response.setContentType("image/png");
|
||||||
|
|
||||||
|
CaptchaServletUtil.writeImage(response, captcha.getImage());;
|
||||||
|
request.getSession().setAttribute("captcha", captcha.getAnswer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void captchaAudio(HttpServletRequest request, HttpServletResponse response){
|
||||||
|
String getAnswer = (String) request.getSession().getAttribute("captcha");
|
||||||
|
VoiceProducer vProd = new SetKorVoiceProducer(); //한글 음성을 생성해주는 객체 생성
|
||||||
|
|
||||||
|
/* AudioCaptcha ac = new AudioCaptcha.Builder()
|
||||||
|
.addAnswer(new SetTextProducer(getAnswer))
|
||||||
|
.addVoice()
|
||||||
|
.addNoise()
|
||||||
|
.build();*/
|
||||||
|
|
||||||
|
AudioCaptcha ac = new AudioCaptcha.Builder()
|
||||||
|
.addAnswer(new SetTextProducer(getAnswer))
|
||||||
|
.addVoice(vProd)
|
||||||
|
.addNoise()
|
||||||
|
.build() ;
|
||||||
|
|
||||||
|
response.setHeader("Cache-Control", "no-cache");
|
||||||
|
response.setDateHeader("Expires", 0);
|
||||||
|
response.setHeader("Pragma", "no-cache");
|
||||||
|
response.setDateHeader("Max-Age", 0);
|
||||||
|
|
||||||
|
CaptchaServletUtil.writeAudio(response, ac.getChallenge());;
|
||||||
|
request.getSession().setAttribute("captcha", ac.getAnswer());
|
||||||
|
}
|
||||||
|
}
|
||||||
50
src/main/java/itn/com/cmm/captcha/SetKorVoiceProducer.java
Normal file
50
src/main/java/itn/com/cmm/captcha/SetKorVoiceProducer.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package itn.com.cmm.captcha;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import nl.captcha.audio.Sample;
|
||||||
|
import nl.captcha.audio.producer.VoiceProducer;
|
||||||
|
import nl.captcha.util.FileUtil;
|
||||||
|
|
||||||
|
public class SetKorVoiceProducer implements VoiceProducer
|
||||||
|
{
|
||||||
|
private static final Map<Integer, String> DEFAULT_VOICES_MAP;
|
||||||
|
|
||||||
|
static {
|
||||||
|
DEFAULT_VOICES_MAP = new HashMap<Integer, String>();
|
||||||
|
StringBuilder sb;
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
sb = new StringBuilder("/sounds/ko/numbers/");
|
||||||
|
sb.append(i);
|
||||||
|
sb.append(".wav");
|
||||||
|
DEFAULT_VOICES_MAP.put(i, sb.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Map<Integer, String> _voices;
|
||||||
|
|
||||||
|
public SetKorVoiceProducer() {
|
||||||
|
this(DEFAULT_VOICES_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SetKorVoiceProducer(Map<Integer, String> voices) {
|
||||||
|
_voices = voices;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Sample getVocalization(char num) {
|
||||||
|
try {
|
||||||
|
Integer.parseInt(num + "");
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new IllegalArgumentException("Expected <num> to be a number, got '" + num + "' instead.",e);
|
||||||
|
}
|
||||||
|
|
||||||
|
int idx = Integer.parseInt(num + "");
|
||||||
|
String filename = _voices.get(idx);
|
||||||
|
return FileUtil.readSample(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
19
src/main/java/itn/com/cmm/captcha/SetTextProducer.java
Normal file
19
src/main/java/itn/com/cmm/captcha/SetTextProducer.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package itn.com.cmm.captcha;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 전달받은 문자열을 그대로 오디오캡차가 이용할수있도록 생성한 클래스
|
||||||
|
*/
|
||||||
|
import nl.captcha.text.producer.TextProducer;
|
||||||
|
|
||||||
|
public class SetTextProducer implements TextProducer {
|
||||||
|
private final String _getAnswer;
|
||||||
|
public SetTextProducer(String getAnswer){
|
||||||
|
_getAnswer = getAnswer;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getText() {
|
||||||
|
return _getAnswer;
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/main/java/itn/com/cmm/filter/HTMLTagFilter.java
Normal file
46
src/main/java/itn/com/cmm/filter/HTMLTagFilter.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.filter;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
public class HTMLTagFilter implements Filter{
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private FilterConfig config;
|
||||||
|
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response,
|
||||||
|
FilterChain chain) throws IOException, ServletException {
|
||||||
|
|
||||||
|
chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(FilterConfig config) throws ServletException {
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.filter;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
|
|
||||||
|
public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper {
|
||||||
|
|
||||||
|
public HTMLTagFilterRequestWrapper(HttpServletRequest request) {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getParameterValues(String parameter) {
|
||||||
|
|
||||||
|
String[] values = super.getParameterValues(parameter);
|
||||||
|
|
||||||
|
if(values==null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
if (values[i] != null) {
|
||||||
|
StringBuffer strBuff = new StringBuffer();
|
||||||
|
for (int j = 0; j < values[i].length(); j++) {
|
||||||
|
char c = values[i].charAt(j);
|
||||||
|
switch (c) {
|
||||||
|
case '<':
|
||||||
|
strBuff.append("<");
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
strBuff.append(">");
|
||||||
|
break;
|
||||||
|
//case '&':
|
||||||
|
//strBuff.append("&");
|
||||||
|
//break;
|
||||||
|
case '"':
|
||||||
|
strBuff.append(""");
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
strBuff.append("'");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
strBuff.append(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
values[i] = strBuff.toString();
|
||||||
|
} else {
|
||||||
|
values[i] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParameter(String parameter) {
|
||||||
|
|
||||||
|
String value = super.getParameter(parameter);
|
||||||
|
|
||||||
|
if(value==null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuffer strBuff = new StringBuffer();
|
||||||
|
|
||||||
|
for (int i = 0; i < value.length(); i++) {
|
||||||
|
char c = value.charAt(i);
|
||||||
|
switch (c) {
|
||||||
|
case '<':
|
||||||
|
strBuff.append("<");
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
strBuff.append(">");
|
||||||
|
break;
|
||||||
|
case '&':
|
||||||
|
strBuff.append("&");
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
strBuff.append(""");
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
strBuff.append("'");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
strBuff.append(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
value = strBuff.toString();
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
48
src/main/java/itn/com/cmm/filter/XssFilter.java
Normal file
48
src/main/java/itn/com/cmm/filter/XssFilter.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.filter;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
public class XssFilter implements Filter{
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private FilterConfig config;
|
||||||
|
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response,
|
||||||
|
FilterChain chain) throws IOException, ServletException {
|
||||||
|
ServletContext context = config.getServletContext();
|
||||||
|
chain.doFilter(new XssFilterRequestWrapper((HttpServletRequest)request), response);
|
||||||
|
//chain.doFilter(new XssFilterRequestWrapper((HttpServletRequest)request , response , context ), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(FilterConfig config) throws ServletException {
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
this.config = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
151
src/main/java/itn/com/cmm/filter/XssFilterRequestWrapper.java
Normal file
151
src/main/java/itn/com/cmm/filter/XssFilterRequestWrapper.java
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.filter;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
|
|
||||||
|
public class XssFilterRequestWrapper extends HttpServletRequestWrapper {
|
||||||
|
|
||||||
|
ServletContext context ;
|
||||||
|
HttpServletRequest request ;
|
||||||
|
ServletResponse response;
|
||||||
|
|
||||||
|
public XssFilterRequestWrapper(HttpServletRequest request) {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public XssFilterRequestWrapper(HttpServletRequest request, ServletContext context) {
|
||||||
|
super(request);
|
||||||
|
this.context = context ;
|
||||||
|
this.request = request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public XssFilterRequestWrapper(HttpServletRequest request, ServletResponse response, ServletContext context) {
|
||||||
|
super(request);
|
||||||
|
this.context = context ;
|
||||||
|
this.request = request;
|
||||||
|
this.response = response ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getParameterValues(String parameter) {
|
||||||
|
|
||||||
|
String[] values = super.getParameterValues(parameter);
|
||||||
|
|
||||||
|
if(values==null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = values.length;
|
||||||
|
String[] encodedValues = new String[count];
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
encodedValues[i] = cleanXSS(values[i]);
|
||||||
|
}
|
||||||
|
return encodedValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParameter(String parameter) {
|
||||||
|
String value = super.getParameter(parameter);
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return cleanXSS(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeader(String name) {
|
||||||
|
String value = super.getHeader(name);
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
return cleanXSS(value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String cleanXSS(String test_str) {
|
||||||
|
// 특수 구문 필터링 (데이터베이스가 Oracle 인 경우)
|
||||||
|
|
||||||
|
String test_str_low= test_str.toLowerCase();
|
||||||
|
if(test_str_low.contains("union")||
|
||||||
|
test_str_low.contains("select") ||
|
||||||
|
test_str_low.contains("insert") ||
|
||||||
|
test_str_low.contains("drop") ||
|
||||||
|
test_str_low.contains("update") ||
|
||||||
|
test_str_low.contains("delete") ||
|
||||||
|
test_str_low.contains("join") ||
|
||||||
|
test_str_low.contains("from") ||
|
||||||
|
test_str_low.contains("where") ||
|
||||||
|
test_str_low.contains("substr") ||
|
||||||
|
test_str_low.contains("user_tables")||
|
||||||
|
test_str_low.contains("script")||
|
||||||
|
test_str_low.contains("<")||
|
||||||
|
test_str_low.contains(">")||
|
||||||
|
test_str_low.contains("alert")||
|
||||||
|
test_str_low.contains("javascript")||
|
||||||
|
test_str_low.contains("=")||
|
||||||
|
test_str_low.contains("!")||
|
||||||
|
test_str_low.contains("or")||
|
||||||
|
test_str_low.contains("user_tables")||
|
||||||
|
test_str_low.contains("\\(")||
|
||||||
|
test_str_low.contains("\\)")||
|
||||||
|
test_str_low.contains("user_tables")||
|
||||||
|
test_str_low.contains("<") ||
|
||||||
|
test_str_low.contains("\"") ||
|
||||||
|
test_str_low.contains("%") ||
|
||||||
|
test_str_low.contains("()") ||
|
||||||
|
test_str_low.contains("+") ||
|
||||||
|
test_str_low.contains("%") ||
|
||||||
|
test_str_low.contains(">")
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
try {
|
||||||
|
context.getRequestDispatcher("/blank.do").forward(request, response);
|
||||||
|
} catch (ServletException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
test_str = test_str_low;
|
||||||
|
test_str = test_str.replaceAll("union", "q-union");
|
||||||
|
test_str = test_str.replaceAll("select", "q-select");
|
||||||
|
test_str = test_str.replaceAll("insert", "q-insert");
|
||||||
|
test_str = test_str.replaceAll("drop", "q-drop");
|
||||||
|
test_str = test_str.replaceAll("update", "q-update");
|
||||||
|
test_str = test_str.replaceAll("delete", "q-delete");
|
||||||
|
test_str = test_str.replaceAll("and", "q-and");
|
||||||
|
test_str = test_str.replaceAll("or", "q-or");
|
||||||
|
test_str = test_str.replaceAll("join", "q-join");
|
||||||
|
test_str = test_str.replaceAll("substr", "q-substr");
|
||||||
|
test_str = test_str.replaceAll("from", "q-from");
|
||||||
|
test_str = test_str.replaceAll("where", "q-where");
|
||||||
|
test_str = test_str.replaceAll("declare", "q-declare");
|
||||||
|
test_str = test_str.replaceAll("openrowset", "q-openrowset");
|
||||||
|
test_str = test_str.replaceAll("user_tables","q-user_tables");
|
||||||
|
test_str = test_str.replaceAll("user_tab_columns","q-user_tab_columns");
|
||||||
|
test_str = test_str.replaceAll("table_name","q-table_name");
|
||||||
|
test_str = test_str.replaceAll("column_name","q-column_name");
|
||||||
|
test_str = test_str.replaceAll("row_num","q-row_num");
|
||||||
|
}
|
||||||
|
return test_str ;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,269 @@
|
|||||||
|
package itn.com.cmm.interceptor;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||||
|
|
||||||
|
import com.google.common.net.InetAddresses;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||||
|
import itn.com.cmm.LoginVO;
|
||||||
|
import itn.com.uss.olh.hpc.service.HackIpService;
|
||||||
|
import itn.com.uss.olh.hpc.service.HackIpVO;
|
||||||
|
import itn.let.sym.log.clg.service.EgovLoginLogService;
|
||||||
|
import itn.let.sym.log.clg.service.LoginLog;
|
||||||
|
|
||||||
|
public class IPIgnoreInterceptorHandler extends HandlerInterceptorAdapter{
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private HackIpService hackIpService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EgovLoginLogService loginLogService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
|
||||||
|
String userIP = this.getClientIP(request);
|
||||||
|
boolean v_ret = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
System.out.println("request.getRequestURI()");
|
||||||
|
System.out.println(request.getRequestURI());
|
||||||
|
//ignoreIp
|
||||||
|
//오류콜에 대해서만 IP 체크를 한다
|
||||||
|
//정상적인 경우는 MainController.java의 firstSiteCheck 에서 확인함
|
||||||
|
if (request.getRequestURI().indexOf("web/error/errorLogInsert")>-1) {
|
||||||
|
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle-check");
|
||||||
|
|
||||||
|
HackIpVO hackIpVO = new HackIpVO();
|
||||||
|
hackIpVO.setIgnoreIp(userIP);
|
||||||
|
|
||||||
|
int i_ignoreCnt = hackIpService.selectIgnoreIpCnt(hackIpVO);
|
||||||
|
|
||||||
|
//System.out.println("result=="+hackIpService.selectIgnoreIpCnt(hackIpVO));
|
||||||
|
|
||||||
|
if (i_ignoreCnt>0) {
|
||||||
|
//제한 아이피인 경우는 화면 안나옴 처리
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle");
|
||||||
|
System.out.println("preHandle4==="+userIP+" is ignored");
|
||||||
|
v_ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(request.getRequestURI().indexOf("ListAjax.do")>-1
|
||||||
|
|| request.getRequestURI().indexOf("ViewAjax.do")>-1
|
||||||
|
|| request.getRequestURI().indexOf("DataAjax.do")>-1
|
||||||
|
|| request.getRequestURI().indexOf("web/cop/bbs/NoticeDetail.do")>-1
|
||||||
|
|| request.getRequestURI().indexOf("insertEditImageAjax")>-1
|
||||||
|
|| request.getRequestURI().indexOf("selectSwearWordFilterAjax")>-1
|
||||||
|
|| request.getRequestURI().indexOf("uat/uia/actionMain")>-1
|
||||||
|
|| request.getRequestURI().indexOf("web/cop/bbs/deleteBoardArticle")>-1
|
||||||
|
|| request.getRequestURI().indexOf("common/error")>-1
|
||||||
|
|| request.getRequestURI().indexOf("cmm/fms/getImage2")>-1
|
||||||
|
|| request.getRequestURI().indexOf("MapUrl")>-1
|
||||||
|
|| request.getRequestURI().indexOf("uss/ion/fms/FmsFileInsertAjax")>-1
|
||||||
|
|| request.getRequestURI().indexOf("web/mjon/addr/sendExelFilePhoneNumAjax")>-1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|| request.getRequestURI().indexOf("common/error.jsp")>-1
|
||||||
|
*/
|
||||||
|
) {
|
||||||
|
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle-ListAjax-check");
|
||||||
|
|
||||||
|
HackIpVO hackIpVO = new HackIpVO();
|
||||||
|
hackIpVO.setIgnoreIp(userIP);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 헤더 아이피 체크 해주기
|
||||||
|
* "." 기준으로 문자열 분할 후 0 ~ 255 사이 값인지 체크
|
||||||
|
* 범위 값이 아닌경우 오류 처리
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
|
||||||
|
boolean ipCheckType = false;
|
||||||
|
//IPv4, IPv6 모두 체크 해줌
|
||||||
|
if(InetAddresses.isInetAddress(userIP)) {
|
||||||
|
ipCheckType = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ipCheckType) {
|
||||||
|
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle Header IP Check ERROR !!! ");
|
||||||
|
System.out.println("userIP ::: "+userIP);
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int i_ignoreCnt = hackIpService.selectIgnoreIpCnt(hackIpVO);
|
||||||
|
|
||||||
|
//System.out.println("result=="+hackIpService.selectIgnoreIpCnt(hackIpVO));
|
||||||
|
|
||||||
|
if (i_ignoreCnt>0) {
|
||||||
|
//제한 아이피인 경우는 화면 안나옴 처리
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle");
|
||||||
|
System.out.println("preHandle4==="+userIP+" is ignored");
|
||||||
|
v_ret = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//오늘날짜의 IP조회
|
||||||
|
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd", Locale.KOREA );
|
||||||
|
Date currentTime = new Date ();
|
||||||
|
String mTime = mSimpleDateFormat.format ( currentTime );
|
||||||
|
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
|
||||||
|
String ip = req.getHeader("X-Forwarded-For") == null ? req.getHeader("X-Forwarded-For") : req.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim();
|
||||||
|
if (ip == null){ ip = req.getRemoteAddr();}
|
||||||
|
|
||||||
|
LoginLog loginLog = new LoginLog();
|
||||||
|
loginLog.setLoginIp(ip);
|
||||||
|
loginLog.setCreatDt(mTime);
|
||||||
|
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
|
||||||
|
loginLog.setErrOccrrAt("N");
|
||||||
|
loginLog.setErrorCode("");
|
||||||
|
loginLog.setUserAt("U");
|
||||||
|
|
||||||
|
loginLog.setErrorCode("0000000000");
|
||||||
|
loginLog.setErrOccrrAt("ListAjax 호출");
|
||||||
|
|
||||||
|
if(!"anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) {
|
||||||
|
LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
|
||||||
|
loginLog.setLoginId(loginVO.getId());
|
||||||
|
}else {
|
||||||
|
loginLog.setLoginId("");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isMobile(request)){
|
||||||
|
loginLog.setDeviceType("M");
|
||||||
|
}else{
|
||||||
|
loginLog.setDeviceType("P");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(null != request.getQueryString() && !"".equals(request.getQueryString())){
|
||||||
|
loginLog.setUrl(request.getRequestURI()+"?"+request.getQueryString());
|
||||||
|
}else {
|
||||||
|
loginLog.setUrl(request.getRequestURI());
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSPark 2023.03.27 => 아이피 길이체크(Data too long for column 오류 방지)
|
||||||
|
/*
|
||||||
|
if (ip != null) {
|
||||||
|
if (ip.length() <= 23) {
|
||||||
|
loginLogService.logInsertLoginLog4Ajax(loginLog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
//IP 컬럼 길이를 늘려서 비교 조건 제거함 2023-04-05
|
||||||
|
if (loginLog.getUrl().length()>200){ //길이문제로 오류가 발생하는 경우도 처리하도록 수정
|
||||||
|
loginLog.setUrl(loginLog.getUrl().substring(0,199));
|
||||||
|
}
|
||||||
|
|
||||||
|
loginLogService.logInsertLoginLog4Ajax(loginLog);
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
//ex.printStackTrace();
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle Error !!! " + ex);
|
||||||
|
//오류가 발생하면 메일화면으로 이동 시킨다.
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle-skip");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}catch(Exception ex) {
|
||||||
|
//ex.printStackTrace();
|
||||||
|
System.out.println("IPIgnoreInterceptorHandler-preHandle Error !!! " + ex);
|
||||||
|
//오류가 발생하면 경로 오류를 발생 시킨다.
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return v_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* view 화면으로 데이터가 넘어가기 이전에 실행
|
||||||
|
* modelAndView 값을 체크할 수 있음
|
||||||
|
* */
|
||||||
|
@Override
|
||||||
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
||||||
|
super.postHandle(request, response, handler, modelAndView);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* view에서 모든 처리를 완료한 후에 실행
|
||||||
|
* */
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
|
super.afterCompletion(request, response, handler, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getClientIP(HttpServletRequest request) {
|
||||||
|
String ip = "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
ip = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim();
|
||||||
|
//logger.info("> X-FORWARDED-FOR : " + ip);
|
||||||
|
System.out.println("> X-FORWARDED-FOR : " + ip);
|
||||||
|
|
||||||
|
if (ip == null) {
|
||||||
|
ip = request.getHeader("Proxy-Client-IP");
|
||||||
|
System.out.println("> Proxy-Client-IP : " + ip);
|
||||||
|
}
|
||||||
|
if (ip == null) {
|
||||||
|
ip = request.getHeader("WL-Proxy-Client-IP");
|
||||||
|
System.out.println("> WL-Proxy-Client-IP : " + ip);
|
||||||
|
}
|
||||||
|
if (ip == null) {
|
||||||
|
ip = request.getHeader("HTTP_CLIENT_IP");
|
||||||
|
System.out.println("> HTTP_CLIENT_IP : " + ip);
|
||||||
|
}
|
||||||
|
if (ip == null) {
|
||||||
|
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||||||
|
System.out.println("> HTTP_X_FORWARDED_FOR : " + ip);
|
||||||
|
}
|
||||||
|
if (ip == null) {
|
||||||
|
ip = request.getRemoteAddr();
|
||||||
|
System.out.println("> getRemoteAddr : "+ip);
|
||||||
|
}
|
||||||
|
System.out.println("> Result : IP Address : "+ip);
|
||||||
|
}catch(Exception ex)
|
||||||
|
{
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*모바일접속 유무*/
|
||||||
|
private boolean isMobile(HttpServletRequest request) {
|
||||||
|
String userAgent = request.getHeader("user-agent");
|
||||||
|
boolean mobile1 = userAgent.matches(".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*");
|
||||||
|
boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*");
|
||||||
|
if(mobile1 || mobile2) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
162
src/main/java/itn/com/cmm/interceptor/InterceptorHandler.java
Normal file
162
src/main/java/itn/com/cmm/interceptor/InterceptorHandler.java
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
package itn.com.cmm.interceptor;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||||
|
|
||||||
|
import itn.com.cmm.LoginVO;
|
||||||
|
import itn.com.cmm.util.XssFilterUtil;
|
||||||
|
|
||||||
|
public class InterceptorHandler extends HandlerInterceptorAdapter{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
|
||||||
|
//SameSite 설정하기
|
||||||
|
addSameSite(response , "None");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL 호출 전 넘어오는 파라미터 체크
|
||||||
|
* request로 넘어오는 모든 파라미터 데이터를 검사하여 XSS 문자가 포함되어 있으면 메인화면으로 튕김
|
||||||
|
* */
|
||||||
|
boolean returnSts1 = true;
|
||||||
|
Enumeration e = request.getParameterNames();
|
||||||
|
while ( e.hasMoreElements() ){
|
||||||
|
String name = (String) e.nextElement();
|
||||||
|
System.out.println("@@@@ "+name.toLowerCase());
|
||||||
|
if(!name.toLowerCase().contains("url")
|
||||||
|
&& !name.toLowerCase().contains("pagetype")
|
||||||
|
&& !name.toLowerCase().contains("searchsortcnd")
|
||||||
|
&& !name.toLowerCase().contains("imgfilepath")
|
||||||
|
&& !name.toLowerCase().contains("msgpreview")
|
||||||
|
&& !name.toLowerCase().contains("smstxtarea")
|
||||||
|
&& !name.toLowerCase().contains("smstxt")
|
||||||
|
&& !name.toLowerCase().contains("rep1list")
|
||||||
|
&& !name.toLowerCase().contains("rep2list")
|
||||||
|
&& !name.toLowerCase().contains("rep3list")
|
||||||
|
&& !name.toLowerCase().contains("rep4list")
|
||||||
|
&& !name.toLowerCase().contains("namelist")
|
||||||
|
&& !name.toLowerCase().contains("memolist")
|
||||||
|
&& !name.toLowerCase().contains("info1list")
|
||||||
|
&& !name.toLowerCase().contains("info2list")
|
||||||
|
&& !name.toLowerCase().contains("info3list")
|
||||||
|
&& !name.toLowerCase().contains("info4list")
|
||||||
|
&& !name.toLowerCase().contains("nttcn")
|
||||||
|
&& !name.toLowerCase().contains("ci")
|
||||||
|
&& !name.toLowerCase().contains("certdi")
|
||||||
|
&& !name.toLowerCase().contains("di")
|
||||||
|
&& !name.toLowerCase().contains("mbldn")
|
||||||
|
&& !name.toLowerCase().contains("mberid")
|
||||||
|
&& !name.toLowerCase().contains("userid")
|
||||||
|
&& !name.toLowerCase().contains("id_text")
|
||||||
|
&& !name.toLowerCase().contains("mberemailadres")
|
||||||
|
&& !name.toLowerCase().contains("recommendid")
|
||||||
|
&& !name.toLowerCase().contains("mbernm")
|
||||||
|
&& !name.toLowerCase().contains("varvallist")
|
||||||
|
&& !name.toLowerCase().contains("templatecontent")
|
||||||
|
&& !name.toLowerCase().contains("buttonvolist")
|
||||||
|
) {
|
||||||
|
//파라미터 중에 URL 주소를 넘겨주는 부분이 있어서 해당 부분에것 select~, update~, delete~ 로 시작하는 주소경로가 있어서 제외처리를 하였음
|
||||||
|
String[] values = request.getParameterValues(name);
|
||||||
|
|
||||||
|
//HTML 태그 관련 부분이 들어있으면 필터링 해주는 정규식 <> ~ </> 구문 찾아줌
|
||||||
|
//Pattern regex = Pattern.compile("<(/)?([a-zA-Z]*)(\\\\s[a-zA-Z]*=[^>]*)?(\\\\s)*(/)?>");
|
||||||
|
//23.7.18 이지우 - XSS 필터링을 위한 정규식 수정
|
||||||
|
Pattern regex = Pattern.compile("<[^ㄱ-ㅎㅏ-ㅣ가-힣<>]+>");
|
||||||
|
for (String value : values) {
|
||||||
|
|
||||||
|
//정규식과 동일한 패턴인지 비교해준다.
|
||||||
|
Matcher matcher = regex.matcher(value);
|
||||||
|
boolean rsltMatch = matcher.find();
|
||||||
|
|
||||||
|
//패턴이 일치하면 오류 발생
|
||||||
|
if(rsltMatch) {
|
||||||
|
|
||||||
|
returnSts1 = false;
|
||||||
|
System.out.println("+++++++++++++++++++++++++++XSS Html 필터 처리 Filter Start::: ");
|
||||||
|
System.out.println("name="+ name + ", value="+ value);
|
||||||
|
System.out.println("+++++++++++++++++++++++++++XSS Html 필터 처리 Filter End::: ");
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean returnSts = XssFilterUtil.cleanXSS(value);
|
||||||
|
if(!returnSts) {//XSS 문자 체크 결과 false일 경우 메인화면으로 이동
|
||||||
|
returnSts1 = returnSts;
|
||||||
|
System.out.println("+++++++++++++++++++++++++++XSS 필터 처리 Filter::: ");
|
||||||
|
System.out.println("name="+ name + ", value="+ value);
|
||||||
|
System.out.println("+++++++++++++++++++++++++++XSS 필터 처리 Filter End::: ");
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!returnSts1) {//XSS 포함문자가 있는경우 메인화면으로 이동시킨다.
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//관리자 페이지 로그인 후 사용자 페이지 접근시 로그아웃 처리_220421_이준호
|
||||||
|
HttpSession session = request.getSession();
|
||||||
|
LoginVO loginVO = (LoginVO) session.getAttribute("LoginVO");
|
||||||
|
if(
|
||||||
|
!request.getServletPath().contains("/utl/wed/imageSrc.do")
|
||||||
|
&& !request.getServletPath().contains("/utl/wed/insertImage.do")
|
||||||
|
&& !request.getServletPath().contains("/cmm/fms/getImage2.do")
|
||||||
|
) {
|
||||||
|
if(loginVO != null) {
|
||||||
|
if("USR".equals(loginVO.getUserSe())) {
|
||||||
|
request.getSession().invalidate();
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* view 화면으로 데이터가 넘어가기 이전에 실행
|
||||||
|
* modelAndView 값을 체크할 수 있음
|
||||||
|
* */
|
||||||
|
@Override
|
||||||
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
||||||
|
super.postHandle(request, response, handler, modelAndView);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* view에서 모든 처리를 완료한 후에 실행
|
||||||
|
* */
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
|
super.afterCompletion(request, response, handler, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addSameSite(HttpServletResponse response, String sameSite) {
|
||||||
|
|
||||||
|
Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE);
|
||||||
|
boolean firstHeader = true;
|
||||||
|
for (String header : headers) { // there can be multiple Set-Cookie attributes
|
||||||
|
if (firstHeader) {
|
||||||
|
response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite));
|
||||||
|
firstHeader = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
package itn.com.cmm.interceptor.ipCheck;
|
||||||
|
|
||||||
|
import org.apache.http.client.config.RequestConfig;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class HttpClientConfig {
|
||||||
|
|
||||||
|
private static final int MAX_CONNECTION_PER_ROUTE = 20;
|
||||||
|
private static final int MAX_CONNECTION_TOTAL = 200;
|
||||||
|
private static final int CONNECTION_TIMEOUT = 10;
|
||||||
|
private static final int SOCKET_TIMEOUT = 5;
|
||||||
|
private static final int CONNECTION_REQUEST_TIMEOUT = 5;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public CloseableHttpClient closeableHttpClient() {
|
||||||
|
CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(poolingHttpClientConnectionManager()).build();
|
||||||
|
return closeableHttpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() {
|
||||||
|
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
|
||||||
|
connectionManager.setDefaultMaxPerRoute(MAX_CONNECTION_PER_ROUTE);
|
||||||
|
connectionManager.setMaxTotal(MAX_CONNECTION_TOTAL);
|
||||||
|
return connectionManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RequestConfig requestConfig() {
|
||||||
|
RequestConfig requestConfig = RequestConfig.custom()
|
||||||
|
.setSocketTimeout(SOCKET_TIMEOUT * 1000)
|
||||||
|
.setConnectTimeout(CONNECTION_TIMEOUT * 1000)
|
||||||
|
.setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT * 1000)
|
||||||
|
.build();
|
||||||
|
return requestConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,97 @@
|
|||||||
|
package itn.com.cmm.interceptor.ipCheck;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||||
|
|
||||||
|
import net.sf.cglib.core.Constants;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class IPCheckInterceptor implements HandlerInterceptor, Constants {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WSOpenAPIService WSService;
|
||||||
|
|
||||||
|
private String LOCAL_HOST ="127.0.0.1";
|
||||||
|
|
||||||
|
private String WHO_IS_COUNTRY_CODE ="countryCode";
|
||||||
|
|
||||||
|
private String KOREA_COUNTRY_CODE ="KR";
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
|
||||||
|
throws Exception {
|
||||||
|
String clientIp = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim();
|
||||||
|
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||||
|
clientIp = request.getHeader("Proxy-Client-IP");
|
||||||
|
}
|
||||||
|
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||||
|
clientIp = request.getHeader("WL-Proxy-Client-IP");
|
||||||
|
}
|
||||||
|
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||||
|
clientIp = request.getHeader("HTTP_CLIENT_IP");
|
||||||
|
}
|
||||||
|
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||||
|
clientIp = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||||||
|
}
|
||||||
|
if (ObjectUtils.isEmpty(clientIp) || "unknown".equalsIgnoreCase(clientIp)) {
|
||||||
|
clientIp = request.getRemoteAddr();
|
||||||
|
}
|
||||||
|
|
||||||
|
//로컬 테스트 시 주석 해제해주세요. 미국 IP입니다.
|
||||||
|
// clientIp = "54.211.120.28";
|
||||||
|
|
||||||
|
// clientIp = "219.240.88.15";
|
||||||
|
|
||||||
|
|
||||||
|
if(!LOCAL_HOST.equals(clientIp)) {
|
||||||
|
Map<String,String> clientInfo = WSService.getClientInfoByIPAddress(clientIp);
|
||||||
|
|
||||||
|
if(clientInfo == null) {
|
||||||
|
logger.error("IP에 대한 클라이언트 정보 조회에 실패하였습니다.");
|
||||||
|
response.sendRedirect(request.getContextPath() + "/");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
String country = clientInfo.get(WHO_IS_COUNTRY_CODE);
|
||||||
|
|
||||||
|
if(!KOREA_COUNTRY_CODE.equals(country)) {
|
||||||
|
logger.error("해외 IP가 감지되었습니다. 접근을 차단합니다. IP : {}, Country : {}", clientIp, country);
|
||||||
|
response.setContentType("text/html; charset=UTF-8");
|
||||||
|
PrintWriter out = response.getWriter();
|
||||||
|
out.println("<script>alert('해외 IP가 감지되었습니다. 로그인 접근을 차단 합니다.'); location.href='/web/main/mainPage.do';</script>");
|
||||||
|
out.flush();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
|
||||||
|
ModelAndView modelAndView) throws Exception {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
|
||||||
|
throws Exception {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
package itn.com.cmm.interceptor.ipCheck;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.http.client.config.RequestConfig;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import net.sf.cglib.core.Constants;
|
||||||
|
|
||||||
|
@Service("WSOpenAPIService")
|
||||||
|
public class WSOpenAPIService implements Constants{
|
||||||
|
|
||||||
|
@Value("${whois.api.key}")
|
||||||
|
private String apiKey;
|
||||||
|
|
||||||
|
@Value("${whois.api.url}")
|
||||||
|
private String apiUrl;
|
||||||
|
|
||||||
|
private String WHO_IS = "whois";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CloseableHttpClient closeableHttpClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RequestConfig requestConfig;
|
||||||
|
|
||||||
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Map<String,String> getClientInfoByIPAddress(String ip) throws Exception{
|
||||||
|
|
||||||
|
StringBuilder urlBuilder = new StringBuilder(apiUrl); /*URL*/
|
||||||
|
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "="+URLEncoder.encode(apiKey, "UTF-8")); /*Service Key*/
|
||||||
|
urlBuilder.append("&" + URLEncoder.encode("query","UTF-8") + "=" + URLEncoder.encode(ip, "UTF-8")); /*IP 주소 또는 AS 번호*/
|
||||||
|
urlBuilder.append("&" + URLEncoder.encode("answer","UTF-8") + "=" + URLEncoder.encode("JSON", "UTF-8")); /*응답형식(XML/JSON) 을 지정(없으면 XML으로 응답)*/
|
||||||
|
URL url = new URL(urlBuilder.toString());
|
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("GET");
|
||||||
|
conn.setRequestProperty("Content-type", "application/json");
|
||||||
|
System.out.println("Response code: " + conn.getResponseCode());
|
||||||
|
BufferedReader rd;
|
||||||
|
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
|
||||||
|
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||||
|
} else {
|
||||||
|
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
|
||||||
|
}
|
||||||
|
String result = "";
|
||||||
|
String line;
|
||||||
|
while ((line = rd.readLine()) != null) {
|
||||||
|
result = result + line.trim();// result = URL로 XML을 읽은 값
|
||||||
|
}
|
||||||
|
rd.close();
|
||||||
|
conn.disconnect();
|
||||||
|
System.out.println(result);
|
||||||
|
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
JSONObject jsonObj = (JSONObject) jsonParser.parse(result);
|
||||||
|
JSONObject inf = (JSONObject) jsonObj.get("response");
|
||||||
|
JSONObject info1 = (JSONObject) inf.get("result");
|
||||||
|
JSONObject info2 = (JSONObject) inf.get("whois");
|
||||||
|
|
||||||
|
Map<String, String> workplace = (Map<String, String>) inf.get("whois");
|
||||||
|
|
||||||
|
|
||||||
|
return workplace;
|
||||||
|
}
|
||||||
|
}
|
||||||
242
src/main/java/itn/com/cmm/service/CmmnDetailCode.java
Normal file
242
src/main/java/itn/com/cmm/service/CmmnDetailCode.java
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공통상세코드 모델 클래스
|
||||||
|
* @author 공통서비스 개발팀 이중호
|
||||||
|
* @since 2009.04.01
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.04.01 이중호 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class CmmnDetailCode implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -6508801327314181679L;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 코드ID
|
||||||
|
*/
|
||||||
|
private String codeId = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 코드ID명
|
||||||
|
*/
|
||||||
|
private String codeIdNm = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 코드
|
||||||
|
*/
|
||||||
|
private String code = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 코드명
|
||||||
|
*/
|
||||||
|
private String codeNm = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 코드설명
|
||||||
|
*/
|
||||||
|
private String codeDc = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 사용여부
|
||||||
|
*/
|
||||||
|
private String useAt = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 최초등록자ID
|
||||||
|
*/
|
||||||
|
private String frstRegisterId = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 최종수정자ID
|
||||||
|
*/
|
||||||
|
private String lastUpdusrId = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* codeId attribute 를 리턴한다.
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String clCode = "";
|
||||||
|
private String searchSortCnd = ""; // 정렬 항목
|
||||||
|
private String searchSortOrd = ""; // 정렬 구분(오름/내림)
|
||||||
|
|
||||||
|
private String tempCodeId = "";
|
||||||
|
private int sort = 0;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClCode() {
|
||||||
|
return clCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClCode(String clCode) {
|
||||||
|
this.clCode = clCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchSortCnd() {
|
||||||
|
return searchSortCnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchSortCnd(String searchSortCnd) {
|
||||||
|
this.searchSortCnd = searchSortCnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchSortOrd() {
|
||||||
|
return searchSortOrd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchSortOrd(String searchSortOrd) {
|
||||||
|
this.searchSortOrd = searchSortOrd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTempCodeId() {
|
||||||
|
return tempCodeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTempCodeId(String tempCodeId) {
|
||||||
|
this.tempCodeId = tempCodeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSort() {
|
||||||
|
return sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSort(int sort) {
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
73
src/main/java/itn/com/cmm/service/EgovCmmUseService.java
Normal file
73
src/main/java/itn/com/cmm/service/EgovCmmUseService.java
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기 위한 서비스 인터페이스
|
||||||
|
* @author 공통서비스 개발팀 이삼섭
|
||||||
|
* @since 2009.04.01
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.03.11 이삼섭 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public interface EgovCmmUseService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공통코드를 조회한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return List(코드)
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
|
||||||
|
*
|
||||||
|
* @param voList
|
||||||
|
* @return Map(코드)
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List<?> voList) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 조직정보를 코드형태로 리턴한다.
|
||||||
|
*
|
||||||
|
* @param 조회조건정보 vo
|
||||||
|
* @return 조직정보 List
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 그룹정보를 코드형태로 리턴한다.
|
||||||
|
*
|
||||||
|
* @param 조회조건정보 vo
|
||||||
|
* @return 그룹정보 List
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 선택 코드 상세정보 조회
|
||||||
|
*
|
||||||
|
* @param 조회조건정보 vo
|
||||||
|
* @return CmmnDetailCode
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) throws Exception;
|
||||||
|
}
|
||||||
126
src/main/java/itn/com/cmm/service/EgovFileMngService.java
Normal file
126
src/main/java/itn/com/cmm/service/EgovFileMngService.java
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovFileMngService.java
|
||||||
|
* @Description : 파일정보의 관리를 위한 서비스 인터페이스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2009. 3. 25. 이삼섭 최초생성
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 3. 25.
|
||||||
|
* @version
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface EgovFileMngService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<FileVO> selectFileInfs(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String insertFileInf(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
|
||||||
|
*
|
||||||
|
* @param fvoList
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String insertFileInfs(List<?> fvoList) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
|
||||||
|
*
|
||||||
|
* @param fvoList
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void updateFileInfs(List<?> fvoList) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @param fvoList
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteFileInfs(List<?> fvoList) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 하나의 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteFileInf(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일에 대한 상세정보를 조회한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public FileVO selectFileInf(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일 구분자에 대한 최대값을 구한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int getMaxFileSN(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 전체 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteAllFileInf(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일명 검색에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map<String, Object> selectFileListByFileNm(FileVO fvo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<FileVO> selectImageFileList(FileVO vo) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일에 대한 목록을 업데이트하다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void updateFileInfo(List<FileVO> _result) throws Exception;
|
||||||
|
|
||||||
|
public void deleteFmsFileInf(FileVO fileVO) throws Exception;
|
||||||
|
}
|
||||||
785
src/main/java/itn/com/cmm/service/EgovFileMngUtil.java
Normal file
785
src/main/java/itn/com/cmm/service/EgovFileMngUtil.java
Normal file
@ -0,0 +1,785 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Image;
|
||||||
|
import java.awt.RenderingHints;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.FileCopyUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
import egovframework.rte.fdl.property.EgovPropertyService;
|
||||||
|
import itn.let.utl.fcc.service.EgovStringUtil;
|
||||||
|
import net.coobird.thumbnailator.Thumbnails;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovFileMngUtil.java
|
||||||
|
* @Description : 메시지 처리 관련 유틸리티
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.02.13 이삼섭 최초 생성
|
||||||
|
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 02. 13
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Component("EgovFileMngUtil")
|
||||||
|
public class EgovFileMngUtil {
|
||||||
|
|
||||||
|
public static final int BUFF_SIZE = 2048;
|
||||||
|
public static final int MAX_WIDTH = 740;
|
||||||
|
public static final int MAX_HEIGHT = 960;
|
||||||
|
|
||||||
|
@Resource(name = "propertiesService")
|
||||||
|
protected EgovPropertyService propertyService;
|
||||||
|
|
||||||
|
@Resource(name = "egovFileIdGnrService")
|
||||||
|
private EgovIdGnrService idgenService;
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileMngUtil.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첨부파일에 대한 목록 정보를 취득한다.
|
||||||
|
*
|
||||||
|
* @param files
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<FileVO> parseFileInf(Map<String, MultipartFile> files, String KeyStr, int fileKeyParam, String atchFileId, String storePath, String isThumbFile) throws Exception {
|
||||||
|
int fileKey = fileKeyParam;
|
||||||
|
|
||||||
|
String storePathString = "";
|
||||||
|
String atchFileIdString = "";
|
||||||
|
|
||||||
|
if ("".equals(storePath) || storePath == null) {
|
||||||
|
storePathString = propertyService.getString("Globals.fileStorePath");
|
||||||
|
} else {
|
||||||
|
storePathString = propertyService.getString(storePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("".equals(atchFileId) || atchFileId == null) {
|
||||||
|
atchFileIdString = idgenService.getNextStringId();
|
||||||
|
} else {
|
||||||
|
atchFileIdString = atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
File saveFolder = new File(storePathString);
|
||||||
|
|
||||||
|
if (!saveFolder.exists() || saveFolder.isFile()) {
|
||||||
|
saveFolder.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Iterator<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
|
||||||
|
|
||||||
|
List<MultipartFile> tmp = new ArrayList<MultipartFile>(files.values());
|
||||||
|
ListIterator<MultipartFile> itr = tmp.listIterator(tmp.size());
|
||||||
|
|
||||||
|
|
||||||
|
MultipartFile file;
|
||||||
|
String filePath = "";
|
||||||
|
List<FileVO> result = new ArrayList<FileVO>();
|
||||||
|
FileVO fvo;
|
||||||
|
|
||||||
|
while (itr.hasPrevious()) {
|
||||||
|
// Entry<String, MultipartFile> entry = itr.next();
|
||||||
|
// file = entry.getValue();
|
||||||
|
|
||||||
|
file = itr.previous();
|
||||||
|
|
||||||
|
|
||||||
|
String orginFileName = file.getOriginalFilename();
|
||||||
|
|
||||||
|
//--------------------------------------
|
||||||
|
// 원 파일명이 없는 경우 처리
|
||||||
|
// (첨부가 되지 않은 input file type)
|
||||||
|
//--------------------------------------
|
||||||
|
if ("".equals(orginFileName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
////------------------------------------
|
||||||
|
|
||||||
|
int index = orginFileName.lastIndexOf(".");
|
||||||
|
String fileExt = orginFileName.substring(index + 1);
|
||||||
|
String newName = KeyStr + EgovStringUtil.getTimeStamp() + fileKey;
|
||||||
|
long _size = file.getSize();
|
||||||
|
|
||||||
|
if (!"".equals(orginFileName)) {
|
||||||
|
filePath = storePathString + File.separator + newName;
|
||||||
|
file.transferTo(new File(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
String thumbName = "";
|
||||||
|
if(("thumbFile").equals(isThumbFile)) {
|
||||||
|
// file inputstream 으로 섬네일 생성후 저장
|
||||||
|
// BufferedImage originalImage = ImageIO.read(new File("original.png"));
|
||||||
|
BufferedImage originalImage = ImageIO.read(file.getInputStream());
|
||||||
|
// BufferedImage thumbnail = Thumbnails.of(originalImage).scale(0.25).asBufferedImage(); // 해상도
|
||||||
|
BufferedImage thumbnail = Thumbnails.of(originalImage).size(360, 260).asBufferedImage(); // 사이즈
|
||||||
|
|
||||||
|
thumbName = newName + "_THUMB";
|
||||||
|
String thumFilePath = storePathString + File.separator + thumbName;
|
||||||
|
File thumbFile = new File(thumFilePath);
|
||||||
|
ImageIO.write(thumbnail, fileExt, thumbFile);
|
||||||
|
|
||||||
|
// 서버 파일로 섬네일 저장
|
||||||
|
// File destinationDir = new File(filePath);
|
||||||
|
// Thumbnails.of(filePath).size(200, 200).toFiles(saveFolder, Rename.PREFIX_DOT_THUMBNAIL); // 이미지 확장자 파일 필요
|
||||||
|
}
|
||||||
|
|
||||||
|
fvo = new FileVO();
|
||||||
|
fvo.setFileExtsn(fileExt);
|
||||||
|
fvo.setFileStreCours(storePathString);
|
||||||
|
fvo.setFileMg(Long.toString(_size));
|
||||||
|
fvo.setOrignlFileNm(orginFileName);
|
||||||
|
fvo.setStreFileNm(newName);
|
||||||
|
fvo.setAtchFileId(atchFileIdString);
|
||||||
|
fvo.setFileSn(String.valueOf(fileKey));
|
||||||
|
fvo.setThumbFileNm(thumbName);
|
||||||
|
|
||||||
|
// writeFile(file, newName, storePathString);
|
||||||
|
result.add(fvo);
|
||||||
|
|
||||||
|
fileKey++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일에 대한 목록 정보를 취득한다.
|
||||||
|
*
|
||||||
|
* @param files
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<FileVO> parseImageFileInf(Map<String, MultipartFile> files, String KeyStr, int fileKeyParam, String atchFileId, String storePath, String isThumbFile) throws Exception {
|
||||||
|
int fileKey = fileKeyParam;
|
||||||
|
|
||||||
|
String storePathString = "";
|
||||||
|
String atchFileIdString = "";
|
||||||
|
|
||||||
|
if ("".equals(storePath) || storePath == null) {
|
||||||
|
storePathString = propertyService.getString("Globals.fileStorePath");
|
||||||
|
} else {
|
||||||
|
storePathString = storePath;//propertyService.getString(storePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("".equals(atchFileId) || atchFileId == null) {
|
||||||
|
atchFileIdString = idgenService.getNextStringId();
|
||||||
|
} else {
|
||||||
|
atchFileIdString = atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
File saveFolder = new File(storePathString);
|
||||||
|
|
||||||
|
if (!saveFolder.exists() || saveFolder.isFile()) {
|
||||||
|
saveFolder.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Iterator<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
|
||||||
|
|
||||||
|
List<MultipartFile> tmp = new ArrayList<MultipartFile>(files.values());
|
||||||
|
ListIterator<MultipartFile> itr = tmp.listIterator(tmp.size());
|
||||||
|
|
||||||
|
|
||||||
|
MultipartFile file;
|
||||||
|
String filePath = "";
|
||||||
|
List<FileVO> result = new ArrayList<FileVO>();
|
||||||
|
FileVO fvo;
|
||||||
|
|
||||||
|
while (itr.hasPrevious()) {
|
||||||
|
// Entry<String, MultipartFile> entry = itr.next();
|
||||||
|
// file = entry.getValue();
|
||||||
|
|
||||||
|
file = itr.previous();
|
||||||
|
|
||||||
|
|
||||||
|
String orginFileName = file.getOriginalFilename();
|
||||||
|
|
||||||
|
//--------------------------------------
|
||||||
|
// 원 파일명이 없는 경우 처리
|
||||||
|
// (첨부가 되지 않은 input file type)
|
||||||
|
//--------------------------------------
|
||||||
|
if ("".equals(orginFileName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
////------------------------------------
|
||||||
|
|
||||||
|
int index = orginFileName.lastIndexOf(".");
|
||||||
|
String fileExt = orginFileName.substring(index + 1);
|
||||||
|
String newName = KeyStr + EgovStringUtil.getTimeStamp() + fileKey;
|
||||||
|
long _size = file.getSize();
|
||||||
|
|
||||||
|
//이미지 파일 처리라서 확장자까지 모두 붙여서 파일 생성 함
|
||||||
|
if (!"".equals(orginFileName)) {
|
||||||
|
filePath = saveFolder + File.separator + newName + "." + fileExt;
|
||||||
|
file.transferTo(new File(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
//로컬 테스트 주석처리_220503_이준호
|
||||||
|
//실제 파일 저장 후 이미지 불러올 상대경로로 변경해줌 - webapps/mjon/MMS/날짜별 폴더
|
||||||
|
/*String fdlPath[] = storePathString.split("/MMS/"); // 경로중에 날짜 폴더명만 받아옴
|
||||||
|
storePathString ="/MMS/" + fdlPath[1];*/
|
||||||
|
|
||||||
|
String thumbName = "";
|
||||||
|
if(("thumbFile").equals(isThumbFile)) {
|
||||||
|
// file inputstream 으로 섬네일 생성후 저장
|
||||||
|
// BufferedImage originalImage = ImageIO.read(new File("original.png"));
|
||||||
|
BufferedImage originalImage = ImageIO.read(file.getInputStream());
|
||||||
|
// BufferedImage thumbnail = Thumbnails.of(originalImage).scale(0.25).asBufferedImage(); // 해상도
|
||||||
|
BufferedImage thumbnail = Thumbnails.of(originalImage).size(360, 260).asBufferedImage(); // 사이즈
|
||||||
|
|
||||||
|
thumbName = newName + "_THUMB";
|
||||||
|
String thumFilePath = storePathString + File.separator + thumbName;
|
||||||
|
File thumbFile = new File(thumFilePath);
|
||||||
|
ImageIO.write(thumbnail, fileExt, thumbFile);
|
||||||
|
|
||||||
|
// 서버 파일로 섬네일 저장
|
||||||
|
// File destinationDir = new File(filePath);
|
||||||
|
// Thumbnails.of(filePath).size(200, 200).toFiles(saveFolder, Rename.PREFIX_DOT_THUMBNAIL); // 이미지 확장자 파일 필요
|
||||||
|
}
|
||||||
|
|
||||||
|
fvo = new FileVO();
|
||||||
|
fvo.setFileExtsn(fileExt);
|
||||||
|
fvo.setFileStreCours(storePathString);
|
||||||
|
fvo.setFileMg(Long.toString(_size));
|
||||||
|
fvo.setOrignlFileNm(orginFileName);
|
||||||
|
fvo.setStreFileNm(newName);
|
||||||
|
fvo.setAtchFileId(atchFileIdString);
|
||||||
|
fvo.setFileSn(String.valueOf(fileKey));
|
||||||
|
fvo.setThumbFileNm(thumbName);
|
||||||
|
|
||||||
|
// writeFile(file, newName, storePathString);
|
||||||
|
result.add(fvo);
|
||||||
|
|
||||||
|
fileKey++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일을 리사이징하여 저장한다.
|
||||||
|
*
|
||||||
|
* @param files
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<FileVO> parseImageFileResizeInf(Map<String, MultipartFile> files, String KeyStr, int fileKeyParam, String atchFileId, String storePath, String isThumbFile) throws Exception {
|
||||||
|
int fileKey = fileKeyParam;
|
||||||
|
|
||||||
|
String storePathString = "";
|
||||||
|
String atchFileIdString = "";
|
||||||
|
|
||||||
|
if ("".equals(storePath) || storePath == null) {
|
||||||
|
storePathString = propertyService.getString("Globals.fileStorePath");
|
||||||
|
} else {
|
||||||
|
storePathString = storePath;//propertyService.getString(storePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("".equals(atchFileId) || atchFileId == null) {
|
||||||
|
atchFileIdString = idgenService.getNextStringId();
|
||||||
|
} else {
|
||||||
|
atchFileIdString = atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
File saveFolder = new File(storePathString);
|
||||||
|
|
||||||
|
if (!saveFolder.exists() || saveFolder.isFile()) {
|
||||||
|
saveFolder.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Iterator<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
|
||||||
|
|
||||||
|
List<MultipartFile> tmp = new ArrayList<MultipartFile>(files.values());
|
||||||
|
ListIterator<MultipartFile> itr = tmp.listIterator(tmp.size());
|
||||||
|
|
||||||
|
|
||||||
|
MultipartFile file;
|
||||||
|
String filePath = "";
|
||||||
|
List<FileVO> result = new ArrayList<FileVO>();
|
||||||
|
FileVO fvo;
|
||||||
|
|
||||||
|
while (itr.hasPrevious()) {
|
||||||
|
// Entry<String, MultipartFile> entry = itr.next();
|
||||||
|
// file = entry.getValue();
|
||||||
|
|
||||||
|
file = itr.previous();
|
||||||
|
|
||||||
|
|
||||||
|
String orginFileName = file.getOriginalFilename();
|
||||||
|
|
||||||
|
//--------------------------------------
|
||||||
|
// 원 파일명이 없는 경우 처리
|
||||||
|
// (첨부가 되지 않은 input file type)
|
||||||
|
//--------------------------------------
|
||||||
|
if ("".equals(orginFileName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
////------------------------------------
|
||||||
|
|
||||||
|
int index = orginFileName.lastIndexOf(".");
|
||||||
|
String fileExt = orginFileName.substring(index + 1);
|
||||||
|
String newName = KeyStr + EgovStringUtil.getTimeStamp() + fileKey;
|
||||||
|
long _size = file.getSize();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//이미지 파일 처리라서 확장자까지 모두 붙여서 파일 생성 함
|
||||||
|
if (!"".equals(orginFileName)) {
|
||||||
|
filePath = saveFolder + File.separator + newName + "." + fileExt;
|
||||||
|
file.transferTo(new File(filePath));
|
||||||
|
|
||||||
|
File newFile = new File(filePath);
|
||||||
|
InputStream inputStream = new FileInputStream(newFile);
|
||||||
|
Image img = new ImageIcon(newFile.toString()).getImage(); // 파일 정보 추출
|
||||||
|
|
||||||
|
int orgWidth = img.getWidth(null);
|
||||||
|
int orgHeight = img.getHeight(null);
|
||||||
|
|
||||||
|
//wid : 640 , hei : 960
|
||||||
|
if(orgWidth > 640 || orgHeight > 960) {
|
||||||
|
|
||||||
|
if (orgWidth > MAX_WIDTH) {
|
||||||
|
orgHeight = (int) (orgHeight * (MAX_WIDTH / (float) orgWidth));
|
||||||
|
orgWidth = MAX_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (orgHeight > MAX_HEIGHT) {
|
||||||
|
orgWidth = (int) (orgWidth * (MAX_HEIGHT / (float) orgHeight));
|
||||||
|
orgHeight = MAX_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//이미지 리사이징 요청
|
||||||
|
BufferedImage resizedImage = resize(inputStream ,orgWidth , orgHeight );
|
||||||
|
|
||||||
|
//리사이징된 파일 덮어쓰기
|
||||||
|
ImageIO.write(resizedImage, "jpg", new File(filePath));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//로컬 테스트 주석처리_220503_이준호
|
||||||
|
//실제 파일 저장 후 이미지 불러올 상대경로로 변경해줌 - webapps/mjon/MMS/날짜별 폴더
|
||||||
|
/*String fdlPath[] = storePathString.split("/MMS/"); // 경로중에 날짜 폴더명만 받아옴
|
||||||
|
storePathString ="/MMS/" + fdlPath[1];*/
|
||||||
|
|
||||||
|
String thumbName = "";
|
||||||
|
|
||||||
|
fvo = new FileVO();
|
||||||
|
fvo.setFileExtsn(fileExt);
|
||||||
|
fvo.setFileStreCours(storePathString);
|
||||||
|
fvo.setFileMg(Long.toString(_size));
|
||||||
|
fvo.setOrignlFileNm(orginFileName);
|
||||||
|
fvo.setStreFileNm(newName);
|
||||||
|
fvo.setAtchFileId(atchFileIdString);
|
||||||
|
fvo.setFileSn(String.valueOf(fileKey));
|
||||||
|
fvo.setThumbFileNm(thumbName);
|
||||||
|
|
||||||
|
// writeFile(file, newName, storePathString);
|
||||||
|
result.add(fvo);
|
||||||
|
|
||||||
|
fileKey++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 리사이즈 실행 메소드 */
|
||||||
|
public static BufferedImage resize(InputStream inputStream, int width, int height)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
//BufferedImage inputImage = ImageIO.read(inputStream); // 받은 이미지 읽기
|
||||||
|
BufferedInputStream bis = new BufferedInputStream(inputStream, 8192); //8K reads
|
||||||
|
BufferedImage inputImage = ImageIO.read(bis); // 받은 이미지 읽기
|
||||||
|
|
||||||
|
//화질저하를 막기위해 이미지 SCALE_SMOOTH 처리를 해준다.
|
||||||
|
Image resizing = inputImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
|
||||||
|
|
||||||
|
BufferedImage outputImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||||
|
// 입력받은 리사이즈 길이와 높이
|
||||||
|
|
||||||
|
Graphics2D graphics2D = outputImage.createGraphics();
|
||||||
|
|
||||||
|
//이미지 앨리어싱 현상이나 깨짐현상을 막기 위해서 INTERPOLATION 옵션을 사용
|
||||||
|
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
|
||||||
|
graphics2D.drawImage(resizing, 0, 0, width, height, null); // 그리기
|
||||||
|
graphics2D.dispose(); // 자원해제
|
||||||
|
|
||||||
|
return outputImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첨부파일을 서버에 저장한다.
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @param newName
|
||||||
|
* @param stordFilePath
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected void writeUploadedFile(MultipartFile file, String newName, String stordFilePath) throws Exception {
|
||||||
|
InputStream stream = null;
|
||||||
|
OutputStream bos = null;
|
||||||
|
String stordFilePathReal = (stordFilePath==null?"":stordFilePath).replaceAll("..","");
|
||||||
|
try {
|
||||||
|
stream = file.getInputStream();
|
||||||
|
File cFile = new File(stordFilePathReal);
|
||||||
|
|
||||||
|
if (!cFile.isDirectory()) {
|
||||||
|
boolean _flag = cFile.mkdir();
|
||||||
|
if (!_flag) {
|
||||||
|
throw new IOException("Directory creation Failed ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bos = new FileOutputStream(stordFilePathReal + File.separator + newName);
|
||||||
|
|
||||||
|
int bytesRead = 0;
|
||||||
|
byte[] buffer = new byte[BUFF_SIZE];
|
||||||
|
|
||||||
|
while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) {
|
||||||
|
bos.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException fnfe) {
|
||||||
|
LOGGER.debug("fnfe: {}", fnfe);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
LOGGER.debug("ioe: {}", ioe);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.debug("e: {}", e);
|
||||||
|
} finally {
|
||||||
|
if (bos != null) {
|
||||||
|
try {
|
||||||
|
bos.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stream != null) {
|
||||||
|
try {
|
||||||
|
stream.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 서버의 파일을 다운로드한다.
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @param response
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static void downFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||||
|
|
||||||
|
String downFileName = EgovStringUtil.isNullToString(request.getAttribute("downFile")).replaceAll("..","");
|
||||||
|
String orgFileName = EgovStringUtil.isNullToString(request.getAttribute("orgFileName")).replaceAll("..","");
|
||||||
|
|
||||||
|
/*if ((String)request.getAttribute("downFile") == null) {
|
||||||
|
downFileName = "";
|
||||||
|
} else {
|
||||||
|
downFileName = EgovStringUtil.isNullToString(request.getAttribute("downFile"));
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*if ((String)request.getAttribute("orgFileName") == null) {
|
||||||
|
orgFileName = "";
|
||||||
|
} else {
|
||||||
|
orgFileName = (String)request.getAttribute("orginFile");
|
||||||
|
}*/
|
||||||
|
|
||||||
|
File file = new File(downFileName);
|
||||||
|
|
||||||
|
if (!file.exists()) {
|
||||||
|
throw new FileNotFoundException(downFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file.isFile()) {
|
||||||
|
throw new FileNotFoundException(downFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] b = new byte[BUFF_SIZE]; //buffer size 2K.
|
||||||
|
String fName = (new String(orgFileName.getBytes(), "UTF-8")).replaceAll("\r\n","");
|
||||||
|
response.setContentType("application/x-msdownload");
|
||||||
|
response.setHeader("Content-Disposition:", "attachment; filename=" + fName);
|
||||||
|
response.setHeader("Content-Transfer-Encoding", "binary");
|
||||||
|
response.setHeader("Pragma", "no-cache");
|
||||||
|
response.setHeader("Expires", "0");
|
||||||
|
|
||||||
|
BufferedInputStream fin = null;
|
||||||
|
BufferedOutputStream outs = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
fin = new BufferedInputStream(new FileInputStream(file));
|
||||||
|
outs = new BufferedOutputStream(response.getOutputStream());
|
||||||
|
int read = 0;
|
||||||
|
|
||||||
|
while ((read = fin.read(b)) != -1) {
|
||||||
|
outs.write(b, 0, read);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (outs != null) {
|
||||||
|
try {
|
||||||
|
outs.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fin != null) {
|
||||||
|
try {
|
||||||
|
fin.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첨부로 등록된 파일을 서버에 업로드한다.
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
|
||||||
|
public static HashMap<String, String> uploadFile(MultipartFile file) throws Exception {
|
||||||
|
|
||||||
|
HashMap<String, String> map = new HashMap<String, String>();
|
||||||
|
//Write File 이후 Move File????
|
||||||
|
String newName = "";
|
||||||
|
String stordFilePath = EgovProperties.getProperty("Globals.fileStorePath");
|
||||||
|
String orginFileName = file.getOriginalFilename();
|
||||||
|
|
||||||
|
int index = orginFileName.lastIndexOf(".");
|
||||||
|
//String fileName = orginFileName.substring(0, _index);
|
||||||
|
String fileExt = orginFileName.substring(index + 1);
|
||||||
|
long size = file.getSize();
|
||||||
|
|
||||||
|
//newName 은 Naming Convention에 의해서 생성
|
||||||
|
newName = EgovStringUtil.getTimeStamp() + "." + fileExt;
|
||||||
|
writeFile(file, newName, stordFilePath);
|
||||||
|
//storedFilePath는 지정
|
||||||
|
map.put(Globals.ORIGIN_FILE_NM, orginFileName);
|
||||||
|
map.put(Globals.UPLOAD_FILE_NM, newName);
|
||||||
|
map.put(Globals.FILE_EXT, fileExt);
|
||||||
|
map.put(Globals.FILE_PATH, stordFilePath);
|
||||||
|
map.put(Globals.FILE_SIZE, String.valueOf(size));
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* 파일을 실제 물리적인 경로에 생성한다.
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* @param newName
|
||||||
|
* @param stordFilePath
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected static void writeFile(MultipartFile file, String newName, String stordFilePath) throws Exception {
|
||||||
|
InputStream stream = null;
|
||||||
|
OutputStream bos = null;
|
||||||
|
newName = EgovStringUtil.isNullToString(newName).replaceAll("..", "");
|
||||||
|
stordFilePath = EgovStringUtil.isNullToString(stordFilePath).replaceAll("..", "");
|
||||||
|
try {
|
||||||
|
stream = file.getInputStream();
|
||||||
|
File cFile = new File(stordFilePath);
|
||||||
|
|
||||||
|
if (!cFile.isDirectory())
|
||||||
|
cFile.mkdir();
|
||||||
|
|
||||||
|
bos = new FileOutputStream(stordFilePath + File.separator + newName);
|
||||||
|
|
||||||
|
int bytesRead = 0;
|
||||||
|
byte[] buffer = new byte[BUFF_SIZE];
|
||||||
|
|
||||||
|
while ((bytesRead = stream.read(buffer, 0, BUFF_SIZE)) != -1) {
|
||||||
|
bos.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException fnfe) {
|
||||||
|
LOGGER.debug("fnfe: {}",fnfe);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
LOGGER.debug("ioe: {}", ioe);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.debug("e: {}", e);
|
||||||
|
} finally {
|
||||||
|
if (bos != null) {
|
||||||
|
try {
|
||||||
|
bos.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stream != null) {
|
||||||
|
try {
|
||||||
|
stream.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 서버 파일에 대하여 다운로드를 처리한다.
|
||||||
|
*
|
||||||
|
* @param response
|
||||||
|
* @param streFileNm
|
||||||
|
* : 파일저장 경로가 포함된 형태
|
||||||
|
* @param orignFileNm
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void downFile(HttpServletResponse response, String streFileNm, String orignFileNm) throws Exception {
|
||||||
|
// String downFileName = EgovStringUtil.isNullToString(request.getAttribute("downFile")).replaceAll("..","");
|
||||||
|
// String orgFileName = EgovStringUtil.isNullToString(request.getAttribute("orgFileName")).replaceAll("..","");
|
||||||
|
String downFileName = EgovStringUtil.isNullToString(streFileNm).replaceAll("..","");
|
||||||
|
String orgFileName = EgovStringUtil.isNullToString(orignFileNm).replaceAll("..","");
|
||||||
|
|
||||||
|
File file = new File(downFileName);
|
||||||
|
//log.debug(this.getClass().getName()+" downFile downFileName "+downFileName);
|
||||||
|
//log.debug(this.getClass().getName()+" downFile orgFileName "+orgFileName);
|
||||||
|
|
||||||
|
if (!file.exists()) {
|
||||||
|
throw new FileNotFoundException(downFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file.isFile()) {
|
||||||
|
throw new FileNotFoundException(downFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//byte[] b = new byte[BUFF_SIZE]; //buffer size 2K.
|
||||||
|
int fSize = (int)file.length();
|
||||||
|
if (fSize > 0) {
|
||||||
|
BufferedInputStream in = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
in = new BufferedInputStream(new FileInputStream(file));
|
||||||
|
|
||||||
|
String mimetype = "text/html"; //"application/x-msdownload"
|
||||||
|
|
||||||
|
response.setBufferSize(fSize);
|
||||||
|
response.setContentType(mimetype);
|
||||||
|
response.setHeader("Content-Disposition:", "attachment; filename=" + orgFileName);
|
||||||
|
response.setContentLength(fSize);
|
||||||
|
//response.setHeader("Content-Transfer-Encoding","binary");
|
||||||
|
//response.setHeader("Pragma","no-cache");
|
||||||
|
//response.setHeader("Expires","0");
|
||||||
|
FileCopyUtils.copy(in, response.getOutputStream());
|
||||||
|
} finally {
|
||||||
|
if (in != null) {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
|
||||||
|
LOGGER.debug("IGNORED: {}", ignore.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.getOutputStream().flush();
|
||||||
|
response.getOutputStream().close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
String uploadPath = propertiesService.getString("fileDir");
|
||||||
|
|
||||||
|
File uFile = new File(uploadPath, requestedFile);
|
||||||
|
int fSize = (int) uFile.length();
|
||||||
|
|
||||||
|
if (fSize > 0) {
|
||||||
|
BufferedInputStream in = new BufferedInputStream(new FileInputStream(uFile));
|
||||||
|
|
||||||
|
String mimetype = "text/html";
|
||||||
|
|
||||||
|
response.setBufferSize(fSize);
|
||||||
|
response.setContentType(mimetype);
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\""
|
||||||
|
+ requestedFile + "\"");
|
||||||
|
response.setContentLength(fSize);
|
||||||
|
|
||||||
|
FileCopyUtils.copy(in, response.getOutputStream());
|
||||||
|
in.close();
|
||||||
|
response.getOutputStream().flush();
|
||||||
|
response.getOutputStream().close();
|
||||||
|
} else {
|
||||||
|
response.setContentType("text/html");
|
||||||
|
PrintWriter printwriter = response.getWriter();
|
||||||
|
printwriter.println("<html>");
|
||||||
|
printwriter.println("<br><br><br><h2>Could not get file name:<br>" + requestedFile + "</h2>");
|
||||||
|
printwriter.println("<br><br><br><center><h3><a href='javascript: history.go(-1)'>Back</a></h3></center>");
|
||||||
|
printwriter.println("<br><br><br>© webAccess");
|
||||||
|
printwriter.println("</html>");
|
||||||
|
printwriter.flush();
|
||||||
|
printwriter.close();
|
||||||
|
}
|
||||||
|
//*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
response.setContentType("application/x-msdownload");
|
||||||
|
response.setHeader("Content-Disposition:", "attachment; filename=" + new String(orgFileName.getBytes(),"UTF-8" ));
|
||||||
|
response.setHeader("Content-Transfer-Encoding","binary");
|
||||||
|
response.setHeader("Pragma","no-cache");
|
||||||
|
response.setHeader("Expires","0");
|
||||||
|
|
||||||
|
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
|
||||||
|
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
|
||||||
|
int read = 0;
|
||||||
|
|
||||||
|
while ((read = fin.read(b)) != -1) {
|
||||||
|
outs.write(b,0,read);
|
||||||
|
}
|
||||||
|
log.debug(this.getClass().getName()+" BufferedOutputStream Write Complete!!! ");
|
||||||
|
|
||||||
|
outs.close();
|
||||||
|
fin.close();
|
||||||
|
//*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* atchFileId 강제 Idgen update
|
||||||
|
*
|
||||||
|
* @param files
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void updateAtchFileIdgen(int count) throws Exception {
|
||||||
|
for(int i = 0 ; i < count ; i ++) {
|
||||||
|
idgenService.getNextStringId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
251
src/main/java/itn/com/cmm/service/EgovProperties.java
Normal file
251
src/main/java/itn/com/cmm/service/EgovProperties.java
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import itn.com.cmm.EgovWebUtil;
|
||||||
|
import itn.com.cmm.util.EgovResourceCloseHelper;
|
||||||
|
//import java.io.FileNotFoundException;
|
||||||
|
//import java.io.IOException;
|
||||||
|
//import java.util.Properties;
|
||||||
|
/**
|
||||||
|
* Class Name : EgovProperties.java
|
||||||
|
* Description : properties값들을 파일로부터 읽어와 Globals클래스의 정적변수로 로드시켜주는 클래스로
|
||||||
|
* 문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 한다.
|
||||||
|
* Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.01.19 박지욱 최초 생성
|
||||||
|
* 2011.07.20 서준식 Globals파일의 상대경로를 읽은 메서드 추가
|
||||||
|
* 2011.08.31 JJY 경량환경 템플릿 커스터마이징버전 생성
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 박지욱
|
||||||
|
* @since 2009. 01. 19
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EgovProperties{
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovProperties.class);
|
||||||
|
|
||||||
|
//프로퍼티값 로드시 에러발생하면 반환되는 에러문자열
|
||||||
|
public static final String ERR_CODE =" EXCEPTION OCCURRED";
|
||||||
|
public static final String ERR_CODE_FNFE =" EXCEPTION(FNFE) OCCURRED";
|
||||||
|
public static final String ERR_CODE_IOE =" EXCEPTION(IOE) OCCURRED";
|
||||||
|
|
||||||
|
//파일구분자
|
||||||
|
static final char FILE_SEPARATOR = File.separatorChar;
|
||||||
|
|
||||||
|
//프로퍼티 파일의 물리적 위치
|
||||||
|
//public static final String GLOBALS_PROPERTIES_FILE = System.getProperty("user.home") + FILE_SEPARATOR + "egovProps" +FILE_SEPARATOR + "globals.properties";
|
||||||
|
|
||||||
|
//public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath() + FILE_SEPARATOR+ ".." + FILE_SEPARATOR + ".." + FILE_SEPARATOR;
|
||||||
|
|
||||||
|
public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath().substring(0, EgovProperties.class.getResource("").getPath().lastIndexOf("com"));
|
||||||
|
|
||||||
|
public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "egovProps" + FILE_SEPARATOR + "globals.properties";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용)
|
||||||
|
* @param keyName String
|
||||||
|
* @return String
|
||||||
|
|
||||||
|
public static String getPathProperty(String keyName){
|
||||||
|
String value = ERR_CODE;
|
||||||
|
value="99";
|
||||||
|
debug(GLOBALS_PROPERTIES_FILE + " : " + keyName);
|
||||||
|
FileInputStream fis = null;
|
||||||
|
try{
|
||||||
|
Properties props = new Properties();
|
||||||
|
fis = new FileInputStream(GLOBALS_PROPERTIES_FILE);
|
||||||
|
props.load(new java.io.BufferedInputStream(fis));
|
||||||
|
value = props.getProperty(keyName).trim();
|
||||||
|
value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value;
|
||||||
|
}catch(FileNotFoundException fne){
|
||||||
|
debug(fne);
|
||||||
|
}catch(IOException ioe){
|
||||||
|
debug(ioe);
|
||||||
|
}catch(Exception e){
|
||||||
|
debug(e);
|
||||||
|
}finally{
|
||||||
|
try {
|
||||||
|
if (fis != null) fis.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용)
|
||||||
|
* @param keyName String
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String getProperty(String keyName) {
|
||||||
|
String value = "";
|
||||||
|
|
||||||
|
LOGGER.debug("getProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName);
|
||||||
|
|
||||||
|
FileInputStream fis = null;
|
||||||
|
try {
|
||||||
|
Properties props = new Properties();
|
||||||
|
|
||||||
|
fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE));
|
||||||
|
|
||||||
|
props.load(new BufferedInputStream(fis));
|
||||||
|
if (props.getProperty(keyName) == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
value = props.getProperty(keyName).trim();
|
||||||
|
} catch (FileNotFoundException fne) {
|
||||||
|
LOGGER.debug("Property file not found.", fne);
|
||||||
|
throw new RuntimeException("Property file not found", fne);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
LOGGER.debug("Property file IO exception", ioe);
|
||||||
|
throw new RuntimeException("Property file IO exception", ioe);
|
||||||
|
} finally {
|
||||||
|
EgovResourceCloseHelper.close(fis);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다
|
||||||
|
* @param fileName String
|
||||||
|
* @param key String
|
||||||
|
* @return String
|
||||||
|
|
||||||
|
public static String getPathProperty(String fileName, String key){
|
||||||
|
FileInputStream fis = null;
|
||||||
|
try{
|
||||||
|
java.util.Properties props = new java.util.Properties();
|
||||||
|
fis = new FileInputStream(fileName);
|
||||||
|
props.load(new java.io.BufferedInputStream(fis));
|
||||||
|
fis.close();
|
||||||
|
|
||||||
|
String value = props.getProperty(key);
|
||||||
|
value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value;
|
||||||
|
return value;
|
||||||
|
}catch(java.io.FileNotFoundException fne){
|
||||||
|
return ERR_CODE_FNFE;
|
||||||
|
}catch(java.io.IOException ioe){
|
||||||
|
return ERR_CODE_IOE;
|
||||||
|
}finally{
|
||||||
|
try {
|
||||||
|
if (fis != null) fis.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다
|
||||||
|
* @param fileName String
|
||||||
|
* @param key String
|
||||||
|
* @return String
|
||||||
|
|
||||||
|
public static String getProperty(String fileName, String key){
|
||||||
|
FileInputStream fis = null;
|
||||||
|
try{
|
||||||
|
java.util.Properties props = new java.util.Properties();
|
||||||
|
fis = new FileInputStream(fileName);
|
||||||
|
props.load(new java.io.BufferedInputStream(fis));
|
||||||
|
fis.close();
|
||||||
|
|
||||||
|
String value = props.getProperty(key);
|
||||||
|
return value;
|
||||||
|
}catch(java.io.FileNotFoundException fne){
|
||||||
|
return ERR_CODE_FNFE;
|
||||||
|
}catch(java.io.IOException ioe){
|
||||||
|
return ERR_CODE_IOE;
|
||||||
|
}finally{
|
||||||
|
try {
|
||||||
|
if (fis != null) fis.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다.
|
||||||
|
* @param property String
|
||||||
|
* @return ArrayList
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static ArrayList<Map<String, String>> loadPropertyFile(String property){
|
||||||
|
|
||||||
|
// key - value 형태로 된 배열 결과
|
||||||
|
ArrayList<Map<String, String>> keyList = new ArrayList<Map<String, String>>();
|
||||||
|
|
||||||
|
String src = property.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR);
|
||||||
|
FileInputStream fis = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
File srcFile = new File(src);
|
||||||
|
if (srcFile.exists()) {
|
||||||
|
|
||||||
|
java.util.Properties props = new java.util.Properties();
|
||||||
|
fis = new FileInputStream(src);
|
||||||
|
props.load(new java.io.BufferedInputStream(fis));
|
||||||
|
fis.close();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
Enumeration<?> plist = props.propertyNames();
|
||||||
|
if (plist != null) {
|
||||||
|
while (plist.hasMoreElements()) {
|
||||||
|
Map<String, String> map = new HashMap<String, String>();
|
||||||
|
String key = (String)plist.nextElement();
|
||||||
|
map.put(key, props.getProperty(key));
|
||||||
|
keyList.add(map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception ex){
|
||||||
|
debug("EX:"+ex);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (fis != null) fis.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
debug("EX:"+ex);//ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return keyList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 시스템 로그를 출력한다.
|
||||||
|
* @param obj Object
|
||||||
|
*/
|
||||||
|
private static void debug(Object obj) {
|
||||||
|
if (obj instanceof java.lang.Exception) {
|
||||||
|
//((Exception)obj).printStackTrace();
|
||||||
|
//System.out.println("DEBUG: " + obj); // 2011.10.10 보안점검 후속조치
|
||||||
|
LOGGER.debug("IGNORED: {}", ((Exception)obj).getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package itn.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<String> getAuthorities();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 인증된 사용자 여부를 체크한다.
|
||||||
|
* @return Boolean - 인증된 사용자 여부(TRUE / FALSE)
|
||||||
|
*/
|
||||||
|
public Boolean isAuthenticated();
|
||||||
|
|
||||||
|
}
|
||||||
290
src/main/java/itn/com/cmm/service/FileVO.java
Normal file
290
src/main/java/itn/com/cmm/service/FileVO.java
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : FileVO.java
|
||||||
|
* @Description : 파일정보 처리를 위한 VO 클래스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2009. 3. 25. 이삼섭
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 3. 25.
|
||||||
|
* @version
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class FileVO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 첨부파일 아이디
|
||||||
|
*/
|
||||||
|
public String atchFileId = "";
|
||||||
|
/**
|
||||||
|
* 생성일자
|
||||||
|
*/
|
||||||
|
public String creatDt = "";
|
||||||
|
/**
|
||||||
|
* 파일내용
|
||||||
|
*/
|
||||||
|
public String fileCn = "";
|
||||||
|
/**
|
||||||
|
* 파일확장자
|
||||||
|
*/
|
||||||
|
public String fileExtsn = "";
|
||||||
|
/**
|
||||||
|
* 파일크기
|
||||||
|
*/
|
||||||
|
public String fileMg = "";
|
||||||
|
/**
|
||||||
|
* 파일연번
|
||||||
|
*/
|
||||||
|
public String fileSn = "";
|
||||||
|
/**
|
||||||
|
* 파일저장경로
|
||||||
|
*/
|
||||||
|
public String fileStreCours = "";
|
||||||
|
/**
|
||||||
|
* 원파일명
|
||||||
|
*/
|
||||||
|
public String orignlFileNm = "";
|
||||||
|
/**
|
||||||
|
* 저장파일명
|
||||||
|
*/
|
||||||
|
public String streFileNm = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 섬네일 이미지 파일명
|
||||||
|
*/
|
||||||
|
public String thumbFileNm = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* atchFileId attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the atchFileId
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String maxFileNum = "";
|
||||||
|
|
||||||
|
public String menuName = ""; //파일 업로드시 매뉴 분할
|
||||||
|
|
||||||
|
public String whFile = ""; //파일 업로드시 절대 경로
|
||||||
|
|
||||||
|
public String getMaxFileNum() {
|
||||||
|
return maxFileNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxFileNum(String maxFileNum) {
|
||||||
|
this.maxFileNum = maxFileNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAtchFileId() {
|
||||||
|
return atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* atchFileId attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param atchFileId
|
||||||
|
* the atchFileId to set
|
||||||
|
*/
|
||||||
|
public void setAtchFileId(String atchFileId) {
|
||||||
|
this.atchFileId = atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creatDt attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the creatDt
|
||||||
|
*/
|
||||||
|
public String getCreatDt() {
|
||||||
|
return creatDt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creatDt attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param creatDt
|
||||||
|
* the creatDt to set
|
||||||
|
*/
|
||||||
|
public void setCreatDt(String creatDt) {
|
||||||
|
this.creatDt = creatDt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileCn attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the fileCn
|
||||||
|
*/
|
||||||
|
public String getFileCn() {
|
||||||
|
return fileCn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileCn attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param fileCn
|
||||||
|
* the fileCn to set
|
||||||
|
*/
|
||||||
|
public void setFileCn(String fileCn) {
|
||||||
|
this.fileCn = fileCn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileExtsn attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the fileExtsn
|
||||||
|
*/
|
||||||
|
public String getFileExtsn() {
|
||||||
|
return fileExtsn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileExtsn attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param fileExtsn
|
||||||
|
* the fileExtsn to set
|
||||||
|
*/
|
||||||
|
public void setFileExtsn(String fileExtsn) {
|
||||||
|
this.fileExtsn = fileExtsn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileMg attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the fileMg
|
||||||
|
*/
|
||||||
|
public String getFileMg() {
|
||||||
|
return fileMg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileMg attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param fileMg
|
||||||
|
* the fileMg to set
|
||||||
|
*/
|
||||||
|
public void setFileMg(String fileMg) {
|
||||||
|
this.fileMg = fileMg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileSn attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the fileSn
|
||||||
|
*/
|
||||||
|
public String getFileSn() {
|
||||||
|
return fileSn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileSn attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param fileSn
|
||||||
|
* the fileSn to set
|
||||||
|
*/
|
||||||
|
public void setFileSn(String fileSn) {
|
||||||
|
this.fileSn = fileSn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileStreCours attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the fileStreCours
|
||||||
|
*/
|
||||||
|
public String getFileStreCours() {
|
||||||
|
return fileStreCours;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fileStreCours attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param fileStreCours
|
||||||
|
* the fileStreCours to set
|
||||||
|
*/
|
||||||
|
public void setFileStreCours(String fileStreCours) {
|
||||||
|
this.fileStreCours = fileStreCours;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* orignlFileNm attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the orignlFileNm
|
||||||
|
*/
|
||||||
|
public String getOrignlFileNm() {
|
||||||
|
return orignlFileNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* orignlFileNm attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param orignlFileNm
|
||||||
|
* the orignlFileNm to set
|
||||||
|
*/
|
||||||
|
public void setOrignlFileNm(String orignlFileNm) {
|
||||||
|
this.orignlFileNm = orignlFileNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* streFileNm attribute를 리턴한다.
|
||||||
|
*
|
||||||
|
* @return the streFileNm
|
||||||
|
*/
|
||||||
|
public String getStreFileNm() {
|
||||||
|
return streFileNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* streFileNm attribute 값을 설정한다.
|
||||||
|
*
|
||||||
|
* @param streFileNm
|
||||||
|
* the streFileNm to set
|
||||||
|
*/
|
||||||
|
public void setStreFileNm(String streFileNm) {
|
||||||
|
this.streFileNm = streFileNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the thumbFileNm
|
||||||
|
*/
|
||||||
|
public String getThumbFileNm() {
|
||||||
|
return thumbFileNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param thumbFileNm the thumbFileNm to set
|
||||||
|
*/
|
||||||
|
public void setThumbFileNm(String thumbFileNm) {
|
||||||
|
this.thumbFileNm = thumbFileNm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* toString 메소드를 대치한다.
|
||||||
|
*/
|
||||||
|
public String toString() {
|
||||||
|
return ToStringBuilder.reflectionToString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMenuName() {
|
||||||
|
return menuName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMenuName(String menuName) {
|
||||||
|
this.menuName = menuName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWhFile() {
|
||||||
|
return whFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWhFile(String whFile) {
|
||||||
|
this.whFile = whFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
30
src/main/java/itn/com/cmm/service/Globals.java
Normal file
30
src/main/java/itn/com/cmm/service/Globals.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Name : Globals.java
|
||||||
|
* Description : 시스템 구동 시 프로퍼티를 통해 사용될 전역변수를 정의한다.
|
||||||
|
* Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2009.01.19 박지욱 최초 생성
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 박지욱
|
||||||
|
* @since 2009. 01. 19
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class Globals {
|
||||||
|
//파일 업로드 원 파일명
|
||||||
|
public static final String ORIGIN_FILE_NM = "originalFileName";
|
||||||
|
//파일 확장자
|
||||||
|
public static final String FILE_EXT = "fileExtension";
|
||||||
|
//파일크기
|
||||||
|
public static final String FILE_SIZE = "fileSize";
|
||||||
|
//업로드된 파일명
|
||||||
|
public static final String UPLOAD_FILE_NM = "uploadFileName";
|
||||||
|
//파일경로
|
||||||
|
public static final String FILE_PATH = "filePath";
|
||||||
|
}
|
||||||
10
src/main/java/itn/com/cmm/service/ReadService.java
Normal file
10
src/main/java/itn/com/cmm/service/ReadService.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package itn.com.cmm.service;
|
||||||
|
|
||||||
|
import itn.com.cmm.ReadVO;
|
||||||
|
|
||||||
|
public interface ReadService {
|
||||||
|
|
||||||
|
public ReadVO selectReadYn(ReadVO readVO) throws Exception;
|
||||||
|
|
||||||
|
public void insertReadYn(ReadVO readVO) throws Exception;
|
||||||
|
}
|
||||||
67
src/main/java/itn/com/cmm/service/impl/CmmUseDAO.java
Normal file
67
src/main/java/itn/com/cmm/service/impl/CmmUseDAO.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
import itn.com.cmm.service.CmmnDetailCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return (List<CmmnDetailCode>) list("CmmUseDAO.selectCmmCodeDetail", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공통코드로 사용할 조직정보를 를 불러온다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return (List<CmmnDetailCode>) list("CmmUseDAO.selectOgrnztIdDetail", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공통코드로 사용할그룹정보를 를 불러온다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return (List<CmmnDetailCode>) list("CmmUseDAO.selectGroupIdDetail", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) throws Exception{
|
||||||
|
return (CmmnDetailCode) select("CmmUseDAO.selectCmmCodeDetailValue", vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,107 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
import itn.com.cmm.service.CmmnDetailCode;
|
||||||
|
import itn.com.cmm.service.EgovCmmUseService;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovCmmUseServiceImpl.java
|
||||||
|
* @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 서비스 구현 클래스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2009. 3. 11. 이삼섭
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 3. 11.
|
||||||
|
* @version
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Service("EgovCmmUseService")
|
||||||
|
public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements EgovCmmUseService {
|
||||||
|
|
||||||
|
@Resource(name = "cmmUseDAO")
|
||||||
|
private CmmUseDAO cmmUseDAO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공통코드를 조회한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return cmmUseDAO.selectCmmCodeDetail(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
|
||||||
|
*
|
||||||
|
* @param voList
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List voList) throws Exception {
|
||||||
|
ComDefaultCodeVO vo;
|
||||||
|
Map<String, List<CmmnDetailCode>> map = new HashMap<String, List<CmmnDetailCode>>();
|
||||||
|
|
||||||
|
Iterator<?> iter = voList.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
vo = (ComDefaultCodeVO) iter.next();
|
||||||
|
map.put(vo.getCodeId(), cmmUseDAO.selectCmmCodeDetail(vo));
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 조직정보를 코드형태로 리턴한다.
|
||||||
|
*
|
||||||
|
* @param 조회조건정보 vo
|
||||||
|
* @return 조직정보 List
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return cmmUseDAO.selectOgrnztIdDetail(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 그룹정보를 코드형태로 리턴한다.
|
||||||
|
*
|
||||||
|
* @param 조회조건정보 vo
|
||||||
|
* @return 그룹정보 List
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return cmmUseDAO.selectGroupIdDetail(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 선택 코드 상세정보 조회
|
||||||
|
*
|
||||||
|
* @param 조회조건정보 vo
|
||||||
|
* @return CmmnDetailCode
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) throws Exception {
|
||||||
|
return cmmUseDAO.selectCmmCodeDetailValue(vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import com.ibatis.sqlmap.client.SqlMapClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EgovComAbstractDAO.java 클래스
|
||||||
|
*
|
||||||
|
* @author 서준식
|
||||||
|
* @since 2011. 9. 23.
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------------- ----------------------
|
||||||
|
* 2011. 9. 23. 서준식 최초 생성
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public abstract class EgovComAbstractDAO extends EgovAbstractDAO {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Resource(name = "egov.sqlMapClient")
|
||||||
|
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
|
||||||
|
super.setSuperSqlMapClient(sqlMapClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,189 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
|
import itn.com.cmm.service.EgovFileMngService;
|
||||||
|
import itn.com.cmm.service.FileVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovFileMngServiceImpl.java
|
||||||
|
* @Description : 파일정보의 관리를 위한 구현 클래스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2009. 3. 25. 이삼섭 최초생성
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 3. 25.
|
||||||
|
* @version
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Service("EgovFileMngService")
|
||||||
|
public class EgovFileMngServiceImpl extends EgovAbstractServiceImpl implements EgovFileMngService {
|
||||||
|
|
||||||
|
@Resource(name = "FileManageDAO")
|
||||||
|
private FileManageDAO fileMngDAO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#deleteFileInfs(java.util.List)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
public void deleteFileInfs(List fvoList) throws Exception {
|
||||||
|
fileMngDAO.deleteFileInfs(fvoList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#insertFileInf(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String insertFileInf(FileVO fvo) throws Exception {
|
||||||
|
String atchFileId = fvo.getAtchFileId();
|
||||||
|
|
||||||
|
fileMngDAO.insertFileInf(fvo);
|
||||||
|
|
||||||
|
return atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#insertFileInfs(java.util.List)
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
@Override
|
||||||
|
public String insertFileInfs(List fvoList) throws Exception {
|
||||||
|
String atchFileId = "";
|
||||||
|
|
||||||
|
if (fvoList.size() != 0) {
|
||||||
|
atchFileId = fileMngDAO.insertFileInfs(fvoList);
|
||||||
|
}
|
||||||
|
if (atchFileId == "") {
|
||||||
|
atchFileId = null;
|
||||||
|
}
|
||||||
|
return atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#selectFileInfs(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<FileVO> selectFileInfs(FileVO fvo) throws Exception {
|
||||||
|
return fileMngDAO.selectFileInfs(fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#updateFileInfs(java.util.List)
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
@Override
|
||||||
|
public void updateFileInfs(List fvoList) throws Exception {
|
||||||
|
//Delete & Insert
|
||||||
|
fileMngDAO.updateFileInfs(fvoList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 하나의 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#deleteFileInf(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void deleteFileInf(FileVO fvo) throws Exception {
|
||||||
|
fileMngDAO.deleteFileInf(fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일에 대한 상세정보를 조회한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#selectFileInf(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FileVO selectFileInf(FileVO fvo) throws Exception {
|
||||||
|
return fileMngDAO.selectFileInf(fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일 구분자에 대한 최대값을 구한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#getMaxFileSN(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int getMaxFileSN(FileVO fvo) throws Exception {
|
||||||
|
return fileMngDAO.getMaxFileSN(fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 전체 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#deleteAllFileInf(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void deleteAllFileInf(FileVO fvo) throws Exception {
|
||||||
|
fileMngDAO.deleteAllFileInf(fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일명 검색에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#selectFileListByFileNm(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> selectFileListByFileNm(FileVO fvo) throws Exception {
|
||||||
|
List<FileVO> result = fileMngDAO.selectFileListByFileNm(fvo);
|
||||||
|
int cnt = fileMngDAO.selectFileListCntByFileNm(fvo);
|
||||||
|
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
map.put("resultList", result);
|
||||||
|
map.put("resultCnt", Integer.toString(cnt));
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @see itn.com.cmm.service.EgovFileMngService#selectImageFileList(itn.com.cmm.service.FileVO)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<FileVO> selectImageFileList(FileVO vo) throws Exception {
|
||||||
|
return fileMngDAO.selectImageFileList(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*단일 파일업데이트*/
|
||||||
|
@Override
|
||||||
|
public void updateFileInfo(List fvoList) throws Exception {
|
||||||
|
//Delete & Update
|
||||||
|
fileMngDAO.updateFileInfo(fvoList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteFmsFileInf(FileVO fileVO) throws Exception {
|
||||||
|
FileVO returnFileVO = new FileVO();
|
||||||
|
returnFileVO = fileMngDAO.selectFileInf(fileVO);
|
||||||
|
if(returnFileVO !=null) {
|
||||||
|
File delFile = new File(returnFileVO.getFileStreCours()+returnFileVO.getStreFileNm());
|
||||||
|
delFile.delete(); //실제파일 deletePerFile 삭제
|
||||||
|
}
|
||||||
|
//lettnfiledetail pk 인 lettnfile 는 삭제 안함
|
||||||
|
fileMngDAO.deleteFileInf(fileVO); //DB삭제
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
|
import itn.com.cmm.LoginVO;
|
||||||
|
import itn.com.cmm.service.EgovUserDetailsService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author 공통서비스 개발팀 서준식
|
||||||
|
* @since 2011. 8. 12.
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* 개정이력(Modification Information)
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2011. 8. 12. 서준식 최초생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EgovTestUserDetailsServiceImpl extends EgovAbstractServiceImpl implements EgovUserDetailsService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getAuthenticatedUser() {
|
||||||
|
|
||||||
|
LoginVO loginVO = new LoginVO();
|
||||||
|
loginVO.setId("TEST1");
|
||||||
|
loginVO.setPassword("raHLBnHFcunwNzcDcfad4PhD11hHgXSUr7fc1Jk9uoQ=");
|
||||||
|
loginVO.setUserSe("USR");
|
||||||
|
loginVO.setEmail("egovframe@nia.or.kr");
|
||||||
|
loginVO.setIhidNum("");
|
||||||
|
loginVO.setName("더미사용자");
|
||||||
|
loginVO.setOrgnztId("ORGNZT_0000000000000");
|
||||||
|
loginVO.setUniqId("USRCNFRM_00000000000");
|
||||||
|
return loginVO;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getAuthorities() {
|
||||||
|
|
||||||
|
// 권한 설정을 리턴한다.
|
||||||
|
List<String> listAuth = new ArrayList<String>();
|
||||||
|
listAuth.add("IS_AUTHENTICATED_ANONYMOUSLY");
|
||||||
|
listAuth.add("IS_AUTHENTICATED_FULLY");
|
||||||
|
listAuth.add("IS_AUTHENTICATED_REMEMBERED");
|
||||||
|
listAuth.add("ROLE_ADMIN");
|
||||||
|
listAuth.add("ROLE_ANONYMOUS");
|
||||||
|
listAuth.add("ROLE_RESTRICTED");
|
||||||
|
listAuth.add("ROLE_USER");
|
||||||
|
|
||||||
|
return listAuth;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean isAuthenticated() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
|
import itn.com.cmm.service.EgovUserDetailsService;
|
||||||
|
|
||||||
|
import org.springframework.web.context.request.RequestAttributes;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author 공통서비스 개발팀 서준식
|
||||||
|
* @since 2011. 6. 25.
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* 개정이력(Modification Information)
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2011. 8. 12. 서준식 최초생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EgovUserDetailsSessionServiceImpl extends EgovAbstractServiceImpl implements EgovUserDetailsService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getAuthenticatedUser() {
|
||||||
|
|
||||||
|
return RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getAuthorities() {
|
||||||
|
|
||||||
|
// 권한 설정을 리턴한다.
|
||||||
|
List<String> listAuth = new ArrayList<String>();
|
||||||
|
|
||||||
|
return listAuth;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean isAuthenticated() {
|
||||||
|
// 인증된 유저인지 확인한다.
|
||||||
|
|
||||||
|
if (RequestContextHolder.getRequestAttributes() == null) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION) == null) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
200
src/main/java/itn/com/cmm/service/impl/FileManageDAO.java
Normal file
200
src/main/java/itn/com/cmm/service/impl/FileManageDAO.java
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import itn.com.cmm.service.FileVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Class Name : EgovFileMngDAO.java
|
||||||
|
* @Description : 파일정보 관리를 위한 데이터 처리 클래스
|
||||||
|
* @Modification Information
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- ------- -------------------
|
||||||
|
* 2009. 3. 25. 이삼섭 최초생성
|
||||||
|
*
|
||||||
|
* @author 공통 서비스 개발팀 이삼섭
|
||||||
|
* @since 2009. 3. 25.
|
||||||
|
* @version
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Repository("FileManageDAO")
|
||||||
|
public class FileManageDAO extends EgovComAbstractDAO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
|
||||||
|
*
|
||||||
|
* @param fileList
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String insertFileInfs(List<?> fileList) throws Exception {
|
||||||
|
FileVO vo = (FileVO) fileList.get(0);
|
||||||
|
String atchFileId = vo.getAtchFileId();
|
||||||
|
|
||||||
|
|
||||||
|
String fileName = vo.getOrignlFileNm();
|
||||||
|
System.out.println("!!! "+fileName);
|
||||||
|
String newfileName = fileName.replaceAll(",", "_");
|
||||||
|
System.out.println("@@@ "+newfileName);
|
||||||
|
vo.setOrignlFileNm(newfileName);
|
||||||
|
|
||||||
|
|
||||||
|
insert("FileManageDAO.insertFileMaster", vo);
|
||||||
|
|
||||||
|
Iterator<?> iter = fileList.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
vo = (FileVO) iter.next();
|
||||||
|
|
||||||
|
insert("FileManageDAO.insertFileDetail", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return atchFileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void insertFileInf(FileVO vo) throws Exception {
|
||||||
|
insert("FileManageDAO.insertFileMaster", vo);
|
||||||
|
insert("FileManageDAO.insertFileDetail", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
|
||||||
|
*
|
||||||
|
* @param fileList
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void updateFileInfs(List<?> fileList) throws Exception {
|
||||||
|
FileVO vo;
|
||||||
|
Iterator<?> iter = fileList.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
vo = (FileVO) iter.next();
|
||||||
|
|
||||||
|
insert("FileManageDAO.insertFileDetail", vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 여러 개의 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @param fileList
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteFileInfs(List<?> fileList) throws Exception {
|
||||||
|
Iterator<?> iter = fileList.iterator();
|
||||||
|
FileVO vo;
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
vo = (FileVO) iter.next();
|
||||||
|
|
||||||
|
delete("FileManageDAO.deleteFileDetail", vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 하나의 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteFileInf(FileVO fvo) throws Exception {
|
||||||
|
delete("FileManageDAO.deleteFileDetail", fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<FileVO> selectFileInfs(FileVO vo) throws Exception {
|
||||||
|
return (List<FileVO>) list("FileManageDAO.selectFileList", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일 구분자에 대한 최대값을 구한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int getMaxFileSN(FileVO fvo) throws Exception {
|
||||||
|
return (Integer) select("FileManageDAO.getMaxFileSN", fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일에 대한 상세정보를 조회한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public FileVO selectFileInf(FileVO fvo) throws Exception {
|
||||||
|
return (FileVO) select("FileManageDAO.selectFileInf", fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 전체 파일을 삭제한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void deleteAllFileInf(FileVO fvo) throws Exception {
|
||||||
|
update("FileManageDAO.deleteCOMTNFILE", fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일명 검색에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<FileVO> selectFileListByFileNm(FileVO fvo) throws Exception {
|
||||||
|
return (List<FileVO>) list("FileManageDAO.selectFileListByFileNm", fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파일명 검색에 대한 목록 전체 건수를 조회한다.
|
||||||
|
*
|
||||||
|
* @param fvo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int selectFileListCntByFileNm(FileVO fvo) throws Exception {
|
||||||
|
return (Integer) select("FileManageDAO.selectFileListCntByFileNm", fvo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일에 대한 목록을 조회한다.
|
||||||
|
*
|
||||||
|
* @param vo
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<FileVO> selectImageFileList(FileVO vo) throws Exception {
|
||||||
|
return (List<FileVO>) list("FileManageDAO.selectImageFileList", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*단일파일 수정*/
|
||||||
|
public void updateFileInfo(List fvoList) throws Exception{
|
||||||
|
FileVO vo;
|
||||||
|
Iterator<?> iter = fvoList.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
vo = (FileVO) iter.next();
|
||||||
|
update("FileManageDAO.updateFileInfo", vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/main/java/itn/com/cmm/service/impl/ReadDAO.java
Normal file
18
src/main/java/itn/com/cmm/service/impl/ReadDAO.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||||
|
import itn.com.cmm.ReadVO;
|
||||||
|
|
||||||
|
@Repository("readDAO")
|
||||||
|
public class ReadDAO extends EgovAbstractDAO {
|
||||||
|
|
||||||
|
public ReadVO selectReadYn(ReadVO readVO) {
|
||||||
|
return (ReadVO)select("readDAO.selectReadYn", readVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insertReadYn(ReadVO readVO) {
|
||||||
|
insert("readDAO.insertReadYn", readVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
26
src/main/java/itn/com/cmm/service/impl/ReadServiceImpl.java
Normal file
26
src/main/java/itn/com/cmm/service/impl/ReadServiceImpl.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package itn.com.cmm.service.impl;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import itn.com.cmm.ReadVO;
|
||||||
|
import itn.com.cmm.service.ReadService;
|
||||||
|
|
||||||
|
@Service("readService")
|
||||||
|
public class ReadServiceImpl implements ReadService {
|
||||||
|
|
||||||
|
@Resource(name = "readDAO")
|
||||||
|
private ReadDAO readDAO;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReadVO selectReadYn(ReadVO readVO) throws Exception {
|
||||||
|
return readDAO.selectReadYn(readVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertReadYn(ReadVO readVO) throws Exception {
|
||||||
|
readDAO.insertReadYn(readVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
65
src/main/java/itn/com/cmm/taglibs/CodeTag.java
Normal file
65
src/main/java/itn/com/cmm/taglibs/CodeTag.java
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package itn.com.cmm.taglibs;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.jsp.JspException;
|
||||||
|
import javax.servlet.jsp.JspWriter;
|
||||||
|
import javax.servlet.jsp.tagext.SimpleTagSupport;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
import itn.com.cmm.service.CmmnDetailCode;
|
||||||
|
import itn.com.cmm.service.impl.CmmUseDAO;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class CodeTag extends SimpleTagSupport {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(CodeTag.class);
|
||||||
|
|
||||||
|
private static CmmUseDAO cmmUseDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private void setCmmUseDAO(CmmUseDAO cmmUseDAO) {
|
||||||
|
CodeTag.cmmUseDAO = cmmUseDAO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String codeId = null;
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
|
||||||
|
public void setCodeId(String codeId) {
|
||||||
|
this.codeId = codeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doTag() throws JspException, IOException {
|
||||||
|
JspWriter out = getJspContext().getOut();
|
||||||
|
ComDefaultCodeVO vo = new ComDefaultCodeVO();
|
||||||
|
vo.setCodeId(codeId);
|
||||||
|
vo.setCode(code);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!"".equals(codeId)) {
|
||||||
|
CmmnDetailCode cmmnDetailCode= cmmUseDAO.selectCmmCodeDetailValue(vo);
|
||||||
|
out.print(cmmnDetailCode.getCodeNm());
|
||||||
|
} else {
|
||||||
|
out.print("");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
88
src/main/java/itn/com/cmm/taglibs/DoubleSubmitTag.java
Normal file
88
src/main/java/itn/com/cmm/taglibs/DoubleSubmitTag.java
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package itn.com.cmm.taglibs;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import javax.servlet.jsp.JspException;
|
||||||
|
import javax.servlet.jsp.JspTagException;
|
||||||
|
import javax.servlet.jsp.tagext.TagSupport;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import itn.com.cmm.util.EgovDoubleSubmitHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TagSupport to support to double submit preventer
|
||||||
|
* @author Vincent Han
|
||||||
|
* @since 2014.08.07
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2014.08.07 표준프레임워크센터 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class DoubleSubmitTag extends TagSupport {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(DoubleSubmitTag.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated Serial Version UID
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 5242217605452312594L;
|
||||||
|
|
||||||
|
private String tokenKey = EgovDoubleSubmitHelper.DEFAULT_TOKEN_KEY;
|
||||||
|
|
||||||
|
public String getTokenKey() {
|
||||||
|
return tokenKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTokenKey(String tokenKey) {
|
||||||
|
this.tokenKey = tokenKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public int doStartTag() throws JspException {
|
||||||
|
StringBuilder buffer = new StringBuilder();
|
||||||
|
|
||||||
|
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
|
||||||
|
HttpSession session = request.getSession();
|
||||||
|
|
||||||
|
Map<String, String> map = null;
|
||||||
|
|
||||||
|
if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) {
|
||||||
|
map = new HashMap<String, String>();
|
||||||
|
|
||||||
|
session.setAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY, map);
|
||||||
|
} else {
|
||||||
|
map = (Map<String, String>) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// First call (check session)
|
||||||
|
if (map.get(tokenKey) == null) {
|
||||||
|
|
||||||
|
map.put(tokenKey, EgovDoubleSubmitHelper.getNewUUID());
|
||||||
|
|
||||||
|
LOGGER.debug("[Double Submit] session token created({}) : {}", tokenKey, map.get(tokenKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.append("<input type='hidden' name='").append(EgovDoubleSubmitHelper.PARAMETER_NAME).append("' value='").append(map.get(tokenKey)).append("'/>");
|
||||||
|
|
||||||
|
try {
|
||||||
|
pageContext.getOut().print(buffer.toString());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new JspTagException("Error: IOException while writing to the user");
|
||||||
|
}
|
||||||
|
|
||||||
|
return SKIP_BODY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
41
src/main/java/itn/com/cmm/taglibs/HpFmtTag.java
Normal file
41
src/main/java/itn/com/cmm/taglibs/HpFmtTag.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package itn.com.cmm.taglibs;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.servlet.jsp.JspException;
|
||||||
|
import javax.servlet.jsp.JspWriter;
|
||||||
|
import javax.servlet.jsp.tagext.SimpleTagSupport;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
import itn.com.cmm.service.CmmnDetailCode;
|
||||||
|
import itn.com.cmm.service.impl.CmmUseDAO;
|
||||||
|
import itn.com.cmm.util.MJUtil;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class HpFmtTag extends SimpleTagSupport {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(HpFmtTag.class);
|
||||||
|
|
||||||
|
private String hpNo;
|
||||||
|
|
||||||
|
public void setHpNo(String hpNo) {
|
||||||
|
this.hpNo = hpNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doTag() throws JspException, IOException {
|
||||||
|
JspWriter out = getJspContext().getOut();
|
||||||
|
|
||||||
|
try {
|
||||||
|
out.print(MJUtil.addDash(hpNo));
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
161
src/main/java/itn/com/cmm/taglibs/RadioTag.java
Normal file
161
src/main/java/itn/com/cmm/taglibs/RadioTag.java
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
package itn.com.cmm.taglibs;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import javax.servlet.jsp.JspException;
|
||||||
|
import javax.servlet.jsp.JspWriter;
|
||||||
|
import javax.servlet.jsp.tagext.SimpleTagSupport;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
import itn.com.cmm.service.CmmnDetailCode;
|
||||||
|
import itn.com.cmm.service.impl.CmmUseDAO;
|
||||||
|
import itn.com.cmm.util.StringUtil2;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class RadioTag extends SimpleTagSupport {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(RadioTag.class);
|
||||||
|
|
||||||
|
private static CmmUseDAO cmmUseDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private void setCmmUseDAO(CmmUseDAO cmmUseDAO) {
|
||||||
|
RadioTag.cmmUseDAO = cmmUseDAO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String codeId = null;
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String script;
|
||||||
|
|
||||||
|
private String css = null;
|
||||||
|
|
||||||
|
private Set<String> includeSet = null;
|
||||||
|
|
||||||
|
private String selectedValue = null;
|
||||||
|
|
||||||
|
private String defaultValue = null;
|
||||||
|
|
||||||
|
private String defaultText = null;
|
||||||
|
|
||||||
|
public void setSelectedValue(String selectedValue) {
|
||||||
|
this.selectedValue = selectedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScript(String script) {
|
||||||
|
this.script = script;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCss(String css) {
|
||||||
|
this.css = css;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludeSet(Set<String> includeSet) {
|
||||||
|
this.includeSet = includeSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultValue(String defaultValue) {
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultText(String defaultText) {
|
||||||
|
this.defaultText = defaultText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCodeId(String codeId) {
|
||||||
|
this.codeId = codeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludes(String includes) {
|
||||||
|
if (!StringUtil2.isEmpty(StringUtil2.trim(includes))) {
|
||||||
|
StringTokenizer includeTokens = new StringTokenizer(includes, ",");
|
||||||
|
String includeToken;
|
||||||
|
|
||||||
|
includeSet = new HashSet<String>();
|
||||||
|
while (includeTokens.hasMoreTokens()) {
|
||||||
|
includeToken = includeTokens.nextToken();
|
||||||
|
if (!StringUtil2.isEmpty(StringUtil2.trim(includeToken))) {
|
||||||
|
includeSet.add(includeToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (includeSet.isEmpty()) {
|
||||||
|
includeSet = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doTag() throws JspException, IOException {
|
||||||
|
JspWriter out = getJspContext().getOut();
|
||||||
|
|
||||||
|
StringBuffer tag = new StringBuffer("");
|
||||||
|
int i=0;
|
||||||
|
|
||||||
|
id = id+i++;
|
||||||
|
if (defaultText != null) {
|
||||||
|
tag.append("\n\t\t<div><input type=\"radio\" id=\"" + id + "\" name=\"" + name + "\" value=\"" + defaultValue + "\" checked=\"checked\"");
|
||||||
|
if (css != null) {
|
||||||
|
tag.append(" " + css + " ");
|
||||||
|
}
|
||||||
|
if (script != null) {
|
||||||
|
tag.append(" " + script + " ");
|
||||||
|
}
|
||||||
|
tag.append("> <label for=\""+ id +"\">"+defaultText+"</label></div>");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ComDefaultCodeVO vo = new ComDefaultCodeVO();
|
||||||
|
vo.setCodeId(codeId);
|
||||||
|
|
||||||
|
List<CmmnDetailCode> codeList;
|
||||||
|
try {
|
||||||
|
|
||||||
|
codeList = cmmUseDAO.selectCmmCodeDetail(vo);
|
||||||
|
if (codeList != null) {
|
||||||
|
for (CmmnDetailCode code : codeList) {
|
||||||
|
if (includeSet == null || includeSet.contains(code.getCode())) {
|
||||||
|
id = id+i++;
|
||||||
|
tag.append("\n\t\t<div><input type=\"radio\" id=\"" + id + "\" name=\"" + name + "\" value=\"" + StringUtil2.escapeXml(code.getCode()) + "\"");
|
||||||
|
if (css != null) {
|
||||||
|
tag.append(" " + css + " ");
|
||||||
|
}
|
||||||
|
if (script != null) {
|
||||||
|
tag.append(" " + script + " ");
|
||||||
|
}
|
||||||
|
if (code.getCode().equals(selectedValue)) {
|
||||||
|
tag.append(" checked=\"checked\" ");
|
||||||
|
}
|
||||||
|
tag.append("> <label for=\""+ id +"\">"+StringUtil2.escapeXml(code.getCodeNm())+"</label></div>");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
out.print(tag.toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
162
src/main/java/itn/com/cmm/taglibs/SelectTag.java
Normal file
162
src/main/java/itn/com/cmm/taglibs/SelectTag.java
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
package itn.com.cmm.taglibs;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import javax.servlet.jsp.JspException;
|
||||||
|
import javax.servlet.jsp.JspWriter;
|
||||||
|
import javax.servlet.jsp.tagext.SimpleTagSupport;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import itn.com.cmm.ComDefaultCodeVO;
|
||||||
|
import itn.com.cmm.service.CmmnDetailCode;
|
||||||
|
import itn.com.cmm.service.impl.CmmUseDAO;
|
||||||
|
import itn.com.cmm.util.StringUtil2;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SelectTag extends SimpleTagSupport {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(SelectTag.class);
|
||||||
|
|
||||||
|
|
||||||
|
private static CmmUseDAO cmmUseDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private void setCmmUseDAO(CmmUseDAO cmmUseDAO) {
|
||||||
|
SelectTag.cmmUseDAO = cmmUseDAO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String codeId = null;
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private String script;
|
||||||
|
|
||||||
|
private String css;
|
||||||
|
|
||||||
|
private Set<String> includeSet = null;
|
||||||
|
|
||||||
|
private String selectedValue = null;
|
||||||
|
|
||||||
|
private String defaultValue = null;
|
||||||
|
|
||||||
|
private String defaultText = null;
|
||||||
|
|
||||||
|
public void setSelectedValue(String selectedValue) {
|
||||||
|
this.selectedValue = selectedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScript(String script) {
|
||||||
|
this.script = script;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCss(String css) {
|
||||||
|
this.css = css;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludeSet(Set<String> includeSet) {
|
||||||
|
this.includeSet = includeSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultValue(String defaultValue) {
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultText(String defaultText) {
|
||||||
|
this.defaultText = defaultText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCodeId(String codeId) {
|
||||||
|
this.codeId = codeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludes(String includes) {
|
||||||
|
if (!StringUtil2.isEmpty(StringUtil2.trim(includes))) {
|
||||||
|
StringTokenizer includeTokens = new StringTokenizer(includes, ",");
|
||||||
|
String includeToken;
|
||||||
|
|
||||||
|
includeSet = new HashSet<String>();
|
||||||
|
while (includeTokens.hasMoreTokens()) {
|
||||||
|
includeToken = includeTokens.nextToken();
|
||||||
|
if (!StringUtil2.isEmpty(StringUtil2.trim(includeToken))) {
|
||||||
|
includeSet.add(includeToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (includeSet.isEmpty()) {
|
||||||
|
includeSet = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doTag() throws JspException, IOException {
|
||||||
|
JspWriter out = getJspContext().getOut();
|
||||||
|
|
||||||
|
StringBuffer tag = new StringBuffer("\n\t<select name=\"" + name + "\" ");
|
||||||
|
|
||||||
|
if (id != null) {
|
||||||
|
tag.append("id=\"" + id + "\" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (css != null) {
|
||||||
|
tag.append(" " + css + " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (script != null) {
|
||||||
|
tag.append(" " + script + " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.append(">");
|
||||||
|
|
||||||
|
if (defaultText != null) {
|
||||||
|
tag.append("\n\t\t<option value=\"" + defaultValue + "\">" + defaultText + "</option>");
|
||||||
|
}
|
||||||
|
|
||||||
|
ComDefaultCodeVO vo = new ComDefaultCodeVO();
|
||||||
|
vo.setCodeId(codeId);
|
||||||
|
|
||||||
|
List<CmmnDetailCode> codeList;
|
||||||
|
try {
|
||||||
|
|
||||||
|
codeList = cmmUseDAO.selectCmmCodeDetail(vo);
|
||||||
|
if (codeList != null) {
|
||||||
|
for (CmmnDetailCode code : codeList) {
|
||||||
|
if (includeSet == null || includeSet.contains(code.getCode())) {
|
||||||
|
|
||||||
|
if (code.getCode().equals(selectedValue)) {
|
||||||
|
tag.append("\n\t\t<option value=\"" + StringUtil2.escapeXml(code.getCode()) + "\" selected=\"selected\" >" + StringUtil2.escapeXml(code.getCodeNm()) + "</option>");
|
||||||
|
} else {
|
||||||
|
tag.append("\n\t\t<option value=\"" + StringUtil2.escapeXml(code.getCode()) + "\">" + StringUtil2.escapeXml(code.getCodeNm()) + "</option>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.append("\n\t</select>\n");
|
||||||
|
|
||||||
|
out.print(tag.toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
113
src/main/java/itn/com/cmm/util/ContextUtil.java
Normal file
113
src/main/java/itn/com/cmm/util/ContextUtil.java
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import org.springframework.web.context.ContextLoader;
|
||||||
|
import org.springframework.web.context.WebApplicationContext;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : ContextUtil.java
|
||||||
|
* @date : 2023.04.07
|
||||||
|
* @description : 빈이 아닌 객체에서 스프링 빈(bean) 및 서블릿(servlet) 객체 직접 얻는 Util
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.04.07 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ContextUtil {
|
||||||
|
/**
|
||||||
|
* 빈을 직접 얻습니다.
|
||||||
|
*
|
||||||
|
* @param beanName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Object getBean(String beanName) {
|
||||||
|
WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
|
||||||
|
return context.getBean(beanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HttpServletReqeust 객체를 직접 얻습니다.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static HttpServletRequest getRequest() {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
return attr.getRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HttpServletResponse 객체를 직접 얻습니다.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static HttpServletResponse getResponse() {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
return attr.getResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HttpSession 객체를 직접 얻습니다.
|
||||||
|
*
|
||||||
|
* @param gen 새 세션 생성 여부
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static HttpSession getSession(boolean gen) {
|
||||||
|
return ContextUtil.getRequest().getSession(gen);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* REQUEST 영역에서 가져오기
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Object getAttrFromRequest(String key) {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
return attr.getAttribute(key, ServletRequestAttributes.SCOPE_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* REQUEST 영역에 객체 저장
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @param obj
|
||||||
|
*/
|
||||||
|
public static void setAttrToRequest(String key, Object obj) {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
attr.setAttribute(key, obj, ServletRequestAttributes.SCOPE_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SESSION 영역에서 가져오기
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Object getAttrFromSession(String key) {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
return attr.getAttribute(key, ServletRequestAttributes.SCOPE_SESSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Session 영역에 객체 저장
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @param obj
|
||||||
|
*/
|
||||||
|
public static void setAttrToSession(String key, Object obj) {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
attr.setAttribute(key, obj, ServletRequestAttributes.SCOPE_SESSION);
|
||||||
|
}
|
||||||
|
}
|
||||||
369
src/main/java/itn/com/cmm/util/Criteria.java
Normal file
369
src/main/java/itn/com/cmm/util/Criteria.java
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 프로그램 파일명 : Criteria.java
|
||||||
|
*
|
||||||
|
* 프로그램 설명 : 검색용 객체
|
||||||
|
*
|
||||||
|
* 작 성 자 : jeong hoon hee
|
||||||
|
*
|
||||||
|
* 작 성 일 : 2013. 12. 02.
|
||||||
|
*
|
||||||
|
* Copyright(c) 2013 DAEYOON Co. Ltd. All rights reserved.
|
||||||
|
*/
|
||||||
|
public class Criteria implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 검색용 맵 객체
|
||||||
|
*/
|
||||||
|
private Map<String, Object> condition = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getParams() 메소드에서 append 할지여부의 condition맵
|
||||||
|
*/
|
||||||
|
private Map<String, Boolean> paramViewMap = new HashMap<String, Boolean>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 정렬용 리스트 객체
|
||||||
|
*/
|
||||||
|
private List<Order> orderList = new ArrayList<Order>();
|
||||||
|
|
||||||
|
/** 검색조건 */
|
||||||
|
private String searchCondition = "";
|
||||||
|
|
||||||
|
/** 검색Keyword */
|
||||||
|
private String searchKeyword = "";
|
||||||
|
|
||||||
|
/** 검색사용여부 */
|
||||||
|
private String searchUseYn = "";
|
||||||
|
|
||||||
|
/** 현재페이지 */
|
||||||
|
private int pageIndex = 1;
|
||||||
|
|
||||||
|
/** 페이지갯수 */
|
||||||
|
private int pageUnit = 10;
|
||||||
|
|
||||||
|
/** 페이지사이즈 */
|
||||||
|
private int pageSize = 10;
|
||||||
|
|
||||||
|
/** firstIndex */
|
||||||
|
private int firstIndex = 1;
|
||||||
|
|
||||||
|
/** lastIndex */
|
||||||
|
private int lastIndex = 1;
|
||||||
|
|
||||||
|
/** recordCountPerPage */
|
||||||
|
private int recordCountPerPage = 10;
|
||||||
|
|
||||||
|
/** 검색KeywordFrom */
|
||||||
|
private String searchKeywordFrom = "";
|
||||||
|
|
||||||
|
/** 검색KeywordTo */
|
||||||
|
private String searchKeywordTo = "";
|
||||||
|
|
||||||
|
/** 메뉴번호 */
|
||||||
|
private Integer menuNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 기본생성자
|
||||||
|
*/
|
||||||
|
public Criteria() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* request객체에서 넘어오는 검색파라미터를 셋팅한다. (* condition 맵처리)
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Criteria(HttpServletRequest request) {
|
||||||
|
|
||||||
|
Set<String> set = request.getParameterMap().keySet();
|
||||||
|
Iterator<String> iter = set.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
String key = iter.next();
|
||||||
|
if (key.equals("pageUnit")) {
|
||||||
|
try {
|
||||||
|
pageUnit = Integer.parseInt(request.getParameter(key));
|
||||||
|
|
||||||
|
this.condition.put("pageUnit", pageUnit);
|
||||||
|
this.paramViewMap.put("pageUnit", true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else if (key.equals("pageSize")) {
|
||||||
|
try {
|
||||||
|
pageSize = Integer.parseInt(request.getParameter(key));
|
||||||
|
|
||||||
|
this.condition.put("pageSize", pageSize);
|
||||||
|
this.paramViewMap.put("pageSize", true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else if (key.equals("pageIndex")) {
|
||||||
|
try {
|
||||||
|
pageIndex = Integer.parseInt(request.getParameter(key));
|
||||||
|
|
||||||
|
this.condition.put("pageIndex", pageIndex);
|
||||||
|
this.paramViewMap.put("pageIndex", true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else if (key.equals("searchCondition")) {
|
||||||
|
try {
|
||||||
|
searchCondition = request.getParameter(key);
|
||||||
|
|
||||||
|
this.condition.put("searchCondition", searchCondition);
|
||||||
|
this.paramViewMap.put("searchCondition", true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else if (key.equals("searchKeyword")) {
|
||||||
|
try {
|
||||||
|
searchKeyword = request.getParameter(key);
|
||||||
|
|
||||||
|
this.condition.put("searchKeyword", searchKeyword);
|
||||||
|
this.paramViewMap.put("searchKeyword", true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else if (key.equals("menuNo")) {
|
||||||
|
try {
|
||||||
|
menuNo = Integer.parseInt(request.getParameter(key));
|
||||||
|
|
||||||
|
this.condition.put("menuNo", menuNo);
|
||||||
|
this.paramViewMap.put("menuNo", true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else if (key.startsWith("condition.")) {
|
||||||
|
String conditionKey = StringUtils.substringAfter(key, "condition.");
|
||||||
|
String conditionValue = request.getParameter(key);
|
||||||
|
if (StringUtils.isNotEmpty(conditionValue)) {
|
||||||
|
this.condition.put(conditionKey, conditionValue);
|
||||||
|
this.paramViewMap.put(conditionKey, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getCondition() {
|
||||||
|
return condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCondition(Map<String, Object> condition) {
|
||||||
|
this.condition = condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object remove(Object key) {
|
||||||
|
return this.condition.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object get(String key) {
|
||||||
|
return this.condition.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object put(String key, Object value) {
|
||||||
|
this.paramViewMap.put(key, true);
|
||||||
|
return this.condition.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object put(String key, Object value, boolean append) {
|
||||||
|
this.paramViewMap.put(key, append);
|
||||||
|
return this.condition.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Order> getOrderList() {
|
||||||
|
return orderList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderList(List<Order> orderList) {
|
||||||
|
this.orderList = orderList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addOrder(Order order) {
|
||||||
|
this.orderList.add(order);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 Integer getMenuNo() {
|
||||||
|
return menuNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMenuNo(Integer menuNo) {
|
||||||
|
this.menuNo = menuNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchUseYn() {
|
||||||
|
return searchUseYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchUseYn(String searchUseYn) {
|
||||||
|
this.searchUseYn = searchUseYn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageIndex() {
|
||||||
|
return pageIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageIndex(int pageIndex) {
|
||||||
|
this.pageIndex = pageIndex;
|
||||||
|
condition.put("pageIndex", pageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageUnit() {
|
||||||
|
return pageUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageUnit(int pageUnit) {
|
||||||
|
this.pageUnit = pageUnit;
|
||||||
|
condition.put("pageUnit", pageUnit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPageSize() {
|
||||||
|
return pageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPageSize(int pageSize) {
|
||||||
|
this.pageSize = pageSize;
|
||||||
|
condition.put("pageSize", pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFirstIndex() {
|
||||||
|
return firstIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstIndex(int firstIndex) {
|
||||||
|
this.firstIndex = firstIndex;
|
||||||
|
condition.put("firstIndex", firstIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLastIndex() {
|
||||||
|
return lastIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastIndex(int lastIndex) {
|
||||||
|
this.lastIndex = lastIndex;
|
||||||
|
condition.put("lastIndex", lastIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRecordCountPerPage() {
|
||||||
|
return recordCountPerPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRecordCountPerPage(int recordCountPerPage) {
|
||||||
|
this.recordCountPerPage = recordCountPerPage;
|
||||||
|
condition.put("recordCountPerPage", recordCountPerPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchKeywordFrom() {
|
||||||
|
return searchKeywordFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchKeywordFrom(String searchKeywordFrom) {
|
||||||
|
this.searchKeywordFrom = searchKeywordFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchKeywordTo() {
|
||||||
|
return searchKeywordTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchKeywordTo(String searchKeywordTo) {
|
||||||
|
this.searchKeywordTo = searchKeywordTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 검색파라미터 문자열을 리턴한다.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getParams() {
|
||||||
|
return getParams(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 검색파라미터 문자열을 리턴한다.
|
||||||
|
* @param appendPageIndex-pageindex를 붙힐지말지여부
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getParams(boolean appendPageIndex) {
|
||||||
|
StringBuffer parameterString = new StringBuffer();
|
||||||
|
if (appendPageIndex) {
|
||||||
|
parameterString.append("pageIndex=");
|
||||||
|
parameterString.append(this.pageIndex);
|
||||||
|
parameterString.append("&");
|
||||||
|
}
|
||||||
|
parameterString.append("pageUnit=");
|
||||||
|
parameterString.append(this.pageUnit);
|
||||||
|
parameterString.append("&pageSize=");
|
||||||
|
parameterString.append(this.pageSize);
|
||||||
|
parameterString.append("&searchCondition=");
|
||||||
|
parameterString.append(StringUtils.defaultString(this.searchCondition));
|
||||||
|
parameterString.append("&searchKeyword=");
|
||||||
|
try {
|
||||||
|
parameterString.append(URLEncoder.encode(StringUtils.defaultString(this.searchKeyword), "UTF-8"));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
System.out.println("UnsupportedEncodingException By Criteria.getParams() [searchValue] : " + e.getMessage());
|
||||||
|
}
|
||||||
|
parameterString.append("&menuNo=");
|
||||||
|
parameterString.append((this.menuNo != null) ? this.menuNo : "");
|
||||||
|
if (this.condition.size() > 0) {
|
||||||
|
Set<String> set = this.condition.keySet();
|
||||||
|
Iterator<String> iter = set.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
String key = iter.next();
|
||||||
|
Object value = this.condition.get(key);
|
||||||
|
Boolean append = this.paramViewMap.get(key)!=null?this.paramViewMap.get(key):true;
|
||||||
|
if (append) {
|
||||||
|
parameterString.append("&condition.");
|
||||||
|
parameterString.append(key);
|
||||||
|
parameterString.append("=");
|
||||||
|
if (value instanceof String) {
|
||||||
|
if (StringUtils.isNotEmpty((String) value)) {
|
||||||
|
try {
|
||||||
|
parameterString.append(URLEncoder.encode((String) value, "UTF-8"));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
System.out.println("UnsupportedEncodingException By Criteria.getParams() [condition] : " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
parameterString.append(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parameterString.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return ToStringBuilder.reflectionToString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
205
src/main/java/itn/com/cmm/util/DateUtils.java
Normal file
205
src/main/java/itn/com/cmm/util/DateUtils.java
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : DateUtil.java
|
||||||
|
* @date : 2023.04.06
|
||||||
|
* @description : Date 다루는 Util
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.04.06 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class DateUtils {
|
||||||
|
|
||||||
|
// 날짜를 포맷하는 기본 포맷터 정의
|
||||||
|
private static final DateTimeFormatter SLUSH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getTodayYearAndMonthAndFirstDay
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.04.06
|
||||||
|
* @description : 해당 년월일 구하기 : 일은 1일
|
||||||
|
* @return ex) 2023/04/01
|
||||||
|
*/
|
||||||
|
public static String getTodayYearAndMonthAndFirstDay() {
|
||||||
|
LocalDate currentDate = LocalDate.now();
|
||||||
|
return LocalDate.of(currentDate.getYear(), currentDate.getMonthValue(), 1)
|
||||||
|
.format( DateTimeFormatter.ofPattern("yyyy/MM/dd"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getTodayYearAndMonthAndLastDay
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.04.06
|
||||||
|
* @description : 해당 년월일 구하기 : 일은 마지막일
|
||||||
|
* @return ex) 2023/04/30
|
||||||
|
*/
|
||||||
|
public static String getTodayYearAndMonthAndLastDay() {
|
||||||
|
LocalDate currentDate = LocalDate.now();
|
||||||
|
return LocalDate.of(currentDate.getYear(), currentDate.getMonthValue(), currentDate.lengthOfMonth())
|
||||||
|
.format( DateTimeFormatter.ofPattern("yyyy/MM/dd"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getNowYearToString
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.04.07
|
||||||
|
* @description : 현재 연도
|
||||||
|
* @return : String
|
||||||
|
*/
|
||||||
|
public static String getNowYearToString() {
|
||||||
|
return Integer.toString(LocalDate.now().getYear());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getNowMonthToString
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.04.07
|
||||||
|
* @description : 현재 월
|
||||||
|
* @return : String
|
||||||
|
*/
|
||||||
|
public static String getNowMonthToString() {
|
||||||
|
LocalDate currentDate = LocalDate.now();
|
||||||
|
return Integer.toString(currentDate.getMonthValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getNowDayToString
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.04.07
|
||||||
|
* @description : 현재 일
|
||||||
|
* @return : String
|
||||||
|
*/
|
||||||
|
public static String getNowDayToString() {
|
||||||
|
LocalDate currentDate = LocalDate.now();
|
||||||
|
return Integer.toString(currentDate.getDayOfMonth());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getNowDayToString
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.08.08
|
||||||
|
* @description : yyyy-MM-dd HH:mm:ss.S 형식을 yyyy-MM-dd HH:mm 로 변환
|
||||||
|
* @return
|
||||||
|
* @throws ParseException
|
||||||
|
*/
|
||||||
|
public static String getChangFormatS(String str) throws ParseException {
|
||||||
|
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); // 원본 형식
|
||||||
|
Date date = inputFormat.parse(str); // 문자열을 날짜 객체로 변환
|
||||||
|
|
||||||
|
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 원하는 출력 형식
|
||||||
|
String formattedDate = outputFormat.format(date); // 날짜 객체를 원하는 형식의 문자열로 변환
|
||||||
|
|
||||||
|
return formattedDate; // 출력: 2023-08-07 09:36
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 현재 날짜를 기본 포맷으로 반환
|
||||||
|
public static String getCurrentDate() {
|
||||||
|
return getCurrentDate(SLUSH_FORMATTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 현재 날짜를 지정된 포맷으로 반환
|
||||||
|
public static String getCurrentDate(DateTimeFormatter formatter) {
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
return today.format(formatter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 현재 날짜에서 특정 일수 전 날짜를 기본 포맷으로 반환
|
||||||
|
public static String getDateMonthsAgo(int months) {
|
||||||
|
return getDateMonthsAgo(months, SLUSH_FORMATTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 현재 날짜에서 특정 일수 전 날짜를 지정된 포맷으로 반환
|
||||||
|
public static String getDateMonthsAgo(int months, DateTimeFormatter formatter) {
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
// System.out.println("months : "+ months);
|
||||||
|
// System.out.println("today.minusMonths(months) : "+ today.minusMonths(months).format(formatter));
|
||||||
|
LocalDate monthsAgo = today.minusMonths(months).plusDays(1);
|
||||||
|
// System.out.println("monthsAgo : " + monthsAgo);
|
||||||
|
// System.out.println("monthsAgo.format(formatter) : " + monthsAgo.format(formatter));
|
||||||
|
return monthsAgo.format(formatter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : dateChkAndValueChk
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.07.05
|
||||||
|
* @description : 검색 날짜 검증 및 일수 체크
|
||||||
|
* @param searchStartDate
|
||||||
|
* @param searchEndDate
|
||||||
|
* @param dateVal
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean dateChkAndValueChk(String searchStartDate, String searchEndDate, int months) {
|
||||||
|
boolean isValid = true;
|
||||||
|
|
||||||
|
|
||||||
|
// 날짜 검증
|
||||||
|
LocalDate startDate = null;
|
||||||
|
LocalDate endDate = null;
|
||||||
|
|
||||||
|
// 검색 시작일자와 종료일자가 있는지 체크
|
||||||
|
if (searchStartDate == null || searchStartDate.isEmpty() || searchEndDate == null || searchEndDate.isEmpty()) {
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 날짜 형식으로 변환
|
||||||
|
if (isValid) {
|
||||||
|
try {
|
||||||
|
startDate = LocalDate.parse(searchStartDate, SLUSH_FORMATTER);
|
||||||
|
endDate = LocalDate.parse(searchEndDate, SLUSH_FORMATTER);
|
||||||
|
} catch (Exception e) {
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 시작일자가 종료일자보다 이후인지 확인
|
||||||
|
if (isValid && startDate.isAfter(endDate)) {
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 총 기간이 지정한 개월 수를 넘는지 확인
|
||||||
|
if (isValid) {
|
||||||
|
long monthsBetween = ChronoUnit.MONTHS.between(startDate, endDate);
|
||||||
|
if (monthsBetween >= months) {
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isValid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String setStrToDataFormatter(String str, String formatter) {
|
||||||
|
|
||||||
|
// 입력 문자열을 LocalDateTime으로 변환
|
||||||
|
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
LocalDateTime dateTime = LocalDateTime.parse(str, inputFormatter);
|
||||||
|
|
||||||
|
// 원하는 출력 포맷 적용
|
||||||
|
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(formatter);
|
||||||
|
String formattedDate = dateTime.format(outputFormatter);
|
||||||
|
|
||||||
|
return formattedDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
83
src/main/java/itn/com/cmm/util/EgovBasicLogger.java
Normal file
83
src/main/java/itn/com/cmm/util/EgovBasicLogger.java
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class to support to logging information
|
||||||
|
* @author Vincent Han
|
||||||
|
* @since 2014.09.18
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2014.09.18 표준프레임워크센터 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class EgovBasicLogger {
|
||||||
|
private static final Level IGNORE_INFO_LEVEL = Level.OFF;
|
||||||
|
private static final Level DEBUG_INFO_LEVEL = Level.FINEST;
|
||||||
|
private static final Level INFO_INFO_LEVEL = Level.INFO;
|
||||||
|
|
||||||
|
private static final Logger ignoreLogger = Logger.getLogger("ignore");
|
||||||
|
private static final Logger debugLogger = Logger.getLogger("debug");
|
||||||
|
private static final Logger infoLogger = Logger.getLogger("info");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 기록이나 처리가 불필요한 경우 사용.
|
||||||
|
* @param message
|
||||||
|
* @param exception
|
||||||
|
*/
|
||||||
|
public static void ignore(String message, Exception exception) {
|
||||||
|
if (exception == null) {
|
||||||
|
ignoreLogger.log(IGNORE_INFO_LEVEL, message);
|
||||||
|
} else {
|
||||||
|
ignoreLogger.log(IGNORE_INFO_LEVEL, message, exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 기록이나 처리가 불필요한 경우 사용.
|
||||||
|
* @param message
|
||||||
|
* @param exception
|
||||||
|
*/
|
||||||
|
public static void ignore(String message) {
|
||||||
|
ignore(message, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 디버그 정보를 기록하는 경우 사용.
|
||||||
|
* @param message
|
||||||
|
* @param exception
|
||||||
|
*/
|
||||||
|
public static void debug(String message, Exception exception) {
|
||||||
|
if (exception == null) {
|
||||||
|
debugLogger.log(DEBUG_INFO_LEVEL, message);
|
||||||
|
} else {
|
||||||
|
debugLogger.log(DEBUG_INFO_LEVEL, message, exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 디버그 정보를 기록하는 경우 사용.
|
||||||
|
* @param message
|
||||||
|
* @param exception
|
||||||
|
*/
|
||||||
|
public static void debug(String message) {
|
||||||
|
debug(message, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 일반적이 정보를 기록하는 경우 사용.
|
||||||
|
* @param message
|
||||||
|
* @param exception
|
||||||
|
*/
|
||||||
|
public static void info(String message) {
|
||||||
|
infoLogger.log(INFO_INFO_LEVEL, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
118
src/main/java/itn/com/cmm/util/EgovDoubleSubmitHelper.java
Normal file
118
src/main/java/itn/com/cmm/util/EgovDoubleSubmitHelper.java
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class to support to double submit preventer
|
||||||
|
* @author Vincent Han
|
||||||
|
* @since 2014.08.07
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2014.08.07 표준프레임워크센터 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class EgovDoubleSubmitHelper {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovDoubleSubmitHelper.class);
|
||||||
|
|
||||||
|
public final static String SESSION_TOKEN_KEY = "egovframework.double.submit.preventer.session.key";
|
||||||
|
|
||||||
|
public final static String PARAMETER_NAME = "egovframework.double.submit.preventer.parameter.name";
|
||||||
|
|
||||||
|
public final static String DEFAULT_TOKEN_KEY = "DEFAULT";
|
||||||
|
|
||||||
|
public static String getNewUUID() {
|
||||||
|
return UUID.randomUUID().toString().toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkAndSaveToken() {
|
||||||
|
return checkAndSaveToken(DEFAULT_TOKEN_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkAndSaveToken(String tokenKey) {
|
||||||
|
|
||||||
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
||||||
|
HttpSession session = request.getSession();
|
||||||
|
|
||||||
|
// check session...
|
||||||
|
if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) {
|
||||||
|
return false;
|
||||||
|
//throw new RuntimeException("Double Submit Preventer TagLig isn't set. Check JSP.");
|
||||||
|
}
|
||||||
|
|
||||||
|
String parameter = request.getParameter(EgovDoubleSubmitHelper.PARAMETER_NAME);
|
||||||
|
|
||||||
|
// check parameter
|
||||||
|
if (parameter == null) {
|
||||||
|
return false;
|
||||||
|
//throw new RuntimeException("Double Submit Preventer parameter isn't set. Check JSP.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, String> map = (Map<String, String>) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY);
|
||||||
|
|
||||||
|
if (parameter.equals(map.get(tokenKey))) {
|
||||||
|
|
||||||
|
LOGGER.debug("[Double Submit] session token ({}) equals to parameter token.", tokenKey);
|
||||||
|
|
||||||
|
map.put(tokenKey, getNewUUID());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.debug("[Double Submit] session token ({}) isn't equal to parameter token.", tokenKey);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkAndSaveToken(String tokenKey , MultipartHttpServletRequest multiRequest) {
|
||||||
|
|
||||||
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
||||||
|
HttpSession session = request.getSession();
|
||||||
|
|
||||||
|
// check session...
|
||||||
|
if (session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY) == null) {
|
||||||
|
throw new RuntimeException("Double Submit Preventer TagLig isn't set. Check JSP.");
|
||||||
|
}
|
||||||
|
|
||||||
|
//String parameter = request.getParameter(EgovDoubleSubmitHelper.PARAMETER_NAME);
|
||||||
|
String parameter = multiRequest.getParameter(EgovDoubleSubmitHelper.PARAMETER_NAME);
|
||||||
|
|
||||||
|
// check parameter
|
||||||
|
if (parameter == null) {
|
||||||
|
throw new RuntimeException("Double Submit Preventer parameter isn't set. Check JSP.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, String> map = (Map<String, String>) session.getAttribute(EgovDoubleSubmitHelper.SESSION_TOKEN_KEY);
|
||||||
|
|
||||||
|
if (parameter.equals(map.get(tokenKey))) {
|
||||||
|
|
||||||
|
LOGGER.debug("[Double Submit] session token ({}) equals to parameter token.", tokenKey);
|
||||||
|
|
||||||
|
map.put(tokenKey, getNewUUID());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.debug("[Double Submit] session token ({}) isn't equal to parameter token.", tokenKey);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
126
src/main/java/itn/com/cmm/util/EgovResourceCloseHelper.java
Normal file
126
src/main/java/itn/com/cmm/util/EgovResourceCloseHelper.java
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.Closeable;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.sql.Wrapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class to support to close resources
|
||||||
|
* @author Vincent Han
|
||||||
|
* @since 2014.09.18
|
||||||
|
* @version 1.0
|
||||||
|
* @see
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* << 개정이력(Modification Information) >>
|
||||||
|
*
|
||||||
|
* 수정일 수정자 수정내용
|
||||||
|
* ------- -------- ---------------------------
|
||||||
|
* 2014.09.18 표준프레임워크센터 최초 생성
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class EgovResourceCloseHelper {
|
||||||
|
/**
|
||||||
|
* Resource close 처리.
|
||||||
|
* @param resources
|
||||||
|
*/
|
||||||
|
public static void close(Closeable ... resources) {
|
||||||
|
for (Closeable resource : resources) {
|
||||||
|
if (resource != null) {
|
||||||
|
try {
|
||||||
|
resource.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JDBC 관련 resource 객체 close 처리
|
||||||
|
* @param objects
|
||||||
|
*/
|
||||||
|
public static void closeDBObjects(Wrapper ... objects) {
|
||||||
|
for (Object object : objects) {
|
||||||
|
if (object != null) {
|
||||||
|
if (object instanceof ResultSet) {
|
||||||
|
try {
|
||||||
|
((ResultSet)object).close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
|
||||||
|
}
|
||||||
|
} else if (object instanceof Statement) {
|
||||||
|
try {
|
||||||
|
((Statement)object).close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
|
||||||
|
}
|
||||||
|
} else if (object instanceof Connection) {
|
||||||
|
try {
|
||||||
|
((Connection)object).close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Wrapper type is not found : " + object.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket 관련 resource 객체 close 처리
|
||||||
|
* @param objects
|
||||||
|
*/
|
||||||
|
public static void closeSocketObjects(Socket socket, ServerSocket server) {
|
||||||
|
if (socket != null) {
|
||||||
|
try {
|
||||||
|
socket.shutdownOutput();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
socket.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server != null) {
|
||||||
|
try {
|
||||||
|
server.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket 관련 resource 객체 close 처리
|
||||||
|
*
|
||||||
|
* @param sockets
|
||||||
|
*/
|
||||||
|
public static void closeSockets(Socket ... sockets) {
|
||||||
|
for (Socket socket : sockets) {
|
||||||
|
if (socket != null) {
|
||||||
|
try {
|
||||||
|
socket.shutdownOutput();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
socket.close();
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
EgovBasicLogger.ignore("Occurred Exception to close resource is ignored!!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
67
src/main/java/itn/com/cmm/util/ExcelDownloadUtil.java
Normal file
67
src/main/java/itn/com/cmm/util/ExcelDownloadUtil.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import net.sf.jxls.exception.ParsePropertyException;
|
||||||
|
import net.sf.jxls.transformer.XLSTransformer;
|
||||||
|
|
||||||
|
public class ExcelDownloadUtil {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(ExcelDownloadUtil.class);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 엑셀 다운로드<br>
|
||||||
|
* - jxl 사용 : 템플릿 xlsx 필요<br>
|
||||||
|
* @param request
|
||||||
|
* @param response
|
||||||
|
* @param mapData : 바인딩 데이터 맵
|
||||||
|
* @param saveFilename : 빈 값 또는 null일 경우 yyyy-MM-dd_HHmm.xlsx
|
||||||
|
* @param templateFileName : /excels 디렉토리 내 엑셀 템플릿 파일명
|
||||||
|
*/
|
||||||
|
public static void downloadExcel(HttpServletRequest request, HttpServletResponse response, Map<String, Object> mapData, String saveFilename, String templateFileName) {
|
||||||
|
|
||||||
|
String sTemplatePath = request.getSession().getServletContext().getRealPath("/excels");
|
||||||
|
InputStream is = null;
|
||||||
|
OutputStream os = null;
|
||||||
|
try {
|
||||||
|
is = new BufferedInputStream(new FileInputStream(sTemplatePath + "/" + templateFileName));
|
||||||
|
|
||||||
|
XLSTransformer transformer = new XLSTransformer();
|
||||||
|
Workbook resultWorkbook = transformer.transformXLS(is, mapData);
|
||||||
|
|
||||||
|
if (StringUtil.isEmpty(saveFilename))
|
||||||
|
saveFilename = StringUtil.getDateToString("yyyy-MM-dd_HHmm");
|
||||||
|
|
||||||
|
response.setContentType("application/vnd.ms-excel");
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + saveFilename + ".xlsx\"");
|
||||||
|
|
||||||
|
os = response.getOutputStream();
|
||||||
|
resultWorkbook.write(os);
|
||||||
|
|
||||||
|
os.flush();
|
||||||
|
os.close();
|
||||||
|
is.close();
|
||||||
|
}
|
||||||
|
catch (ParsePropertyException | IOException | org.apache.poi.openxml4j.exceptions.InvalidFormatException e) {
|
||||||
|
logger.error("MakeExcel Exception : {}", e.getMessage(), e);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (os != null)
|
||||||
|
os = null;
|
||||||
|
if (is != null)
|
||||||
|
is = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
646
src/main/java/itn/com/cmm/util/ExcelUploadUtil.java
Normal file
646
src/main/java/itn/com/cmm/util/ExcelUploadUtil.java
Normal file
@ -0,0 +1,646 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.DateUtil;
|
||||||
|
import org.apache.poi.ss.usermodel.FormulaEvaluator;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.apache.poi.ss.usermodel.WorkbookFactory;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.util.MultiValueMap;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
|
|
||||||
|
import itn.com.cmm.service.EgovProperties;
|
||||||
|
|
||||||
|
public class ExcelUploadUtil {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(ExcelUploadUtil.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 엑셀 읽기 - 파일 한 개만 지원<br>
|
||||||
|
* - 엑셀 파일의 첫 번째 레코드를 HasMap 키 이름으로 사용 - 엑셀 파일의 두 번째 레코드부터 데이터로 저장<br>
|
||||||
|
* @param request
|
||||||
|
* @param uploadFolder
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static List<HashMap<String, String>> readExcel(MultipartHttpServletRequest request, String uploadFolder) throws Exception {
|
||||||
|
return readExcel(request, uploadFolder, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 엑셀 읽기 - 파일 한 개만 지원, 첫 번째 시트만 처리<br><br>
|
||||||
|
* - 지정한 배열로 HashMap key name 적용<br>
|
||||||
|
* - 엑셀 파일의 첫 번째 레코드부터 데이터로 저장<br>
|
||||||
|
* @param request
|
||||||
|
* @param uploadFolder
|
||||||
|
* @param columnNames null일 경우 엑셀 첫 레코드를 컬럼 이름으로 사용
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static List<HashMap<String, String>> readExcel(MultipartHttpServletRequest request, String uploadFolder, String[] columnNames) throws Exception {
|
||||||
|
return readExcel(request, uploadFolder, columnNames, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 엑셀 읽기 - 파일 한 개만 지원, 첫 번째 시트만 처리<br><br>
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @param uploadFolder : 서브 디렉토리 : 빈 값 =/uploadRoot/com/[yyyyMMdd]/, 값이 있으면=/uploadRoot/[uploadFolder]
|
||||||
|
* @param columnNames : HasMap key name : null일 경우 엑셀 첫 레코드를 컬럼 이름으로 사용
|
||||||
|
* @param startRecord : 데이터를 가져올 시작 레코드 : 첫 레코드 = 1
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static List<HashMap<String, String>> readExcel(MultipartHttpServletRequest request, String uploadFolder, String[] columnNames, int startRecord) throws Exception {
|
||||||
|
|
||||||
|
MultiValueMap<String, MultipartFile> files = request.getMultiFileMap();
|
||||||
|
|
||||||
|
//String sUploadPathProperty = "upload.path.physical." + EgovProperties.getProperty("globals.web.mode");
|
||||||
|
String sUploadPathProperty = "/temp";
|
||||||
|
String sSubDir = uploadFolder;
|
||||||
|
|
||||||
|
if (StringUtil.isEmpty(sSubDir)) {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM", Locale.getDefault());
|
||||||
|
//sSubDir = EgovProperties.getProperty("upload.path.common") + "/" + sdf.format(new Date()) + "/";
|
||||||
|
sSubDir = "/test";
|
||||||
|
|
||||||
|
}
|
||||||
|
//File uploadPath = new File(EgovProperties.getProperty(sUploadPathProperty), sSubDir);
|
||||||
|
|
||||||
|
File uploadPath = new File("/usr", "temp");
|
||||||
|
|
||||||
|
if (!uploadPath.exists())
|
||||||
|
uploadPath.mkdirs();
|
||||||
|
|
||||||
|
List<HashMap<String, String>> list = null;
|
||||||
|
|
||||||
|
for (String param : files.keySet()) {
|
||||||
|
|
||||||
|
List<MultipartFile> fileList = files.get(param);
|
||||||
|
|
||||||
|
//MimeUtil mu = new MimeUtil();
|
||||||
|
//boolean isExcel = mu.isEnableMimeTypes(fileList, "application/vnd.ms-excel", "application/vnd.openxmlformats");
|
||||||
|
//if (!isExcel)
|
||||||
|
// throw new FileUploadException("지원되지 않는 형식의 파일입니다.\n엑셀 파일만 업로드할 수 있습니다.");
|
||||||
|
|
||||||
|
if (fileList.size() > 0) {
|
||||||
|
MultipartFile file = fileList.get(0);
|
||||||
|
|
||||||
|
File savedFile = new File(uploadPath, file.getOriginalFilename());
|
||||||
|
file.transferTo(savedFile);
|
||||||
|
list = readExcel(savedFile, columnNames, startRecord);
|
||||||
|
String ddd = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 엑셀 읽기 - 파일 한 개만 지원, 모든 시트 처리
|
||||||
|
* @param request
|
||||||
|
* @param uploadFolder
|
||||||
|
* @param columnNames
|
||||||
|
* @param startRecord
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static HashMap<String, List<HashMap<String, String>>> readExcelSheets(MultipartHttpServletRequest request, String uploadFolder, String[] columnNames, int startRecord) throws Exception {
|
||||||
|
MultiValueMap<String, MultipartFile> files = request.getMultiFileMap();
|
||||||
|
|
||||||
|
String sUploadPathProperty = "upload.path.physical." + EgovProperties.getProperty("globals.web.mode");
|
||||||
|
String sSubDir = uploadFolder;
|
||||||
|
|
||||||
|
if (StringUtil.isEmpty(sSubDir)) {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM", Locale.getDefault());
|
||||||
|
sSubDir = EgovProperties.getProperty("upload.path.common") + "/" + sdf.format(new Date()) + "/";
|
||||||
|
}
|
||||||
|
File uploadPath = new File(EgovProperties.getProperty(sUploadPathProperty), sSubDir);
|
||||||
|
if (!uploadPath.exists())
|
||||||
|
uploadPath.mkdirs();
|
||||||
|
|
||||||
|
HashMap<String, List<HashMap<String, String>>> list = null;
|
||||||
|
|
||||||
|
for (String param : files.keySet()) {
|
||||||
|
List<MultipartFile> fileList = files.get(param);
|
||||||
|
//MimeUtil mu = new MimeUtil();
|
||||||
|
//boolean isExcel = mu.isEnableMimeTypes(fileList, "application/vnd.ms-excel", "application/vnd.openxmlformats");
|
||||||
|
//if (!isExcel)
|
||||||
|
// throw new FileUploadException("지원되지 않는 형식의 파일입니다.\n엑셀 파일만 업로드할 수 있습니다.");
|
||||||
|
if (fileList.size() > 0) {
|
||||||
|
MultipartFile file = fileList.get(0);
|
||||||
|
File savedFile = new File(uploadPath, file.getOriginalFilename());
|
||||||
|
file.transferTo(savedFile);
|
||||||
|
list = readExcelSheets(savedFile, columnNames, startRecord);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 엑셀 파일 읽어오기 - Workbook 인터페이스 적용<br>
|
||||||
|
* - 첫 번째 시트만 처리<br>
|
||||||
|
* - 주의 : 숫자형 데이터는 기본적으로 double type으로 반환. 숫자형 데이터가 .0으로 끝날 경우 int로 변환하여 반환<br>
|
||||||
|
* - 키 이름 미지정 가능 : 엑셀 첫 레코드를 키 이름으로 사용 <br>
|
||||||
|
* @param saveFile
|
||||||
|
* @param keyNm 리턴 hashmap에 부여될 키 이름. null일 경우 엑셀 첫 레코드를 키 이름으로 사용
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private static List<HashMap<String, String>> readExcel(File saveFile, String[] keyNm) throws Exception {
|
||||||
|
return readExcel(saveFile, keyNm, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 엑셀 파일 읽어오기 - Workbook 인터페이스 적용<br>
|
||||||
|
* - 첫 번째 시트만 처리<br>
|
||||||
|
* - 주의 : 숫자형 데이터는 기본적으로 double type으로 반환. 숫자형 데이터가 .0으로 끝날 경우 int로 변환하여 반환<br>
|
||||||
|
* - 키 이름 미지정 가능 : 엑셀 첫 레코드를 키 이름으로 사용 <br>
|
||||||
|
* @param saveFile
|
||||||
|
* @param keyNm 리턴 hashmap에 부여될 키 이름. null일 경우 엑셀 첫 레코드를 키 이름으로 사용
|
||||||
|
* @param startRecord 데이터를 가져올 시작 레코드 : 첫 레코드 = 1
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private static List<HashMap<String, String>> readExcel(File saveFile, String[] keyNm, int startRecord) throws Exception {
|
||||||
|
Workbook wb = WorkbookFactory.create(saveFile);
|
||||||
|
wb.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||||
|
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||||
|
|
||||||
|
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||||
|
|
||||||
|
boolean hasKeyName = true;
|
||||||
|
if (keyNm == null)
|
||||||
|
hasKeyName = false;
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
//hashmap용 key이름이 없을 경우 엑셀 1st row를 key 이름으로 설정
|
||||||
|
if (!hasKeyName && wb.getSheetAt(0).getLastRowNum() > 0) {
|
||||||
|
keyNm = new String[wb.getSheetAt(0).getRow(0).getLastCellNum()];
|
||||||
|
for (int i = 0; i < wb.getSheetAt(0).getRow(0).getLastCellNum(); i++)
|
||||||
|
try {
|
||||||
|
keyNm[i] = wb.getSheetAt(0).getRow(0).getCell(i).getStringCellValue();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
keyNm[i] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//int iRow = 0;
|
||||||
|
for (Row row : wb.getSheetAt(0)) {
|
||||||
|
//logger.debug(">>>>>>>>>>>>> excel row : {}", ++iRow);
|
||||||
|
if (!hasKeyName && row.getRowNum() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (startRecord > row.getRowNum() + 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||||
|
|
||||||
|
//주의 : foreach를 사용할 경우 컬럼이 빈 값이면 해당 컬럼 자제가 없어짐 (컬럼 인덱스가 달라짐)
|
||||||
|
for (int i = 0; i < row.getLastCellNum(); i++) {
|
||||||
|
|
||||||
|
//cell을 가져올 때 MissingCellPolicy.CREATE_NULL_AS_BLANK 옵션 사용 필수 : 빈 컬럼일 때도 빈 값을 가져옴. poi v3.16이상 지원
|
||||||
|
Cell cell = row.getCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||||
|
String strVal = "";
|
||||||
|
//logger.debug(">>>>> {}, {}, {}", cell.getColumnIndex(), keyNm[cell.getColumnIndex()], cell.getCellTypeEnum().equals(CellType.NUMERIC) ? cell.getNumericCellValue() : cell.getStringCellValue());
|
||||||
|
switch (cell.getCellTypeEnum()) {
|
||||||
|
case NUMERIC:
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
java.util.Date dateValue = cell.getDateCellValue();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(EgovProperties.getProperty("common.date.type"));
|
||||||
|
strVal = sdf.format(dateValue);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (String.valueOf(cell.getNumericCellValue()).matches("[\\d]{1,}\\.0$"))
|
||||||
|
strVal = String.valueOf(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||||
|
else
|
||||||
|
strVal = String.valueOf(cell.getNumericCellValue());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FORMULA:
|
||||||
|
strVal = evaluator.evaluate(cell).getStringValue(); // .getCellFormula();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOOLEAN:
|
||||||
|
if (cell.getBooleanCellValue())
|
||||||
|
strVal = "true";
|
||||||
|
else
|
||||||
|
strVal = "false";
|
||||||
|
break;
|
||||||
|
|
||||||
|
// case Cell.CELL_TYPE_ERROR:
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
case _NONE:
|
||||||
|
case BLANK:
|
||||||
|
strVal = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
strVal = cell.getStringCellValue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//issue : 컬럼 헤더 개수와 레코드 컬럼 개수가 맞지 않는 문제 발생
|
||||||
|
if ((i + 1) <= keyNm.length)
|
||||||
|
excelCols.put(keyNm[cell.getColumnIndex()], strVal);
|
||||||
|
}
|
||||||
|
//logger.debug(">>>>>>>>>>>>> excelCols : {}", excelCols.toString());
|
||||||
|
excelRows.add(excelCols);
|
||||||
|
}
|
||||||
|
//logger.debug(">>>>>>>>>> saveFile : {}", saveFile.getAbsolutePath());
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
logger.error(ex.getMessage(), ex);
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
wb.close();
|
||||||
|
if (saveFile.exists())
|
||||||
|
saveFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
return excelRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static HashMap<String, List<HashMap<String, String>>> readExcelSheets(File saveFile, String[] keyNm, int startRecord) throws Exception {
|
||||||
|
HashMap<String, List<HashMap<String, String>>> excels = new HashMap<>();
|
||||||
|
|
||||||
|
Workbook wb = WorkbookFactory.create(saveFile);
|
||||||
|
wb.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||||
|
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||||
|
|
||||||
|
boolean hasKeyName = true;
|
||||||
|
if (keyNm == null)
|
||||||
|
hasKeyName = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//repeat sheet
|
||||||
|
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
|
||||||
|
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||||
|
|
||||||
|
//키 이름이 없을 경우 엑셀 첫 레코드를 키 이름으로 사용
|
||||||
|
if (!hasKeyName && wb.getSheetAt(i).getLastRowNum() > 0) {
|
||||||
|
keyNm = new String[wb.getSheetAt(i).getRow(0).getLastCellNum()];
|
||||||
|
for (int j = 0; j < wb.getSheetAt(i).getRow(0).getLastCellNum(); j++)
|
||||||
|
try {
|
||||||
|
keyNm[j] = wb.getSheetAt(i).getRow(0).getCell(i).getStringCellValue();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
keyNm[j] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Row row : wb.getSheetAt(i)) {
|
||||||
|
if (!hasKeyName && row.getRowNum() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (startRecord > row.getRowNum() + 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||||
|
|
||||||
|
//주의 : foreach를 사용할 경우 컬럼이 빈 값이면 해당 컬럼 자제가 없어짐 (컬럼 인덱스가 달라짐)
|
||||||
|
for (int k = 0; k < row.getLastCellNum(); k++) {
|
||||||
|
//cell을 가져올 때 MissingCellPolicy.CREATE_NULL_AS_BLANK 옵션 사용 필수 : 빈 컬럼일 때도 빈 값을 가져옴. poi v3.16이상 지원
|
||||||
|
Cell cell = row.getCell(k, MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||||
|
String strVal = "";
|
||||||
|
//logger.debug(">>>>> {}, {}, {}", cell.getColumnIndex(), keyNm[cell.getColumnIndex()], cell.getCellTypeEnum().equals(CellType.NUMERIC) ? cell.getNumericCellValue() : cell.getStringCellValue());
|
||||||
|
switch (cell.getCellTypeEnum()) {
|
||||||
|
case NUMERIC:
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
java.util.Date dateValue = cell.getDateCellValue();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(EgovProperties.getProperty("common.date.type"));
|
||||||
|
strVal = sdf.format(dateValue);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (String.valueOf(cell.getNumericCellValue()).matches("[\\d]{1,}\\.0$"))
|
||||||
|
strVal = String.valueOf(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||||
|
else
|
||||||
|
strVal = String.valueOf(cell.getNumericCellValue());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FORMULA:
|
||||||
|
strVal = evaluator.evaluate(cell).getStringValue(); // .getCellFormula();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOOLEAN:
|
||||||
|
if (cell.getBooleanCellValue())
|
||||||
|
strVal = "true";
|
||||||
|
else
|
||||||
|
strVal = "false";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR:
|
||||||
|
case _NONE:
|
||||||
|
case BLANK:
|
||||||
|
strVal = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
strVal = cell.getStringCellValue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
excelCols.put(keyNm[cell.getColumnIndex()], strVal);
|
||||||
|
}
|
||||||
|
excelRows.add(excelCols);
|
||||||
|
}
|
||||||
|
excels.put(wb.getSheetName(i), excelRows);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
logger.error(ex.getMessage(), ex);
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
wb.close();
|
||||||
|
if (saveFile.exists())
|
||||||
|
saveFile.delete();
|
||||||
|
}
|
||||||
|
return excels;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 엑셀이 확장자가 xlsx 일경우
|
||||||
|
*
|
||||||
|
* @param savedFile
|
||||||
|
* @param keyNm
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
private static List<HashMap<String, String>> readExcelXlsx(File savedFile, String[] keyNm) throws Exception {
|
||||||
|
|
||||||
|
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(savedFile));
|
||||||
|
|
||||||
|
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
|
||||||
|
for (Row row : wb.getSheetAt(i)) {
|
||||||
|
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||||
|
int cellCnt = 0;
|
||||||
|
String strVal = "";
|
||||||
|
for (Cell cell : row) {
|
||||||
|
switch (cell.getCellType()) {
|
||||||
|
case Cell.CELL_TYPE_STRING:
|
||||||
|
System.out.print(cell.getRichStringCellValue().getString());
|
||||||
|
strVal = cell.getRichStringCellValue().getString();
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_NUMERIC:
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
java.util.Date dateValue = cell.getDateCellValue();
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
System.out.print(format.format(dateValue)); // 2009-05-29
|
||||||
|
strVal = format.format(dateValue);
|
||||||
|
} else {
|
||||||
|
System.out.print(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||||
|
strVal = Double.valueOf(cell.getNumericCellValue()).intValue() + "";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_FORMULA:
|
||||||
|
System.out.print(cell.getCellFormula());
|
||||||
|
strVal = cell.getCellFormula();
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_BOOLEAN:
|
||||||
|
System.out.print(cell.getBooleanCellValue());
|
||||||
|
if (cell.getBooleanCellValue()) {
|
||||||
|
strVal = "true";
|
||||||
|
} else {
|
||||||
|
strVal = "false";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_ERROR:
|
||||||
|
System.out.print(cell.getErrorCellValue());
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_BLANK:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
excelCols.put(keyNm[cellCnt], strVal);
|
||||||
|
cellCnt++;
|
||||||
|
}
|
||||||
|
excelRows.add(excelCols);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
//ex.printStackTrace();
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return excelRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 업로드 엑셀이 확장자가 xls 일경우
|
||||||
|
*
|
||||||
|
* @param savedFile
|
||||||
|
* @param keyNm
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
private static List<HashMap<String, String>> readExcelXls(File savedFile, String[] keyNm) throws Exception {
|
||||||
|
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(savedFile));
|
||||||
|
|
||||||
|
List<HashMap<String, String>> excelDate = new ArrayList<HashMap<String, String>>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
|
||||||
|
for (Row row : wb.getSheetAt(i)) {
|
||||||
|
|
||||||
|
HashMap<String, String> dateMap = new HashMap<String, String>();
|
||||||
|
int cellCnt = 0;
|
||||||
|
String strVal = "";
|
||||||
|
|
||||||
|
for (Cell cell : row) {
|
||||||
|
switch (cell.getCellType()) {
|
||||||
|
case Cell.CELL_TYPE_STRING:
|
||||||
|
System.out.print(cell.getRichStringCellValue().getString());
|
||||||
|
strVal = cell.getRichStringCellValue().getString();
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_NUMERIC:
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
java.util.Date dateValue = cell.getDateCellValue();
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
System.out.print(format.format(dateValue)); // 2009-05-29
|
||||||
|
strVal = format.format(dateValue);
|
||||||
|
} else {
|
||||||
|
System.out.print(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||||
|
strVal = Double.valueOf(cell.getNumericCellValue()).intValue() + "";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_FORMULA:
|
||||||
|
System.out.print(cell.getCellFormula());
|
||||||
|
strVal = cell.getCellFormula();
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_BOOLEAN:
|
||||||
|
System.out.print(cell.getBooleanCellValue());
|
||||||
|
if (cell.getBooleanCellValue()) {
|
||||||
|
strVal = "true";
|
||||||
|
} else {
|
||||||
|
strVal = "false";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_ERROR:
|
||||||
|
System.out.print(cell.getErrorCellValue());
|
||||||
|
break;
|
||||||
|
case Cell.CELL_TYPE_BLANK:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
System.out.print("\t");
|
||||||
|
|
||||||
|
dateMap.put(keyNm[cellCnt], strVal);
|
||||||
|
cellCnt++;
|
||||||
|
}
|
||||||
|
excelDate.add(dateMap);
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
//ex.printStackTrace();
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return excelDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static List<HashMap<String, String>> readOnlyExcel(File saveFile, String[] keyNm, int startRecord) throws Exception {
|
||||||
|
Workbook wb = WorkbookFactory.create(saveFile);
|
||||||
|
wb.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||||
|
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||||
|
|
||||||
|
List<HashMap<String, String>> excelRows = new ArrayList<HashMap<String, String>>();
|
||||||
|
|
||||||
|
boolean hasKeyName = true;
|
||||||
|
if (keyNm == null)
|
||||||
|
hasKeyName = false;
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
//hashmap용 key이름이 없을 경우 엑셀 1st row를 key 이름으로 설정
|
||||||
|
if (!hasKeyName && wb.getSheetAt(0).getLastRowNum() > 0) {
|
||||||
|
keyNm = new String[wb.getSheetAt(0).getRow(0).getLastCellNum()];
|
||||||
|
for (int i = 0; i < wb.getSheetAt(0).getRow(0).getLastCellNum(); i++)
|
||||||
|
try {
|
||||||
|
keyNm[i] = wb.getSheetAt(0).getRow(0).getCell(i).getStringCellValue();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
keyNm[i] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//int iRow = 0;
|
||||||
|
for (Row row : wb.getSheetAt(0)) {
|
||||||
|
//logger.debug(">>>>>>>>>>>>> excel row : {}", ++iRow);
|
||||||
|
if (!hasKeyName && row.getRowNum() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (startRecord > row.getRowNum() + 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, String> excelCols = new HashMap<String, String>();
|
||||||
|
|
||||||
|
//주의 : foreach를 사용할 경우 컬럼이 빈 값이면 해당 컬럼 자제가 없어짐 (컬럼 인덱스가 달라짐)
|
||||||
|
for (int i = 0; i < row.getLastCellNum(); i++) {
|
||||||
|
|
||||||
|
//cell을 가져올 때 MissingCellPolicy.CREATE_NULL_AS_BLANK 옵션 사용 필수 : 빈 컬럼일 때도 빈 값을 가져옴. poi v3.16이상 지원
|
||||||
|
Cell cell = row.getCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||||
|
String strVal = "";
|
||||||
|
//logger.debug(">>>>> {}, {}, {}", cell.getColumnIndex(), keyNm[cell.getColumnIndex()], cell.getCellTypeEnum().equals(CellType.NUMERIC) ? cell.getNumericCellValue() : cell.getStringCellValue());
|
||||||
|
switch (cell.getCellTypeEnum()) {
|
||||||
|
case NUMERIC:
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
java.util.Date dateValue = cell.getDateCellValue();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(EgovProperties.getProperty("common.date.type"));
|
||||||
|
strVal = sdf.format(dateValue);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (String.valueOf(cell.getNumericCellValue()).matches("[\\d]{1,}\\.0$"))
|
||||||
|
strVal = String.valueOf(Double.valueOf(cell.getNumericCellValue()).intValue());
|
||||||
|
else
|
||||||
|
strVal = String.valueOf(cell.getNumericCellValue());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FORMULA:
|
||||||
|
strVal = evaluator.evaluate(cell).getStringValue(); // .getCellFormula();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOOLEAN:
|
||||||
|
if (cell.getBooleanCellValue())
|
||||||
|
strVal = "true";
|
||||||
|
else
|
||||||
|
strVal = "false";
|
||||||
|
break;
|
||||||
|
|
||||||
|
// case Cell.CELL_TYPE_ERROR:
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
case _NONE:
|
||||||
|
case BLANK:
|
||||||
|
strVal = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
strVal = cell.getStringCellValue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//issue : 컬럼 헤더 개수와 레코드 컬럼 개수가 맞지 않는 문제 발생
|
||||||
|
if ((i + 1) <= keyNm.length)
|
||||||
|
excelCols.put(keyNm[cell.getColumnIndex()], strVal);
|
||||||
|
}
|
||||||
|
//logger.debug(">>>>>>>>>>>>> excelCols : {}", excelCols.toString());
|
||||||
|
excelRows.add(excelCols);
|
||||||
|
}
|
||||||
|
//logger.debug(">>>>>>>>>> saveFile : {}", saveFile.getAbsolutePath());
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
logger.error(ex.getMessage(), ex);
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
wb.close();
|
||||||
|
if (saveFile.exists())
|
||||||
|
saveFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
return excelRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
498
src/main/java/itn/com/cmm/util/FaxUtil.java
Normal file
498
src/main/java/itn/com/cmm/util/FaxUtil.java
Normal file
@ -0,0 +1,498 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
|
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.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFCell;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFRow;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
|
|
||||||
|
import itn.com.cmm.JsonResult;
|
||||||
|
import itn.let.fax.user.service.FaxGroupDataVO;
|
||||||
|
import itn.let.mjo.msgdata.service.PhoneVO;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : FaxUtil.java
|
||||||
|
* @date : 2023.03.20
|
||||||
|
* @description : 팩스 관련 Util
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.03.20 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class FaxUtil {
|
||||||
|
|
||||||
|
public static HttpServletResponse getResponse() {
|
||||||
|
ServletRequestAttributes attr =
|
||||||
|
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
|
||||||
|
return attr.getResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : checkHpNum
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.03.20
|
||||||
|
* @description :
|
||||||
|
* @param faxConvertFilePath
|
||||||
|
* @param seq
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String makeDownloadPath(String faxConvertFilePath, String seq) {
|
||||||
|
return faxConvertFilePath + "/" + seq + ".pdf";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : exelFileConvertForFax
|
||||||
|
* @author : 이준호
|
||||||
|
* @date : 2023.05.08
|
||||||
|
* @description :
|
||||||
|
* @param multiRequest
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static JsonResult exelFileConvertForFax(MultipartHttpServletRequest multiRequest) {
|
||||||
|
|
||||||
|
JsonResult jr = new JsonResult();
|
||||||
|
|
||||||
|
jr.setSuccess(false);
|
||||||
|
jr.setMessage("엑셀 파일만 업로드할 수 있습니다.");
|
||||||
|
|
||||||
|
//final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
||||||
|
List<MultipartFile> files = (List<MultipartFile>) multiRequest.getFiles("file0");
|
||||||
|
|
||||||
|
// 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx
|
||||||
|
int fileNameSplitCnt = 0;
|
||||||
|
|
||||||
|
if(!files.isEmpty()) {
|
||||||
|
fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length;
|
||||||
|
|
||||||
|
if (files.get(0).getSize() > 0
|
||||||
|
&& (files.get(0).getContentType().indexOf("spreadsheetml") > -1)
|
||||||
|
|| files.get(0).getContentType().indexOf("ms-excel") > -1
|
||||||
|
|| files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1
|
||||||
|
|| files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) {
|
||||||
|
|
||||||
|
// 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생
|
||||||
|
long fileSize = multiRequest.getFile("file0").getSize();
|
||||||
|
|
||||||
|
if(fileSize > 3374653) {
|
||||||
|
jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다.");
|
||||||
|
return jr;
|
||||||
|
}
|
||||||
|
|
||||||
|
String Ext = files.get(0).getOriginalFilename().split("[.]")[1];
|
||||||
|
String errMessage = "";
|
||||||
|
String cellValue = "";
|
||||||
|
|
||||||
|
// String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
|
||||||
|
|
||||||
|
int errPhoneCnt = 0;
|
||||||
|
int errNameCnt = 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//엑셀 확장자에 따른 처리 로직 분리
|
||||||
|
if(Ext.equals("xls")) {
|
||||||
|
|
||||||
|
HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream());
|
||||||
|
HSSFSheet sheet = workbook.getSheetAt(0);
|
||||||
|
|
||||||
|
if(sheet.getLastRowNum() > 20000) { //
|
||||||
|
errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
|
||||||
|
jr.setSuccess(false);
|
||||||
|
jr.setMessage(errMessage);
|
||||||
|
return jr;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
|
||||||
|
PhoneVO pVO = new PhoneVO();
|
||||||
|
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
|
||||||
|
HSSFRow row = sheet.getRow(i); //열읽기
|
||||||
|
if(null == row) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<String, String> jm = new HashMap<>();
|
||||||
|
// 행의 두번째 열(이름부터 받아오기)
|
||||||
|
HSSFCell cell = null;
|
||||||
|
boolean errSts = true;
|
||||||
|
for(int j = 0 ; j < 2; j++){ //행읽기(6행까지나 2행까지만 필요)
|
||||||
|
cellValue = "";
|
||||||
|
cell = row.getCell(j); //이름/수신번호
|
||||||
|
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
|
||||||
|
//System.out.println("Cell 데이터가 없습니다.");
|
||||||
|
if(j == 1) {
|
||||||
|
if (sheet.getLastRowNum() == i) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(null != cell){
|
||||||
|
switch(cell.getCellType()){ //숫자타임을 문자로 변환
|
||||||
|
case Cell.CELL_TYPE_NUMERIC:
|
||||||
|
cell.setCellType(Cell.CELL_TYPE_STRING);
|
||||||
|
}
|
||||||
|
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
|
||||||
|
}
|
||||||
|
if(j == 0) {
|
||||||
|
//이름
|
||||||
|
boolean nmChk = getNameRepLenChk("name", cellValue);
|
||||||
|
if(nmChk && errSts) {
|
||||||
|
jm.put("name", cellValue);
|
||||||
|
}else {
|
||||||
|
errNameCnt++;
|
||||||
|
errSts = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(j == 1) {
|
||||||
|
//전화번호
|
||||||
|
if(errSts) {
|
||||||
|
jm.put("phone", cellValue);
|
||||||
|
}else {
|
||||||
|
errPhoneCnt++;
|
||||||
|
errSts = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(null != jm.get("phone") && errSts) {
|
||||||
|
json.add(jm);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int resultErrCnt = errPhoneCnt + errNameCnt;
|
||||||
|
int resultErrCntExceptPhone = errPhoneCnt + errNameCnt;
|
||||||
|
|
||||||
|
jr.setData(json);
|
||||||
|
jr.setSuccess(true);
|
||||||
|
|
||||||
|
if(resultErrCnt > 0) {
|
||||||
|
jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 추가됩니다.");
|
||||||
|
}else {
|
||||||
|
jr.setMessage("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}else { //확장자가 xlsx
|
||||||
|
|
||||||
|
OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream());
|
||||||
|
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
|
||||||
|
XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기
|
||||||
|
opcPackage.close();
|
||||||
|
|
||||||
|
if(sheet.getLastRowNum() > 20000) { //
|
||||||
|
errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
|
||||||
|
jr.setSuccess(false);
|
||||||
|
jr.setMessage(errMessage);
|
||||||
|
return jr;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
|
||||||
|
PhoneVO pVO = new PhoneVO();
|
||||||
|
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
|
||||||
|
XSSFRow row = sheet.getRow(i); //열읽기
|
||||||
|
if(null == row) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<String, String> jm = new HashMap<>();
|
||||||
|
// 행의 두번째 열(이름부터 받아오기)
|
||||||
|
XSSFCell cell = null;
|
||||||
|
boolean errSts = true;
|
||||||
|
|
||||||
|
for(int j = 0 ; j < 2; j++){ //행읽기(6행까지나 2행까지만 필요)
|
||||||
|
cellValue = "";
|
||||||
|
cell = row.getCell(j); //이름/수신번호
|
||||||
|
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
|
||||||
|
if(j == 1) {
|
||||||
|
if (sheet.getLastRowNum() == i) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(null != cell){
|
||||||
|
switch(cell.getCellType()){ //숫자타임을 문자로 변환
|
||||||
|
case Cell.CELL_TYPE_NUMERIC:
|
||||||
|
cell.setCellType(Cell.CELL_TYPE_STRING);
|
||||||
|
}
|
||||||
|
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(j == 0) {
|
||||||
|
//이름
|
||||||
|
boolean nmChk = getNameRepLenChk("name", cellValue);
|
||||||
|
if(nmChk && errSts) {
|
||||||
|
jm.put("name", cellValue);
|
||||||
|
}else {
|
||||||
|
errNameCnt++;
|
||||||
|
errSts = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(j == 1) {
|
||||||
|
//수신번호
|
||||||
|
if(errSts) {
|
||||||
|
jm.put("phone", cellValue);
|
||||||
|
}else {
|
||||||
|
errPhoneCnt++;
|
||||||
|
errSts = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(null != jm.get("phone") && errSts) {
|
||||||
|
json.add(jm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int resultErrCnt = errPhoneCnt + errNameCnt;
|
||||||
|
int resultErrCntExceptPhone = errPhoneCnt + errNameCnt;
|
||||||
|
|
||||||
|
jr.setData(json);
|
||||||
|
jr.setSuccess(true);
|
||||||
|
|
||||||
|
if(resultErrCnt > 0) {
|
||||||
|
jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 추가됩니다.");
|
||||||
|
}else {
|
||||||
|
jr.setMessage("");
|
||||||
|
}
|
||||||
|
} //xlsx 처리 끝
|
||||||
|
} catch (Exception e) {
|
||||||
|
jr.setMessage("처리 중 오류가 발생했습니다. 관리자에게 문의하세요.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return jr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void getExcelForFaxSendList(List<FaxGroupDataVO> faxGroupListVO) {
|
||||||
|
|
||||||
|
HttpServletResponse response =ContextUtil.getResponse();
|
||||||
|
|
||||||
|
// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
|
||||||
|
SXSSFWorkbook wb = new SXSSFWorkbook();
|
||||||
|
String fileName ="팩스 발송 내역"; // 저장 파일명
|
||||||
|
String sheetTitle = "팩스 발송 내역" ; // 셀 제목
|
||||||
|
Sheet sheet = wb.createSheet(sheetTitle);
|
||||||
|
Cell cell = null;
|
||||||
|
Row row = null;
|
||||||
|
|
||||||
|
CellStyle style = wb.createCellStyle();
|
||||||
|
style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게
|
||||||
|
style.setBorderLeft(CellStyle.BORDER_THIN);
|
||||||
|
style.setBorderRight(CellStyle.BORDER_THIN);
|
||||||
|
style.setBorderTop(CellStyle.BORDER_THIN);
|
||||||
|
|
||||||
|
// 정렬
|
||||||
|
style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
|
||||||
|
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
|
||||||
|
|
||||||
|
Font font = wb.createFont();
|
||||||
|
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
//발송 성공,실패 건수 불러오기
|
||||||
|
|
||||||
|
|
||||||
|
row = sheet.createRow(0);
|
||||||
|
|
||||||
|
|
||||||
|
sheet.setColumnWidth(1, 7000); // 발송형태 칼럼의 폭 조절
|
||||||
|
sheet.setColumnWidth(2, 5000); // 접수일자 칼럼의 폭 조절
|
||||||
|
|
||||||
|
//셀병합 처리
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송상태 세로 셀병합
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //접수일자 세로 셀병합
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //예약일자 세로 셀병합
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //형태 세로 셀병합
|
||||||
|
|
||||||
|
cell = row.createCell(0);
|
||||||
|
cell.setCellValue("번호");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(1);
|
||||||
|
cell.setCellValue("제목");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(2);
|
||||||
|
cell.setCellValue("전송시간");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(3);
|
||||||
|
cell.setCellValue("문서 매수");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(4);
|
||||||
|
cell.setCellValue("발송 건수");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(5);
|
||||||
|
cell.setCellValue("발송결과 건수");
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); // 발송결과 건수 가로 셀병합
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(6);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
row = sheet.createRow(1);
|
||||||
|
|
||||||
|
cell = row.createCell(0);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(1);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(2);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(3);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(4);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(5);
|
||||||
|
cell.setCellValue("성공");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
cell = row.createCell(6);
|
||||||
|
cell.setCellValue("실패");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
|
||||||
|
int rowNum = 2;
|
||||||
|
|
||||||
|
for(FaxGroupDataVO faxGroupDataVO : faxGroupListVO) {
|
||||||
|
|
||||||
|
row = sheet.createRow(rowNum);
|
||||||
|
|
||||||
|
cell = row.createCell(0);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(rowNum-1);
|
||||||
|
|
||||||
|
cell = row.createCell(1);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(faxGroupDataVO.getSubject());
|
||||||
|
|
||||||
|
cell = row.createCell(2);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(faxGroupDataVO.getDoneDate());
|
||||||
|
|
||||||
|
cell = row.createCell(3);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(faxGroupDataVO.getPage());
|
||||||
|
|
||||||
|
cell = row.createCell(4);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(faxGroupDataVO.getTotalEa());
|
||||||
|
|
||||||
|
cell = row.createCell(5);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(faxGroupDataVO.getSentEa());
|
||||||
|
|
||||||
|
cell = row.createCell(6);
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
cell.setCellValue(faxGroupDataVO.getHoldEa()+faxGroupDataVO.getUnSendEa()+faxGroupDataVO.getErrorEa());
|
||||||
|
|
||||||
|
rowNum++;
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
|
||||||
|
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA );
|
||||||
|
Date currentTime = new Date ();
|
||||||
|
String mTime = mSimpleDateFormat.format ( currentTime );
|
||||||
|
fileName = fileName+"("+mTime+")";
|
||||||
|
|
||||||
|
response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
|
||||||
|
wb.write(response.getOutputStream());
|
||||||
|
}catch(Exception e) {
|
||||||
|
response.setHeader("Set-Cookie", "fileDownload=false; path=/");
|
||||||
|
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||||
|
response.setHeader("Content-Type","text/html; charset=utf-8");
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = response.getOutputStream();
|
||||||
|
byte[] data = new String("fail..").getBytes();
|
||||||
|
out.write(data, 0, data.length);
|
||||||
|
} catch(Exception ignore) {
|
||||||
|
ignore.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if(out != null) try { out.close(); } catch(Exception ignore) {}
|
||||||
|
}
|
||||||
|
}finally {
|
||||||
|
// 디스크 적었던 임시파일을 제거합니다.
|
||||||
|
wb.dispose();
|
||||||
|
try { wb.close(); } catch(Exception ignore) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*====================================================================
|
||||||
|
= private function zone =
|
||||||
|
====================================================================*/
|
||||||
|
// 팩스 엑셀 업로드 이름 길이 체크
|
||||||
|
private static boolean getNameRepLenChk(String type, String value) {
|
||||||
|
|
||||||
|
boolean rtnValue = true;
|
||||||
|
|
||||||
|
if(type.equals("name")) {
|
||||||
|
String tmpNm = value;
|
||||||
|
int nmLen = tmpNm.length();
|
||||||
|
|
||||||
|
if(nmLen > 12) {
|
||||||
|
rtnValue = false;
|
||||||
|
}
|
||||||
|
}else if(type.equals("rep")) {
|
||||||
|
String tmpRep = value;
|
||||||
|
int repLen = tmpRep.length();
|
||||||
|
|
||||||
|
if(repLen > 20) {
|
||||||
|
rtnValue = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
68
src/main/java/itn/com/cmm/util/FileUtil.java
Normal file
68
src/main/java/itn/com/cmm/util/FileUtil.java
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : FileUtil.java
|
||||||
|
* @date : 2023.04.06
|
||||||
|
* @description : 파일 관련 유틸
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.04.06 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class FileUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : downLoad
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.04.06
|
||||||
|
* @description : 파일 다운로드
|
||||||
|
* @param response
|
||||||
|
* @param fileInfo
|
||||||
|
* @param fileName
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용
|
||||||
|
|
||||||
|
File file = new File(path);
|
||||||
|
|
||||||
|
String fileName = "";
|
||||||
|
if(StringUtils.isNotEmpty(fileNameP))
|
||||||
|
fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20");
|
||||||
|
else
|
||||||
|
fileName = file.getName();
|
||||||
|
|
||||||
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더
|
||||||
|
|
||||||
|
FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
|
||||||
|
int read = 0;
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
|
||||||
|
out.write(buffer, 0, read);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new Exception("download error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
95
src/main/java/itn/com/cmm/util/IpUtil.java
Normal file
95
src/main/java/itn/com/cmm/util/IpUtil.java
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
public class IpUtil {
|
||||||
|
public static String getClientIP(HttpServletRequest request) {
|
||||||
|
String userip = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim(); // 아이피 가져오기 아파치 아래에 웹로직이 있을경우
|
||||||
|
|
||||||
|
if ( userip == null || "".equals(userip) ) { // 아이피 가져오기 , 바로 웹로직이 있을경우
|
||||||
|
userip = request.getRemoteAddr();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( userip == null || "".equals(userip) ) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] userips = userip.split(",");
|
||||||
|
return userips[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBrowser(HttpServletRequest request) {
|
||||||
|
String header = request.getHeader("User-Agent");
|
||||||
|
|
||||||
|
System.out.println("header:"+header);
|
||||||
|
|
||||||
|
if (header.indexOf("MSIE") > -1 || header.indexOf("rv:11.0") > -1) {
|
||||||
|
return "MSIE";
|
||||||
|
}else if (header.indexOf("Opera") > -1 || header.indexOf("OPR") > -1) {
|
||||||
|
return "Opera";
|
||||||
|
}else if (header.indexOf("Chrome") > -1) {
|
||||||
|
return "Chrome";
|
||||||
|
}else if (header.indexOf("Firefox") > -1) {
|
||||||
|
return "Firefox";
|
||||||
|
}
|
||||||
|
return "Firefox";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getStr(HttpServletRequest request,String str) throws UnsupportedEncodingException {
|
||||||
|
String header = request.getHeader("User-Agent");
|
||||||
|
|
||||||
|
String browser;
|
||||||
|
|
||||||
|
if (header.indexOf("MSIE") > -1 || header.indexOf("rv:11.0") > -1) {
|
||||||
|
browser = "MSIE";
|
||||||
|
} else if (header.indexOf("Chrome") > -1) {
|
||||||
|
browser = "Chrome";
|
||||||
|
} else if (header.indexOf("Opera") > -1) {
|
||||||
|
browser = "Opera";
|
||||||
|
} else {
|
||||||
|
browser = "Firefox";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (browser.equals("MSIE")) {
|
||||||
|
str = URLEncoder.encode(str, "UTF-8")
|
||||||
|
.replaceAll("\\+", "%20");
|
||||||
|
} else if (browser.equals("Firefox")) {
|
||||||
|
str = new String(str.getBytes("UTF-8"), "8859_1");
|
||||||
|
} else if (browser.equals("Opera")) {
|
||||||
|
str = new String(str.getBytes("UTF-8"), "8859_1");
|
||||||
|
} else if (browser.equals("Chrome")) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
for (int i = 0; i < str.length(); i++) {
|
||||||
|
char c = str.charAt(i);
|
||||||
|
if (c > '~') {
|
||||||
|
sb.append(URLEncoder.encode("" + c, "UTF-8"));
|
||||||
|
} else {
|
||||||
|
sb.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str = sb.toString();
|
||||||
|
} else {
|
||||||
|
str = "Not supported browser";
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
}
|
||||||
321
src/main/java/itn/com/cmm/util/MJUtil.java
Normal file
321
src/main/java/itn/com/cmm/util/MJUtil.java
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public final class MJUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 휴대폰번호 유효성 체크
|
||||||
|
* true, false 반환
|
||||||
|
* 대시 유무 상관없음
|
||||||
|
*/
|
||||||
|
public static boolean checkHpNum(String str) {
|
||||||
|
|
||||||
|
String regExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
|
||||||
|
//String regExp = "^(01[016789]{1}|070)-?[0-9]{3,4}-?[0-9]{4}$";
|
||||||
|
return Pattern.matches(regExp, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 휴대폰번호 대시('-') 추가
|
||||||
|
* 대시 유무 상관없음
|
||||||
|
* 유효성 맞지 않을시 변환안됨.
|
||||||
|
*/
|
||||||
|
public static String addDash(String str) {
|
||||||
|
String regExp = "(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$";
|
||||||
|
String chgf = "$1-$2-$3";
|
||||||
|
return str.replaceFirst(regExp, chgf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 팩스 번호 유효성 체크
|
||||||
|
* true, false 반환
|
||||||
|
* 앞 3자리를 체크 함
|
||||||
|
* -- 전국 지역번호
|
||||||
|
* 02 서울특별시
|
||||||
|
031 경기도
|
||||||
|
032 인천광역시
|
||||||
|
033 강원도
|
||||||
|
041 충청남도
|
||||||
|
042 대전광역시
|
||||||
|
043 충청북도
|
||||||
|
044 세종특별자치시
|
||||||
|
051 부산광역시
|
||||||
|
052 울산광역시
|
||||||
|
053 대구광역시
|
||||||
|
054 경상북도
|
||||||
|
055 경상남도
|
||||||
|
061 전라남도
|
||||||
|
062 광주광역시
|
||||||
|
063 전라북도
|
||||||
|
064 제주특별자치도
|
||||||
|
|
||||||
|
-- 타사부가번호
|
||||||
|
030*
|
||||||
|
050*
|
||||||
|
060
|
||||||
|
070
|
||||||
|
080
|
||||||
|
1**
|
||||||
|
|
||||||
|
위 번호로 시작하는 팩스 번호만 허용함.
|
||||||
|
*/
|
||||||
|
public static boolean checkFaxNum(String str) {
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
if(str.equals("") || str == null) {
|
||||||
|
return result = false;
|
||||||
|
}else {
|
||||||
|
str = str.replaceAll("-", "");
|
||||||
|
String subNum = str.substring(0,3);
|
||||||
|
String regExp = "^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$";
|
||||||
|
result = Pattern.matches(regExp, subNum);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 시간에서 몇분 뒤 시간 받아오기
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static String getAfterTimerDate(int interval) {
|
||||||
|
|
||||||
|
Date now = new Date();
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.setTime(now);
|
||||||
|
cal.add(Calendar.MINUTE, interval); //원하는 분을 더해서 시간을 구함
|
||||||
|
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
String strDate = sdf.format(cal.getTime());
|
||||||
|
|
||||||
|
return strDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 시간에서 몇달 뒤 시간 받아오기
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
public static String getAfterTimerMonth(int interval) {
|
||||||
|
|
||||||
|
Date now = new Date();
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.setTime(now);
|
||||||
|
cal.add(Calendar.MONTH, interval); //원하는 분을 더해서 시간을 구함
|
||||||
|
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
String strDate = sdf.format(cal.getTime());
|
||||||
|
|
||||||
|
return strDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 시간 받아오기
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
public static String getRealTime() {
|
||||||
|
|
||||||
|
Date now = new Date();
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.setTime(now);
|
||||||
|
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
String strDate = sdf.format(cal.getTime());
|
||||||
|
|
||||||
|
return strDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 오늘 날짜와 파라미터로 받은 날짜 사이의 차이를 비교
|
||||||
|
* date1과 date2 를 비교했을 때
|
||||||
|
* 같은 날짜면 0 반환
|
||||||
|
* 이전면 음수 반환
|
||||||
|
* 이후면 양수 반환
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
public static boolean getCompareDate(String date) throws Exception {
|
||||||
|
|
||||||
|
boolean rtnType = false;
|
||||||
|
date = date.replaceAll("-", "/");//날짜에 하이픈(-)을 슬러쉬(/)로 변환
|
||||||
|
|
||||||
|
SimpleDateFormat sdformat = new SimpleDateFormat("yyyy/MM/dd");
|
||||||
|
|
||||||
|
Date nowDate = sdformat.parse(getRealTime());
|
||||||
|
Date endDate = sdformat.parse(date);
|
||||||
|
|
||||||
|
if(nowDate.compareTo(endDate) > 0) {
|
||||||
|
System.out.println("date1은 date2 이후입니다.");
|
||||||
|
rtnType = false;
|
||||||
|
} else if(nowDate.compareTo(endDate) < 0) {
|
||||||
|
System.out.println("date1은 date2 이전입니다.");
|
||||||
|
rtnType = true;
|
||||||
|
} else if(nowDate.compareTo(endDate) == 0) {
|
||||||
|
System.out.println("같은 날짜입니다.");
|
||||||
|
rtnType = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtnType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 오늘 날짜와 파라미터로 받은 날짜 사이의 차이를 비교
|
||||||
|
* date1과 date2 를 비교했을 때
|
||||||
|
* 같은 날짜면 0 반환
|
||||||
|
* 이전면 음수 반환
|
||||||
|
* 이후면 양수 반환
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
public static String getCompareDateToSeconds(String date) throws Exception {
|
||||||
|
|
||||||
|
String rtnType = "";
|
||||||
|
date = date.replaceAll("-", "/");//날짜에 하이픈(-)을 슬러쉬(/)로 변환
|
||||||
|
|
||||||
|
SimpleDateFormat sdformat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
System.out.println(getRealTime());
|
||||||
|
|
||||||
|
Date nowDate = sdformat.parse(getRealTime());
|
||||||
|
Date endDate = sdformat.parse(date);
|
||||||
|
|
||||||
|
if(nowDate.compareTo(endDate) > 0) {
|
||||||
|
System.out.println("date1은 date2 이후입니다.");
|
||||||
|
rtnType = "after";
|
||||||
|
} else if(nowDate.compareTo(endDate) < 0) {
|
||||||
|
System.out.println("date1은 date2 이전입니다.");
|
||||||
|
rtnType = "before";
|
||||||
|
} else if(nowDate.compareTo(endDate) == 0) {
|
||||||
|
System.out.println("같은 날짜입니다.");
|
||||||
|
rtnType = "equal";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtnType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 날짜와 파라미터 날짜 사이의 차이 구하기
|
||||||
|
* 초 단위로 계산하기
|
||||||
|
* */
|
||||||
|
public static long getDiffDateSec(String date) throws Exception{
|
||||||
|
|
||||||
|
date = date.replaceAll("-", "/");//날짜에 하이픈(-)을 슬러쉬(/)로 변환
|
||||||
|
|
||||||
|
Date format1 = new SimpleDateFormat("yyyy/MM/dd").parse(getRealTime());
|
||||||
|
Date format2 = new SimpleDateFormat("yyyy/MM/dd").parse(date);
|
||||||
|
|
||||||
|
long diffSec = (format1.getTime() - format2.getTime()) / 1000; //초 차이
|
||||||
|
|
||||||
|
return diffSec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 날짜와 파라미터 날짜 사이의 차이 구하기
|
||||||
|
* 분 단위로 계산하기
|
||||||
|
* */
|
||||||
|
public static long getDiffDateMin(String date) throws Exception{
|
||||||
|
|
||||||
|
date = date.replaceAll("-", "/");//날짜에 하이픈(-)을 슬러쉬(/)로 변환
|
||||||
|
Date format1 = new SimpleDateFormat("yyyy/MM/dd").parse(getRealTime());
|
||||||
|
Date format2 = new SimpleDateFormat("yyyy/MM/dd").parse(date);
|
||||||
|
|
||||||
|
long diffMin = (format1.getTime() - format2.getTime()) / 60000; //분 차이
|
||||||
|
|
||||||
|
return diffMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 날짜와 파라미터 날짜 사이의 차이 구하기
|
||||||
|
* 시 단위로 계산하기
|
||||||
|
* */
|
||||||
|
public static long getDiffDateHour(String date) throws Exception{
|
||||||
|
|
||||||
|
date = date.replaceAll("-", "/");//날짜에 하이픈(-)을 슬러쉬(/)로 변환
|
||||||
|
Date format1 = new SimpleDateFormat("yyyy/MM/dd").parse(getRealTime());
|
||||||
|
Date format2 = new SimpleDateFormat("yyyy/MM/dd").parse(date);
|
||||||
|
|
||||||
|
long diffHour = (format1.getTime() - format2.getTime()) / 3600000; //시 차이
|
||||||
|
|
||||||
|
return diffHour;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 현재 날짜와 파라미터 날짜 사이의 차이 구하기
|
||||||
|
* 일 단위로 계산하기
|
||||||
|
* */
|
||||||
|
public static long getDiffDateDay(String date) throws Exception{
|
||||||
|
|
||||||
|
date = date.replaceAll("-", "/");//날짜에 하이픈(-)을 슬러쉬(/)로 변환
|
||||||
|
Date format1 = new SimpleDateFormat("yyyy/MM/dd").parse(getRealTime());
|
||||||
|
Date format2 = new SimpleDateFormat("yyyy/MM/dd").parse(date);
|
||||||
|
|
||||||
|
long diffSec = (format1.getTime() - format2.getTime()) / 1000; //초 차이
|
||||||
|
long diffDays = diffSec / (24*60*60); //일자수 차이
|
||||||
|
|
||||||
|
return diffDays;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 오늘 날짜
|
||||||
|
public static String getTodayDate() throws Exception {
|
||||||
|
|
||||||
|
Date toDay = new Date();
|
||||||
|
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
String rtnDay = date.format(toDay);
|
||||||
|
|
||||||
|
return rtnDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 한달 전 날짜
|
||||||
|
public static String getBefore1MonthDate() throws Exception {
|
||||||
|
Calendar mon = Calendar.getInstance();
|
||||||
|
mon.add(Calendar.MONTH , -1);
|
||||||
|
String beforeMonthDay = new java.text.SimpleDateFormat("yyyy-MM-dd").format(mon.getTime());
|
||||||
|
|
||||||
|
return beforeMonthDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBefore1DayDate() throws Exception {
|
||||||
|
Calendar mon = Calendar.getInstance();
|
||||||
|
mon.add(Calendar.DAY_OF_MONTH , -1);
|
||||||
|
String beforeMonthDay = new java.text.SimpleDateFormat("yyyy-MM-dd").format(mon.getTime());
|
||||||
|
|
||||||
|
return beforeMonthDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) throws Exception {
|
||||||
|
System.out.println(new Date(System.currentTimeMillis()));
|
||||||
|
System.out.println(checkHpNum("070-85326650"));
|
||||||
|
|
||||||
|
System.out.println(addDash("07085326650"));
|
||||||
|
}
|
||||||
|
|
||||||
|
//리스트에서 중복 값 제거 후 리스트 반환
|
||||||
|
public static List<String> getDuplicateList(List<String> userBlockList){
|
||||||
|
|
||||||
|
List<String> dupliBlockList = new ArrayList<String>();
|
||||||
|
|
||||||
|
for(String phone : userBlockList) {
|
||||||
|
|
||||||
|
boolean chk = true;
|
||||||
|
for(String dupPhone : dupliBlockList) {
|
||||||
|
|
||||||
|
if(phone.equals(dupPhone)) {
|
||||||
|
chk = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(chk) {
|
||||||
|
dupliBlockList.add(phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return dupliBlockList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
972
src/main/java/itn/com/cmm/util/MsgSendUtils.java
Normal file
972
src/main/java/itn/com/cmm/util/MsgSendUtils.java
Normal file
@ -0,0 +1,972 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
|
import itn.com.cmm.MjonMsgSendVO;
|
||||||
|
import itn.com.cmm.OptimalMsgResultDTO;
|
||||||
|
import itn.let.mail.service.StatusResponse;
|
||||||
|
import itn.let.mjo.event.service.MjonEventVO;
|
||||||
|
import itn.let.mjo.mjocommon.MjonCommon;
|
||||||
|
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||||
|
import itn.let.mjo.msgagent.service.MjonMsgAgentStsVO;
|
||||||
|
import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
|
||||||
|
import itn.let.sym.site.service.JoinSettingVO;
|
||||||
|
import itn.let.uss.umt.service.MberManageVO;
|
||||||
|
import itn.let.uss.umt.service.UserManageVO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : MsgSendUtils.java
|
||||||
|
* @date : 2024.09.23
|
||||||
|
* @description : 메세지발송 데이터 다루는 유틸
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2024.09.23 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public final class MsgSendUtils {
|
||||||
|
|
||||||
|
// 단문 메세지 타입
|
||||||
|
public static final String SHORT_MSG_TYPE = "4";
|
||||||
|
// 장문 메세지 타입
|
||||||
|
public static final String LONG_MSG_TYPE = "6";
|
||||||
|
// 이벤트 최저 잔액
|
||||||
|
public static final double MIN_EVENT_REMAIN_CASH = 7.5; // 이벤트 최소 잔액
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getMsgType
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.09.23
|
||||||
|
* @description : msgType 재정의
|
||||||
|
* @param mjonMsgVO
|
||||||
|
* @param smsTxtByte
|
||||||
|
* @return
|
||||||
|
* @throws UnsupportedEncodingException
|
||||||
|
*/
|
||||||
|
public static String getMsgTypeWithByteValidation(MjonMsgSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
|
||||||
|
|
||||||
|
|
||||||
|
// // 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함
|
||||||
|
// if ("P".equals(msgType) || "L".equals(msgType)) {
|
||||||
|
// msgType = "6";
|
||||||
|
// } else if ("S".equals(msgType)) {
|
||||||
|
// msgType = "4";
|
||||||
|
// }
|
||||||
|
|
||||||
|
int smsTxtByte = MjonCommon.getSmsTxtBytes(p_smsTxt);
|
||||||
|
String msgType = SHORT_MSG_TYPE;
|
||||||
|
|
||||||
|
// 1. 2000 Byte 초과는 에러 처리
|
||||||
|
if (smsTxtByte > 2000) {
|
||||||
|
return "INVALID";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 첨부파일 여부 확인 (첨부파일이 있으면 장문으로 설정)
|
||||||
|
if (StringUtils.isNotEmpty(sendVO.getFilePath1())) {
|
||||||
|
msgType = LONG_MSG_TYPE;
|
||||||
|
}
|
||||||
|
// 3. 문자 길이에 따라 메시지 타입 설정 (90 Byte 초과는 장문)
|
||||||
|
else if (smsTxtByte > 90) {
|
||||||
|
msgType = LONG_MSG_TYPE;
|
||||||
|
}
|
||||||
|
return msgType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float getValidPrice(Float personalPrice, Float defaultPrice) {
|
||||||
|
return (personalPrice != null && personalPrice > 0) ? personalPrice : defaultPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : determinePriceByMsgType
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.09.24
|
||||||
|
* @description : 문자 메시지 타입에 따라 단가를 결정하는 메서드
|
||||||
|
* @param mjonMsgVO
|
||||||
|
* @param shortPrice
|
||||||
|
* @param longPrice
|
||||||
|
* @param picturePrice
|
||||||
|
* @param picture2Price
|
||||||
|
* @param picture3Price
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static float determinePriceByMsgType(MjonMsgVO mjonMsgVO, float shortPrice, float longPrice,
|
||||||
|
float picturePrice, float picture2Price, float picture3Price) {
|
||||||
|
float price = 0;
|
||||||
|
String msgType = mjonMsgVO.getMsgType();
|
||||||
|
|
||||||
|
if (SHORT_MSG_TYPE.equals(msgType)) {
|
||||||
|
price = shortPrice;
|
||||||
|
} else if (LONG_MSG_TYPE.equals(msgType)) {
|
||||||
|
// 파일 첨부 여부에 따라 장문 단가 설정
|
||||||
|
if (mjonMsgVO.getFileName3() != null) {
|
||||||
|
price = picture3Price;
|
||||||
|
} else if (mjonMsgVO.getFileName2() != null) {
|
||||||
|
price = picture2Price;
|
||||||
|
} else if (mjonMsgVO.getFileName1() != null) {
|
||||||
|
price = picturePrice;
|
||||||
|
} else {
|
||||||
|
price = longPrice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : isReplacementRequired
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.12
|
||||||
|
* @description : 치환데이터가 있는지 확인
|
||||||
|
* @param mjonMsgVO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isRepleasYN(MjonMsgVO mjonMsgVO) {
|
||||||
|
|
||||||
|
// 치환 구문 패턴 리스트
|
||||||
|
String[] placeholders = {"\\[\\*이름\\*\\]", "\\[\\*1\\*\\]", "\\[\\*2\\*\\]", "\\[\\*4\\*\\]", "\\[\\*3\\*\\]"};
|
||||||
|
|
||||||
|
for (String placeholder : placeholders) {
|
||||||
|
Pattern pattern = Pattern.compile(placeholder);
|
||||||
|
Matcher matcher = pattern.matcher(mjonMsgVO.getSmsTxt());
|
||||||
|
// 해당 패턴이 존재하면 true 반환
|
||||||
|
if (matcher.find()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : populateReplacementLists
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.09.26
|
||||||
|
* @description : 배열에 데이터를 채우는 메서드
|
||||||
|
* 1. 치환 문자열 데이터 확인 및 문자 치환
|
||||||
|
* 2. 스팸 문자 체크
|
||||||
|
* 3. 메세지 타입 구하기
|
||||||
|
* 4. 제목 셋팅 : 타입에 따라 분기
|
||||||
|
* 5. 이미지 갯수 셋팅
|
||||||
|
* 6. 예약 및 분할에 따른 시간 설정
|
||||||
|
* 7. 전송사 코드 셋팅
|
||||||
|
* @param mjonMsgVO
|
||||||
|
* @param lists
|
||||||
|
* @param statusResponse
|
||||||
|
* @param agentSendCounts
|
||||||
|
* @param sendRateList
|
||||||
|
* @param isHolidayNotified
|
||||||
|
* @return call by reference
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static Boolean populateSendLists(MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendListVO
|
||||||
|
, StatusResponse statusResponse, List<String> resultSpamTxt
|
||||||
|
, Map<String, Integer> agentSendCounts, List<MjonMsgVO> sendRateList, boolean isHolidayNotified, UserManageVO userManageVO) throws Exception{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log.info(" :: populateSendLists :: ");
|
||||||
|
|
||||||
|
String smishingYn = userManageVO.getSmishingYn();
|
||||||
|
String exceptSpamYn = userManageVO.getExceptSpamYn();
|
||||||
|
|
||||||
|
|
||||||
|
// 예약 시간 기본값 설정
|
||||||
|
Date now = new Date();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
|
||||||
|
// ReqDate가 비어 있으면 현재 시간으로 설정, 그렇지 않으면 ReqDate로 설정
|
||||||
|
// 화면에서 예약문자면 예약시간을 regDate로 설정한다.
|
||||||
|
Date baseDate;
|
||||||
|
if (StringUtils.isEmpty(mjonMsgVO.getReqDate())) {
|
||||||
|
mjonMsgVO.setReqDate(sdf.format(now)); // ReqDate에 현재 시간 설정
|
||||||
|
baseDate = now;
|
||||||
|
} else {
|
||||||
|
baseDate = sdf.parse(mjonMsgVO.getReqDate()); // ReqDate를 baseDate로 설정
|
||||||
|
}
|
||||||
|
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(baseDate); // calendar에 baseDate 설정
|
||||||
|
int counter = 0; // 분할 건수 카운터
|
||||||
|
|
||||||
|
// 데이터 모두 스팸 체크를 안하고 건별로 갯수를 정해서 스팸체크를 한다.
|
||||||
|
int spamChkSize = getSpamChkSize(mjonMsgSendListVO.size());
|
||||||
|
int sampleCounter = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 치환 구문과 필드 getter 매핑
|
||||||
|
Map<String, Function<MjonMsgSendVO, String>> placeholders = new HashMap<>();
|
||||||
|
placeholders.put("[*이름*]", MjonMsgSendVO::getName);
|
||||||
|
placeholders.put("[*1*]", MjonMsgSendVO::getRep1);
|
||||||
|
placeholders.put("[*2*]", MjonMsgSendVO::getRep2);
|
||||||
|
placeholders.put("[*3*]", MjonMsgSendVO::getRep3);
|
||||||
|
placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
|
||||||
|
|
||||||
|
boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||||
|
boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||||
|
boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||||
|
|
||||||
|
String msgKind = mjonMsgVO.getMsgKind();
|
||||||
|
String smsTxtTemp = mjonMsgVO.getSmsTxt();
|
||||||
|
String mmsSubject = mjonMsgVO.getMmsSubject();
|
||||||
|
Boolean replaceYN = getReplaceYN(smsTxtTemp);
|
||||||
|
|
||||||
|
String msgTypeResult = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (MjonMsgSendVO sendVO : mjonMsgSendListVO) {
|
||||||
|
|
||||||
|
sendVO.setCallFrom(mjonMsgVO.getCallFrom());
|
||||||
|
sendVO.setCallTo(sendVO.getPhone());
|
||||||
|
sendVO.setUserId(mjonMsgVO.getUserId());
|
||||||
|
|
||||||
|
String smsTxt = smsTxtTemp;
|
||||||
|
// 치환 문자면
|
||||||
|
if(replaceYN) {
|
||||||
|
|
||||||
|
// 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환
|
||||||
|
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
||||||
|
String placeholder = entry.getKey();
|
||||||
|
String value = entry.getValue().apply(sendVO);
|
||||||
|
// log.info(" + smsTxtTemp [{}]", smsTxtTemp);
|
||||||
|
// log.info(" + placeholder [{}]", placeholder);
|
||||||
|
// log.info(" + value [{}]", value);
|
||||||
|
// log.info(" + smsTxtTemp.contains(placeholder) [{}]", smsTxtTemp.contains(placeholder));
|
||||||
|
if (smsTxt.contains(placeholder)) {
|
||||||
|
if (StringUtils.isEmpty(value)) {
|
||||||
|
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
smsTxt = smsTxt.replace(placeholder, value);
|
||||||
|
// log.info(" + smsTxt [{}]", smsTxt);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String smsSpamChkTxt = smsTxt;
|
||||||
|
if(StringUtils.isNotEmpty(smsTxt)) {
|
||||||
|
smsSpamChkTxt = smsTxt.replaceAll(String.valueOf((char) 13), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이미지 셋팅
|
||||||
|
setImagePathsForMsgSendVO(mjonMsgVO, sendVO);
|
||||||
|
|
||||||
|
|
||||||
|
// == 치환 여부에 따라 처리 로직 분기 ==
|
||||||
|
// 치환 문자가 아닌 경우
|
||||||
|
if (!replaceYN) {
|
||||||
|
// 스팸 체크와 메시지 타입 체크 각각 한 번만 수행
|
||||||
|
if (!hasPerformedSpamCheck && "N".equals(exceptSpamYn)) {
|
||||||
|
checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt, isHolidayNotified);
|
||||||
|
hasPerformedSpamCheck = true;
|
||||||
|
}
|
||||||
|
if (!hasPerformedMsgType) {
|
||||||
|
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||||
|
if ("INVALID".equals(msgTypeResult)) {
|
||||||
|
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
hasPerformedMsgType = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{// 치환 문자인 경우
|
||||||
|
// 스팸 체크는 `spamChkSize`만큼 반복 수행
|
||||||
|
if (sampleCounter < spamChkSize && !"Y".equals(mjonMsgVO.getSpamStatus()) && "N".equals(exceptSpamYn)) {
|
||||||
|
checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt, isHolidayNotified);
|
||||||
|
sampleCounter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 메시지 타입 체크는 매번 수행
|
||||||
|
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||||
|
if ("INVALID".equals(msgTypeResult)) {
|
||||||
|
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sendVO.setSmsTxt(smsTxt);
|
||||||
|
sendVO.setMsgType(msgTypeResult);
|
||||||
|
|
||||||
|
// 제목 셋팅
|
||||||
|
if (LONG_MSG_TYPE.equals(msgTypeResult)){
|
||||||
|
String mmsTitleTemp = "";
|
||||||
|
// 제목이 비어 있고 전송할 SMS 텍스트가 존재하는 경우에만 처리
|
||||||
|
if (StringUtils.isEmpty(mmsSubject) && StringUtils.isNotEmpty(smsTxt)) {
|
||||||
|
// SMS 텍스트를 줄 단위로 나누기
|
||||||
|
mmsTitleTemp = getMmsgSubject(smsTxt, msgKind);
|
||||||
|
// 설정된 제목을 현재 메시지 객체에 적용
|
||||||
|
sendVO.setSubject(mmsTitleTemp);
|
||||||
|
|
||||||
|
}else {
|
||||||
|
// 설정된 제목을 현재 메시지 객체에 적용
|
||||||
|
sendVO.setSubject(mmsSubject);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* @isHolidayNotified
|
||||||
|
* - 관리자 알림 설정으로 인해
|
||||||
|
* - 해당 시간이면 지연 미처리
|
||||||
|
* @smishingYn
|
||||||
|
* - 회원 별 '스미싱 온' 상태값
|
||||||
|
* - Y면 알림, 지연 처리해야 함
|
||||||
|
* */
|
||||||
|
if("Y".equalsIgnoreCase(smishingYn) && isHolidayNotified) {
|
||||||
|
mjonMsgVO.setSpamStatus("Y");
|
||||||
|
mjonMsgVO.setSmishingYn("Y");
|
||||||
|
mjonMsgVO.setDelayYn("Y");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 지연 여부 처리
|
||||||
|
if (( "Y".equalsIgnoreCase(smishingYn) || "Y".equalsIgnoreCase(mjonMsgVO.getDelayYn()))
|
||||||
|
&& !hasPerformedDelayYn && isHolidayNotified) {
|
||||||
|
calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
|
||||||
|
// TEST
|
||||||
|
// calendar.add(Calendar.MINUTE, 5); // 모든 시간을 30분 뒤로 미룸
|
||||||
|
hasPerformedDelayYn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 예약 여부 확인
|
||||||
|
if ("Y".equalsIgnoreCase(mjonMsgVO.getReserveYn())) {
|
||||||
|
// 분할 발송일 경우
|
||||||
|
if ("on".equalsIgnoreCase(mjonMsgVO.getDivideChk())) {
|
||||||
|
if (counter == Integer.parseInt(mjonMsgVO.getDivideCnt())) { // 지정된 건수마다 간격 추가
|
||||||
|
counter = 0;
|
||||||
|
calendar.add(Calendar.MINUTE, Integer.parseInt(mjonMsgVO.getDivideTime()));
|
||||||
|
}
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
// 예약 시간 설정
|
||||||
|
sendVO.setReqDate(sdf.format(calendar.getTime())); // 분할된 시간 설정 또는 기본 예약 시간 사용
|
||||||
|
} else {
|
||||||
|
// 예약 여부가 N일 경우에도 기본 예약 시간 설정
|
||||||
|
sendVO.setReqDate(sdf.format(calendar.getTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 전송사 코드 셋팅
|
||||||
|
String agentCode = "00".equals(mjonMsgVO.getAgentCode())
|
||||||
|
? MsgSendUtils.assignAgentBasedOnCount(agentSendCounts, sendRateList)
|
||||||
|
: mjonMsgVO.getAgentCode();
|
||||||
|
sendVO.setAgentCode(agentCode);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Group TB에 넣어줄 제목
|
||||||
|
// 치환안된 sms 데이터로 넣어야함
|
||||||
|
log.info(" mjonMsgSendListVO size :: [{}]", mjonMsgSendListVO.size());
|
||||||
|
if (LONG_MSG_TYPE.equals(mjonMsgSendListVO.get(0).getMsgType())){
|
||||||
|
mjonMsgVO.setMmsSubject(getMmsgSubject(smsTxtTemp, msgKind));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : setImagePathsForMsgSendVO
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : vo에 이미지 셋팅
|
||||||
|
* @param mjonMsgVO
|
||||||
|
* @param sendVO
|
||||||
|
*/
|
||||||
|
private static void setImagePathsForMsgSendVO(MjonMsgVO mjonMsgVO, MjonMsgSendVO sendVO) {
|
||||||
|
int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());
|
||||||
|
|
||||||
|
switch (fileCount) {
|
||||||
|
case 3:
|
||||||
|
sendVO.setFilePath3(mjonMsgVO.getFileName3());
|
||||||
|
case 2:
|
||||||
|
sendVO.setFilePath2(mjonMsgVO.getFileName2());
|
||||||
|
case 1:
|
||||||
|
sendVO.setFilePath1(mjonMsgVO.getFileName1());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// fileCount가 0이거나 설정할 파일이 없는 경우
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sendVO.setFileCnt(mjonMsgVO.getFileCnt());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkSpamAndSetStatus(MjonMsgVO mjonMsgVO, String personalizedSmsTxt, List<String> resultSpamTxt, boolean isHolidayNotified) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
mjonMsgVO.setSpamStatus("N");
|
||||||
|
mjonMsgVO.setDelayYn("N");
|
||||||
|
|
||||||
|
if(StringUtils.isNotEmpty(personalizedSmsTxt)) {
|
||||||
|
|
||||||
|
String resultParser = ComGetSpamStringParser.getSpamTextParse(personalizedSmsTxt).trim();
|
||||||
|
int spmCnt = 0;
|
||||||
|
String spmFilterTxt = "";
|
||||||
|
|
||||||
|
for (String spmTxt : resultSpamTxt) {
|
||||||
|
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
|
||||||
|
if (resultParser.contains(parserStr)) {
|
||||||
|
spmCnt++;
|
||||||
|
spmFilterTxt += spmTxt + ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spmCnt > 0) { // 스팸 문자가 포함된 경우
|
||||||
|
|
||||||
|
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
||||||
|
// 처음부터 idx 만큼 잘라낸 나머지 글자
|
||||||
|
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @isHolidayNotified
|
||||||
|
* - 관리자 알림 설정으로 인해
|
||||||
|
* - 해당 시간이면 지연 미처리
|
||||||
|
* */
|
||||||
|
mjonMsgVO.setSpamStatus("Y");
|
||||||
|
if(isHolidayNotified) {
|
||||||
|
mjonMsgVO.setDelayYn("Y");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Boolean getReplaceYN(String smsTxtTemplate) {// 여러 치환 구문이 포함된 정규식 패턴
|
||||||
|
|
||||||
|
if (smsTxtTemplate == null) {
|
||||||
|
return false; // null일 경우 false 반환
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean replaceYN = false;
|
||||||
|
|
||||||
|
Pattern pattern = Pattern.compile("\\[\\*이름\\*\\]|\\[\\*1\\*\\]|\\[\\*2\\*\\]|\\[\\*3\\*\\]|\\[\\*4\\*\\]");
|
||||||
|
Matcher matcher = pattern.matcher(smsTxtTemplate);
|
||||||
|
|
||||||
|
// 정규식 패턴에 해당하는 치환 구문이 존재하는지 확인
|
||||||
|
if (matcher.find()) {
|
||||||
|
replaceYN = true;
|
||||||
|
}
|
||||||
|
return replaceYN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getSpamChkSize
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.13
|
||||||
|
* @description : 수신자 건수별로 스팸체크하는 갯수 설정
|
||||||
|
* @param size
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static int getSpamChkSize(int size) {
|
||||||
|
int chkSize = 1; // 기본 샘플 크기
|
||||||
|
|
||||||
|
// 수신자 수에 따른 샘플 크기 결정
|
||||||
|
if (size > 100 && size <= 1000) {
|
||||||
|
chkSize = 10;
|
||||||
|
} else if (size > 1000) {
|
||||||
|
chkSize = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
return chkSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 특정 플레이스홀더를 리스트에서 가져온 값으로 치환합니다.
|
||||||
|
*
|
||||||
|
* @param smsTxt 문자 내용
|
||||||
|
* @param placeholder 치환할 플레이스홀더 (예: [*이름*])
|
||||||
|
* @param list 치환할 데이터 리스트
|
||||||
|
* @param index 현재 인덱스
|
||||||
|
* @return 치환된 문자 내용
|
||||||
|
*/
|
||||||
|
private static String replacePlaceholder(String smsTxt, String placeholder, String[] list, int index) {
|
||||||
|
if (smsTxt.contains(placeholder)) {
|
||||||
|
if (list.length > index && StringUtil.isNotEmpty(list[index])) {
|
||||||
|
smsTxt = smsTxt.replaceAll(placeholder, StringUtil.getString(list[index].replaceAll("§", ",")));
|
||||||
|
} else {
|
||||||
|
smsTxt = smsTxt.replaceAll(placeholder, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return smsTxt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 배열 인덱스를 안전하게 접근하는 메서드
|
||||||
|
private static String getSafeValue(String[] array, int index) {
|
||||||
|
return (array != null && array.length > index) ? array[index] : " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 치환 처리에 특수문자 제거 로직이 포함된 메서드
|
||||||
|
private static String getReplacementValue(String[] array, int index, String placeholder) {
|
||||||
|
if (array != null && array.length > index && StringUtil.isNotEmpty(array[index])) {
|
||||||
|
return StringUtil.getString(array[index].replaceAll("§", ","));
|
||||||
|
} else {
|
||||||
|
return " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void statusResponseSet (StatusResponse statusResponse, HttpStatus httpStatus, String msg ) {
|
||||||
|
statusResponse.setStatus(httpStatus);
|
||||||
|
statusResponse.setMessage(msg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static StatusResponse validateFilesForMessageSending(int fileCount, MjonMsgVO mjonMsgVO) {
|
||||||
|
if (fileCount > 0) {
|
||||||
|
boolean allFilesAreNull = Stream
|
||||||
|
.of(mjonMsgVO.getFileName1(), mjonMsgVO.getFileName2(), mjonMsgVO.getFileName3())
|
||||||
|
.allMatch(Objects::isNull);
|
||||||
|
|
||||||
|
if (allFilesAreNull) {
|
||||||
|
return new StatusResponse(HttpStatus.NO_CONTENT, "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null; // 유효성 검사를 통과한 경우
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : validateReplacementData
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.09.25
|
||||||
|
* @description : 치환문자가 사용될 때 데이터가 올바른지 확인하는 메서드
|
||||||
|
* @param mjonMsgVO
|
||||||
|
* @param list
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* public static boolean validateReplacementData(MjonMsgVO mjonMsgVO,
|
||||||
|
* List<MjonMsgSendVO> list) { // 치환 구문과 필드 getter 매핑 Map<String,
|
||||||
|
* Function<MjonMsgSendVO, String>> placeholders = new HashMap<>();
|
||||||
|
* placeholders.put("\\[\\*이름\\*\\]", MjonMsgSendVO::getName);
|
||||||
|
* placeholders.put("\\[\\*1\\*\\]", MjonMsgSendVO::getRep1);
|
||||||
|
* placeholders.put("\\[\\*2\\*\\]", MjonMsgSendVO::getRep2);
|
||||||
|
* placeholders.put("\\[\\*3\\*\\]", MjonMsgSendVO::getRep3);
|
||||||
|
* placeholders.put("\\[\\*4\\*\\]", MjonMsgSendVO::getRep4);
|
||||||
|
*
|
||||||
|
* // smsTxt 에서 필요한 치환 구문이 포함되어 있는지 확인 String smsTxt = mjonMsgVO.getSmsTxt();
|
||||||
|
* for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry :
|
||||||
|
* placeholders.entrySet()) { if
|
||||||
|
* (Pattern.compile(entry.getKey()).matcher(smsTxt).find()) { // 해당 치환 구문이 존재할
|
||||||
|
* 경우 모든 수신자에서 필드 값 확인 for (MjonMsgSendVO recipient : list) { if
|
||||||
|
* (StringUtils.isEmpty(entry.getValue().apply(recipient))) { return false; //
|
||||||
|
* 데이터가 없는 경우 } } } } // 모든 치환 구문이 유효한 데이터를 가지고 있으면 true 반환 return true; }
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 배열이 비어있는지 확인하는 메서드
|
||||||
|
public static boolean isEmpty(String[] array) {
|
||||||
|
return array == null || array.length == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setPriceforVO(MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendVOList, JoinSettingVO sysJoinSetVO,
|
||||||
|
MberManageVO mberManageVO) {
|
||||||
|
|
||||||
|
// 사용자 단가 정보 설정 (협의 단가가 없을 경우 시스템 단가를 적용)
|
||||||
|
float shortPrice = MsgSendUtils.getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
||||||
|
float longPrice = MsgSendUtils.getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
||||||
|
float picturePrice = MsgSendUtils.getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice());
|
||||||
|
float picture2Price = MsgSendUtils.getValidPrice(mberManageVO.getPicture2Price(), sysJoinSetVO.getPicture2Price());
|
||||||
|
float picture3Price = MsgSendUtils.getValidPrice(mberManageVO.getPicture3Price(), sysJoinSetVO.getPicture3Price());
|
||||||
|
|
||||||
|
|
||||||
|
// 각 메시지 타입에 따라 사용자 단가 설정 및 총 단가 계산
|
||||||
|
float totalPrice = 0.0f;
|
||||||
|
|
||||||
|
for (MjonMsgSendVO sendVO : mjonMsgSendVOList) {
|
||||||
|
String msgType = sendVO.getMsgType();
|
||||||
|
String eachPrice;
|
||||||
|
|
||||||
|
switch (msgType) {
|
||||||
|
case SHORT_MSG_TYPE: // 단문 메시지 타입
|
||||||
|
eachPrice = Float.toString(shortPrice);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LONG_MSG_TYPE: // 장문 또는 이미지 메시지 타입
|
||||||
|
eachPrice = getPicturePrice(sendVO, longPrice, picturePrice, picture2Price, picture3Price);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// 기본값이 필요하다면 추가 가능
|
||||||
|
throw new IllegalArgumentException("setPriceforVO :: type Exception ");
|
||||||
|
}
|
||||||
|
|
||||||
|
sendVO.setEachPrice(eachPrice);
|
||||||
|
// log.info(" eachPrice :: [{}]", eachPrice);
|
||||||
|
|
||||||
|
// 각 가격을 합산
|
||||||
|
totalPrice += Float.parseFloat(eachPrice);
|
||||||
|
}
|
||||||
|
mjonMsgVO.setTotalPrice(totalPrice);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : setPriceforVO
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.12.02
|
||||||
|
* @description : total금액 구하기
|
||||||
|
* @param mjonMsgSendVOList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static float setPriceforVO(List<MjonMsgSendVO> mjonMsgSendVOList) {
|
||||||
|
|
||||||
|
float totalPrice = 0.0f;
|
||||||
|
for (MjonMsgSendVO sendVO : mjonMsgSendVOList) {
|
||||||
|
String priceStr = sendVO.getEachPrice();
|
||||||
|
if(StringUtils.isNotEmpty(priceStr)) {
|
||||||
|
totalPrice += Float.parseFloat(priceStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return totalPrice;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 이미지 파일 경로를 기준으로 적절한 가격을 반환하는 헬퍼 메소드.
|
||||||
|
*/
|
||||||
|
private static String getPicturePrice(MjonMsgSendVO sendVO, float longPrice, float picturePrice, float picture2Price, float picture3Price) {
|
||||||
|
|
||||||
|
switch (sendVO.getFilePath3() != null ? "FILE3" :
|
||||||
|
sendVO.getFilePath2() != null ? "FILE2" :
|
||||||
|
sendVO.getFilePath1() != null ? "FILE1" : "NONE") {
|
||||||
|
case "FILE3":
|
||||||
|
return Float.toString(picture3Price);
|
||||||
|
case "FILE2":
|
||||||
|
return Float.toString(picture2Price);
|
||||||
|
case "FILE1":
|
||||||
|
return Float.toString(picturePrice);
|
||||||
|
default:
|
||||||
|
return Float.toString(longPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getOptimalMsgList
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : 주어진 이벤트 정보와 메시지 리스트를 기반으로, 잔액 내에서 최적의 메시지 리스트를 생성하고 결과를 반환합니다.
|
||||||
|
* 만약 잔액이 부족하거나 이벤트가 종료된 상태라면, 이벤트 종료 정보를 포함하여 반환합니다.
|
||||||
|
*
|
||||||
|
* @param eventMberInfo 이벤트 정보 객체 (MjonEventVO). 이벤트 상태 및 잔액 정보를 포함.
|
||||||
|
* @param mjonMsgSendVOList 최적화를 수행할 메시지 리스트 (List<MjonMsgSendVO>).
|
||||||
|
* @return OptimalMsgResultDTO 최적 메시지 리스트와 이벤트 상태 정보를 포함한 DTO 객체.
|
||||||
|
* @throws Exception 메시지 단가 계산 오류 또는 기타 처리 중 발생한 예외를 상위로 전달.
|
||||||
|
*/
|
||||||
|
public static OptimalMsgResultDTO getOptimalMsgList(
|
||||||
|
MjonEventVO eventMberInfo,
|
||||||
|
List<MjonMsgSendVO> mjonMsgSendVOList) throws Exception {
|
||||||
|
|
||||||
|
// 최적의 메시지 리스트를 담을 리스트
|
||||||
|
List<MjonMsgSendVO> optimalList = new ArrayList<>();
|
||||||
|
|
||||||
|
// 이벤트 정보가 없는 경우
|
||||||
|
if (eventMberInfo == null) {
|
||||||
|
return OptimalMsgResultDTO.builder()
|
||||||
|
.optimalMsgList(optimalList)
|
||||||
|
.eventInfo(null)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이벤트 잔액과 종료 조건 확인
|
||||||
|
double remainCash = eventMberInfo.getEventRemainCash();
|
||||||
|
String eventEndDate = eventMberInfo.getEventEndDate();
|
||||||
|
|
||||||
|
if (isEventExpired(remainCash, eventEndDate)) {
|
||||||
|
MjonEventVO returnEventMberInfo = terminateEvent(eventMberInfo, remainCash);
|
||||||
|
return OptimalMsgResultDTO.builder()
|
||||||
|
.optimalMsgList(optimalList)
|
||||||
|
.eventInfo(returnEventMberInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 단가 설정
|
||||||
|
float eventShortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice());
|
||||||
|
float eventLongPrice = Float.parseFloat(eventMberInfo.getEventLongPrice());
|
||||||
|
float eventPicturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice());
|
||||||
|
float eventPicture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price());
|
||||||
|
float eventPicture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price());
|
||||||
|
|
||||||
|
// 최적의 메시지 리스트 생성
|
||||||
|
double sum = 0.0;
|
||||||
|
Iterator<MjonMsgSendVO> iterator = mjonMsgSendVOList.iterator();
|
||||||
|
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
MjonMsgSendVO msg = iterator.next();
|
||||||
|
|
||||||
|
// 단가 계산 및 예외 처리
|
||||||
|
String eachPrice = getEachPriceOrThrow(msg, eventShortPrice, eventLongPrice, eventPicturePrice, eventPicture2Price, eventPicture3Price);
|
||||||
|
|
||||||
|
float floatEachPrice = Float.parseFloat(eachPrice);
|
||||||
|
|
||||||
|
// 최적의 메시지 리스트에 추가
|
||||||
|
if (sum + floatEachPrice <= remainCash) {
|
||||||
|
sum += floatEachPrice;
|
||||||
|
|
||||||
|
msg.setEachPrice(eachPrice);
|
||||||
|
msg.setEventYn("Y");
|
||||||
|
|
||||||
|
optimalList.add(msg);
|
||||||
|
iterator.remove();
|
||||||
|
} else {
|
||||||
|
break; // 예산 초과로 추가 불가능
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이벤트 잔액 처리하는 매소드 terminateEvent
|
||||||
|
// double remainAmt = targetCash - sum;
|
||||||
|
// MjonEventVO returnEventMberInfo = terminateEvent(eventMberInfo, remainAmt);
|
||||||
|
return OptimalMsgResultDTO.builder()
|
||||||
|
.optimalMsgList(optimalList)
|
||||||
|
// .eventInfo(returnEventMberInfo)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 결과 반환
|
||||||
|
// return OptimalMsgResultDTO.builder()
|
||||||
|
// .optimalMsgList(optimalList)
|
||||||
|
// .eventInfo(null)
|
||||||
|
// .build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getEachPriceOrThrow
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description :
|
||||||
|
* @param msg
|
||||||
|
* @param shortPrice
|
||||||
|
* @param longPrice
|
||||||
|
* @param picturePrice
|
||||||
|
* @param picture2Price
|
||||||
|
* @param picture3Price
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static String getEachPriceOrThrow(
|
||||||
|
MjonMsgSendVO msg,
|
||||||
|
float shortPrice,
|
||||||
|
float longPrice,
|
||||||
|
float picturePrice,
|
||||||
|
float picture2Price,
|
||||||
|
float picture3Price) {
|
||||||
|
|
||||||
|
switch (msg.getMsgType()) {
|
||||||
|
case SHORT_MSG_TYPE:
|
||||||
|
return Float.toString(shortPrice);
|
||||||
|
case LONG_MSG_TYPE:
|
||||||
|
return getPicturePrice(msg, longPrice, picturePrice, picture2Price, picture3Price);
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unsupported message type: " + msg.getMsgType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isEventExpired(double targetCash, String eventEndDate) throws Exception {
|
||||||
|
return !MJUtil.getCompareDate(eventEndDate) || targetCash < MIN_EVENT_REMAIN_CASH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : terminateEvent
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : 이벤트 종료 VO 생성
|
||||||
|
* @param eventMberInfo
|
||||||
|
* @param remainCash
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static MjonEventVO terminateEvent(MjonEventVO eventMberInfo, double remainCash) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
// 이벤트 상태를 종료로 변경
|
||||||
|
MjonEventVO returnEventMberInfo = new MjonEventVO();
|
||||||
|
returnEventMberInfo.setEventInfoId(eventMberInfo.getEventInfoId());
|
||||||
|
returnEventMberInfo.setMberId(eventMberInfo.getMberId());
|
||||||
|
returnEventMberInfo.setEventRemainCash(remainCash);
|
||||||
|
returnEventMberInfo.setEventStatus("Y");
|
||||||
|
|
||||||
|
if (remainCash < MIN_EVENT_REMAIN_CASH) {
|
||||||
|
returnEventMberInfo.setEventStatus("E");
|
||||||
|
returnEventMberInfo.setEventMemo("발송 최소 금액("+ MIN_EVENT_REMAIN_CASH +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴");
|
||||||
|
}
|
||||||
|
return returnEventMberInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : handleHotlineAgentRate
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : 전용 전송사 비율이 0이면 대표 전송사로 수정
|
||||||
|
* @param userInfo
|
||||||
|
* @param tmp
|
||||||
|
* @param hotlineAgentCode
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String handleHotlineAgentRate(MberManageVO userInfo, MjonMsgAgentStsVO tmp, String hotlineAgentCode) {
|
||||||
|
String sendRate = tmp.getSendRate();
|
||||||
|
String repAgent = tmp.getRepAgent();
|
||||||
|
String useYn = tmp.getUseYn();
|
||||||
|
|
||||||
|
// 블라인드 코드가 'N'인 경우 전송 비율 및 사용 가능 여부 확인
|
||||||
|
if ("N".equals(userInfo.getBlineCode())) {
|
||||||
|
// 전송 비율이 0이거나 사용 불가인 경우 대표 전송사로 변경
|
||||||
|
if ("0".equals(sendRate) || "N".equals(useYn)) {
|
||||||
|
hotlineAgentCode = repAgent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hotlineAgentCode; // 변경된 hotlineAgentCode 반환
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : initializeAgentSendCounts
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : 전송사별 코드로 map 초기화 하기
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Map<String, Integer> initializeAgentSendCounts() {
|
||||||
|
Map<String, Integer> agentSendCounts = new HashMap<>();
|
||||||
|
agentSendCounts.put("01", 0); // 아이하트
|
||||||
|
agentSendCounts.put("02", 0); // 현대 퓨쳐넷
|
||||||
|
agentSendCounts.put("03", 0); // 아이엠오
|
||||||
|
agentSendCounts.put("04", 0); // 비즈뿌리오
|
||||||
|
agentSendCounts.put("05", 0); // 제이제이
|
||||||
|
agentSendCounts.put("07", 0); // 인비토
|
||||||
|
return agentSendCounts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : calculateSendCounts
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : agentSendCounts에 있는 에이젼트 map에 전송사 비율에 따라 카운트 put 하기
|
||||||
|
* @param agentSendCounts
|
||||||
|
* @param sendRate
|
||||||
|
* @param finalSize
|
||||||
|
*/
|
||||||
|
public static void calculateSendCounts(Map<String, Integer> agentSendCounts, MjonMsgVO sendRate, int finalSize) {
|
||||||
|
String agentCode = sendRate.getAgentCode();
|
||||||
|
float sendRatePercentage = Float.parseFloat(sendRate.getSendRate());
|
||||||
|
|
||||||
|
int sendCount = Math.round(finalSize * sendRatePercentage);
|
||||||
|
|
||||||
|
if (agentSendCounts.containsKey(agentCode)) {
|
||||||
|
agentSendCounts.put(agentCode, sendCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : assignAgentBasedOnCount
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.11.26
|
||||||
|
* @description : initializeAgentSendCounts()에서 만든 map으로 발송 agent 데이터 Set
|
||||||
|
* @param agentSendCounts
|
||||||
|
* @param sendRateList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String assignAgentBasedOnCount(Map<String, Integer> agentSendCounts, List<MjonMsgVO> sendRateList) {
|
||||||
|
// 전송사 코드 순서대로 확인 :: initializeAgentSendCounts 메소드와 맞춰야함
|
||||||
|
List<String> agentCodes = Arrays.asList("01", "02", "03", "04", "05", "07");
|
||||||
|
|
||||||
|
// 전송 가능한 코드 찾기
|
||||||
|
for (String agentCode : agentCodes) {
|
||||||
|
if (agentSendCounts.get(agentCode) > 0) {
|
||||||
|
agentSendCounts.put(agentCode, agentSendCounts.get(agentCode) - 1);
|
||||||
|
return agentCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 모든 코드의 전송 가능 횟수가 0이면 대표 전송사로 할당
|
||||||
|
return sendRateList.get(0).getRepAgent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getMmsgSubject
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2024.12.02
|
||||||
|
* @description : 타이틀 생성
|
||||||
|
* @param smsTxt
|
||||||
|
* @param msgKind
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getMmsgSubject(String smsTxt, String msgKind) {
|
||||||
|
|
||||||
|
String mmsTitleTemp = "";
|
||||||
|
if(StringUtils.isEmpty(smsTxt)) {
|
||||||
|
return mmsTitleTemp;
|
||||||
|
}
|
||||||
|
// SMS 텍스트를 줄 단위로 나누기
|
||||||
|
String[] split = smsTxt.split("\n");
|
||||||
|
|
||||||
|
if (split.length > 0) {
|
||||||
|
// "C" 메시지 종류인 경우 두 번째 줄, 그렇지 않으면 첫 번째 줄을 제목으로 설정
|
||||||
|
mmsTitleTemp = "C".equals(msgKind) && split.length > 1 ? split[1].trim() : split[0].trim();
|
||||||
|
|
||||||
|
// 제목 글자 수를 20자로 제한 (초과 시 잘라냄)
|
||||||
|
mmsTitleTemp = mmsTitleTemp.length() > 20 ? mmsTitleTemp.substring(0, 20) : mmsTitleTemp;
|
||||||
|
}
|
||||||
|
return mmsTitleTemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : eventYN
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2025.02.10
|
||||||
|
* @description : 이벤트 확인
|
||||||
|
* @param eventMberInfo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Boolean isNotEvent(MjonEventVO eventMberInfo) {
|
||||||
|
|
||||||
|
|
||||||
|
if (eventMberInfo == null
|
||||||
|
|| "E".equals(eventMberInfo.getEventStatus())
|
||||||
|
|| org.apache.commons.lang3.StringUtils.isEmpty(eventMberInfo.getEventEndDate())
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
60
src/main/java/itn/com/cmm/util/Order.java
Normal file
60
src/main/java/itn/com/cmm/util/Order.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 프로그램 파일명 : Order.java
|
||||||
|
*
|
||||||
|
* 프로그램 설명 : 쿼리에서 정렬방법을 정의하는 클래스
|
||||||
|
*
|
||||||
|
* 작 성 자 : jeong hoon hee
|
||||||
|
*
|
||||||
|
* 작 성 일 : 2013. 6. 7.
|
||||||
|
*
|
||||||
|
* Copyright(c) 2013 DAEYOON Co. Ltd. All rights reserved.
|
||||||
|
*/
|
||||||
|
public class Order {
|
||||||
|
|
||||||
|
private String columnName;
|
||||||
|
private String orderType;
|
||||||
|
|
||||||
|
public Order() {
|
||||||
|
super();
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
public Order(String columnName, String orderType) {
|
||||||
|
super();
|
||||||
|
this.columnName = columnName;
|
||||||
|
this.orderType = orderType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Order asc(String columnName) {
|
||||||
|
Order order = new Order();
|
||||||
|
order.setColumnName(columnName);
|
||||||
|
order.setOrderType("ASC");
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Order desc(String columnName) {
|
||||||
|
Order order = new Order();
|
||||||
|
order.setColumnName(columnName);
|
||||||
|
order.setOrderType("DESC");
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getColumnName() {
|
||||||
|
return columnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumnName(String columnName) {
|
||||||
|
this.columnName = columnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrderType() {
|
||||||
|
return orderType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrderType(String orderType) {
|
||||||
|
this.orderType = orderType;
|
||||||
|
}
|
||||||
|
}
|
||||||
94
src/main/java/itn/com/cmm/util/OsProcessCheckUtil.java
Normal file
94
src/main/java/itn/com/cmm/util/OsProcessCheckUtil.java
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
public class OsProcessCheckUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 운영체제의 특정 프로세스 실행여부 확인하는 유틸
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
|
||||||
|
public static String WindowProcessCheck(String processNm) throws Exception{
|
||||||
|
|
||||||
|
String line ="";
|
||||||
|
String pId="";
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
|
||||||
|
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
||||||
|
while ((line = input.readLine()) != null) {
|
||||||
|
System.out.println(line); //<-- Parse data here.
|
||||||
|
String [] words = line.split(" ");
|
||||||
|
String [] procInfo = new String[10];
|
||||||
|
if (words[0].contains(processNm)){
|
||||||
|
//System.out.println(line);
|
||||||
|
int nCnt = 0;
|
||||||
|
for(String item : words){
|
||||||
|
if (item.equals(""))
|
||||||
|
continue;
|
||||||
|
System.out.print(item + " ");
|
||||||
|
procInfo[nCnt] = item;
|
||||||
|
nCnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Process Name : "+ procInfo[0]);
|
||||||
|
System.out.println("Process ID : "+ procInfo[1]);
|
||||||
|
System.out.println("Memory Usage : "+ procInfo[4]);
|
||||||
|
pId = procInfo[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
input.close();
|
||||||
|
} catch (Exception err) {
|
||||||
|
err.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return pId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String LinuxProcessCheck(String processNm) throws Exception{
|
||||||
|
|
||||||
|
String line ="";
|
||||||
|
String pId="";
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
System.out.println("++++++++++++++++processNm++++++++++++++++++++++++"+processNm);
|
||||||
|
String[] cmd = {"ps -ef | grep EnDeServer"};
|
||||||
|
Process p = Runtime.getRuntime().exec(cmd);
|
||||||
|
System.out.println("+++++++++++++++++++++++ppppppppppppppppppp++++++++++++++++++++++++++++++"+p);
|
||||||
|
|
||||||
|
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
|
||||||
|
System.out.println("++++++++++++++++++++++++while Start++++++++++++++++++++++++++++++++++");
|
||||||
|
System.out.println("+++++++++++++++input.readLine()+++++++++++++++++" + input.readLine());
|
||||||
|
while ((line = input.readLine()) != null) {
|
||||||
|
System.out.println(line); //<-- Parse data here.
|
||||||
|
String [] words = line.split(" ");
|
||||||
|
String [] procInfo = new String[10];
|
||||||
|
if (words[0].contains(processNm)){
|
||||||
|
System.out.println("+++++++++++line++++++++++++++++++++++"+line);
|
||||||
|
int nCnt = 0;
|
||||||
|
for(String item : words){
|
||||||
|
if (item.equals(""))
|
||||||
|
continue;
|
||||||
|
System.out.print(item + " ");
|
||||||
|
procInfo[nCnt] = item;
|
||||||
|
nCnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Process Name : "+ procInfo[0]);
|
||||||
|
System.out.println("Process ID : "+ procInfo[1]);
|
||||||
|
System.out.println("Memory Usage : "+ procInfo[4]);
|
||||||
|
pId = procInfo[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
input.close();
|
||||||
|
} catch (Exception err) {
|
||||||
|
err.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return pId;
|
||||||
|
}
|
||||||
|
}
|
||||||
48
src/main/java/itn/com/cmm/util/PayUtils.java
Normal file
48
src/main/java/itn/com/cmm/util/PayUtils.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : PayUtil.java
|
||||||
|
* @date : 2024.07.16
|
||||||
|
* @description : pay 다루는 Util
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.04.06 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class PayUtils {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : getTrimToFirstDecimal
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2023.07.16
|
||||||
|
* @description : 소수점 첫째자리 빼고 다 버림
|
||||||
|
* @return ex) 0000.0
|
||||||
|
*/
|
||||||
|
public static String getTrimToFirstDecimal(String input) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 쉼표 제거
|
||||||
|
String normalizedInput = input.replace(",", "");
|
||||||
|
// Double로 변환
|
||||||
|
double value = Double.parseDouble(normalizedInput);
|
||||||
|
// 소수점 첫째자리까지만 남기고 나머지는 버림
|
||||||
|
double trimmedValue = Math.floor(value * 10) / 10.0;
|
||||||
|
// 숫자가 너무 커지면 지수 표기법으로 나타내서 방지하기 위한 구문
|
||||||
|
DecimalFormat df = new DecimalFormat("#.0");
|
||||||
|
// 문자열로 변환하여 반환
|
||||||
|
return df.format(trimmedValue);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.err.println("Number format exception: " + e.getMessage());
|
||||||
|
return "0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
151
src/main/java/itn/com/cmm/util/PdfUtil.java
Normal file
151
src/main/java/itn/com/cmm/util/PdfUtil.java
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.awt.Image;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||||
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author : 이호영
|
||||||
|
* @fileName : PdfUtil.java
|
||||||
|
* @date : 2023.03.16
|
||||||
|
* @description : PDF를 다루는 Utils
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* ----------------------------------------------------------- *
|
||||||
|
* 2023.04.06 이호영 최초 생성
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class PdfUtil {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 휴대폰번호 대시('-') 추가
|
||||||
|
* 대시 유무 상관없음
|
||||||
|
* 유효성 맞지 않을시 변환안됨.
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
public static void showPdf(HttpServletResponse response, String pdfFileName) {
|
||||||
|
|
||||||
|
|
||||||
|
FileInputStream fis = null;
|
||||||
|
|
||||||
|
BufferedOutputStream bos = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
File pdfFile = new File(pdfFileName);
|
||||||
|
|
||||||
|
// 클라이언트 브라우져에서 바로 보는 방법(헤더 변경)
|
||||||
|
response.setContentType("application/pdf");
|
||||||
|
|
||||||
|
// ★ 이 구문이 있으면 [다운로드], 이 구문이 없다면 바로 target 지정된 곳에 view 해줍니다.
|
||||||
|
// response.addHeader("Content-Disposition", "attachment; filename=" + pdfFile.getName() + ".pdf");
|
||||||
|
|
||||||
|
// 파일 읽고 쓰는 건 일반적인 Write방식이랑 동일합니다. 다만 reponse 출력 스트림 객체에 write.
|
||||||
|
fis = new FileInputStream(pdfFile);
|
||||||
|
|
||||||
|
int size = fis.available(); // 지정 파일에서 읽을 수 있는 바이트 수를 반환
|
||||||
|
|
||||||
|
byte[] buf = new byte[size]; // 버퍼설정
|
||||||
|
|
||||||
|
int readCount = fis.read(buf);
|
||||||
|
|
||||||
|
response.flushBuffer();
|
||||||
|
|
||||||
|
bos = new BufferedOutputStream(response.getOutputStream());
|
||||||
|
|
||||||
|
bos.write(buf, 0, readCount);
|
||||||
|
|
||||||
|
bos.flush();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (fis != null)
|
||||||
|
fis.close(); // close는 꼭! 반드시!
|
||||||
|
|
||||||
|
if (bos != null)
|
||||||
|
bos.close();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String makeImgPdf(String imgDir,String extsn) throws Exception {
|
||||||
|
PDDocument doc = new PDDocument();
|
||||||
|
String uuid = UUID.randomUUID().toString();
|
||||||
|
try {
|
||||||
|
File copy1 = new File(imgDir);
|
||||||
|
File copy2 = new File(imgDir + "." +extsn);
|
||||||
|
|
||||||
|
|
||||||
|
FileUtils.copyFile(copy1, copy2);
|
||||||
|
File imgFiles = new File(imgDir + "." +extsn);
|
||||||
|
Image img = ImageIO.read(imgFiles);
|
||||||
|
|
||||||
|
PDPage page = new PDPage(PDRectangle.A4);
|
||||||
|
doc.addPage(page);
|
||||||
|
|
||||||
|
PDImageXObject pdImage = PDImageXObject.createFromFile(imgFiles.toString(), doc);
|
||||||
|
int pageWidth = Math.round(page.getCropBox().getWidth());
|
||||||
|
int pageHeight = Math.round(page.getCropBox().getHeight());
|
||||||
|
|
||||||
|
float imgRatio = 1;
|
||||||
|
if ( pageWidth < img.getWidth(null)) {
|
||||||
|
imgRatio = (float)img.getWidth(null) / (float)pageWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
int imgWidth = Math.round(img.getWidth(null) / imgRatio);
|
||||||
|
int imgHeight = Math.round(img.getHeight(null) / imgRatio);
|
||||||
|
|
||||||
|
int pageWidthPosition = (pageWidth - imgWidth) / 2;
|
||||||
|
int pageHeightPosition = (pageWidth - imgWidth) / 2;
|
||||||
|
|
||||||
|
PDPageContentStream contents = new PDPageContentStream(doc, page);
|
||||||
|
contents.drawImage(pdImage, pageWidthPosition, pageHeightPosition, imgWidth, imgHeight);
|
||||||
|
contents.close();
|
||||||
|
doc.save("/usr/local/tomcat/file/sht/pdf/" + uuid + ".pdf");
|
||||||
|
//doc.save("C:/TEST/" + uuid + ".pdf");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Exception! : " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
doc.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return uuid + ".pdf";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
142
src/main/java/itn/com/cmm/util/RedirectUrlMaker.java
Normal file
142
src/main/java/itn/com/cmm/util/RedirectUrlMaker.java
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 프로그램 파일명 : RedirectUrlMaker.java
|
||||||
|
*
|
||||||
|
* 프로그램 설명 : 리다이렉트URL를 생성해주는 유틸클래스
|
||||||
|
*
|
||||||
|
* 작 성 자 : jeong hoon hee
|
||||||
|
*
|
||||||
|
* 작 성 일 : 2013. 5. 15.
|
||||||
|
*
|
||||||
|
* Copyright(c) 2013 DAEYOON Co. Ltd. All rights reserved.
|
||||||
|
*/
|
||||||
|
public class RedirectUrlMaker {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 요청매핑URL
|
||||||
|
*/
|
||||||
|
private String requestMappingUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 검색파라미터객체
|
||||||
|
*/
|
||||||
|
private Criteria criteria;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 추가파라미터맵
|
||||||
|
*/
|
||||||
|
private Map<String, Object> paramMap = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 생성자1
|
||||||
|
*
|
||||||
|
* @param requestMappingUrl : 요청매핑URL (예: "/board/list.do")
|
||||||
|
* @param criteria : 검색파라미터객체
|
||||||
|
*/
|
||||||
|
public RedirectUrlMaker(String requestMappingUrl, Criteria criteria) {
|
||||||
|
this.requestMappingUrl = requestMappingUrl;
|
||||||
|
this.criteria = criteria;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 생성자2
|
||||||
|
* @param requestMappingUrl
|
||||||
|
*/
|
||||||
|
public RedirectUrlMaker(String requestMappingUrl) {
|
||||||
|
this.requestMappingUrl = requestMappingUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object appendParam(String key, Object value) {
|
||||||
|
if (this.paramMap == null) {
|
||||||
|
this.paramMap = new HashMap<String, Object>();
|
||||||
|
}
|
||||||
|
return this.paramMap.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getParam(String key) {
|
||||||
|
if (this.paramMap == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return this.paramMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getParamMap() {
|
||||||
|
return paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParamMap(Map<String, Object> paramMap) {
|
||||||
|
this.paramMap = paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 리다이렉트URL를 생성하여 리턴한다.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws UnsupportedEncodingException
|
||||||
|
*/
|
||||||
|
public String getRedirectUrl() {
|
||||||
|
StringBuffer redirectUrl = new StringBuffer("redirect:");
|
||||||
|
|
||||||
|
if (StringUtils.isNotEmpty(this.requestMappingUrl)) {
|
||||||
|
if (this.requestMappingUrl.startsWith("/") == false) {
|
||||||
|
this.requestMappingUrl = "/" + this.requestMappingUrl;
|
||||||
|
}
|
||||||
|
if (this.requestMappingUrl.endsWith("?")) {
|
||||||
|
this.requestMappingUrl = this.requestMappingUrl.substring(0, this.requestMappingUrl.length()-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
redirectUrl.append(this.requestMappingUrl);
|
||||||
|
|
||||||
|
if (this.criteria != null) {
|
||||||
|
if (redirectUrl.toString().indexOf("?") == -1) {
|
||||||
|
redirectUrl.append("?");
|
||||||
|
} else {
|
||||||
|
redirectUrl.append("&");
|
||||||
|
}
|
||||||
|
redirectUrl.append(this.criteria.getParams());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.paramMap != null) {
|
||||||
|
if (this.paramMap.size() > 0) {
|
||||||
|
Set<String> set = this.paramMap.keySet();
|
||||||
|
Iterator<String> iter = set.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
String key = iter.next();
|
||||||
|
Object value = this.paramMap.get(key);
|
||||||
|
redirectUrl.append("&");
|
||||||
|
redirectUrl.append(key);
|
||||||
|
redirectUrl.append("=");
|
||||||
|
if (value instanceof String) {
|
||||||
|
if (StringUtils.isNotEmpty((String) value)) {
|
||||||
|
try {
|
||||||
|
redirectUrl.append(URLEncoder.encode((String) value, "UTF-8"));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
System.out.println("UnsupportedEncodingException By RedirectUrlMaker.getRedirectUrl() : " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
redirectUrl.append(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return redirectUrl.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getRedirectUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
145
src/main/java/itn/com/cmm/util/SlackMessageFormatUtil.java
Normal file
145
src/main/java/itn/com/cmm/util/SlackMessageFormatUtil.java
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
||||||
|
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||||
|
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||||
|
|
||||||
|
public class SlackMessageFormatUtil {
|
||||||
|
|
||||||
|
private static final String PREFIX_SMISHING = "[스미싱의심]";
|
||||||
|
private static final String PREFIX_RESERVE = "[예약]";
|
||||||
|
private static final String PREFIX_IMAGE = "그림문자 ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 일반 SMS 메시지 텍스트 포맷팅
|
||||||
|
*/
|
||||||
|
public static String formatSmsText(MjonMsgVO mjonMsgVO) {
|
||||||
|
String smsTxt = mjonMsgVO.getSmsTxt();
|
||||||
|
String reserveYn = safeGetString(mjonMsgVO.getReserveYn());
|
||||||
|
String delayYn = safeGetString(mjonMsgVO.getDelayYn());
|
||||||
|
String smishingYn = safeGetString(mjonMsgVO.getSmishingYn());
|
||||||
|
|
||||||
|
// 공통 텍스트 포맷팅 로직 적용
|
||||||
|
smsTxt = formatMessagePrefix(smsTxt, reserveYn,
|
||||||
|
"Y".equals(smishingYn) || "Y".equals(delayYn));
|
||||||
|
|
||||||
|
// 그림 문자 처리 (SMS 전용 로직)
|
||||||
|
int fileCount = parseIntOrDefault(mjonMsgVO.getFileCnt(), 0);
|
||||||
|
if ("6".equals(mjonMsgVO.getMsgType()) && fileCount > 0 && StringUtils.isEmpty(smsTxt)) {
|
||||||
|
smsTxt = "그림문자 " + smsTxt;
|
||||||
|
}
|
||||||
|
|
||||||
|
return smsTxt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 카카오톡 메시지 텍스트 포맷팅
|
||||||
|
*/
|
||||||
|
public static String formatKakaoText(KakaoSendAdvcVO sendVO) {
|
||||||
|
String smsTxt = sendVO.getTemplateContent();
|
||||||
|
String reserveYn = safeGetString(sendVO.getReserveYn());
|
||||||
|
String atDelayYn = safeGetString(sendVO.getAtDelayYn());
|
||||||
|
|
||||||
|
// 공통 텍스트 포맷팅 로직 적용
|
||||||
|
return formatMessagePrefix(smsTxt, reserveYn, "Y".equals(atDelayYn));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String formatSandName(MjonMsgVO mjonMsgVO) {
|
||||||
|
String userId = mjonMsgVO.getUserId();
|
||||||
|
String callFrom = mjonMsgVO.getCallFrom();
|
||||||
|
String msgType = getMessageTypeLabel(mjonMsgVO.getMsgType(), mjonMsgVO.getFileCnt());
|
||||||
|
return String.format("[%s][%s]%s", userId, callFrom, msgType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 메시지 접두사 포맷팅 공통 로직 (예약 및 스미싱 의심 접두사 처리)
|
||||||
|
*
|
||||||
|
* @param messageText 원본 메시지 텍스트
|
||||||
|
* @param reserveYn 예약 여부
|
||||||
|
* @param isSmishing 스미싱 의심 여부
|
||||||
|
* @return 포맷팅된 메시지 텍스트
|
||||||
|
*/
|
||||||
|
public static String formatMessagePrefix(String messageText, String reserveYn, boolean isSmishing) {
|
||||||
|
if ("Y".equals(reserveYn)) {
|
||||||
|
return isSmishing ? PREFIX_SMISHING + PREFIX_RESERVE + messageText : PREFIX_RESERVE + messageText;
|
||||||
|
} else if (isSmishing) {
|
||||||
|
return PREFIX_SMISHING + messageText;
|
||||||
|
}
|
||||||
|
return messageText;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @카카오톡용 sandName 포맷팅 메서드
|
||||||
|
*/
|
||||||
|
public static String formatKakaoSandName(KakaoSendAdvcVO sendVO) {
|
||||||
|
String userId = sendVO.getUserId();
|
||||||
|
String callFrom = sendVO.getCallFrom();
|
||||||
|
String msgType = getKakaoMessageTypeLabel(sendVO.getMsgType());
|
||||||
|
return String.format("[%s][%s]%s", userId, callFrom, msgType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 메시지 타입 레이블 반환 (SMS 전용)
|
||||||
|
*
|
||||||
|
* @param msgType 메시지 타입
|
||||||
|
* @param fileCnt 파일 개수
|
||||||
|
* @return 메시지 타입 레이블
|
||||||
|
*/
|
||||||
|
public static String getMessageTypeLabel(String msgType, String fileCnt) {
|
||||||
|
int fileCount = parseIntOrDefault(fileCnt, 0);
|
||||||
|
|
||||||
|
switch (msgType) {
|
||||||
|
case "4":
|
||||||
|
return "[단문]";
|
||||||
|
case "6":
|
||||||
|
return fileCount == 0 ? "[장문]" : "[그림]";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 카카오톡 메시지 타입 레이블 반환
|
||||||
|
*
|
||||||
|
* @param msgType 메시지 타입
|
||||||
|
* @return 메시지 타입 레이블
|
||||||
|
*/
|
||||||
|
public static String getKakaoMessageTypeLabel(String msgType) {
|
||||||
|
switch (msgType) {
|
||||||
|
case "8":
|
||||||
|
return "[알림톡]";
|
||||||
|
case "9":
|
||||||
|
return "[친구톡]";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 정수로 변환, 변환 실패 시 기본값 반환
|
||||||
|
*
|
||||||
|
* @param value 변환할 문자열
|
||||||
|
* @param defaultValue 기본값
|
||||||
|
* @return 변환된 정수 또는 기본값
|
||||||
|
*/
|
||||||
|
public static int parseIntOrDefault(String value, int defaultValue) {
|
||||||
|
try {
|
||||||
|
return Integer.parseInt(value);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 안전하게 문자열 가져오기 (null 체크)
|
||||||
|
*
|
||||||
|
* @param value 원본 문자열
|
||||||
|
* @return 원본 문자열 또는 빈 문자열
|
||||||
|
*/
|
||||||
|
public static String safeGetString(String value) {
|
||||||
|
return value == null ? "" : value;
|
||||||
|
}
|
||||||
|
}
|
||||||
617
src/main/java/itn/com/cmm/util/StringUtil.java
Normal file
617
src/main/java/itn/com/cmm/util/StringUtil.java
Normal file
@ -0,0 +1,617 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.sql.Clob;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
public class StringUtil {
|
||||||
|
|
||||||
|
private static final int HIGHEST_SPECIAL = '>'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int LOWEST_SPECIAL = '\"'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int HIGHEST_BR = '\r'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int LOWEST_BR = '\n'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int HIGHEST_JS_SPECIAL = '\\'; // for escaping js literal code. by hessie; since 2007/10/01
|
||||||
|
private static char[][] specialCharactersRepresentation = new char[HIGHEST_SPECIAL + 1][];
|
||||||
|
private static char[][] specialCharactersRepresentationWithNbsp = new char[HIGHEST_SPECIAL + 1][];
|
||||||
|
|
||||||
|
public final static char[] byteCodes;
|
||||||
|
|
||||||
|
static {
|
||||||
|
byteCodes = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열 빈 값 여부 - null 포함
|
||||||
|
* @param str
|
||||||
|
* @return true: 입력받은 String 이 빈 문자열 또는 null인 경우
|
||||||
|
*/
|
||||||
|
public static boolean isEmpty(String str) {
|
||||||
|
return str == null || str.length() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String bytesToOrgString(byte[] bytes) {
|
||||||
|
int len = bytes.length;
|
||||||
|
char[] chars = new char[len * 2];
|
||||||
|
|
||||||
|
for (int i = 0; i < len; ++i) {
|
||||||
|
chars[i * 2] = byteCodes[(bytes[i] & 0XF0) >> 4];
|
||||||
|
chars[i * 2 + 1] = byteCodes[(bytes[i] & 0X0F)];
|
||||||
|
}
|
||||||
|
return new String(chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 글자 특정 사이즈로 잘라내기
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param size
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String cutString(String str, int size) {
|
||||||
|
String returnStr = null;
|
||||||
|
if (str.length() > size) {
|
||||||
|
returnStr = str.substring(0, size) + "...";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
returnStr = str;
|
||||||
|
}
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 글자 특정 사이즈로 잘라내기
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param size
|
||||||
|
* @param tail
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String cutString(String str, int size, boolean tail) {
|
||||||
|
String returnStr = null;
|
||||||
|
String tails = "";
|
||||||
|
|
||||||
|
if (tail == true) {
|
||||||
|
tails = "...";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str.length() > size) {
|
||||||
|
returnStr = str.substring(0, size) + tails;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
returnStr = str;
|
||||||
|
}
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 글자 특정 사이즈로 <br/> 분이기
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param size
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String brString(String str, int size) {
|
||||||
|
String returnStr = "";
|
||||||
|
int j = 0;
|
||||||
|
for(int i = 0; i < str.length(); i++)
|
||||||
|
{
|
||||||
|
if(j >= size)
|
||||||
|
{
|
||||||
|
returnStr += "<br/>";
|
||||||
|
j = 0;
|
||||||
|
}
|
||||||
|
returnStr += str.charAt(i);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \r\n을 <br/> 태그로 변환처리
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String nl2br(String str) {
|
||||||
|
String returnStr = null;
|
||||||
|
returnStr = str.replaceAll("\r\n", "<br/>");
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \r\n을 삭제
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String nl2Null(String str) {
|
||||||
|
String returnStr = null;
|
||||||
|
returnStr = str.replaceAll("\r\n", "");
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \n을 <br/> 태그로 변환처리
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String nl2br2(String str) {
|
||||||
|
String returnStr = null;
|
||||||
|
returnStr = str.replaceAll("\n", "<br/>");
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 특수문자를 변환합니다
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String middot(String str) {
|
||||||
|
str = str.replaceAll("·", "·");
|
||||||
|
str = str.replaceAll("“", "“");
|
||||||
|
str = str.replaceAll("”", "”");
|
||||||
|
str = str.replaceAll("→", "→");
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* html 태그를 제거합니다
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String stripTag(String str) {
|
||||||
|
str = str.replaceAll("\\<.*?\\>", "");
|
||||||
|
str = str.replaceAll(" ", "");
|
||||||
|
str = str.replaceAll("<span>","");
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clob 스트링 출력
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param size
|
||||||
|
* @return String
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public String getClob(Clob str) throws IOException {
|
||||||
|
try {
|
||||||
|
|
||||||
|
Reader reader = str.getCharacterStream();
|
||||||
|
|
||||||
|
StringBuffer out = new StringBuffer();
|
||||||
|
char[] buff = new char[1024];
|
||||||
|
int nchars = 0;
|
||||||
|
|
||||||
|
// 스트링 버퍼에 append 시킨후
|
||||||
|
while ((nchars = reader.read(buff)) > 0) {
|
||||||
|
out.append(buff, 0, nchars);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.toString();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
System.out.println("clob에러");
|
||||||
|
return "clob에러";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 글자 널값이면 대체하기
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param size
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String nvl(String str, String str_r) {
|
||||||
|
String returnStr = str;
|
||||||
|
if (str == null) {
|
||||||
|
if (str_r == null) {
|
||||||
|
str_r = "";
|
||||||
|
}
|
||||||
|
returnStr = str_r;
|
||||||
|
} else if (str.length() == 0) {
|
||||||
|
if (str_r == null) {
|
||||||
|
str_r = "";
|
||||||
|
}
|
||||||
|
returnStr = str_r;
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https 검색
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param size
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public boolean httpsFind(String str) {
|
||||||
|
|
||||||
|
if(str.matches("https://.*"))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkReg(String reg, String str) {
|
||||||
|
return Pattern.matches(reg, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkRegKor(String str) {
|
||||||
|
return Pattern.matches("[가-힣]+", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkRegNum(String str) {
|
||||||
|
return Pattern.matches("[0-9]+", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkRegEng(String str) {
|
||||||
|
return Pattern.matches("[a-zA-z]+", str);
|
||||||
|
}
|
||||||
|
public boolean checkRegEngUp(String str) {
|
||||||
|
return Pattern.matches("[A-z]+", str);
|
||||||
|
}
|
||||||
|
public boolean checkRegEngLo(String str) {
|
||||||
|
return Pattern.matches("[a-z]+", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkRegKorEngNum(String str) {
|
||||||
|
return Pattern.matches("[가-힣A-za-z0-9]+", str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 새 우편번호 변환
|
||||||
|
*/
|
||||||
|
public String getPost(int area, int num) {
|
||||||
|
String[][] newPosts = {
|
||||||
|
{""}
|
||||||
|
,{"05050","11787","13636","26475","25517","07988","05048"}
|
||||||
|
,{"14041","14442","10449","14067","16704","21313"}
|
||||||
|
,{"46700","44248","51708","52628"}
|
||||||
|
,{"32840","32840","28684","31158","32839"}
|
||||||
|
,{"62278","55316","57987","58457"}
|
||||||
|
,{"41504","36709","37653"}
|
||||||
|
};
|
||||||
|
return newPosts[area][num];
|
||||||
|
}
|
||||||
|
|
||||||
|
public String nl2br() {
|
||||||
|
String returnStr = null;
|
||||||
|
return returnStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파라미터를 String 타입으로 가져옵니다.<br>
|
||||||
|
* - null일 경우 빈 문자열을 가져옵니다.<br>
|
||||||
|
* Get String(if object is null, return empty string).
|
||||||
|
* @param Object
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String getString(Object obj) {
|
||||||
|
if (obj == null)
|
||||||
|
return "";
|
||||||
|
else
|
||||||
|
return String.valueOf(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 오늘 날짜를 형식에 맞는 문자열로 가져옵니다.
|
||||||
|
*
|
||||||
|
* @param format
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getDateToString(String format) {
|
||||||
|
Date date = new Date();
|
||||||
|
return getDateToString(date, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 날짜 객체를 형식에 맞는 문자열로 가져옵니다.
|
||||||
|
*
|
||||||
|
* @param date
|
||||||
|
* @param format
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getDateToString(Date date, String format) {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
||||||
|
return sdf.format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isNotEmpty(String value) {
|
||||||
|
return !isEmpty(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String trim(String value) {
|
||||||
|
if(value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getOnlyNum(String value) {
|
||||||
|
if(value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return value.replaceAll("[^0-9]","");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String escapeXml(Object o) {
|
||||||
|
if (o == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringWriter writer = new StringWriter();
|
||||||
|
try {
|
||||||
|
writeXmlText(writer, o.toString(), true);
|
||||||
|
} catch (java.io.IOException e) { // this exception cannot be catched.
|
||||||
|
System.out.println("escapeXml IOException Error");
|
||||||
|
}
|
||||||
|
|
||||||
|
return writer.toString();
|
||||||
|
}
|
||||||
|
public static void writeXmlText(Writer writer, String text) throws java.io.IOException {
|
||||||
|
writeXmlText(writer, text, true, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text, boolean escapeXml) throws java.io.IOException {
|
||||||
|
writeXmlText(writer, text, escapeXml, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text, boolean escapeXml, boolean applyBr) throws java.io.IOException {
|
||||||
|
writeXmlText(writer, text, escapeXml, applyBr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text, boolean escapeXml, boolean applyBr, boolean escapeNbsp) throws java.io.IOException {
|
||||||
|
if (text == null) {
|
||||||
|
// do nothing.
|
||||||
|
} else if (!escapeXml && !applyBr) {
|
||||||
|
writer.write(text);
|
||||||
|
} else {
|
||||||
|
writeXmlText(writer, text.toCharArray(), text.length(), escapeXml, applyBr, escapeNbsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, char[] buffer, int length, boolean escapeXml, boolean applyBr, boolean escapeNbsp) throws java.io.IOException {
|
||||||
|
int highest = HIGHEST_SPECIAL;
|
||||||
|
int lowest = LOWEST_SPECIAL;
|
||||||
|
int start = 0;
|
||||||
|
int i = 0;
|
||||||
|
char[][] representation = (escapeNbsp ? specialCharactersRepresentationWithNbsp : specialCharactersRepresentation);
|
||||||
|
|
||||||
|
if (applyBr) {
|
||||||
|
lowest = LOWEST_BR;
|
||||||
|
if (!escapeXml) {
|
||||||
|
highest = HIGHEST_BR;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!escapeXml) {
|
||||||
|
i = length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < length; i++) {
|
||||||
|
char c = buffer[i];
|
||||||
|
if (c <= highest && c >= lowest) {
|
||||||
|
char[] escaped = representation[c];
|
||||||
|
if (escaped != null) {
|
||||||
|
// add unescaped portion
|
||||||
|
if (start < i) {
|
||||||
|
writer.write(buffer, start, i - start);
|
||||||
|
}
|
||||||
|
// add escaped xml
|
||||||
|
writer.write(escaped);
|
||||||
|
start = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add rest of unescaped portion
|
||||||
|
if (start < length) {
|
||||||
|
writer.write(buffer, start, length - start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 처음부터 idx 만큼 잘라낸 나머지 글자
|
||||||
|
public static String getWordLeft(String word, int idx) {
|
||||||
|
String rtnVal = "";
|
||||||
|
|
||||||
|
if (word.length() >= idx) {
|
||||||
|
rtnVal = word.trim().substring(0, word.trim().length()-idx);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rtnVal = word.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtnVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
// idx 에서부터 끝까지 잘라낸 글자 => Ex) 함.
|
||||||
|
public static String getWordRight(String word, int idx) {
|
||||||
|
String rtnVal = "";
|
||||||
|
|
||||||
|
if (word.length() >= idx) {
|
||||||
|
rtnVal = word.trim().substring(word.trim().length()-idx, word.trim().length());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rtnVal = word.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtnVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
//3개월전 첫째날 받아오기
|
||||||
|
public static String getDate3MonthAgoFirstDay() {
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
|
||||||
|
int year = cal.get(Calendar.YEAR) - 1;
|
||||||
|
int month = cal.get(Calendar.MONTH) + 1;
|
||||||
|
|
||||||
|
cal.set(year,month,1);
|
||||||
|
String firstDay = Integer.toString(cal.getActualMinimum(Calendar.DAY_OF_MONTH));
|
||||||
|
|
||||||
|
String repMonth = "";
|
||||||
|
String repfirstDay = "";
|
||||||
|
if(month < 10) {
|
||||||
|
repMonth = "0" + Integer.toString(month);
|
||||||
|
}else {
|
||||||
|
repMonth = Integer.toString(month);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Integer.parseInt(firstDay) < 10) {
|
||||||
|
repfirstDay = "0" + firstDay;
|
||||||
|
}else {
|
||||||
|
repfirstDay = firstDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
String ntceBgnde = Integer.toString(year) + "-" + repMonth + "-" + repfirstDay;
|
||||||
|
|
||||||
|
return ntceBgnde;
|
||||||
|
}
|
||||||
|
|
||||||
|
//이번달의 첫째날과 마지막날짜 받아오기
|
||||||
|
public static String getDateMonthFirstDay() {
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
|
||||||
|
int year = cal.get(Calendar.YEAR);
|
||||||
|
int month = cal.get(Calendar.MONTH) + 1;
|
||||||
|
|
||||||
|
cal.set(year,month,1);
|
||||||
|
String firstDay = Integer.toString(cal.getActualMinimum(Calendar.DAY_OF_MONTH));
|
||||||
|
|
||||||
|
String repMonth = "";
|
||||||
|
String repfirstDay = "";
|
||||||
|
if(month < 10) {
|
||||||
|
repMonth = "0" + Integer.toString(month);
|
||||||
|
}else {
|
||||||
|
repMonth = Integer.toString(month);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Integer.parseInt(firstDay) < 10) {
|
||||||
|
repfirstDay = "0" + firstDay;
|
||||||
|
}else {
|
||||||
|
repfirstDay = firstDay;
|
||||||
|
}
|
||||||
|
|
||||||
|
String ntceBgnde = Integer.toString(year) + "-" + repMonth + "-" + repfirstDay;
|
||||||
|
|
||||||
|
return ntceBgnde;
|
||||||
|
}
|
||||||
|
|
||||||
|
//이번달의 첫째날과 마지막날짜 받아오기
|
||||||
|
public static String getDateMonthLastDay() {
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
|
||||||
|
int year = cal.get(Calendar.YEAR);
|
||||||
|
int month = cal.get(Calendar.MONTH);
|
||||||
|
|
||||||
|
cal.set(year,month,1);
|
||||||
|
String lastDay = Integer.toString(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||||
|
|
||||||
|
month = month + 1;
|
||||||
|
String repMonth = "";
|
||||||
|
if(month < 10) {
|
||||||
|
repMonth = "0" + Integer.toString(month);
|
||||||
|
}else {
|
||||||
|
repMonth = Integer.toString(month);
|
||||||
|
}
|
||||||
|
|
||||||
|
String ntceEndde = Integer.toString(year) + "-" + repMonth + "-" + lastDay;
|
||||||
|
|
||||||
|
return ntceEndde;
|
||||||
|
}
|
||||||
|
|
||||||
|
//1년후 이번달의 첫째날과 마지막날짜 받아오기
|
||||||
|
public static String getDateMonthLastDay1YearAfter() {
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
|
||||||
|
int year = cal.get(Calendar.YEAR) + 1;
|
||||||
|
int month = cal.get(Calendar.MONTH);
|
||||||
|
|
||||||
|
cal.set(year,month,1);
|
||||||
|
String lastDay = Integer.toString(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||||
|
|
||||||
|
month = month + 1;
|
||||||
|
String repMonth = "";
|
||||||
|
if(month < 10) {
|
||||||
|
repMonth = "0" + Integer.toString(month);
|
||||||
|
}else {
|
||||||
|
repMonth = Integer.toString(month);
|
||||||
|
}
|
||||||
|
|
||||||
|
String ntceEndde = Integer.toString(year) + "-" + repMonth + "-" + lastDay;
|
||||||
|
|
||||||
|
return ntceEndde;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 검색 키워드 내용에 한글, 영문, 숫자를 제외한 특수문자가 있는 경우 검색이 안되도록 처리
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
public static boolean getSearchKeywordValidation(String paramKeyword) {
|
||||||
|
|
||||||
|
boolean resultType = false;
|
||||||
|
String keyword = paramKeyword;
|
||||||
|
|
||||||
|
keyword = keyword.replaceAll("[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9 ]", "");
|
||||||
|
|
||||||
|
//검색어에 특수기호가 없어서 공백이 되는 경우만 true를 리턴한다.
|
||||||
|
if(keyword.equals("")) {
|
||||||
|
|
||||||
|
resultType = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultType;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String getLengthChkAndSubString(String str, int maxLength) {
|
||||||
|
|
||||||
|
if (StringUtils.length(str) > maxLength) {
|
||||||
|
str = StringUtils.substring(str, 0, maxLength);
|
||||||
|
// 잘라낸 문자열을 다시 설정 (필요한 경우)
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
584
src/main/java/itn/com/cmm/util/StringUtil2.java
Normal file
584
src/main/java/itn/com/cmm/util/StringUtil2.java
Normal file
@ -0,0 +1,584 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import itn.let.utl.sim.service.EgovFileScrty;
|
||||||
|
|
||||||
|
//import com.google.common.base.CaseFormat;
|
||||||
|
|
||||||
|
//import egovframework.let.clean.core.base.CoreConstant;
|
||||||
|
//import egovframework.let.clean.core.exception.BaseException;
|
||||||
|
|
||||||
|
public final class StringUtil2 {
|
||||||
|
private static final int HIGHEST_SPECIAL = '>'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int LOWEST_SPECIAL = '\"'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int HIGHEST_BR = '\r'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int LOWEST_BR = '\n'; // for escaping html code. by hessie; since 2007/10/01.
|
||||||
|
private static final int HIGHEST_JS_SPECIAL = '\\'; // for escaping js literal code. by hessie; since 2007/10/01
|
||||||
|
private static char[][] specialCharactersRepresentation = new char[HIGHEST_SPECIAL + 1][];
|
||||||
|
private static char[][] specialCharactersRepresentationWithNbsp = new char[HIGHEST_SPECIAL + 1][];
|
||||||
|
|
||||||
|
public static String toString(Object o) {
|
||||||
|
if (o == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return o.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toString(Object o, String defaultValue) {
|
||||||
|
if (o == null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return o.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isEmpty(String value) {
|
||||||
|
return (value == null || value.length() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isNotEmpty(String value) {
|
||||||
|
return !isEmpty(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String trim(String value) {
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String lpad(String value, int len, String pad) {
|
||||||
|
if (value == null) {
|
||||||
|
value = "";
|
||||||
|
}
|
||||||
|
return StringUtils.leftPad(value, len, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String rpad(String value, int len, String pad) {
|
||||||
|
if (value == null) {
|
||||||
|
value = "";
|
||||||
|
}
|
||||||
|
return StringUtils.rightPad(value, len, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String rpadb(String value, int len, String pad) {
|
||||||
|
if (value == null) {
|
||||||
|
value = "";
|
||||||
|
}
|
||||||
|
int preLen = value.getBytes().length;
|
||||||
|
|
||||||
|
return StringUtils.rightPad(value, len - preLen + value.length(), pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String rpadb(String value, int len, String pad, String encoding) throws Exception {
|
||||||
|
if (value == null) {
|
||||||
|
value = "";
|
||||||
|
}
|
||||||
|
int preLen = value.getBytes(encoding).length;
|
||||||
|
|
||||||
|
return StringUtils.rightPad(value, len - preLen + value.length(), pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
// public static String camelLower(String name) {
|
||||||
|
// return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static String camelUpper(String name) {
|
||||||
|
// return CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, name);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 메시지 Format
|
||||||
|
*
|
||||||
|
* @param msg
|
||||||
|
* - "{0}는 {1}자리입니다."
|
||||||
|
* @param params
|
||||||
|
* - new Object[]{"ID", 8}
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String msgFormat(String msg, Object... params) {
|
||||||
|
String formatMsg = null;
|
||||||
|
if (StringUtil2.isNotEmpty(msg)) {
|
||||||
|
if (params != null && params.length > 0) {
|
||||||
|
formatMsg = MessageFormat.format(msg, params);
|
||||||
|
} else {
|
||||||
|
formatMsg = msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return formatMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 메시지 Parse
|
||||||
|
*
|
||||||
|
* @param pattern
|
||||||
|
* - "{0}는 {1}자리입니다."
|
||||||
|
* @param msg
|
||||||
|
* - "ID는 8자리입니다."
|
||||||
|
* @return new Object[]{"ID", 8}
|
||||||
|
*/
|
||||||
|
public static Object[] msgParse(String pattern, String msg) {
|
||||||
|
Object[] params = null;
|
||||||
|
if (StringUtil2.isEmpty(pattern)) {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
if (StringUtil2.isEmpty(msg)) {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
MessageFormat formatter = new MessageFormat(pattern);
|
||||||
|
params = formatter.parse(msg);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
// throw new BaseException(e);
|
||||||
|
}
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatPhone(String value, boolean crypt) {
|
||||||
|
String format = null;
|
||||||
|
if (value == null) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
format = value.replaceAll(" ", "");
|
||||||
|
int formatLen = format.length();
|
||||||
|
if (formatLen < 1) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
if (formatLen == 8) {
|
||||||
|
if (crypt) {
|
||||||
|
format = format.replaceAll("^(\\d{4})(\\d{2})(\\d{2})$", "$1-**$3");
|
||||||
|
} else {
|
||||||
|
format = format.replaceAll("^(\\d{4})(\\d{4})$", "$1-$2");
|
||||||
|
}
|
||||||
|
} else if (formatLen >= 9 && formatLen <= 12) {
|
||||||
|
if (crypt) {
|
||||||
|
format = format.replaceAll("^(02.{0}|01.{1}|050.{1}|[0-9]{3})([0-9]+)([0-9]{4})$", "$1-****-$3");
|
||||||
|
} else {
|
||||||
|
format = format.replaceAll("^(02.{0}|01.{1}|050.{1}|[0-9]{3})([0-9]+)([0-9]{4})$", "$1-$2-$3");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (crypt) {
|
||||||
|
format = format.replaceAll("^(\\d+)(\\d{2})$", "$1**");
|
||||||
|
} else {
|
||||||
|
// nothing..
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatPhone(String value) {
|
||||||
|
return StringUtil2.formatPhone(value, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatJdNo(String value) {
|
||||||
|
String format = null;
|
||||||
|
if (StringUtil2.isEmpty(value)) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
format = value.replaceAll("^(\\d{2})(\\d{4})(\\d{1})(\\d{5})(\\d{2})$", "$1-$2-$3-$4-$5");
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatBalNo(String value) {
|
||||||
|
String format = null;
|
||||||
|
if (StringUtil2.isEmpty(value)) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
format = value.replaceAll(" ", "");
|
||||||
|
int formatLen = format.length();
|
||||||
|
|
||||||
|
if (formatLen == 11) {
|
||||||
|
format = value.replaceAll("^(\\S{1})(\\S{1})(\\S{6})(\\S{3})$", "$1-$2-$3-$4");
|
||||||
|
} else if (formatLen == 14) {
|
||||||
|
format = value.replaceAll("^(\\S{1})(\\S{1})(\\S{6})(\\S{3})(\\S{3})$", "$1-$2-$3-$4-$5");
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 사업자등록번호
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String formatBizNo(String value) {
|
||||||
|
String format = null;
|
||||||
|
if (StringUtil2.isEmpty(value)) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
format = value.replaceAll("^(\\d{3})(\\d{2})(\\d{5})$", "$1-$2-$3");
|
||||||
|
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 사업자등록번호
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String formatBirthNo(String value) {
|
||||||
|
String format = null;
|
||||||
|
if (StringUtil2.isEmpty(value)) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
format = value.replaceAll("^(\\d{2})(\\d{2})(\\d{2})(\\d{1})$", "$1.$2.$3.$4");
|
||||||
|
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 법인번호
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String formatBizIdNo(String value) {
|
||||||
|
String format = null;
|
||||||
|
if (StringUtil2.isEmpty(value)) {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
format = value.replaceAll("^(\\d{6})(\\d{7})$", "$1-$2");
|
||||||
|
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatAmount(String value, String pattern) {
|
||||||
|
String format = null;
|
||||||
|
if (StringUtil2.isNotEmpty(value)) {
|
||||||
|
Double number = Double.parseDouble(value);
|
||||||
|
DecimalFormat formatter = new DecimalFormat(pattern);
|
||||||
|
format = formatter.format(number);
|
||||||
|
}
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatAmount(Object value, String pattern) {
|
||||||
|
return StringUtil2.formatAmount(String.valueOf(value), pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatAmount(String value) {
|
||||||
|
return StringUtil2.formatAmount(value, "#,###");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatAmount(Object value) {
|
||||||
|
return StringUtil2.formatAmount(String.valueOf(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String formatFileSize(long fileSize) {
|
||||||
|
if (fileSize <= 0) {
|
||||||
|
return "0";
|
||||||
|
}
|
||||||
|
final String[] units = new String[] { "B", "kB", "MB", "GB", "TB" };
|
||||||
|
int digitGroups = (int) (Math.log10(fileSize) / Math.log10(1024));
|
||||||
|
return new DecimalFormat("#,##0.#").format(fileSize / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열을 Byte로 (한글 중간에 안 짤리게) 자름
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param len
|
||||||
|
* @param encoding
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String subByte(String str, int len, String encoding) {
|
||||||
|
try {
|
||||||
|
if (StringUtil2.isEmpty(str)) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
byte[] strBytes = str.getBytes(encoding);
|
||||||
|
int strLength = strBytes.length;
|
||||||
|
int minusByteNum = 0;
|
||||||
|
int offset = 0;
|
||||||
|
// int hangulByteNum = encoding.equals(CoreConstant.CHARSET_UTF8) ? 3 : 2;
|
||||||
|
int hangulByteNum = encoding.equals("UTF-8") ? 3 : 2;
|
||||||
|
if (strLength > len) {
|
||||||
|
minusByteNum = 0;
|
||||||
|
offset = len;
|
||||||
|
for (int j = 0; j < offset; j++) {
|
||||||
|
if ((strBytes[j] & 0x80) != 0) {
|
||||||
|
minusByteNum++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (minusByteNum % hangulByteNum != 0) {
|
||||||
|
offset -= minusByteNum % hangulByteNum;
|
||||||
|
}
|
||||||
|
return new String(strBytes, 0, offset, encoding);
|
||||||
|
} else {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// throw new BaseException(e);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열을 Byte로 (한글 중간에 안 짤리게) 자름 - from-to
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param len
|
||||||
|
* @param encoding
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String subByte(String str, int from, int len, String encoding) {
|
||||||
|
try {
|
||||||
|
if (StringUtil2.isEmpty(str)) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
byte[] strBytes = str.getBytes(encoding);
|
||||||
|
int strLength = strBytes.length;
|
||||||
|
int minusByteNum = 0;
|
||||||
|
int offset = 0;
|
||||||
|
// int hangulByteNum = encoding.equals(CoreConstant.CHARSET_UTF8) ? 3 : 2;
|
||||||
|
int hangulByteNum = encoding.equals("UTF-8") ? 3 : 2;
|
||||||
|
if (strLength > len) {
|
||||||
|
minusByteNum = 0;
|
||||||
|
offset = len;
|
||||||
|
for (int j = 0; j < offset; j++) {
|
||||||
|
if ((strBytes[j] & 0x80) != 0) {
|
||||||
|
minusByteNum++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (minusByteNum % hangulByteNum != 0) {
|
||||||
|
offset -= minusByteNum % hangulByteNum;
|
||||||
|
}
|
||||||
|
return new String(strBytes, from, offset, encoding);
|
||||||
|
} else {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// throw new BaseException(e);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열을 Byte로 (한글 중간에 안 짤리게) 자름 (UTF-8)
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param len
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String subByte(String str, int len) {
|
||||||
|
// return StringUtil2.subByte(str, len, CoreConstant.CHARSET_UTF8);
|
||||||
|
return StringUtil2.subByte(str, len, "UTF-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 문자열을 Byte로 (한글 중간에 안 짤리게) 자름 (EUC-KR)
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @param len
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String subByteEucKr(String str, int len) {
|
||||||
|
// return StringUtil2.subByte(str, len, CoreConstant.CHARSET_EUCKR);
|
||||||
|
return StringUtil2.subByte(str, len, "EUC-KR");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 숫자만 추출.
|
||||||
|
*
|
||||||
|
* @param 추출문자
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getOnlyNumber(String text) {
|
||||||
|
Matcher m = Pattern.compile("[^0-9]").matcher(text);
|
||||||
|
return m.replaceAll("");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 비밀번호 유효성 체크
|
||||||
|
*
|
||||||
|
* @param 비밀번호
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String isEnablePassword(String passwd) {
|
||||||
|
String returnValue = "";
|
||||||
|
|
||||||
|
Pattern p = Pattern.compile("^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,12}$");
|
||||||
|
Matcher m = p.matcher(passwd);
|
||||||
|
|
||||||
|
Pattern p2 = Pattern.compile("(\\w)\\1\\1");
|
||||||
|
Matcher m2 = p2.matcher(passwd);
|
||||||
|
|
||||||
|
if (!m.find()) { // 정규식 이용한 패턴 체크
|
||||||
|
returnValue = "비밀번호는 영문,숫자,특수문자(!@$%^&* 만 허용)를\n조합하여 8~12자로 구성하세요.";
|
||||||
|
} else if (m2.find()) { // 동일 문자 4번 입력 시 패턴 체크
|
||||||
|
returnValue = "비밀번호에 동일문자를 3번 이상 사용할 수 없습니다.";
|
||||||
|
} else if (continueNumberCheck(passwd)) { // 비밀번호 연속 숫자 4자리 체크
|
||||||
|
returnValue = "비밀번호에 연속된 문자를 3자 이상 사용 할 수 없습니다.";
|
||||||
|
}
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 연속된 숫자 체크
|
||||||
|
*
|
||||||
|
* @param numberCheck
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean continueNumberCheck(String numberCheck) {
|
||||||
|
int o = 0;
|
||||||
|
int d = 0;
|
||||||
|
int p = 0;
|
||||||
|
int n = 0;
|
||||||
|
int limit = 3;
|
||||||
|
|
||||||
|
for (int i = 0; i < numberCheck.length(); i++) {
|
||||||
|
char tempVal = numberCheck.charAt(i);
|
||||||
|
if (i > 0 && (p = o - tempVal) > -2 && p < 2 && (n = p == d ? n + 1 : 0) > limit - 3)
|
||||||
|
return true;
|
||||||
|
d = p;
|
||||||
|
o = tempVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 주어진 문자열에 대해 XML/HTML PCDATA에 적합한 이스케이프 문자 변환 처리를 수행한 결과 문자열을 반환한다. 변환되는 문자는 아래와 같다.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* & -> &
|
||||||
|
* < -> <
|
||||||
|
* > -> >
|
||||||
|
* " -> "
|
||||||
|
* ' -> '
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public static String escapeXml(Object o) {
|
||||||
|
if (o == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringWriter writer = new StringWriter();
|
||||||
|
try {
|
||||||
|
writeXmlText(writer, o.toString(), true);
|
||||||
|
} catch (java.io.IOException e) { // this exception cannot be catched.
|
||||||
|
}
|
||||||
|
|
||||||
|
return writer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text) throws java.io.IOException {
|
||||||
|
writeXmlText(writer, text, true, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text, boolean escapeXml) throws java.io.IOException {
|
||||||
|
writeXmlText(writer, text, escapeXml, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text, boolean escapeXml, boolean applyBr) throws java.io.IOException {
|
||||||
|
writeXmlText(writer, text, escapeXml, applyBr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, String text, boolean escapeXml, boolean applyBr, boolean escapeNbsp) throws java.io.IOException {
|
||||||
|
if (text == null) {
|
||||||
|
// do nothing.
|
||||||
|
} else if (!escapeXml && !applyBr) {
|
||||||
|
writer.write(text);
|
||||||
|
} else {
|
||||||
|
writeXmlText(writer, text.toCharArray(), text.length(), escapeXml, applyBr, escapeNbsp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void writeXmlText(Writer writer, char[] buffer, int length, boolean escapeXml, boolean applyBr, boolean escapeNbsp) throws java.io.IOException {
|
||||||
|
int highest = HIGHEST_SPECIAL;
|
||||||
|
int lowest = LOWEST_SPECIAL;
|
||||||
|
int start = 0;
|
||||||
|
int i = 0;
|
||||||
|
char[][] representation = (escapeNbsp ? specialCharactersRepresentationWithNbsp : specialCharactersRepresentation);
|
||||||
|
|
||||||
|
if (applyBr) {
|
||||||
|
lowest = LOWEST_BR;
|
||||||
|
if (!escapeXml) {
|
||||||
|
highest = HIGHEST_BR;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!escapeXml) {
|
||||||
|
i = length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < length; i++) {
|
||||||
|
char c = buffer[i];
|
||||||
|
if (c <= highest && c >= lowest) {
|
||||||
|
char[] escaped = representation[c];
|
||||||
|
if (escaped != null) {
|
||||||
|
// add unescaped portion
|
||||||
|
if (start < i) {
|
||||||
|
writer.write(buffer, start, i - start);
|
||||||
|
}
|
||||||
|
// add escaped xml
|
||||||
|
writer.write(escaped);
|
||||||
|
start = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add rest of unescaped portion
|
||||||
|
if (start < length) {
|
||||||
|
writer.write(buffer, start, length - start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 주어진 문자열이 빈 문자열("")인지 확인하여, 빈 문자열("")이 아니면 주어진 문자열을 그대로 반환하고, 빈 문자열("")이면 <tt>defaultValue</tt>를 반환한다.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param defaultValue
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String nvl(String value, String defaultValue) {
|
||||||
|
return coalesce(value, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 주어진 문자열이 <tt>null</tt>인지 확인하여, <tt>null</tt>이 아니면 주어진 문자열을 그대로 반환하고, <tt>null</tt>이면 빈 문자열("")을 반환한다.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String nvl(String value) {
|
||||||
|
return coalesce(value, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String coalesce(String value, String defaultValue) {
|
||||||
|
if (isEmpty(value)) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void test(List<String> listParam) {
|
||||||
|
listParam.add("bb");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String replaceBR(String str) {
|
||||||
|
return str.replaceAll("\r\n", "<br>");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String args[]) throws Exception {
|
||||||
|
|
||||||
|
String enpassword = EgovFileScrty.encryptPassword("1","cadmin1");
|
||||||
|
|
||||||
|
System.out.print("암호화 비밀번호 : "+enpassword); // ?
|
||||||
|
}
|
||||||
|
}
|
||||||
100
src/main/java/itn/com/cmm/util/TokenUtil.java
Normal file
100
src/main/java/itn/com/cmm/util/TokenUtil.java
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008-2009 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.idgnr.impl.Base64;
|
||||||
|
|
||||||
|
public class TokenUtil {
|
||||||
|
|
||||||
|
private static final String TOKEN_KEY = "TOKEN_KEY";
|
||||||
|
private static final Logger logger = Logger.getLogger(TokenUtil.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 로직처리를 위해 세션과 request에 Token 생성
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
*/
|
||||||
|
public static void saveToken(HttpServletRequest request) {
|
||||||
|
HttpSession session = request.getSession(true);
|
||||||
|
long systemTime = System.currentTimeMillis();
|
||||||
|
byte[] time = new Long(systemTime).toString().getBytes();
|
||||||
|
byte[] id = session.getId().getBytes();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest SHA = MessageDigest.getInstance("SHA-256");
|
||||||
|
SHA.update(id);
|
||||||
|
SHA.update(time);
|
||||||
|
|
||||||
|
String token = Base64.encode(SHA.digest());
|
||||||
|
request.setAttribute(TOKEN_KEY, token);
|
||||||
|
session.setAttribute(TOKEN_KEY, token);
|
||||||
|
|
||||||
|
logger.error("#########################################################################");
|
||||||
|
logger.error("# Generate Token Key Value = " + token + " #");
|
||||||
|
logger.error("#########################################################################");
|
||||||
|
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
System.out.println("토큰에러");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 로직처리 이후 중복방지를 위해 세션의 Token 초기화
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
*/
|
||||||
|
public static void resetToken(HttpServletRequest request) {
|
||||||
|
HttpSession session = request.getSession(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
session.removeAttribute(TOKEN_KEY);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("토큰에러");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 세션과 request의 Token이 동일한지 비교
|
||||||
|
*
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isTokenValid(HttpServletRequest request) {
|
||||||
|
HttpSession session = request.getSession(true);
|
||||||
|
String requestToken = request.getParameter(TOKEN_KEY);
|
||||||
|
String sessionToken = (String) session.getAttribute(TOKEN_KEY);
|
||||||
|
|
||||||
|
if (requestToken == null || sessionToken == null) {
|
||||||
|
logger.error("# null #");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
logger.error("# notnull #");
|
||||||
|
return requestToken.equals(sessionToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
80
src/main/java/itn/com/cmm/util/WebUtil.java
Normal file
80
src/main/java/itn/com/cmm/util/WebUtil.java
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||||
|
import itn.com.cmm.ComDefaultVO;
|
||||||
|
|
||||||
|
public class WebUtil {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MD5
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String convertToHex(byte[] data ){
|
||||||
|
StringBuffer buf = new StringBuffer();
|
||||||
|
|
||||||
|
for( int i=0; i< data.length; i++){
|
||||||
|
int halfbyte = (data[i] >>> 4 ) & 0x0F;
|
||||||
|
int two_halfs =0;
|
||||||
|
|
||||||
|
do{
|
||||||
|
if((0 <= halfbyte) && (halfbyte <= 9))
|
||||||
|
buf.append((char)('0' + halfbyte));
|
||||||
|
else
|
||||||
|
buf.append((char)('a' + ( halfbyte - 10)));
|
||||||
|
halfbyte =data[i] & 0x0F;
|
||||||
|
|
||||||
|
}while(two_halfs++ < 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
//private static String MD5(String text ) throws NoSuchAlgorithmException, UnsupportedEncodingExecption {
|
||||||
|
public String MD5(String text ) throws NoSuchAlgorithmException, UnsupportedEncodingException {
|
||||||
|
MessageDigest md;
|
||||||
|
md = MessageDigest.getInstance("MD5");
|
||||||
|
byte[] md5hash=new byte[32];
|
||||||
|
md.update(text.getBytes("iso-8859-1"),0,text.length());
|
||||||
|
md5hash=md.digest();
|
||||||
|
return convertToHex(md5hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isMobile(HttpServletRequest request){
|
||||||
|
String userAgent = request.getHeader("user-agent");
|
||||||
|
boolean mobile1 = userAgent.matches(".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*");
|
||||||
|
boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*");
|
||||||
|
if(mobile1 || mobile2) { return true; }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 페이징 객체 생성
|
||||||
|
* @param tmpVO - extends ComDefaultVO
|
||||||
|
* @param paginationInfo
|
||||||
|
* @param searchListCnt - 목록 건수
|
||||||
|
* @param totCnt - 전체 건수
|
||||||
|
*/
|
||||||
|
public static PaginationInfo getPageing(Object tmpVO, int searchListCnt) {
|
||||||
|
PaginationInfo paginationInfo = new PaginationInfo();
|
||||||
|
ComDefaultVO vo = (ComDefaultVO) tmpVO;
|
||||||
|
vo.setPageUnit(searchListCnt);
|
||||||
|
paginationInfo.setCurrentPageNo(vo.getPageIndex());
|
||||||
|
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
|
||||||
|
paginationInfo.setPageSize(vo.getPageSize());
|
||||||
|
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
|
||||||
|
vo.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||||
|
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||||
|
|
||||||
|
return paginationInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
173
src/main/java/itn/com/cmm/util/XssFilterUtil.java
Normal file
173
src/main/java/itn/com/cmm/util/XssFilterUtil.java
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
package itn.com.cmm.util;
|
||||||
|
|
||||||
|
public class XssFilterUtil {
|
||||||
|
|
||||||
|
public static boolean cleanXSS(String test_str) {
|
||||||
|
// 특수 구문 필터링 (데이터베이스가 Oracle 인 경우)
|
||||||
|
String test_str_low= test_str.toLowerCase();
|
||||||
|
boolean returnSts = true;
|
||||||
|
|
||||||
|
if(test_str_low.contains("union")||
|
||||||
|
test_str_low.contains("select") ||
|
||||||
|
test_str_low.contains("insert") ||
|
||||||
|
test_str_low.contains("drop") ||
|
||||||
|
test_str_low.contains("update") ||
|
||||||
|
test_str_low.contains("delete") ||
|
||||||
|
test_str_low.contains(" join ") ||
|
||||||
|
test_str_low.contains("from") ||
|
||||||
|
test_str_low.contains("where") ||
|
||||||
|
test_str_low.contains("dbms") ||
|
||||||
|
test_str_low.contains("receive_message") ||
|
||||||
|
test_str_low.contains("chr(") ||
|
||||||
|
test_str_low.contains("pipe") ||
|
||||||
|
test_str_low.contains("substr") ||
|
||||||
|
test_str_low.contains("script")||
|
||||||
|
test_str_low.contains("alert")||
|
||||||
|
test_str_low.contains("javascript")||
|
||||||
|
test_str_low.contains("location")||
|
||||||
|
test_str_low.contains("href")||
|
||||||
|
test_str_low.contains("./")||
|
||||||
|
test_str_low.contains("../")||
|
||||||
|
test_str_low.contains("..//")||
|
||||||
|
test_str_low.contains("web-inf")||
|
||||||
|
test_str_low.contains("web.xml")||
|
||||||
|
test_str_low.contains(".xml")||
|
||||||
|
test_str_low.contains(".ini")||
|
||||||
|
test_str_low.contains(".exe")||
|
||||||
|
test_str_low.contains(".msi")||
|
||||||
|
test_str_low.contains(".bat")||
|
||||||
|
test_str_low.contains(".bin")||
|
||||||
|
test_str_low.contains(".cmd")||
|
||||||
|
test_str_low.contains(".cpl")||
|
||||||
|
test_str_low.contains(".ins")||
|
||||||
|
test_str_low.contains(".inx")||
|
||||||
|
test_str_low.contains(".isu")||
|
||||||
|
test_str_low.contains(".lnk")||
|
||||||
|
test_str_low.contains(".msc")||
|
||||||
|
test_str_low.contains(".msp")||
|
||||||
|
test_str_low.contains(".mst")||
|
||||||
|
test_str_low.contains(".paf")||
|
||||||
|
test_str_low.contains(".pif")||
|
||||||
|
test_str_low.contains(".ps1")||
|
||||||
|
test_str_low.contains(".reg")||
|
||||||
|
test_str_low.contains(".rgs")||
|
||||||
|
test_str_low.contains(".scr")||
|
||||||
|
test_str_low.contains(".shs")||
|
||||||
|
test_str_low.contains(".vb")||
|
||||||
|
test_str_low.contains(".vbe")||
|
||||||
|
test_str_low.contains(".vbs")||
|
||||||
|
test_str_low.contains(".vbscript")||
|
||||||
|
test_str_low.contains(".ws")||
|
||||||
|
test_str_low.contains(".wsf")||
|
||||||
|
test_str_low.contains(".wsh")||
|
||||||
|
test_str_low.contains("sysdate(")||
|
||||||
|
test_str_low.contains("sleep(")||
|
||||||
|
test_str_low.contains("dfb{")||
|
||||||
|
test_str_low.contains("include src=")||
|
||||||
|
test_str_low.contains("foreach")||
|
||||||
|
test_str_low.contains("<th:")||
|
||||||
|
test_str_low.contains("<esi:")||
|
||||||
|
test_str_low.contains("<c:")||
|
||||||
|
test_str_low.contains("<fmt:")||
|
||||||
|
test_str_low.contains("now()")||
|
||||||
|
test_str_low.contains("<iframe")||
|
||||||
|
test_str_low.contains("</iframe")||
|
||||||
|
test_str_low.contains("echo")||
|
||||||
|
test_str_low.contains("response.")||
|
||||||
|
test_str_low.contains("gethostbyname")||
|
||||||
|
test_str_low.contains("nslookup")||
|
||||||
|
test_str_low.contains("mkdir")||
|
||||||
|
test_str_low.contains("rmkdir")||
|
||||||
|
test_str_low.contains("kill")||
|
||||||
|
test_str_low.contains("batch")||
|
||||||
|
test_str_low.contains("shutdown")||
|
||||||
|
test_str_low.contains("wget")||
|
||||||
|
test_str_low.contains("iptables")||
|
||||||
|
test_str_low.contains("traceroute")||
|
||||||
|
test_str_low.contains("curl")||
|
||||||
|
test_str_low.contains("grep")||
|
||||||
|
test_str_low.contains("sudo")||
|
||||||
|
test_str_low.contains("chmod")||
|
||||||
|
test_str_low.contains("whatis")||
|
||||||
|
test_str_low.contains("0+0+0+1")||
|
||||||
|
test_str_low.contains("-1=0+0+0+1")||
|
||||||
|
test_str_low.contains("%/' and")||
|
||||||
|
test_str_low.contains("bxss.me")||
|
||||||
|
test_str_low.contains("assert")||
|
||||||
|
test_str_low.contains("&#x")||
|
||||||
|
test_str_low.contains("%09")||
|
||||||
|
test_str_low.contains("%20")||
|
||||||
|
test_str_low.contains("%21")||
|
||||||
|
test_str_low.contains("%22")||
|
||||||
|
test_str_low.contains("%23")||
|
||||||
|
test_str_low.contains("%24")||
|
||||||
|
test_str_low.contains("%25")||
|
||||||
|
test_str_low.contains("%26")||
|
||||||
|
test_str_low.contains("%28")||
|
||||||
|
test_str_low.contains("%29")||
|
||||||
|
test_str_low.contains("%40")||
|
||||||
|
test_str_low.contains("%60")||
|
||||||
|
test_str_low.contains("%90")||
|
||||||
|
test_str_low.contains("%2b")||
|
||||||
|
test_str_low.contains("%5c")||
|
||||||
|
test_str_low.contains("%2c")||
|
||||||
|
test_str_low.contains("%2e")||
|
||||||
|
test_str_low.contains("%2f")||
|
||||||
|
test_str_low.contains("%3a")||
|
||||||
|
test_str_low.contains("%3b")||
|
||||||
|
test_str_low.contains("%3c")||
|
||||||
|
test_str_low.contains("%3e")||
|
||||||
|
test_str_low.contains("%3d")||
|
||||||
|
test_str_low.contains("%3f")||
|
||||||
|
test_str_low.contains("%3e")||
|
||||||
|
test_str_low.contains("%7b")||
|
||||||
|
test_str_low.contains("%7d")||
|
||||||
|
test_str_low.contains("%5b")||
|
||||||
|
test_str_low.contains("%5d")||
|
||||||
|
test_str_low.contains("%7c")||
|
||||||
|
test_str_low.contains("%7e")||
|
||||||
|
test_str_low.contains("%c0")||
|
||||||
|
test_str_low.contains("%bc")||
|
||||||
|
test_str_low.contains("user_tables")
|
||||||
|
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
returnSts = false;
|
||||||
|
//test_str = test_str_low;
|
||||||
|
|
||||||
|
//DB 코드 스크립트 처리
|
||||||
|
/*test_str = test_str.replaceAll("union", "q-union");
|
||||||
|
test_str = test_str.replaceAll("select", "q-select");
|
||||||
|
test_str = test_str.replaceAll("insert", "q-insert");
|
||||||
|
test_str = test_str.replaceAll("drop", "q-drop");
|
||||||
|
test_str = test_str.replaceAll("update", "q-update");
|
||||||
|
test_str = test_str.replaceAll("delete", "q-delete");
|
||||||
|
test_str = test_str.replaceAll("and", "q-and");
|
||||||
|
test_str = test_str.replaceAll("or", "q-or");
|
||||||
|
test_str = test_str.replaceAll("join", "q-join");
|
||||||
|
test_str = test_str.replaceAll("substr", "q-substr");
|
||||||
|
test_str = test_str.replaceAll("from", "q-from");
|
||||||
|
test_str = test_str.replaceAll("where", "q-where");
|
||||||
|
test_str = test_str.replaceAll("declare", "q-declare");
|
||||||
|
test_str = test_str.replaceAll("openrowset", "q-openrowset");
|
||||||
|
test_str = test_str.replaceAll("user_tables","q-user_tables");
|
||||||
|
test_str = test_str.replaceAll("user_tab_columns","q-user_tab_columns");
|
||||||
|
test_str = test_str.replaceAll("table_name","q-table_name");
|
||||||
|
test_str = test_str.replaceAll("column_name","q-column_name");
|
||||||
|
test_str = test_str.replaceAll("row_num","q-row_num");*/
|
||||||
|
|
||||||
|
//Tag 스크립트 처리
|
||||||
|
/*test_str = test_str.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
|
||||||
|
test_str = test_str.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
|
||||||
|
test_str = test_str.replaceAll("'", "& #39;");
|
||||||
|
test_str = test_str.replaceAll("eval\\((.*)\\)", "");
|
||||||
|
test_str = test_str.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
|
||||||
|
test_str = test_str.replaceAll("script", "");*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnSts;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
22
src/main/java/itn/com/cmm/web/EgovBindingInitializer.java
Normal file
22
src/main/java/itn/com/cmm/web/EgovBindingInitializer.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package itn.com.cmm.web;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||||
|
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
|
||||||
|
import org.springframework.web.bind.WebDataBinder;
|
||||||
|
import org.springframework.web.bind.support.WebBindingInitializer;
|
||||||
|
import org.springframework.web.context.request.WebRequest;
|
||||||
|
|
||||||
|
public class EgovBindingInitializer implements WebBindingInitializer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initBinder(WebDataBinder binder, WebRequest request) {
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
dateFormat.setLenient(false);
|
||||||
|
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
|
||||||
|
binder.registerCustomEditor(String.class, new StringTrimmerEditor(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user