commit 67ead290913ffcd49c00a52490acd016486efa94 Author: Jonguk. Lim Date: Sun Oct 16 16:34:31 2022 +0900 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b5cb4535 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +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 +.mvn + +### NetBeans ### +/dist/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ +/out/ +/work/ +/.gradle/ +/src/main/generated/ +/LOG_PATH_IS_UNDEFINED/ +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 00000000..927e8001 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +#### Slf4j 사용시 log cannot be resolved 에러 처리 +```text +[이클립스 설정] + +1. 이클립스의 Maven Dependencies 에서 lombok-1.18.8.jar 파일을 찾는다. + +2. lombok-1.18.8.jar 파일을 우클릭 -> run as -> java application -> 프로세스 진행 + +3. lombok jar 파일이 실행되며 install 창이 표시된다. + +4. specify location -> 이클립스 위치의 eclipse.ini 를 선택 -> install/update 진행 + +5. install 이 정상적으로 실행 된다. + +6. 이클립스로 돌아와 프로젝트를 clean -> restart 한다. + +7. log 관련 에러가 사라진다. +* 에러가 사라지지 않을 경우 이클립스를 재실행한다. +``` diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..a6093434 --- /dev/null +++ b/pom.xml @@ -0,0 +1,806 @@ + + + 4.0.0 + xit + fims + war + 1.0.0 + fims + + http://www.xit.co.kr + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + UTF-8 + 4.3.25.RELEASE + 3.10.0 + 3.0.5 + + + 1.1.3 + 1.7.25 + 2.13.4 + 2.0.6.RELEASE + ${project.build.directory}/generated-snippets + + + + + mvn2s + https://repo1.maven.org/maven2/ + + true + + + true + + + + egovframe + https://maven.egovframe.go.kr/maven/ + + true + + + false + + + + local-repository + file://${basedir}/repo + + + + + + egovframework.rte + egovframework.rte.fdl.logging + ${egovframework.rte.version} + + + org.apache.logging.log4j + log4j-core + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.slf4j + jcl-over-slf4j + + + org.slf4j + log4j-over-slf4j + + + + + egovframework.rte + egovframework.rte.fdl.security + ${egovframework.rte.version} + + + org.apache.logging.log4j + log4j-core + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.slf4j + log4j-over-slf4j + + + org.slf4j + jcl-over-slf4j + + + + egovframework.rte.fdl.logging + egovframework.rte + + + + + egovframework.rte + egovframework.rte.fdl.excel + ${egovframework.rte.version} + + + + commons-logging + commons-logging + + + egovframework.rte.fdl.logging + egovframework.rte + + + org.apache.logging.log4j + log4j-core + + + org.apache.logging.log4j + log4j-slf4j-impl + + + org.slf4j + log4j-over-slf4j + + + org.slf4j + jcl-over-slf4j + + + + + + + + + + + + + + + + + + egovframework.rte + egovframework.rte.ptl.mvc + ${egovframework.rte.version} + + + commons-logging + commons-logging + + + + egovframework.rte.fdl.logging + egovframework.rte + + + + + egovframework.rte + egovframework.rte.fdl.idgnr + ${egovframework.rte.version} + + + + commons-logging + commons-logging + + + + + egovframework.rte + egovframework.rte.fdl.property + ${egovframework.rte.version} + + + org.springframework + spring-oxm + ${spring.maven.artifact.version} + + + commons-logging + commons-logging + + + + + + javax.servlet + servlet-api + provided + 2.5 + + + + javax.servlet + jstl + 1.2 + + + + commons-dbcp + commons-dbcp + 1.4 + + + + taglibs + standard + 1.1.2 + + + + cglib + cglib + 3.1 + + + + org.antlr + antlr + 3.5 + + + + org.apache.commons + commons-compress + 1.8.1 + + + + oro + oro + 2.0.8 + + + + + + + com.jcraft + jsch + 0.1.50 + + + + + org.mariadb.jdbc + mariadb-java-client + 2.7.2 + + + + + + + + + + + + + + + + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4.1 + 1.16 + + + + commons-fileupload + commons-fileupload + 1.3.1 + + + + + org.projectlombok + lombok + 1.18.16 + provided + + + + + + javax.servlet.jsp + jsp-api + 2.2 + provided + + + + com.ibm.icu + icu4j + 53.1 + + + + + org.quartz-scheduler + quartz + 2.1.7 + + + + + + + + + + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + + org.codehaus.jettison + jettison + 1.1 + + + + + + + + org.apache.tiles + tiles-jsp + ${org.apache.tiles.version} + + + org.apache.tiles + tiles-core + ${org.apache.tiles.version} + + + + + + + org.apache.commons + commons-email + 1.3.2 + + + egovframework.com.ems + sndng-mail + 1.0 + + + + + + + com.fasterxml.jackson.core + jackson-core + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.module + jackson-module-parameter-names + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.module + jackson-module-afterburner + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-joda + ${fasterxml.jackson.version} + + + + + + com.google.code.gson + gson + 2.9.0 + + + + + + nl.captcha + simplecaptcha + 1.2.1 + + + + + + commons-configuration + commons-configuration + 1.10 + + + commons-collections + commons-collections + 3.2.1 + + + commons-lang + commons-lang + 2.6 + + + org.springmodules + spring-modules-jakarta-commons + 0.8 + + + jstl + javax.servlet + + + javax.servlet + servlet-api + + + org.springframework + spring-support + + + org.springframework + spring-beans + + + + + + + + + ch.qos.logback + logback-classic + ${logback.version} + + + org.slf4j + jul-to-slf4j + 1.7.32 + + + org.logback-extensions + logback-ext-spring + 0.1.5 + + + ch.qos.logback + logback-classic + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + org.slf4j + slf4j-api + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + + + + + org.springframework.restdocs + spring-restdocs-mockmvc + ${spring.rest-doc.version} + test + + + + + + + + + + + + + + + + + + + + + + + install + ${basedir}/target + fims + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + 80 + / + + -Xms256m -Xmx768m -XX:MaxPermSize=256m + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + UTF-8 + + + + org.codehaus.mojo + hibernate3-maven-plugin + 2.2 + + + + hbm2ddl + annotationconfiguration + + + + + + org.hsqldb + hsqldb + 2.3.2 + + + + + + org.codehaus.mojo + emma-maven-plugin + 1.0-alpha-3 + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.1 + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + once + xml + + **/Abstract*.java + **/*Suite.java + + + **/*Test.java + + + + + org.codehaus.mojo + emma-maven-plugin + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.8 + + + generate-docs + + prepare-package + + process-asciidoc + + + html + book + + ${snippetsDirectory} + + ${basedir}/src/main/docs/asciidocs + ${project.build.directory}/generated-docs + + + + + + + org.springframework.restdocs + spring-restdocs-asciidoctor + ${spring.rest-doc.version} + + + + + + + + + + + org.asciidoctor + asciidoctor-maven-plugin + + + + maven-resources-plugin + 2.7 + + + copy-resources + prepare-package + + copy-resources + + + + + ${project.build.outputDirectory}/static/docs + + + + + ${project.build.directory}/generated-docs + + + + + + + + + + + + ${basedir}/target/site + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 2.7 + + + sunlink + + javadoc + + true + + + http://docs.oracle.com/javase/6/docs/api/ + + + + + + + + org.codehaus.mojo + emma-maven-plugin + true + + + org.codehaus.mojo + surefire-report-maven-plugin + true + + + + report-only + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + 128m + 512m + ${encoding} + ${encoding} + ${encoding} + + + + + org.apache.maven.plugins + maven-jxr-plugin + + ${encoding} + ${encoding} + true + apidocs + + + + + + diff --git a/repo/nl/captcha/simplecaptcha/1.2.1/simplecaptcha-1.2.1.jar b/repo/nl/captcha/simplecaptcha/1.2.1/simplecaptcha-1.2.1.jar new file mode 100644 index 00000000..9bba7cbe Binary files /dev/null and b/repo/nl/captcha/simplecaptcha/1.2.1/simplecaptcha-1.2.1.jar differ diff --git a/src/main/UbiService/bin/nssm.exe b/src/main/UbiService/bin/nssm.exe new file mode 100644 index 00000000..8faee45b Binary files /dev/null and b/src/main/UbiService/bin/nssm.exe differ diff --git a/src/main/UbiService/bin/nssm64.exe b/src/main/UbiService/bin/nssm64.exe new file mode 100644 index 00000000..6ccfe3cf Binary files /dev/null and b/src/main/UbiService/bin/nssm64.exe differ diff --git a/src/main/UbiService/bin/restart.sh b/src/main/UbiService/bin/restart.sh new file mode 100644 index 00000000..f43a4bc7 --- /dev/null +++ b/src/main/UbiService/bin/restart.sh @@ -0,0 +1,26 @@ +JAVA_DIR=/usr/local/jdk1.6.0 +UBISERVICE_DIR=/webapp/myapp/UbiService +PROPERTY_DIR=$UBISERVICE_DIR +FONT_DIR=$UBISERVICE_DIR/fonts/ +CLASSPATH=$UBISERVICE_DIR/lib/UbiServer.jar +XMS=1024M +XMX=2048M + +GREP_STR=$UBISERVICE_DIR/lib/UbiServer.jar + +#For SunOS +#if [ `/usr/ucb/ps -auxwww | grep $GREP_STR | grep -v grep | awk '{print $2}'` ];then +# kill -9 `/usr/ucb/ps -auxwww | grep $GREP_STR | grep -v grep | awk '{print $2}'` + +if [ `ps -ef | grep $GREP_STR | grep -v grep | awk '{print $2}'` ];then + kill -9 `ps -ef | grep $GREP_STR | grep -v grep | awk '{print $2}'` + echo "" + echo ">>> UbiService has shutdown." + $JAVA_DIR/bin/java -Xms$XMS -Xmx$XMX -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dsun.java2d.fontpath=$FONT_DIR -classpath $CLASSPATH:. com.ubireport.service.UbiService4 $PROPERTY_DIR & + echo ">>> UbiService has started." + echo "" +else + echo "" + echo ">>> UbiService is not running." + echo "" +fi diff --git a/src/main/UbiService/bin/shutdown.sh b/src/main/UbiService/bin/shutdown.sh new file mode 100644 index 00000000..3fcb7712 --- /dev/null +++ b/src/main/UbiService/bin/shutdown.sh @@ -0,0 +1,18 @@ +UBISERVICE_DIR=/webapp/myapp/UbiService + +GREP_STR=$UBISERVICE_DIR/lib/UbiServer.jar + +#For SunOS +#if [ `/usr/ucb/ps -auxwww | grep $GREP_STR | grep -v grep | awk '{print $2}'` ];then +# kill -9 `/usr/ucb/ps -auxwww | grep $GREP_STR | grep -v grep | awk '{print $2}'` + +if [ `ps -ef | grep $GREP_STR | grep -v grep | awk '{print $2}'` ];then + kill -9 `ps -ef | grep $GREP_STR | grep -v grep | awk '{print $2}'` + echo "" + echo ">>> UbiService has shutdown." + echo "" +else + echo "" + echo ">>> UbiService is not running." + echo "" +fi diff --git a/src/main/UbiService/bin/startup.sh b/src/main/UbiService/bin/startup.sh new file mode 100644 index 00000000..90ed14a9 --- /dev/null +++ b/src/main/UbiService/bin/startup.sh @@ -0,0 +1,31 @@ +JAVA_DIR=/usr/local/jdk1.6.0 +UBISERVICE_DIR=/webapp/myapp/UbiService +PROPERTY_DIR=$UBISERVICE_DIR +FONT_DIR=$UBISERVICE_DIR/fonts/ +CLASSPATH=$UBISERVICE_DIR/lib/UbiServer.jar + +#For Redbc +#CLASSPATH=$UBISERVICE_DIR/lib/UbiServer.jar:$UBISERVICE_DIR/lib/EzIssuerJava.jar + +#For Voiceye +#CLASSPATH=$UBISERVICE_DIR/lib/UbiServer.jar:$UBISERVICE_DIR/lib/VERVMakerJNI.jar +#CLASSPATH=$UBISERVICE_DIR/lib/UbiServer.jar:$UBISERVICE_DIR/lib/VERVMakerJNI64.jar + +XMS=1024M +XMX=2048M + +GREP_STR=$UBISERVICE_DIR/lib/UbiServer.jar + +#For SunOS +#if [ `/usr/ucb/ps -auxwww | grep $GREP_STR | grep -v grep | awk '{print $2}'` ];then + +if [ `ps -ef | grep $GREP_STR | grep -v grep | awk '{print $2}'` ];then + echo "" + echo ">>> UbiService is running." + echo "" +else + $JAVA_DIR/bin/java -Xms$XMS -Xmx$XMX -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dsun.java2d.fontpath=$FONT_DIR -classpath $CLASSPATH:. com.ubireport.service.UbiService4 $PROPERTY_DIR & + echo "" + echo ">>> UbiService has started." + echo "" +fi diff --git a/src/main/UbiService/bin/svcregist.bat b/src/main/UbiService/bin/svcregist.bat new file mode 100644 index 00000000..ea048a1a --- /dev/null +++ b/src/main/UbiService/bin/svcregist.bat @@ -0,0 +1,68 @@ +echo off + +set INPUT=%1 +set UBISERVICE_DIR=C:\eGovFrameDev-3.6.0-64bit\workspace\BustmsTemp\src\main\UbiService +set BATPATH=%UBISERVICE_DIR%\bin\ubiservice.bat +set NSSM=%UBISERVICE_DIR%\bin\nssm64.exe + +if "%INPUT%" == "" ( + + echo ---------------------------------------- + echo ex : svcregist.bat [install] [uninstall] + echo ---------------------------------------- + echo. +) else ( + + if "%INPUT%" == "install" ( + + echo ---------------------------------------- + echo UbiService Registration Job + echo ---------------------------------------- + echo. + + echo [UbiService Regist] + %NSSM% install UbiService %BATPATH% + echo. + + echo [UbiService Set Description] + %NSSM% set UbiService Description "UbiService for UbiReport4.0" + echo. + + echo [UbiService Start] + %NSSM% start UbiService + echo. + echo ---------------------------------------- + echo Install Completed + echo ---------------------------------------- + echo. + ) else ( + + if "%INPUT%" == "uninstall" ( + + echo ---------------------------------------- + echo UbiService UnRegistration Job + echo ---------------------------------------- + echo. + + echo [UbiService Stop] + %NSSM% stop UbiService + echo. + + echo [UbiService Unregist] + %NSSM% remove UbiService confirm + echo. + + echo ---------------------------------------- + echo Uninstall Completed + echo ---------------------------------------- + echo. + ) else ( + + echo ---------------------------------------- + echo ex : svcregist.bat [install] [uninstall] + echo ---------------------------------------- + echo. + ) + ) +) + diff --git a/src/main/UbiService/bin/ubiservice.bat b/src/main/UbiService/bin/ubiservice.bat new file mode 100644 index 00000000..475dfc74 --- /dev/null +++ b/src/main/UbiService/bin/ubiservice.bat @@ -0,0 +1,34 @@ +echo off +echo ---------------------------------------- +echo UbiService.bat +echo ---------------------------------------- +echo. +set JAVA_DIR=C:\Bustms-eGovFrameDev-3.9.0-64bit\env-setting\Java\jdk1.8.0_121 +set UBISERVICE_DIR=C:\Bustms-eGovFrameDev-3.9.0-64bit\workspace\Bustms_Gyeonggido_Paju\src\main\UbiService +set PROPERTY_DIR=%UBISERVICE_DIR% +set FONT_DIR=%UBISERVICE_DIR%\fonts\ +set XMS=512M +set XMX=1024M +set CLASSPATH=%UBISERVICE_DIR%\lib\UbiServer.jar + +REM For Redbc +REM set CLASSPATH=%UBISERVICE_DIR%\lib\UbiServer.jar;%UBISERVICE_DIR%\lib\EzIssuerJava.jar + +REM For Voiceye +REM set CLASSPATH=%UBISERVICE_DIR%\lib\UbiServer.jar;%UBISERVICE_DIR%\lib\VERVMakerJNI.jar +REM set CLASSPATH=%UBISERVICE_DIR%\lib\UbiServer.jar;%UBISERVICE_DIR%\lib\VERVMakerJNI64.jar + + +echo. +echo [Directory Information] +echo - Java : %JAVA_DIR% +echo - UbiService : %UBISERVICE_DIR% +echo. + +echo [Java Information] +%JAVA_DIR%\bin\java -version +echo. + +echo [UbiService Start] +%JAVA_DIR%\bin\java -Xms%XMS% -Xmx%XMX% -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dsun.java2d.fontpath=%FONT_DIR% -classpath %CLASSPATH%;. com.ubireport.service.UbiService4 %PROPERTY_DIR% +pause>nul diff --git a/src/main/UbiService/fonts/NGULIM.TTF b/src/main/UbiService/fonts/NGULIM.TTF new file mode 100644 index 00000000..28ec0d2f Binary files /dev/null and b/src/main/UbiService/fonts/NGULIM.TTF differ diff --git a/src/main/UbiService/fonts/batang.ttc b/src/main/UbiService/fonts/batang.ttc new file mode 100644 index 00000000..a496b2b6 Binary files /dev/null and b/src/main/UbiService/fonts/batang.ttc differ diff --git a/src/main/UbiService/fonts/gulim.ttc b/src/main/UbiService/fonts/gulim.ttc new file mode 100644 index 00000000..060ddf23 Binary files /dev/null and b/src/main/UbiService/fonts/gulim.ttc differ diff --git a/src/main/UbiService/fonts/malgun.ttf b/src/main/UbiService/fonts/malgun.ttf new file mode 100644 index 00000000..fdf3b5ae Binary files /dev/null and b/src/main/UbiService/fonts/malgun.ttf differ diff --git a/src/main/UbiService/fonts/malgunbd.ttf b/src/main/UbiService/fonts/malgunbd.ttf new file mode 100644 index 00000000..7469fd88 Binary files /dev/null and b/src/main/UbiService/fonts/malgunbd.ttf differ diff --git a/src/main/UbiService/fonts/malgunsl.ttf b/src/main/UbiService/fonts/malgunsl.ttf new file mode 100644 index 00000000..bbf41ca6 Binary files /dev/null and b/src/main/UbiService/fonts/malgunsl.ttf differ diff --git a/src/main/UbiService/lib/UbiServer.jar b/src/main/UbiService/lib/UbiServer.jar new file mode 100644 index 00000000..396a145e Binary files /dev/null and b/src/main/UbiService/lib/UbiServer.jar differ diff --git a/src/main/UbiService/logs/ubiservice.log b/src/main/UbiService/logs/ubiservice.log new file mode 100644 index 00000000..ca8203e3 --- /dev/null +++ b/src/main/UbiService/logs/ubiservice.log @@ -0,0 +1,653 @@ +[UBISERVICE] [2020-05-04 10:34:30.450] [UBISERVICE BOOT] +[UBISERVICE] [2020-05-04 10:34:30.455] [UBISERVICE TASK INFO] +[UBISERVICE] [2020-05-04 10:34:30.455] > TASK PERIOD : 1 +[UBISERVICE] [2020-05-04 10:34:30.455] > TASK PERIOD TYPE : DAY +[UBISERVICE] [2020-05-04 10:34:30.456] [UBISERVICE TASK START] +[UBISERVICE] [2020-05-04 10:34:30.456] [SYSTEM ENVIRONMEN INFO] +[UBISERVICE] [2020-05-04 10:34:30.456] > java.home=C:\Bustms-eGovFrameDev-3.9.0-64bit\env-setting\Java\jdk1.8.0_121\jre +[UBISERVICE] [2020-05-04 10:34:30.456] > java.version=1.8.0_121 +[UBISERVICE] [2020-05-04 10:34:30.456] > java.vm.version=25.121-b13 +[UBISERVICE] [2020-05-04 10:34:30.456] > java.runtime.version=1.8.0_121-b13 +[UBISERVICE] [2020-05-04 10:34:30.456] > sun.java2d.fontpath=C:\Bustms-eGovFrameDev-3.9.0-64bit\workspace\Bustms_Gyeonggido_Paju\src\main\UbiService\fonts\ +[UBISERVICE] [2020-05-04 10:34:30.458] > [S3] RESID : UBIHTML +[UBISERVICE] [2020-05-04 10:34:30.458] > [S3] DIRECTORY : C:/Bustms-eGovFrameDev-3.9.0-64bit/workspace/Bustms_Gyeonggido_Paju/src/main/UbiService/results/UBIHTML +[UBISERVICE] [2020-05-04 10:34:30.458] > [S3] CONDITION : 1 DAY[UBISERVICE] [2020-05-04 10:34:30.458] > RESID : UBIHTML - DIRECTORY NOT EXISTS. +[UBISERVICE] [2020-05-04 10:34:30.459] [UBISERVICE TASK END] +[UBISERVICE] [2020-05-04 10:34:30.458] [SYSTEM FONT INFO] +[UBISERVICE] [2020-05-04 10:34:30.801] > Dialog +[UBISERVICE] [2020-05-04 10:34:30.801] > DialogInput +[UBISERVICE] [2020-05-04 10:34:30.802] > Lucida Bright +[UBISERVICE] [2020-05-04 10:34:30.802] > Lucida Sans +[UBISERVICE] [2020-05-04 10:34:30.802] > Lucida Sans Typewriter +[UBISERVICE] [2020-05-04 10:34:30.803] > Monospaced +[UBISERVICE] [2020-05-04 10:34:30.803] > SansSerif +[UBISERVICE] [2020-05-04 10:34:30.803] > Serif +[UBISERVICE] [2020-05-04 10:34:30.803] > 굴림 +[UBISERVICE] [2020-05-04 10:34:30.803] > 굴림체 +[UBISERVICE] [2020-05-04 10:34:30.803] > 궁서 +[UBISERVICE] [2020-05-04 10:34:30.803] > 궁서체 +[UBISERVICE] [2020-05-04 10:34:30.803] > 돋움 +[UBISERVICE] [2020-05-04 10:34:30.803] > 돋움체 +[UBISERVICE] [2020-05-04 10:34:30.803] > 맑은 고딕 +[UBISERVICE] [2020-05-04 10:34:30.804] > 맑은 고딕 Semilight +[UBISERVICE] [2020-05-04 10:34:30.804] > 바탕 +[UBISERVICE] [2020-05-04 10:34:30.804] > 바탕체 +[UBISERVICE] [2020-05-04 10:34:30.804] > 새굴림 +[UBISERVICE] [2020-05-04 11:32:40.825] [UBISERVICE BOOT] +[UBISERVICE] [2020-05-04 11:32:40.829] [UBISERVICE TASK INFO] +[UBISERVICE] [2020-05-04 11:32:40.829] > TASK PERIOD : 1 +[UBISERVICE] [2020-05-04 11:32:40.829] > TASK PERIOD TYPE : DAY +[UBISERVICE] [2020-05-04 11:32:40.830] [UBISERVICE TASK START] +[UBISERVICE] [2020-05-04 11:32:40.830] [SYSTEM ENVIRONMEN INFO] +[UBISERVICE] [2020-05-04 11:32:40.830] > java.home=C:\Bustms-eGovFrameDev-3.9.0-64bit\env-setting\Java\jdk1.8.0_121\jre +[UBISERVICE] [2020-05-04 11:32:40.830] > java.version=1.8.0_121 +[UBISERVICE] [2020-05-04 11:32:40.830] > java.vm.version=25.121-b13 +[UBISERVICE] [2020-05-04 11:32:40.830] > java.runtime.version=1.8.0_121-b13 +[UBISERVICE] [2020-05-04 11:32:40.831] > sun.java2d.fontpath=C:\Bustms-eGovFrameDev-3.9.0-64bit\workspace\Bustms_Gyeonggido_Paju\src\main\UbiService\fonts\ +[UBISERVICE] [2020-05-04 11:32:40.832] > [S3] RESID : UBIHTML +[UBISERVICE] [2020-05-04 11:32:40.832] > [S3] DIRECTORY : C:/Bustms-eGovFrameDev-3.9.0-64bit/workspace/Bustms_Gyeonggido_Paju/src/main/UbiService/results/UBIHTML +[UBISERVICE] [2020-05-04 11:32:40.832] > [S3] CONDITION : 1 DAY[UBISERVICE] [2020-05-04 11:32:40.832] > RESID : UBIHTML - DIRECTORY NOT EXISTS. +[UBISERVICE] [2020-05-04 11:32:40.833] [UBISERVICE TASK END] +[UBISERVICE] [2020-05-04 11:32:40.832] [SYSTEM FONT INFO] +[UBISERVICE] [2020-05-04 11:32:41.045] > Dialog +[UBISERVICE] [2020-05-04 11:32:41.045] > DialogInput +[UBISERVICE] [2020-05-04 11:32:41.045] > Lucida Bright +[UBISERVICE] [2020-05-04 11:32:41.045] > Lucida Sans +[UBISERVICE] [2020-05-04 11:32:41.045] > Lucida Sans Typewriter +[UBISERVICE] [2020-05-04 11:32:41.046] > Monospaced +[UBISERVICE] [2020-05-04 11:32:41.046] > SansSerif +[UBISERVICE] [2020-05-04 11:32:41.046] > Serif +[UBISERVICE] [2020-05-04 11:32:41.046] > 굴림 +[UBISERVICE] [2020-05-04 11:32:41.046] > 굴림체 +[UBISERVICE] [2020-05-04 11:32:41.046] > 궁서 +[UBISERVICE] [2020-05-04 11:32:41.046] > 궁서체 +[UBISERVICE] [2020-05-04 11:32:41.046] > 돋움 +[UBISERVICE] [2020-05-04 11:32:41.047] > 돋움체 +[UBISERVICE] [2020-05-04 11:32:41.047] > 맑은 고딕 +[UBISERVICE] [2020-05-04 11:32:41.047] > 맑은 고딕 Semilight +[UBISERVICE] [2020-05-04 11:32:41.047] > 바탕 +[UBISERVICE] [2020-05-04 11:32:41.047] > 바탕체 +[UBISERVICE] [2020-05-04 11:32:41.047] > 새굴림 +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.485] [I][REQUEST INFO] > TYPE : URF +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.488] [I][REQUEST INFO] > JRF : ubi_sample.jrf +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.489] [I][REQUEST INFO] > ARG : user#홍길동# +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.489] [I][REQUEST INFO] > KEY : A825DD2A8E22618DA36AB93371B38FB1 +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.489] [I][REQUEST INFO] > RESID : UBIHTML +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.489] [I][REQUEST INFO] > EXPORTSEQ : 1588566636945 +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.493] [I][URF JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:37.515] [I][URF JOB][UBIVIEWER] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.147] [I][URF JOB][UBIVIEWER] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.148] [I][URF JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.149] [I][URF JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.150] [I][URF JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.330] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.334] [I][TOTALPAGE JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.337] [I][TOTALPAGE JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.340] [I][TOTALPAGE JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566636945] [UBISERVICE] [2020-05-04 13:30:40.340] [I][TOTALPAGE JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.634] [I][REQUEST INFO] > TYPE : URF +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.635] [I][REQUEST INFO] > JRF : ubi_sample.jrf +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.638] [I][REQUEST INFO] > ARG : user#홍길동# +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.638] [I][REQUEST INFO] > KEY : A825DD2A8E22618DA36AB93371B38FB1 +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.640] [I][REQUEST INFO] > RESID : UBIHTML +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.640] [I][REQUEST INFO] > EXPORTSEQ : 1588566640571 +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.642] [I][URF JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.651] [I][URF JOB][UBIVIEWER] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.766] [I][URF JOB][UBIVIEWER] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.768] [I][URF JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.773] [I][URF JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.774] [I][URF JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.874] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.875] [I][TOTALPAGE JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.877] [I][TOTALPAGE JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.879] [I][TOTALPAGE JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566640571] [UBISERVICE] [2020-05-04 13:30:40.879] [I][TOTALPAGE JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.635] [I][REQUEST INFO] > TYPE : URF +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.635] [I][REQUEST INFO] > JRF : ubi_sample.jrf +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.636] [I][REQUEST INFO] > ARG : user#홍길동# +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.636] [I][REQUEST INFO] > KEY : A825DD2A8E22618DA36AB93371B38FB1 +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.636] [I][REQUEST INFO] > RESID : UBIHTML +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.637] [I][REQUEST INFO] > EXPORTSEQ : 1588566641607 +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.638] [I][URF JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.647] [I][URF JOB][UBIVIEWER] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.744] [I][URF JOB][UBIVIEWER] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.746] [I][URF JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.748] [I][URF JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.749] [I][URF JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.850] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.851] [I][TOTALPAGE JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.852] [I][TOTALPAGE JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.854] [I][TOTALPAGE JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566641607] [UBISERVICE] [2020-05-04 13:30:41.855] [I][TOTALPAGE JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.402] [I][REQUEST INFO] > TYPE : URF +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.403] [I][REQUEST INFO] > JRF : ubi_sample.jrf +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.403] [I][REQUEST INFO] > ARG : user#홍길동# +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.403] [I][REQUEST INFO] > KEY : A825DD2A8E22618DA36AB93371B38FB1 +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.404] [I][REQUEST INFO] > RESID : UBIHTML +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.404] [I][REQUEST INFO] > EXPORTSEQ : 1588566644386 +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.405] [I][URF JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.415] [I][URF JOB][UBIVIEWER] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.499] [I][URF JOB][UBIVIEWER] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.500] [I][URF JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.502] [I][URF JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.508] [I][URF JOB] > END +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.625] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.626] [I][TOTALPAGE JOB] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.627] [I][TOTALPAGE JOB][RESPONSE] > START +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.630] [I][TOTALPAGE JOB][RESPONSE] > END +[A825DD2A8E22618DA36AB93371B38FB1_1588566644386] [UBISERVICE] [2020-05-04 13:30:44.630] [I][TOTALPAGE JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.937] [I][REQUEST INFO] > TYPE : URF +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.938] [I][REQUEST INFO] > JRF : 6HO_1001.jrf +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.939] [I][REQUEST INFO] > ARG : reqstManageId#REQ006218,REQ006223,REQ006221,REQ006216,REQ006217 +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.939] [I][REQUEST INFO] > KEY : ADD4F39F3B5DF0B76B71B36B6E63A57A +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.939] [I][REQUEST INFO] > RESID : UBIHTML +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.940] [I][REQUEST INFO] > EXPORTSEQ : 1588567393066 +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.942] [I][URF JOB] > START +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.945] [I][REQUEST INFO] > TYPE : URF +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.945] [I][REQUEST INFO] > JRF : 22HO_1003.jrf +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.945] [I][REQUEST INFO] > ARG : reqstManageId#REQ006220 +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.946] [I][REQUEST INFO] > KEY : ADD4F39F3B5DF0B76B71B36B6E63A57A +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.946] [I][REQUEST INFO] > RESID : UBIHTML +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.946] [I][REQUEST INFO] > EXPORTSEQ : 1588567393184 +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.961] [I][URF JOB] > START +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.960] [I][REQUEST INFO] > TYPE : URF +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.960] [I][REQUEST INFO] > JRF : 14HO_1002.jrf +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.961] [I][REQUEST INFO] > ARG : reqstManageId#REQ006224 +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.961] [I][REQUEST INFO] > KEY : ADD4F39F3B5DF0B76B71B36B6E63A57A +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.961] [I][REQUEST INFO] > RESID : UBIHTML +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.961] [I][REQUEST INFO] > EXPORTSEQ : 1588567393345 +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.962] [I][URF JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:13.978] [I][URF JOB][UBIVIEWER] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:13.979] [I][URF JOB][UBIVIEWER] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:13.984] [I][URF JOB][UBIVIEWER] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:14.597] [I][URF JOB][UBIVIEWER] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:14.606] [I][URF JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:14.608] [I][URF JOB][UBIVIEWER] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:14.608] [I][URF JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:14.610] [I][URF JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:14.610] [I][URF JOB] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:14.612] [I][URF JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:14.678] [I][URF JOB] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:14.949] [I][URF JOB][UBIVIEWER] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:14.952] [I][URF JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:14.956] [I][URF JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:14.960] [I][URF JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:15.106] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:15.107] [I][TOTALPAGE JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:15.109] [I][TOTALPAGE JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:15.120] [I][TOTALPAGE JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393066] [UBISERVICE] [2020-05-04 13:43:15.121] [I][TOTALPAGE JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:15.297] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:15.302] [I][TOTALPAGE JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:15.309] [I][TOTALPAGE JOB][RESPONSE] > START +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:15.312] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:15.315] [I][TOTALPAGE JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:15.317] [I][TOTALPAGE JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393184] [UBISERVICE] [2020-05-04 13:43:15.317] [I][TOTALPAGE JOB] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:15.317] [I][TOTALPAGE JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:15.369] [I][TOTALPAGE JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567393345] [UBISERVICE] [2020-05-04 13:43:15.369] [I][TOTALPAGE JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.650] [I][REQUEST INFO] > TYPE : URF +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.651] [I][REQUEST INFO] > JRF : 14HO_1002.jrf +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.651] [I][REQUEST INFO] > ARG : reqstManageId#REQ006224 +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.652] [I][REQUEST INFO] > KEY : ADD4F39F3B5DF0B76B71B36B6E63A57A +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.652] [I][REQUEST INFO] > RESID : UBIHTML +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.652] [I][REQUEST INFO] > EXPORTSEQ : 1588567407594 +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.654] [I][URF JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:27.667] [I][URF JOB][UBIVIEWER] > START +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.054] [I][REQUEST INFO] > TYPE : URF +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.054] [I][REQUEST INFO] > JRF : 6HO_1001.jrf +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.054] [I][REQUEST INFO] > ARG : reqstManageId#REQ006218,REQ006223,REQ006221,REQ006216,REQ006217 +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.054] [I][REQUEST INFO] > KEY : ADD4F39F3B5DF0B76B71B36B6E63A57A +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.055] [I][REQUEST INFO] > RESID : UBIHTML +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.055] [I][REQUEST INFO] > EXPORTSEQ : 1588567407895 +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.057] [I][URF JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:28.063] [I][URF JOB][UBIVIEWER] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:28.064] [I][URF JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.065] [I][URF JOB][UBIVIEWER] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:28.066] [I][URF JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:28.067] [I][URF JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.591] [I][REQUEST INFO] > TYPE : URF +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.592] [I][REQUEST INFO] > JRF : 22HO_1003.jrf +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.592] [I][REQUEST INFO] > ARG : reqstManageId#REQ006220 +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.592] [I][REQUEST INFO] > KEY : ADD4F39F3B5DF0B76B71B36B6E63A57A +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.593] [I][REQUEST INFO] > RESID : UBIHTML +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.593] [I][REQUEST INFO] > EXPORTSEQ : 1588567408513 +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.596] [I][URF JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.607] [I][URF JOB][UBIVIEWER] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.685] [I][URF JOB][UBIVIEWER] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.691] [I][URF JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.695] [I][URF JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:28.699] [I][URF JOB] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.982] [I][URF JOB][UBIVIEWER] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.983] [I][URF JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.985] [I][URF JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:28.986] [I][URF JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:29.266] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:29.268] [I][TOTALPAGE JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:29.269] [I][TOTALPAGE JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:29.272] [I][TOTALPAGE JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407594] [UBISERVICE] [2020-05-04 13:43:29.273] [I][TOTALPAGE JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:29.315] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:29.316] [I][TOTALPAGE JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:29.318] [I][TOTALPAGE JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:29.321] [I][TOTALPAGE JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:43:29.322] [I][TOTALPAGE JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:29.477] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:29.479] [I][TOTALPAGE JOB] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:29.481] [I][TOTALPAGE JOB][RESPONSE] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:29.486] [I][TOTALPAGE JOB][RESPONSE] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567408513] [UBISERVICE] [2020-05-04 13:43:29.486] [I][TOTALPAGE JOB] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.425] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.425] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.426] [I][PAGE JOB][3] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.426] [I][PAGE JOB][2] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.437] [I][PAGE JOB][2] > END +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.456] [I][PAGE JOB][3] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.605] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.606] [I][PAGE JOB][4] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:01.612] [I][PAGE JOB][4] > END +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:02.153] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:02.155] [I][PAGE JOB][5] > START +[ADD4F39F3B5DF0B76B71B36B6E63A57A_1588567407895] [UBISERVICE] [2020-05-04 13:44:02.157] [I][PAGE JOB][5] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.343] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > JRF : 14HO_1002.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > ARG : reqstManageId#REQ006224 +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > EXPORTSEQ : 1588570030773 +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.343] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > JRF : 22HO_1003.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > ARG : reqstManageId#REQ006220 +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > EXPORTSEQ : 1588570031786 +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.343] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > JRF : 6HO_1001.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > ARG : reqstManageId#REQ006218,REQ006223,REQ006221,REQ006216,REQ006217 +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.350] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.351] [I][REQUEST INFO] > EXPORTSEQ : 1588570030916 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.354] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.354] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.354] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.371] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:12.371] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.374] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.677] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.684] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.687] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.689] [I][URF JOB] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.796] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.801] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.803] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:12.804] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.959] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.961] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.965] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.969] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570031786] [UBISERVICE] [2020-05-04 14:27:12.969] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.041] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.045] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.050] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.053] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.057] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.060] [I][URF JOB] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.060] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.108] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:13.108] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:13.108] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:13.151] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:13.152] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:13.157] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030773] [UBISERVICE] [2020-05-04 14:27:13.157] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.331] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.332] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.332] [I][PAGE JOB][2] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.333] [I][PAGE JOB][3] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.346] [I][PAGE JOB][2] > END +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.346] [I][PAGE JOB][3] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.659] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.660] [I][PAGE JOB][4] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.663] [I][PAGE JOB][4] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.991] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.991] [I][PAGE JOB][5] > START +[E63B9322E82D4BD550E14EF29B894277_1588570030916] [UBISERVICE] [2020-05-04 14:27:20.993] [I][PAGE JOB][5] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.362] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.363] [I][REQUEST INFO] > JRF : 14HO_1002.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.363] [I][REQUEST INFO] > ARG : reqstManageId#REQ006224 +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.363] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.363] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.363] [I][REQUEST INFO] > EXPORTSEQ : 1588570086293 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.364] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.377] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.713] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.714] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.715] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.716] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.852] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.853] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.853] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.856] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570086293] [UBISERVICE] [2020-05-04 14:28:06.857] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.570] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.570] [I][REQUEST INFO] > JRF : 14HO_1002.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.570] [I][REQUEST INFO] > ARG : reqstManageId#REQ006224 +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.571] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.571] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.571] [I][REQUEST INFO] > EXPORTSEQ : 1588570088553 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.573] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.583] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.751] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.752] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.753] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.754] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.877] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.878] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.879] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.881] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570088553] [UBISERVICE] [2020-05-04 14:28:08.881] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.633] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.633] [I][REQUEST INFO] > JRF : 6HO_1001.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.633] [I][REQUEST INFO] > ARG : reqstManageId#REQ006218,REQ006223,REQ006221,REQ006216,REQ006217 +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.633] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.633] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.633] [I][REQUEST INFO] > EXPORTSEQ : 1588570089619 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.634] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.642] [I][URF JOB][UBIVIEWER] > START +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.947] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.948] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.949] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.996] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.997] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.998] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:09.999] [I][URF JOB] > END +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.061] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.062] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.590] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.590] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.591] [I][PAGE JOB][2] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.591] [I][PAGE JOB][3] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.604] [I][PAGE JOB][3] > END +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.604] [I][PAGE JOB][2] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.925] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.926] [I][PAGE JOB][4] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:10.928] [I][PAGE JOB][4] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:11.306] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:11.307] [I][PAGE JOB][5] > START +[E63B9322E82D4BD550E14EF29B894277_1588570089619] [UBISERVICE] [2020-05-04 14:28:11.309] [I][PAGE JOB][5] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.522] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.522] [I][REQUEST INFO] > JRF : 6HO_1001.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.522] [I][REQUEST INFO] > ARG : reqstManageId#REQ006218,REQ006223,REQ006221,REQ006216,REQ006217 +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.522] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.522] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.522] [I][REQUEST INFO] > EXPORTSEQ : 1588570120491 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.523] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.532] [I][URF JOB][UBIVIEWER] > START +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.836] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.838] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.839] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.866] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.867] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.867] [I][TOTALPAGE JOB] > END +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.867] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.902] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:40.904] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:44.569] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:44.570] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:44.570] [I][PAGE JOB][2] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:44.571] [I][PAGE JOB][3] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:44.582] [I][PAGE JOB][3] > END +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:44.582] [I][PAGE JOB][2] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:45.120] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:45.120] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:45.121] [I][PAGE JOB][4] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:45.121] [I][PAGE JOB][5] > START +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:45.123] [I][PAGE JOB][4] > END +[E63B9322E82D4BD550E14EF29B894277_1588570120491] [UBISERVICE] [2020-05-04 14:28:45.123] [I][PAGE JOB][5] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.943] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.943] [I][REQUEST INFO] > JRF : 22HO_1003.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.943] [I][REQUEST INFO] > ARG : reqstManageId#REQ006220 +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.943] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.943] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.943] [I][REQUEST INFO] > EXPORTSEQ : 1588570200927 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.944] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:00.950] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.122] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.123] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.124] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.125] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.230] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.231] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.232] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.235] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570200927] [UBISERVICE] [2020-05-04 14:30:01.235] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.536] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.536] [I][REQUEST INFO] > JRF : 14HO_1002.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.536] [I][REQUEST INFO] > ARG : reqstManageId#REQ006224 +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.536] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.536] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.536] [I][REQUEST INFO] > EXPORTSEQ : 1588570222511 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.537] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.545] [I][URF JOB][UBIVIEWER] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.774] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.776] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.777] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:22.778] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.006] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.007] [I][REQUEST INFO] > JRF : 22HO_1003.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.007] [I][REQUEST INFO] > ARG : reqstManageId#REQ006220 +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.007] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.007] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.007] [I][REQUEST INFO] > EXPORTSEQ : 1588570222993 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.008] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.013] [I][URF JOB][UBIVIEWER] > START +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.090] [I][REQUEST INFO] > TYPE : URF +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.090] [I][REQUEST INFO] > JRF : 6HO_1001.jrf +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.091] [I][REQUEST INFO] > ARG : reqstManageId#REQ006218,REQ006223,REQ006221,REQ006216,REQ006217 +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.091] [I][REQUEST INFO] > KEY : E63B9322E82D4BD550E14EF29B894277 +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.091] [I][REQUEST INFO] > RESID : UBIHTML +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.091] [I][REQUEST INFO] > EXPORTSEQ : 1588570223077 +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.092] [I][URF JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.099] [I][URF JOB][UBIVIEWER] > START +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:23.174] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:23.175] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:23.176] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:23.181] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222511] [UBISERVICE] [2020-05-04 14:30:23.181] [I][TOTALPAGE JOB] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.283] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.284] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.286] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.287] [I][URF JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.455] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.457] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.458] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.463] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570222993] [UBISERVICE] [2020-05-04 14:30:23.463] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.524] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.525] [I][TOTALPAGE JOB] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.527] [I][TOTALPAGE JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.571] [I][URF JOB][UBIVIEWER] > END +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.572] [I][URF JOB][RESPONSE] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.573] [I][URF JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.574] [I][URF JOB] > END +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.632] [I][TOTALPAGE JOB][RESPONSE] > END +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:23.632] [I][TOTALPAGE JOB] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:29.684] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:29.684] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:29.685] [I][PAGE JOB][2] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:29.685] [I][PAGE JOB][3] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:29.698] [I][PAGE JOB][3] > END +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:29.698] [I][PAGE JOB][2] > END +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:30.534] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:30.534] [I][REQUEST INFO] > TYPE : PAGE +******************************************************************************** +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:30.535] [I][PAGE JOB][4] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:30.535] [I][PAGE JOB][5] > START +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:30.537] [I][PAGE JOB][4] > END +[E63B9322E82D4BD550E14EF29B894277_1588570223077] [UBISERVICE] [2020-05-04 14:30:30.537] [I][PAGE JOB][5] > END +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:29.812] [I][REQUEST INFO] > TYPE : URF +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:31.819] [I][REQUEST INFO] > JRF : ubi_sample.jrf +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:31.819] [I][REQUEST INFO] > ARG : user#홍길동# +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:31.819] [I][REQUEST INFO] > KEY : 88851B1B6567FB893AD1FD93C857F407 +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:31.820] [I][REQUEST INFO] > RESID : UBIHTML +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:31.820] [I][REQUEST INFO] > EXPORTSEQ : 1588575560873 +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:32.416] [I][URF JOB] > START +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:32.920] [I][URF JOB][UBIVIEWER] > START +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.163] [I][URF JOB][UBIVIEWER] > END +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.164] [I][URF JOB][RESPONSE] > START +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.165] [I][URF JOB][RESPONSE] > END +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.165] [I][URF JOB] > END +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.939] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.942] [I][TOTALPAGE JOB] > START +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.943] [I][TOTALPAGE JOB][RESPONSE] > START +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.949] [I][TOTALPAGE JOB][RESPONSE] > END +[88851B1B6567FB893AD1FD93C857F407_1588575560873] [UBISERVICE] [2020-05-04 15:59:37.949] [I][TOTALPAGE JOB] > END +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.466] [I][REQUEST INFO] > TYPE : URF +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.466] [I][REQUEST INFO] > JRF : ubi_sample.jrf +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.467] [I][REQUEST INFO] > ARG : user#홍길동# +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.467] [I][REQUEST INFO] > KEY : 88851B1B6567FB893AD1FD93C857F407 +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.467] [I][REQUEST INFO] > RESID : UBIHTML +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.467] [I][REQUEST INFO] > EXPORTSEQ : 1588575579436 +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.468] [I][URF JOB] > START +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.473] [I][URF JOB][UBIVIEWER] > START +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.778] [I][URF JOB][UBIVIEWER] > END +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.779] [I][URF JOB][RESPONSE] > START +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.780] [I][URF JOB][RESPONSE] > END +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.781] [I][URF JOB] > END +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.914] [I][REQUEST INFO] > TYPE : TOTALPAGE +******************************************************************************** +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.916] [I][TOTALPAGE JOB] > START +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.917] [I][TOTALPAGE JOB][RESPONSE] > START +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.921] [I][TOTALPAGE JOB][RESPONSE] > END +[88851B1B6567FB893AD1FD93C857F407_1588575579436] [UBISERVICE] [2020-05-04 15:59:39.921] [I][TOTALPAGE JOB] > END diff --git a/src/main/UbiService/ubiservice.xml b/src/main/UbiService/ubiservice.xml new file mode 100644 index 00000000..da0204ed --- /dev/null +++ b/src/main/UbiService/ubiservice.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/kr/xit/fims/biz/cmm/FimsCmmnUtil.java b/src/main/java/kr/xit/fims/biz/cmm/FimsCmmnUtil.java new file mode 100644 index 00000000..b5304bef --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/FimsCmmnUtil.java @@ -0,0 +1,7 @@ +package kr.xit.fims.biz.cmm; + +import kr.xit.framework.core.utils.XitCmmnUtil; + +public class FimsCmmnUtil extends XitCmmnUtil{ + +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/FimsConst.java b/src/main/java/kr/xit/fims/biz/cmm/FimsConst.java new file mode 100644 index 00000000..f42b34a4 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/FimsConst.java @@ -0,0 +1,11 @@ +package kr.xit.fims.biz.cmm; + + +public class FimsConst { + + /** + * JSP파일 BASE PATH + */ + public static final String FIMS_JSP_BASE_PATH = "/fims/biz/"; + public static final String JSP_BASE_PATH_TOTAL_POP = "/fims/biz/"; +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/FimsMapperStrategy.java b/src/main/java/kr/xit/fims/biz/cmm/FimsMapperStrategy.java new file mode 100644 index 00000000..a5f642ab --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/FimsMapperStrategy.java @@ -0,0 +1,53 @@ +package kr.xit.fims.biz.cmm; + +import java.sql.SQLException; +import java.util.List; + +import org.apache.ibatis.session.RowBounds; + +public interface FimsMapperStrategy { + + /** + *
메소드 설명: 다건 조회
+ * @param searchVO + * @return + * @throws SQLException List 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 14. + */ + public List findList(P param, RowBounds rowBounds); + + /** + *
메소드 설명: 단건 조회
+ * @param searchVO + * @return + * @throws SQLException T 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 14. + */ + public T findView(T vo); + + /** + *
메소드 설명: 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 14. + */ + public void addProc(T vo); + + /** + *
메소드 설명: 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 14. + */ + public void modifyProc(T vo); + + /** + *
메소드 설명: 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 14. + */ + public void removeProc(T vo); +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/FimsServiceStrategy.java b/src/main/java/kr/xit/fims/biz/cmm/FimsServiceStrategy.java new file mode 100644 index 00000000..9edaa3c1 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/FimsServiceStrategy.java @@ -0,0 +1,19 @@ +package kr.xit.fims.biz.cmm; + +import java.sql.SQLException; +import java.util.List; + +import org.apache.ibatis.session.RowBounds; + +public interface FimsServiceStrategy { + + public List findList(P searchVO, RowBounds rowBounds) throws SQLException; + + public T findView(T vo); + + public void addProc(T vo); + + public void modifyProc(T vo); + + public void removeProc(T vo); +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/mapper/FimsTotalPopupMapper.java b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/mapper/FimsTotalPopupMapper.java new file mode 100644 index 00000000..9d1dacff --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/mapper/FimsTotalPopupMapper.java @@ -0,0 +1,13 @@ +package kr.xit.fims.biz.cmm.fimsTotalPopup.mapper; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.fims.biz.cmm.FimsMapperStrategy; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupSearchVO; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupVO; + +@Mapper +public interface FimsTotalPopupMapper extends FimsMapperStrategy { + + public void modifyProcOwner(FimsTotalPopupVO vo); + +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/model/FimsTotalPopupSearchVO.java b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/model/FimsTotalPopupSearchVO.java new file mode 100644 index 00000000..da9d4696 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/model/FimsTotalPopupSearchVO.java @@ -0,0 +1,7 @@ +package kr.xit.fims.biz.cmm.fimsTotalPopup.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +public class FimsTotalPopupSearchVO extends XitBaseSearchVO { +} + diff --git a/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/model/FimsTotalPopupVO.java b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/model/FimsTotalPopupVO.java new file mode 100644 index 00000000..fca22d8b --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/model/FimsTotalPopupVO.java @@ -0,0 +1,84 @@ +package kr.xit.fims.biz.cmm.fimsTotalPopup.model; + +import kr.xit.framework.core.model.BaseVO; +import lombok.Data; + +@Data +public class FimsTotalPopupVO extends BaseVO { + + //tb_reglt + private String reglt_id; //단속 id + private String signgu_code; //시군구 코드 + private String ffnlg_code; //과태료 코드 + private String reglt_regist_se_code; //단속 등록 구분 코드 + private String violt_se_code; //위반 구분 코드 + private String violt_de; //위반 일자 + private String violt_begin_time; //위반 시작 시간 + private String violt_end_time; //위반 종료 시간위 + private String violt_lrg_code; //위반 법규 코드 + private String violt_cn_code; //위반 내용 코드 + private String violt_place; //위반 장소 + private String violt_co; //위반 횟수 + private String violt_legaldong_code; //위반 법정동 코드 + private String violt_crdnt_x; //위반 좌표 x + private String violt_crdnt_y; //위반 좌표 y + private String sttemnt_sj; //신고 제목 + private String sttemnt_cn; //신고 내용 + private String aplcnt_cttpc; //신고자 연락처 + private String towng_at_code; //견인 여부 코드 + private String stickr_no; //스티커 번호 + private String image_nmrs; //이미지 매수 + private String image_se_code; //이미지 구분 코드 + private String mvp_filenm; //동영상 파일명 + private String vhcle_no; //차량 번호 + private String vhcle_nm; //차량 명 + private String vhcle_se_code; //차량 구분 코드 + private String vhcty_code; //차종 코드 + private String vin; //차대번호 + private String redution_amount; //감경 금액 + private String redution_aft_amount; //감경 후 금액 + private String rciv_amount; //수납 금액 + private String rdcamt; //감액 + private String adamt; //가산금 + private String dicary_notie_sndng_de; //사전 통지서 발송 일자 + private String dicary_notie_dedt_de; //사전 통지서 납기 일자 + private String specl_reglt_zone_code; //특별 단속 구역 코드 + private String parkng_posbl_code; //주차 가능 코드 + private String opinion_statmnt_at; //의견 진술 여부 + private String spcmnt_matter; //특기 사항 + private String reglt_process_sttus_code; //단속 처리 상태 코드 + private String rergist_bfe_reglt_id; //재등록 전 단속 id + private String regist_dt; //등록 일시 + private String register; //등록자 + private String last_process_dt; //최종 처리 일시 + private String last_opetr; //최종 처리자 + + + //tb_owner + private String owner_id; //소유주 id + private String owner_nm; //소유주 명 + private String owner_se_code; //소유주 구분 코드 + private String ihidnum_premanli; //주민등록번호 앞자리 + private String ihidnum; //주민등록번호 + private String adres; //주소 + private String detail_adres; //상세 주소 + private String zip; //우편번호 + private String rn_code; //도로명 코드 + private String undgrnd_at; //지하 여부 + private String buld_mnnm; //건물 본번 + private String buld_slno; //건물 부번 + private String buld_manage_no; //건물 관리 번호 + private String owner_regist_se_code; //소유주 등록 구분 코드 + private String updt_dt; //수정 일시 + private String updusr; //수정자 + + + + //tb_erpp + private String erpp_id; + private String erpp_process_de; + private String erpp_resn_code; + private String erpp_resn_detail; + private String answer_at; + private String answer_cn; +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/service/FimsTotalPopupService.java b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/service/FimsTotalPopupService.java new file mode 100644 index 00000000..23f16623 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/service/FimsTotalPopupService.java @@ -0,0 +1,9 @@ +package kr.xit.fims.biz.cmm.fimsTotalPopup.service; + + +import kr.xit.fims.biz.cmm.FimsServiceStrategy; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupSearchVO; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupVO; + +public interface FimsTotalPopupService extends FimsServiceStrategy { +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/service/impl/FimsTotalPopupServiceImpl.java b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/service/impl/FimsTotalPopupServiceImpl.java new file mode 100644 index 00000000..1b198e7c --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/service/impl/FimsTotalPopupServiceImpl.java @@ -0,0 +1,52 @@ +package kr.xit.fims.biz.cmm.fimsTotalPopup.service.impl; + +import kr.xit.fims.biz.cmm.fimsTotalPopup.mapper.FimsTotalPopupMapper; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupSearchVO; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupVO; +import kr.xit.fims.biz.cmm.fimsTotalPopup.service.FimsTotalPopupService; +import lombok.RequiredArgsConstructor; +import org.apache.ibatis.session.RowBounds; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.sql.SQLException; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class FimsTotalPopupServiceImpl implements FimsTotalPopupService { + + private final FimsTotalPopupMapper fimsTotalPopupMapper; + + @Override + public List findList(FimsTotalPopupSearchVO searchVO, RowBounds rowBounds) { + return null; + } + + + @Override + public FimsTotalPopupVO findView(FimsTotalPopupVO vo) { + return fimsTotalPopupMapper.findView(vo); + } + + @Override + public void addProc(FimsTotalPopupVO vo) { + + } + + @Override + public void modifyProc(FimsTotalPopupVO vo) { + + + //단속정보 수정 + fimsTotalPopupMapper.modifyProc(vo); + //소유자 수정 + fimsTotalPopupMapper.modifyProcOwner(vo); + + } + + @Override + public void removeProc(FimsTotalPopupVO vo) { + + } +} diff --git a/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/web/FimsTotalPopupController.java b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/web/FimsTotalPopupController.java new file mode 100644 index 00000000..c0a5617e --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/cmm/fimsTotalPopup/web/FimsTotalPopupController.java @@ -0,0 +1,82 @@ +package kr.xit.fims.biz.cmm.fimsTotalPopup.web; + + +import kr.xit.fims.biz.cmm.FimsConst; +import kr.xit.fims.biz.cmm.fimsTotalPopup.model.FimsTotalPopupVO; +import kr.xit.fims.biz.cmm.fimsTotalPopup.service.FimsTotalPopupService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.validation.XitBeanValidator; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * + *
    + *
  • 업무 그룹명: 단속자료 현황
  • + *
  • 설 명: 단속자료 현황을 조회한다
  • + *
  • 작성일: 2022. 09. 14. + *
+ * + * @author 최정민 + * + */ +@Slf4j +@AllArgsConstructor +@Controller +@RequestMapping("/cmm/fimsPopup") +public class FimsTotalPopupController { + + private final XitMessageSource xitMessageSource; + + private final FimsTotalPopupService fimsTotalPopupService; + + private final XitBeanValidator xitBeanValidator; + + + /** + *
메소드 설명: 단건 자료 상세 조회
+ * @param selectedId + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 20. + */ + @GetMapping(value = "/fimsTotalPopup.do") + public String popup(@RequestParam String selectedId, FimsTotalPopupVO vo, Model model){ + + vo.setReglt_id(selectedId); + + + + + vo = fimsTotalPopupService.findView(vo); + model.addAttribute("contents",vo); + + return FimsConst.FIMS_JSP_BASE_PATH + +"common/popup/fimsTotal" + +"_"+new Object() {}.getClass().getEnclosingMethod().getName() + +".fims-pop"; //메소드명 + } + + + @PutMapping(value="update.do") + public String update(@RequestBody FimsTotalPopupVO vo, FimsTotalPopupVO fimsTotalPopupVO, BindingResult bindingResult){ + + xitBeanValidator.validate(vo, bindingResult); + vo.getReglt_id(); + fimsTotalPopupService.modifyProc(vo); + + + return "jsonView"; + } + + @DeleteMapping(value="delete.do") + public String delete(){ + return "jsonView"; + } + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/model/SendRqstMngSearchVO.java b/src/main/java/kr/xit/fims/biz/ens/adm/model/SendRqstMngSearchVO.java new file mode 100644 index 00000000..68da15ec --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/model/SendRqstMngSearchVO.java @@ -0,0 +1,71 @@ +package kr.xit.fims.biz.ens.adm.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +public class SendRqstMngSearchVO extends XitBaseSearchVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + private String sch_date_opt; //날짜검색옵션 + private String sch_date_from; //날짜검색_시작 + private String sch_date_to; //날짜검색_끝 + private String sch_search_sndng_process_sttus; //발송처리상태 + private String sch_search_word; //검색 + private String sch_search_word_opt; //검색어_옵션 + + private String elctrn_ntic_sndng_id; + + + + public String getSch_search_date_from() { + return sch_date_from; + } + public void setSch_search_date_from(String sch_date_from) { + this.sch_date_from = sch_date_from; + } + public String getSch_search_date_to() { + return sch_date_to; + } + public void setSch_search_date_to(String sch_date_to) { + this.sch_date_to = sch_date_to; + } + public String getSch_search_word() { + return sch_search_word; + } + public void setSch_search_word(String sch_search_word) { + this.sch_search_word = sch_search_word; + } + public String getSch_search_date_opt() { + return sch_date_opt; + } + public void setSch_search_date_opt(String sch_date_opt) { + this.sch_date_opt = sch_date_opt; + } + public String getSch_search_sndng_process_sttus() { + return sch_search_sndng_process_sttus; + } + public void setSch_search_sndng_process_sttus(String sch_search_sndng_process_sttus) { + this.sch_search_sndng_process_sttus = sch_search_sndng_process_sttus; + } + public String getSch_search_word_opt() { + return sch_search_word_opt; + } + public void setSch_search_word_opt(String sch_search_word_opt) { + this.sch_search_word_opt = sch_search_word_opt; + } + public String getElctrn_ntic_sndng_id() { + return elctrn_ntic_sndng_id; + } + public void setElctrn_ntic_sndng_id(String elctrn_ntic_sndng_id) { + this.elctrn_ntic_sndng_id = elctrn_ntic_sndng_id; + } + + + + + + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/model/SendRqstMngVO.java b/src/main/java/kr/xit/fims/biz/ens/adm/model/SendRqstMngVO.java new file mode 100644 index 00000000..3a75ee68 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/model/SendRqstMngVO.java @@ -0,0 +1,219 @@ +package kr.xit.fims.biz.ens.adm.model; + +import kr.xit.framework.core.model.BaseVO; + +public class SendRqstMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + private String elctrn_ntic_sndng_id; //전자_고지_발송_ID + private String nht_tmplat_id; //고지서_템플릿_ID + private String sndng_process_sttus; //발송_처리_상태 + private String regist_dt; //접수_일시 + private String sendng_ty_code; //접수_일시 + private String sndng_co; //발송건수 + private String sndng_dt; //발송_일시 + private String clos_dt; //마감_일시 + private String nht_nm; //통지서_이름 + private String main_code; //코드 + private String elctrn_ntic_sndng_detail_id; //전자_고지_발송_디테일_ID + private String signgu_code; //시군구_코드 + private String signgu_code_nm; //시군구_코드명 + private String ihidnum; //주민등록번호 + private String cn_detail; //내용_상세 + private String mobile_page_cn; //모바일_내용_상세 + private String register; //작성자 + private String updt_dt; //수정_일자 + private String updusr; //수정자 + + + + private String requst_dt; //요청_일시 + private String inqire_dt; //조회_일시 + private String readng_dt; //열람_일시 + private String sndng_result_code; //발송_결과_코드 + private String error_cn; //오류내용 + + private String mm_carno; //차량번호 + private String om_name; //미납자명 + + private String search_code; //검색조건 code + private String search_code_nm; //검색조건 code 명 + + + + + public String getElctrn_ntic_sndng_id() { + return elctrn_ntic_sndng_id; + } + public void setElctrn_ntic_sndng_id(String elctrn_ntic_sndng_id) { + this.elctrn_ntic_sndng_id = elctrn_ntic_sndng_id; + } + public String getNht_tmplat_id() { + return nht_tmplat_id; + } + public void setNht_tmplat_id(String nht_tmplat_id) { + this.nht_tmplat_id = nht_tmplat_id; + } + public String getRegist_dt() { + return regist_dt; + } + public void setRegist_dt(String regist_dt) { + this.regist_dt = regist_dt; + } + public String getSndng_dt() { + return sndng_dt; + } + public void setSndng_dt(String sndng_dt) { + this.sndng_dt = sndng_dt; + } + public String getClos_dt() { + return clos_dt; + } + public void setClos_dt(String clos_dt) { + this.clos_dt = clos_dt; + } + public String getNht_nm() { + return nht_nm; + } + public void setNht_nm(String nht_nm) { + this.nht_nm = nht_nm; + } + public String getMain_code() { + return main_code; + } + public void setMain_code(String main_code) { + this.main_code = main_code; + } + public String getElctrn_ntic_sndng_detail_id() { + return elctrn_ntic_sndng_detail_id; + } + public void setElctrn_ntic_sndng_detail_id(String elctrn_ntic_sndng_detail_id) { + this.elctrn_ntic_sndng_detail_id = elctrn_ntic_sndng_detail_id; + } + public String getSigngu_code() { + return signgu_code; + } + public void setSigngu_code(String signgu_code) { + this.signgu_code = signgu_code; + } + public String getIhidnum() { + return ihidnum; + } + public void setIhidnum(String ihidnum) { + this.ihidnum = ihidnum; + } + public String getCn_detail() { + return cn_detail; + } + public void setCn_detail(String cn_detail) { + this.cn_detail = cn_detail; + } + public String getMobile_page_cn() { + return mobile_page_cn; + } + public void setMobile_page_cn(String mobile_page_cn) { + this.mobile_page_cn = mobile_page_cn; + } + public String getRegister() { + return register; + } + public void setRegister(String register) { + this.register = register; + } + public String getUpdt_dt() { + return updt_dt; + } + public void setUpdt_dt(String updt_dt) { + this.updt_dt = updt_dt; + } + public String getUpdusr() { + return updusr; + } + public void setUpdusr(String updusr) { + this.updusr = updusr; + } + public String getSndng_process_sttus() { + return sndng_process_sttus; + } + public void setSndng_process_sttus(String sndng_process_sttus) { + this.sndng_process_sttus = sndng_process_sttus; + } + public String getRequst_dt() { + return requst_dt; + } + public void setRequst_dt(String requst_dt) { + this.requst_dt = requst_dt; + } + public String getInqire_dt() { + return inqire_dt; + } + public void setInqire_dt(String inqire_dt) { + this.inqire_dt = inqire_dt; + } + public String getReadng_dt() { + return readng_dt; + } + public void setReadng_dt(String readng_dt) { + this.readng_dt = readng_dt; + } + public String getSndng_result_code() { + return sndng_result_code; + } + public void setSndng_result_code(String sndng_result_code) { + this.sndng_result_code = sndng_result_code; + } + public String getSndng_co() { + return sndng_co; + } + public void setSndng_co(String sndng_co) { + this.sndng_co = sndng_co; + } + public String getSendng_ty_code() { + return sendng_ty_code; + } + public void setSendng_ty_code(String sendng_ty_code) { + this.sendng_ty_code = sendng_ty_code; + } + public String getSigngu_code_nm() { + return signgu_code_nm; + } + public void setSigngu_code_nm(String signgu_code_nm) { + this.signgu_code_nm = signgu_code_nm; + } + public String getError_cn() { + return error_cn; + } + public void setError_cn(String error_cn) { + this.error_cn = error_cn; + } + public String getMm_carno() { + return mm_carno; + } + public void setMm_carno(String mm_carno) { + this.mm_carno = mm_carno; + } + public String getOm_name() { + return om_name; + } + public void setOm_name(String om_name) { + this.om_name = om_name; + } + public String getSearch_code() { + return search_code; + } + public void setSearch_code(String search_code) { + this.search_code = search_code; + } + public String getSearch_code_nm() { + return search_code_nm; + } + public void setSearch_code_nm(String search_code_nm) { + this.search_code_nm = search_code_nm; + } + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/model/StatsBySignTalkByYearSearchVO.java b/src/main/java/kr/xit/fims/biz/ens/adm/model/StatsBySignTalkByYearSearchVO.java new file mode 100644 index 00000000..ed783c97 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/model/StatsBySignTalkByYearSearchVO.java @@ -0,0 +1,38 @@ +package kr.xit.fims.biz.ens.adm.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +public class StatsBySignTalkByYearSearchVO extends XitBaseSearchVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + private String sch_search_signgu_code; //시군구_코드 + private String sch_date_from; //조회기간_from + private String sch_date_to; //조회기간_to + + + + + public String getSch_search_date_from() { + return sch_date_from; + } + public void setSch_search_date_from(String sch_date_from) { + this.sch_date_from = sch_date_from; + } + public String getSch_search_date_to() { + return sch_date_to; + } + public void setSch_search_date_to(String sch_date_to) { + this.sch_date_to = sch_date_to; + } + public String getSch_search_signgu_code() { + return sch_search_signgu_code; + } + public void setSch_search_signgu_code(String sch_search_signgu_code) { + this.sch_search_signgu_code = sch_search_signgu_code; + } + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/model/StatsBySignTalkByYearVO.java b/src/main/java/kr/xit/fims/biz/ens/adm/model/StatsBySignTalkByYearVO.java new file mode 100644 index 00000000..f1e140df --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/model/StatsBySignTalkByYearVO.java @@ -0,0 +1,105 @@ +package kr.xit.fims.biz.ens.adm.model; + +import kr.xit.framework.core.model.BaseVO; + +public class StatsBySignTalkByYearVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + private String signgu_code; //시군구_코드 + private String signgu_code_nm; //시군구_명 + private String sndng_co; //발송_건수 + private String sndng_co_success; //발송_건수_성공 + private String sndng_co_fail; //발송_건수_실패 + private String inqire_dt; //조회_일시 + private String inqire_dt_count; //조회_일시_conut + private String readng_dt; //열람_일시 + private String readng_dt_count; //열람_일시_count + private String sndng_dt; //발송_일시 + private String nht_tmplat_id; //통지서ID + private String nht_nm; //통지서명 + private String sndng_year; //연도 + + public String getSndng_co() { + return sndng_co; + } + public void setSndng_co(String sndng_co) { + this.sndng_co = sndng_co; + } + public String getInqire_dt() { + return inqire_dt; + } + public void setInqire_dt(String inqire_dt) { + this.inqire_dt = inqire_dt; + } + public String getReadng_dt() { + return readng_dt; + } + public void setReadng_dt(String readng_dt) { + this.readng_dt = readng_dt; + } + public String getInqire_dt_count() { + return inqire_dt_count; + } + public void setInqire_dt_count(String inqire_dt_count) { + this.inqire_dt_count = inqire_dt_count; + } + public String getReadng_dt_count() { + return readng_dt_count; + } + public void setReadng_dt_count(String readng_dt_count) { + this.readng_dt_count = readng_dt_count; + } + public String getSndng_dt() { + return sndng_dt; + } + public void setSndng_dt(String sndng_dt) { + this.sndng_dt = sndng_dt; + } + public String getSigngu_code() { + return signgu_code; + } + public void setSigngu_code(String signgu_code) { + this.signgu_code = signgu_code; + } + public String getSndng_co_fail() { + return sndng_co_fail; + } + public void setSndng_co_fail(String sndng_co_fail) { + this.sndng_co_fail = sndng_co_fail; + } + public String getSndng_co_success() { + return sndng_co_success; + } + public void setSndng_co_success(String sndng_co_success) { + this.sndng_co_success = sndng_co_success; + } + public String getSigngu_code_nm() { + return signgu_code_nm; + } + public void setSigngu_code_nm(String signgu_code_nm) { + this.signgu_code_nm = signgu_code_nm; + } + public String getNht_tmplat_id() { + return nht_tmplat_id; + } + public void setNht_tmplat_id(String nht_tmplat_id) { + this.nht_tmplat_id = nht_tmplat_id; + } + public String getNht_nm() { + return nht_nm; + } + public void setNht_nm(String nht_nm) { + this.nht_nm = nht_nm; + } + public String getSndng_year() { + return sndng_year; + } + public void setSndng_year(String sndng_year) { + this.sndng_year = sndng_year; + } + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/service/SendRqstMngMapper.java b/src/main/java/kr/xit/fims/biz/ens/adm/service/SendRqstMngMapper.java new file mode 100644 index 00000000..0868d58a --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/service/SendRqstMngMapper.java @@ -0,0 +1,18 @@ +package kr.xit.fims.biz.ens.adm.service; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.fims.biz.ens.adm.model.SendRqstMngVO; +import kr.xit.fims.biz.ens.adm.model.SendRqstMngSearchVO; +import kr.xit.fims.biz.ens.cmm.struct.EnsMapperStrategy; + +@Mapper +public interface SendRqstMngMapper extends EnsMapperStrategy{ + + public List findViewList(SendRqstMngSearchVO searchVO) throws SQLException; + + public List findSndngProcessSttus(); + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/service/SendRqstMngService.java b/src/main/java/kr/xit/fims/biz/ens/adm/service/SendRqstMngService.java new file mode 100644 index 00000000..d93a37da --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/service/SendRqstMngService.java @@ -0,0 +1,16 @@ +package kr.xit.fims.biz.ens.adm.service; + +import java.util.List; + +import kr.xit.fims.biz.ens.adm.model.SendRqstMngVO; +import kr.xit.fims.biz.ens.adm.model.SendRqstMngSearchVO; +import kr.xit.fims.biz.ens.cmm.struct.EnsServiceStrategy; + + + +public interface SendRqstMngService extends EnsServiceStrategy{ + + public List findViewList(SendRqstMngSearchVO searchVO); + + public List findSndngProcessSttus(); +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/service/StatsBySignTalkByYearMapper.java b/src/main/java/kr/xit/fims/biz/ens/adm/service/StatsBySignTalkByYearMapper.java new file mode 100644 index 00000000..7bd2cd67 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/service/StatsBySignTalkByYearMapper.java @@ -0,0 +1,15 @@ +package kr.xit.fims.biz.ens.adm.service; + +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearSearchVO; +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearVO; +import kr.xit.fims.biz.ens.cmm.struct.EnsMapperStrategy; + +@Mapper +public interface StatsBySignTalkByYearMapper extends EnsMapperStrategy{ + + public List findSignguCode(); + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/service/StatsBySignTalkByYearService.java b/src/main/java/kr/xit/fims/biz/ens/adm/service/StatsBySignTalkByYearService.java new file mode 100644 index 00000000..4c4626bc --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/service/StatsBySignTalkByYearService.java @@ -0,0 +1,14 @@ +package kr.xit.fims.biz.ens.adm.service; + +import java.util.List; + +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearSearchVO; +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearVO; +import kr.xit.fims.biz.ens.cmm.struct.EnsServiceStrategy; + + + +public interface StatsBySignTalkByYearService extends EnsServiceStrategy{ + + public List findSignguCode(); +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/service/impl/SendRqstMngServiceImpl.java b/src/main/java/kr/xit/fims/biz/ens/adm/service/impl/SendRqstMngServiceImpl.java new file mode 100644 index 00000000..6bfb8e0f --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/service/impl/SendRqstMngServiceImpl.java @@ -0,0 +1,71 @@ +package kr.xit.fims.biz.ens.adm.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import org.springframework.stereotype.Service; + +import kr.xit.fims.biz.ens.adm.model.SendRqstMngSearchVO; +import kr.xit.fims.biz.ens.adm.model.SendRqstMngVO; +import kr.xit.fims.biz.ens.adm.service.SendRqstMngMapper; +import kr.xit.fims.biz.ens.adm.service.SendRqstMngService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@AllArgsConstructor +@Service +public class SendRqstMngServiceImpl implements SendRqstMngService { + + private final SendRqstMngMapper sendRqstMngMapper; + + @Override + public List findList(SendRqstMngSearchVO searchVO) { + try { + return sendRqstMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("발송예약관리 다건 조회 FAIL::", e); + } + } + + @Override + public SendRqstMngVO findView(SendRqstMngVO vo) { + try { + return sendRqstMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("발송예약관리 단건 조회 FAIL::", e); + } + } + + @Override + public List findViewList(SendRqstMngSearchVO searchVO) { + + try { + return sendRqstMngMapper.findViewList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("발송예약관리 팝업 다건 조회 FAIL::", e); + } + } + + @Override + public void addProc(SendRqstMngVO vo) { + sendRqstMngMapper.addProc(vo); + } + + @Override + public void modifyProc(SendRqstMngVO vo) { + sendRqstMngMapper.modifyProc(vo); + } + + @Override + public void removeProc(SendRqstMngVO vo) { + sendRqstMngMapper.removeProc(vo); + } + + @Override + public List findSndngProcessSttus() { + return sendRqstMngMapper.findSndngProcessSttus(); + } + + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/service/impl/StatsBySignTalkByYearServiceImpl.java b/src/main/java/kr/xit/fims/biz/ens/adm/service/impl/StatsBySignTalkByYearServiceImpl.java new file mode 100644 index 00000000..283758b1 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/service/impl/StatsBySignTalkByYearServiceImpl.java @@ -0,0 +1,60 @@ +package kr.xit.fims.biz.ens.adm.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearSearchVO; +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearVO; +import kr.xit.fims.biz.ens.adm.service.StatsBySignTalkByYearMapper; +import kr.xit.fims.biz.ens.adm.service.StatsBySignTalkByYearService; + +@Service +public class StatsBySignTalkByYearServiceImpl implements StatsBySignTalkByYearService { + + @Resource + private StatsBySignTalkByYearMapper statsBySignTalkByYearMapper; + + + @Override + public List findList(StatsBySignTalkByYearSearchVO searchVO) { + try { + return statsBySignTalkByYearMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("인증톡 연도별 통계 다건 조회 FAIL::", e); + } + } + + @Override + public StatsBySignTalkByYearVO findView(StatsBySignTalkByYearVO vo) { + try { + return statsBySignTalkByYearMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("인증톡 연도별 통계 단건 조회 FAIL::", e); + } + } + + @Override + public void addProc(StatsBySignTalkByYearVO vo) { + statsBySignTalkByYearMapper.addProc(vo); + } + + @Override + public void modifyProc(StatsBySignTalkByYearVO vo) { + statsBySignTalkByYearMapper.modifyProc(vo); + } + + @Override + public void removeProc(StatsBySignTalkByYearVO vo) { + statsBySignTalkByYearMapper.removeProc(vo); + } + + @Override + public List findSignguCode() { + return statsBySignTalkByYearMapper.findSignguCode(); + } + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/web/SendRqstMngController.java b/src/main/java/kr/xit/fims/biz/ens/adm/web/SendRqstMngController.java new file mode 100644 index 00000000..e9dc17a8 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/web/SendRqstMngController.java @@ -0,0 +1,364 @@ +package kr.xit.fims.biz.ens.adm.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.security.access.AccessDeniedException; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.fims.biz.ens.adm.model.SendRqstMngSearchVO; +import kr.xit.fims.biz.ens.adm.model.SendRqstMngVO; +import kr.xit.fims.biz.ens.adm.service.SendRqstMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.validation.XitBeanValidator; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import kr.xit.fims.biz.ens.cmm.EnsConst; + +/** + * + *
    + *
  • 업무 그룹명: 발송예약관리
  • + *
  • 설 명: 발송 요청 자료들을 관리 한다.
  • + *
  • 작성일: 2021. 9. 16. 오후 6:51:43 + *
+ * + * @author 박민규 + * + */ +@Slf4j +@AllArgsConstructor +@Controller +@RequestMapping("/adm/send/rqst/mng/") +public class SendRqstMngController { + + private final XitMessageSource xitMessageSource; + + private final SendRqstMngService sendRqstMngService; + + private final XitBeanValidator xitBeanValidator; + + /** + *
메소드 설명: 메인 페이지
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 16. + */ + @GetMapping(value = "main.do") + public String main(HttpServletRequest req, Model model) { + List searchCodeList = sendRqstMngService.findSndngProcessSttus(); + model.addAttribute("searchCodeList", searchCodeList); + return EnsConst.JSP_BASE_PATH + +"adm/SendRqstMng" + +"_"+new Object() {}.getClass().getEnclosingMethod().getName() //메소드명 + +".ens"; //tiles 타입 + } + + + + /** + *
메소드 설명: 자료 검색
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 16. + */ + @GetMapping(value = "finds.do") + public String finds(HttpServletRequest req, Model model, SendRqstMngSearchVO searchVO) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + try { + /** + * 조회 + */ + List list = sendRqstMngService.findList(searchVO); + + final int totCnt = list.size()>0 ? list.get(0).getTot_cnt() : list.size(); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + model.addAttribute("result", true); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", list); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + model.addAttribute("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (AccessDeniedException e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + model.addAttribute("result", false); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("custom.fail.accessDenied")); //[tui Grid] result message + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + model.addAttribute("result", false); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return FrameworkConstants.JSON_VIEW; + } + + + /** + *
메소드 설명: 자료 단건 검색 팝업 페이지
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 16. + */ + @GetMapping(value = "detail.do") + public String detail(HttpServletRequest req, Model model, SendRqstMngVO sendRqstMngVO) { + + String elctrn_ntic_sndng_id = req.getParameter("selectedId"); + sendRqstMngVO.setElctrn_ntic_sndng_id(elctrn_ntic_sndng_id); + + //단건조회 서비스호출 + sendRqstMngVO = sendRqstMngService.findView(sendRqstMngVO); + + model.addAttribute("contents", sendRqstMngVO); + log.info("========"+sendRqstMngVO.getNht_nm()); + + + return EnsConst.JSP_BASE_PATH + +"adm/SendRqstMng" + +"_"+new Object() {}.getClass().getEnclosingMethod().getName() //메소드명 + +".ens-pop"; //tiles 타입 + + } + + /** + *
메소드 설명: 자료 단건 검색
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 16. + */ + @GetMapping(value = "find.do") + public String find(HttpServletRequest req, Model model, SendRqstMngSearchVO searchVO, SendRqstMngVO sendRqstMngVO) { + +// String elctrn_ntic_sndng_id = req.getParameter("elctrn_ntic_sndng_id"); +// sendRqstMngVO.setElctrn_ntic_sndng_id(elctrn_ntic_sndng_id); + + /** paging */ + + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + try { + + //sendRqstMngVO.setElctrn_ntic_sndng_id(req.getParameter("elctrn_ntic_sndng_id")); + + /** + * 조회 + */ +// List list = sendRqstMngService.findViewList(sendRqstMngVO); + List list = sendRqstMngService.findViewList(searchVO); + + final int totCnt = list.size()>0 ? list.get(0).getTot_cnt() : list.size(); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + model.addAttribute("result", true); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", list); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + model.addAttribute("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (AccessDeniedException e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + model.addAttribute("result", false); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("custom.fail.accessDenied")); //[tui Grid] result message + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + model.addAttribute("result", false); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + + return FrameworkConstants.JSON_VIEW; + + } + + + /** + *
메소드 설명: 등록 처리
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 16. + */ + @PostMapping(value = "proc.do") + public String insert(HttpServletRequest req, Model model) { + + + + + return FrameworkConstants.JSON_VIEW; + } + + + /** + *
메소드 설명: 수정 처리
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 16. + */ + @PutMapping(value = "proc.do") + public String update(@RequestBody SendRqstMngVO vo, HttpServletRequest req, Model model, SendRqstMngVO sendRqstMngVO, BindingResult bindingResult) { + + String elctrn_ntic_sndng_id = req.getParameter("selectedId"); + sendRqstMngVO.setElctrn_ntic_sndng_id(elctrn_ntic_sndng_id); + + /** + * 유효성 검증 + */ + xitBeanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { //유효성검증에 실패 했을 경우.. + model.addAttribute("result", "fail"); + model.addAttribute("message", xitMessageSource.getMessage("fail.common.insert")); + model.addAttribute("errors", bindingResult.getFieldErrors()); + return FrameworkConstants.JSON_VIEW; + } + + + /** + * 수정 서비스 호출 + */ + try { + sendRqstMngService.modifyProc(vo); + model.addAttribute("result", "success"); + model.addAttribute("message", xitMessageSource.getMessage("success.common.insert")); + } catch (Exception e) { + model.addAttribute("result", "fail"); + model.addAttribute("message", xitMessageSource.getMessage("fail.common.insert")); + model.addAttribute("errors", e.getMessage()); + } + + + + return FrameworkConstants.JSON_VIEW; + } + + + + /** + *
메소드 설명: 엑셀 저장
+ * @param m + * @param response + * @author: 최정민 + * @throws Exception + * @date: 2021. 10. 14. + */ + /** + * 수정일 : 2022.04.22 + * 수정자 : 최정민 + * 내용 : 엑셀저장기능 그리드엑셀저장으로 대체 + */ +/* + @GetMapping(value="excel.do") + public String excel(HttpServletRequest request, HttpServletResponse response, ModelMap model, SendRqstMngSearchVO searchVO, SendRqstMngVO vo) throws Exception { + response.setHeader("Content-disposition", "attachment; filename=" + XitCmmnUtil.getFileNameForDownload(request, "엑셀파일 저장.xlsx")); + + String elctrn_ntic_sndng_id = request.getParameter("elctrn_ntic_sndng_id"); + vo.setElctrn_ntic_sndng_id(elctrn_ntic_sndng_id); + + if(elctrn_ntic_sndng_id == null) { + StringBuffer columns = new StringBuffer(); //jsonArray 포맷 String으로 작성 + columns.append("[") + .append(",{\"title\" : \"기관명\", \"name\" : \"signgu_code_nm\"}") + .append(",{\"title\" : \"통지서명\", \"name\" : \"nht_nm\"}") + .append(",{\"title\" : \"발송처리상태\", \"name\" : \"sndng_process_sttus\"}") + .append(",{\"title\" : \"발송건수\", \"name\" : \"sndng_co\"}") + .append(",{\"title\" : \"발송일시\", \"name\" : \"sndng_dt\"}") + .append(",{\"title\" : \"마감일시\", \"name\" : \"clos_dt\"}") + .append("]"); + + List list = sendRqstMngService.findList(searchVO); //contents + + logger.debug("EXCEL LIST : " + list); + + model.put("header", columns.toString()); + model.put("contents", list); + + } else { + + StringBuffer columns = new StringBuffer(); //jsonArray 포맷 String으로 작성 + columns.append("[") + .append("{\"title\" : \"미납자\", \"name\" : \"om_name\"}") + .append(",{\"title\" : \"주민등록번호\", \"name\" : \"ihidnum\"}") + .append(",{\"title\" : \"차량번호\", \"name\" : \"mm_carno\"}") + .append(",{\"title\" : \"등록일시\", \"name\" : \"regist_dt\"}") + .append(",{\"title\" : \"요청일시\", \"name\" : \"requst_dt\"}") + .append(",{\"title\" : \"조회일시\", \"name\" : \"inqire_dt\"}") + .append(",{\"title\" : \"열람일시\", \"name\" : \"readng_dt\"}") + .append(",{\"title\" : \"오류내용\", \"name\" : \"error_cn\"}") + .append(",{\"title\" : \"발송결과\", \"name\" : \"sndng_result_code\"}") + .append("]"); + + List list = sendRqstMngService.findViewList(searchVO); //contents + + logger.debug("EXCEL LIST : " + list); + + model.put("header", columns.toString()); + model.put("contents", list); + } + + return "excelView"; + }*/ +} diff --git a/src/main/java/kr/xit/fims/biz/ens/adm/web/StatsBySignTalkByYearController.java b/src/main/java/kr/xit/fims/biz/ens/adm/web/StatsBySignTalkByYearController.java new file mode 100644 index 00000000..197b5787 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/adm/web/StatsBySignTalkByYearController.java @@ -0,0 +1,218 @@ +package kr.xit.fims.biz.ens.adm.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearSearchVO; +import kr.xit.fims.biz.ens.adm.model.StatsBySignTalkByYearVO; +import kr.xit.fims.biz.ens.adm.service.StatsBySignTalkByYearService; +import kr.xit.fims.biz.ens.cmm.EnsConst; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * + *
    + *
  • 업무 그룹명: 중계사업자별 연계관
  • + *
  • 설 명: 중계사업자별 연계를 관리 한다.
  • + *
  • 작성일: 2021. 9. 17. 오후 6:51:43 + *
+ * + * @author 최정민 + * + */ +@Slf4j +@AllArgsConstructor +@Controller +@RequestMapping("/adm/stats/by/sign/talk/by/year/") +public class StatsBySignTalkByYearController { + + + private final XitMessageSource xitMessageSource; + + private final StatsBySignTalkByYearService statsBySignTalkByYearService; + + /** + *
메소드 설명: 메인 페이지
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2021. 9. 27. + */ + @GetMapping(value = "main.do") + public String main(HttpServletRequest req, Model model) { + List searchSignguCodeList = statsBySignTalkByYearService.findSignguCode(); + model.addAttribute("searchSignguCodeList", searchSignguCodeList); + return EnsConst.JSP_BASE_PATH + +"adm/StatsBySignTalkByYear" + +"_"+new Object() {}.getClass().getEnclosingMethod().getName() //메소드명 + +".ens"; //tiles 타입 + } + + /** + *
메소드 설명: 자료 검색
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2021. 9. 27. + */ + @GetMapping(value = "finds.do") + public String finds(HttpServletRequest req, Model model, StatsBySignTalkByYearSearchVO searchVO) { + + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + try { + /** + * 조회 + */ + List list = statsBySignTalkByYearService.findList(searchVO); + final int totCnt = list.size()>0 ? list.get(0).getTot_cnt() : list.size(); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + model.addAttribute("result", true); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", list); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + model.addAttribute("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + model.addAttribute("result", false); //[tui Grid] result + model.addAttribute("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return FrameworkConstants.JSON_VIEW; + } + + + /** + *
메소드 설명: 자료 단건 검색
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2021. 9. 27. + */ + @GetMapping(value = "find.do") + public String find(HttpServletRequest req, Model model, StatsBySignTalkByYearSearchVO searchVO) { + return FrameworkConstants.JSON_VIEW; + } + + + /** + *
메소드 설명: 등록 처리
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2021. 9. 27. + */ + @PostMapping(value = "proc.do") + public String insert(HttpServletRequest req, Model model) { + + + return FrameworkConstants.JSON_VIEW; + } + + + /** + *
메소드 설명: 수정 처리
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2021. 9. 27. + */ + @PutMapping(value = "proc.do") + public String update(HttpServletRequest req, Model model) { + + + return FrameworkConstants.JSON_VIEW; + } + + + /** + *
메소드 설명: 삭제 처리
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2021. 9. 27. + */ + @DeleteMapping(value = "proc.do") + public String delete(HttpServletRequest req, Model model) { + + + return FrameworkConstants.JSON_VIEW; + } + + /** + *
메소드 설명: 엑셀 저장
+ * @param request HttpServletRequest + * @param response HttpServletResponse + * @author: 최정민 + * @throws Exception + * @date: 2021. 10. 14. + */ + @GetMapping(value="excel.do") + public String excel(HttpServletRequest request, HttpServletResponse response, ModelMap model, StatsBySignTalkByYearSearchVO searchVO) throws Exception { + response.setHeader("Content-disposition", "attachment; filename=" + XitCmmnUtil.getFileNameForDownload(request, "엑셀파일 저장.xlsx")); + + StringBuffer columns = new StringBuffer(); //jsonArray 포맷 String으로 작성 + columns.append("[") + .append("{\"title\" : \"기관명\", \"name\" : \"signgu_code_nm\"}") + .append(",{\"title\" : \"통지서명\", \"name\" : \"nht_nm\"}") + .append(",{\"title\" : \"연도\", \"name\" : \"sndng_year\"}") + .append(",{\"title\" : \"발송건수\", \"name\" : \"sndng_co\"}") + .append(",{\"title\" : \"발송성공\", \"name\" : \"sndng_co_success\"}") + .append(",{\"title\" : \"열람\", \"name\" : \"readng_dt_count\"}") + .append(",{\"title\" : \"발송실패\", \"name\" : \"sndng_co_fail\"}") + .append("]"); + + List list = statsBySignTalkByYearService.findList(searchVO); //contents + + + log.debug("EXCEL LIST : " + list); + + model.put("header", columns.toString()); + model.put("contents", list); + + return "excelView"; + } + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/cmm/EnsCmmnUtil.java b/src/main/java/kr/xit/fims/biz/ens/cmm/EnsCmmnUtil.java new file mode 100644 index 00000000..0d9172ae --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/cmm/EnsCmmnUtil.java @@ -0,0 +1,7 @@ +package kr.xit.fims.biz.ens.cmm; + +import kr.xit.framework.core.utils.XitCmmnUtil; + +public class EnsCmmnUtil extends XitCmmnUtil{ + +} diff --git a/src/main/java/kr/xit/fims/biz/ens/cmm/EnsConst.java b/src/main/java/kr/xit/fims/biz/ens/cmm/EnsConst.java new file mode 100644 index 00000000..6f64bcd4 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/cmm/EnsConst.java @@ -0,0 +1,10 @@ +package kr.xit.fims.biz.ens.cmm; + + +public class EnsConst { + + /** + * JSP파일 BASE PATH + */ + public static final String JSP_BASE_PATH = "/fims/biz/"; +} diff --git a/src/main/java/kr/xit/fims/biz/ens/cmm/struct/EnsMapperStrategy.java b/src/main/java/kr/xit/fims/biz/ens/cmm/struct/EnsMapperStrategy.java new file mode 100644 index 00000000..24b34336 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/cmm/struct/EnsMapperStrategy.java @@ -0,0 +1,51 @@ +package kr.xit.fims.biz.ens.cmm.struct; + +import java.sql.SQLException; +import java.util.List; + +public interface EnsMapperStrategy { + + /** + *
메소드 설명: 다건 조회
+ * @param searchVO + * @return + * @throws SQLException List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 17. + */ + public List findList(P searchVO) throws SQLException; + + /** + *
메소드 설명: 단건 조회
+ * @param searchVO + * @return + * @throws SQLException T 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 17. + */ + public T findView(T vo) throws SQLException; + + /** + *
메소드 설명: 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 17. + */ + public void addProc(T vo); + + /** + *
메소드 설명: 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 17. + */ + public void modifyProc(T vo); + + /** + *
메소드 설명: 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 17. + */ + public void removeProc(T vo); +} diff --git a/src/main/java/kr/xit/fims/biz/ens/cmm/struct/EnsServiceStrategy.java b/src/main/java/kr/xit/fims/biz/ens/cmm/struct/EnsServiceStrategy.java new file mode 100644 index 00000000..8f27a73c --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ens/cmm/struct/EnsServiceStrategy.java @@ -0,0 +1,16 @@ +package kr.xit.fims.biz.ens.cmm.struct; + +import java.util.List; + +public interface EnsServiceStrategy { + + public List findList(P searchVO); + + public T findView(T vo); + + public void addProc(T vo); + + public void modifyProc(T vo); + + public void removeProc(T vo); +} diff --git a/src/main/java/kr/xit/fims/biz/rt/rt0200/mapper/Rt0200Mapper.java b/src/main/java/kr/xit/fims/biz/rt/rt0200/mapper/Rt0200Mapper.java new file mode 100644 index 00000000..7ff10911 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/rt/rt0200/mapper/Rt0200Mapper.java @@ -0,0 +1,25 @@ +package kr.xit.fims.biz.rt.rt0200.mapper; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import kr.xit.fims.biz.cmm.FimsMapperStrategy; +import kr.xit.fims.biz.rt.rt0200.model.Rt0200SearchVO; +import kr.xit.fims.biz.rt.rt0200.model.Rt0200VO; +import org.apache.ibatis.session.RowBounds; + +@Mapper +//public interface Rt0200Mapper extends FimsMapperStrategy { +public interface Rt0200Mapper { + + // 목록조회 + public List findList(Map map); + + // 목록조회 (페이징) + public List findList(Map map, RowBounds rowBounds); + + public List findSndngProcessSttus(); +} diff --git a/src/main/java/kr/xit/fims/biz/rt/rt0200/model/Rt0200SearchVO.java b/src/main/java/kr/xit/fims/biz/rt/rt0200/model/Rt0200SearchVO.java new file mode 100644 index 00000000..f1f1e353 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/rt/rt0200/model/Rt0200SearchVO.java @@ -0,0 +1,15 @@ +package kr.xit.fims.biz.rt.rt0200.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; +import lombok.Data; + +@Data +public class Rt0200SearchVO extends XitBaseSearchVO { + + private String sch_date_opt; + private String sch_date_from; + private String sch_date_to; + private String sch_word; + private String sch_opt; + +} diff --git a/src/main/java/kr/xit/fims/biz/rt/rt0200/model/Rt0200VO.java b/src/main/java/kr/xit/fims/biz/rt/rt0200/model/Rt0200VO.java new file mode 100644 index 00000000..75f52815 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/rt/rt0200/model/Rt0200VO.java @@ -0,0 +1,87 @@ +package kr.xit.fims.biz.rt.rt0200.model; + +import kr.xit.framework.core.model.BaseVO; +import lombok.Data; + +@Data +public class Rt0200VO extends BaseVO { + + //tb_reglt + private String reglt_id; + private String signgu_code; + private String ffnlg_code; + private String reglt_regist_se_code; + private String violt_se_code; + private String violt_de; + private String violt_begin_time; + private String violt_end_time; + private String violt_lrg_code; + private String violt_cn_code; + private String violt_place; + private String violt_co; + private String violt_legaldong_code; + private String violt_crdnt_x; + private String violt_crdnt_y; + private String sttemnt_sj; + private String sttemnt_cn; + private String aplcnt_cttpc; + private String towng_at_code; + private String stickr_no; + private String image_nmrs; + private String image_se_code; + private String mvp_filenm; + private String vhcle_no; + private String vhcle_nm; + private String vhcle_se_code; + private String vhcty_code; + private String vin; + private String redution_amount; + private String redution_aft_amount; + private String rciv_amount; + private String rdcamt; + private String adamt; + private String dicary_notie_sndng_de; + private String dicary_notie_dedt_de; + private String specl_reglt_zone_code; + private String parkng_posbl_code; + private String opinion_statmnt_at; + private String spcmnt_matter; + private String reglt_process_sttus_code; + private String owner_id; + private String rergist_bfe_reglt_id; + private String regist_dt; + private String register; + private String last_process_dt; + private String last_opetr; + + //tb_owner + private String owner_nm; + private String owner_se_code; + private String ihidnum_premanli; + private String ihidnum; + private String adres; + private String detail_adres; + private String zip; + private String rn_code; + private String undgrnd_at; + private String buld_mnnm; + private String buld_slno; + private String buld_manage_no; + private String owner_regist_se_code; + private String updt_dt; + private String updusr; + + + //tb_erpp + private String erpp_id; + private String erpp_process_de; + private String erpp_resn_code; + private String erpp_resn_detail; + private String answer_at; + private String answer_cn; + + + + + +} diff --git a/src/main/java/kr/xit/fims/biz/rt/rt0200/service/Rt0200Service.java b/src/main/java/kr/xit/fims/biz/rt/rt0200/service/Rt0200Service.java new file mode 100644 index 00000000..e6d19a2d --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/rt/rt0200/service/Rt0200Service.java @@ -0,0 +1,17 @@ +package kr.xit.fims.biz.rt.rt0200.service; + + +import kr.xit.fims.biz.cmm.FimsServiceStrategy; +import kr.xit.fims.biz.rt.rt0200.model.Rt0200VO; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.session.RowBounds; + +public interface Rt0200Service extends FimsServiceStrategy> { + public List findList(Map paramMap, RowBounds rowBounds); + public List findSndngProcessSttus(); + +} diff --git a/src/main/java/kr/xit/fims/biz/rt/rt0200/service/impl/Rt0200ServiceImpl.java b/src/main/java/kr/xit/fims/biz/rt/rt0200/service/impl/Rt0200ServiceImpl.java new file mode 100644 index 00000000..5bf227ec --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/rt/rt0200/service/impl/Rt0200ServiceImpl.java @@ -0,0 +1,53 @@ +package kr.xit.fims.biz.rt.rt0200.service.impl; + +import kr.xit.fims.biz.rt.rt0200.mapper.Rt0200Mapper; +import kr.xit.fims.biz.rt.rt0200.model.Rt0200VO; +import kr.xit.fims.biz.rt.rt0200.service.Rt0200Service; +import lombok.RequiredArgsConstructor; + +import org.apache.ibatis.session.RowBounds; +import org.springframework.stereotype.Service; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@RequiredArgsConstructor +public class Rt0200ServiceImpl implements Rt0200Service { + + private final Rt0200Mapper rt0200Mapper; + + @Override + public List findList(Map paramMap, RowBounds rowBounds) { + return rt0200Mapper.findList(paramMap, rowBounds); + } + + @Override + public Rt0200VO findView(Rt0200VO vo) { + return null; + + } + + @Override + public void addProc(Rt0200VO vo) { + + } + + @Override + public void modifyProc(Rt0200VO vo) { + + } + + @Override + public void removeProc(Rt0200VO vo) { + + } + + @Override + public List findSndngProcessSttus() { + return null; + } + +} diff --git a/src/main/java/kr/xit/fims/biz/rt/rt0200/web/Rt0200Controller.java b/src/main/java/kr/xit/fims/biz/rt/rt0200/web/Rt0200Controller.java new file mode 100644 index 00000000..c163925d --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/rt/rt0200/web/Rt0200Controller.java @@ -0,0 +1,129 @@ +package kr.xit.fims.biz.rt.rt0200.web; + +import kr.xit.fims.biz.cmm.FimsConst; +import kr.xit.fims.biz.rt.rt0200.model.Rt0200VO; +import kr.xit.fims.biz.rt.rt0200.service.Rt0200Service; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.ResultResponse; +import kr.xit.framework.core.validation.XitBeanValidator; +import kr.xit.framework.support.mybatis.MybatisUtils; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; + +import java.util.List; +import java.util.Map; + +/** + * + *
    + *
  • 업무 그룹명: 단속자료 현황
  • + *
  • 설 명: 단속자료 현황을 조회한다
  • + *
  • 작성일: 2022. 09. 14. + *
+ * + * @author 최정민 + * + */ +@Slf4j +@Controller +//@RequestMapping("/rt/rt0200/") +@RequestMapping("/fims/biz/rt/rt0200") +@AllArgsConstructor +public class Rt0200Controller { + + private final XitMessageSource xitMessageSource; + + private final Rt0200Service rt0200Service; + + private final XitBeanValidator beanValidator; + + /** + *
메소드 설명: 메인 페이지
+ * @param req + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 09. 14. + */ + @GetMapping(value = "/rtRt0200Sel") + public ModelAndView rtRt0200Sel(HttpServletRequest req, Model model){ + ModelAndView mav = new ModelAndView(); + mav.addObject("searchCodeList", rt0200Service.findSndngProcessSttus()); + return mav; + } + + /** + *
+     *     메소드 설명: 자료 검색
+     *     Paging처리 : parameter로 Map 사용
+     *     @RequestParam 필요
+     * 
+ * @param paramMap Rt0200SearchVO + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 9. 14. + */ + //@GetMapping(value = "finds.do") + //@GetMapping(value = "finds.do", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @RequestMapping(value = "/finds", method = {RequestMethod.GET, RequestMethod.POST}) + public ModelAndView finds(@RequestParam Map paramMap) { + //RowBounds rowBounds = MybatisUtils.getPagingInfo(paramMap); + //List list = rt0200Service.findList(paramMap, rowBounds); + //return list; + + return ResultResponse.of(rt0200Service.findList(paramMap, MybatisUtils.getPagingInfo(paramMap))); + } + + // /** + // *
메소드 설명: 자료 검색
+ // * @param searchVO Rt0200SearchVO + // * @return String 요청처리 후 응답객체 + // * @author: 최정민 + // * @date: 2022. 9. 14. + // */ + // @GetMapping(value = "finds2.do") + // public ModelAndView finds(Rt0200SearchVO searchVO) { + // ModelAndView mav = new ModelAndView(XitConst.JSON_VIEW); + // + // RowBounds rowBounds = MybatisUtils.getPagingInfo(searchVO); + // List list = rt0200Service.findList(searchVO, rowBounds); + // return ResultResponse.of(list); + // } + + + // /** + // *
메소드 설명: 단건 자료 검색
+ // * @param req + // * @return String 요청처리 후 응답객체 + // * @author: 최정민 + // * @date: 2022. 9. 20. + // */ + // @GetMapping(value = "detail.do") + // public String detail(HttpServletRequest req, Rt0200VO vo, Model model){ + // + // String reglt_id = req.getParameter("selectedId"); + // vo.setReglt_id(reglt_id); + // + // vo = rt0200Service.findView(vo); + // + // model.addAttribute("contents",vo); + // + // return FimsConst.JSP_BASE_PATH + // +"rt/rt0200/Rt0200" + // +"_"+new Object() {}.getClass().getEnclosingMethod().getName() + // +".fims-pop"; //메소드명 + // } + + + +} diff --git a/src/main/java/kr/xit/fims/biz/utils/CommonUtil.java b/src/main/java/kr/xit/fims/biz/utils/CommonUtil.java new file mode 100644 index 00000000..70047506 --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/utils/CommonUtil.java @@ -0,0 +1,687 @@ +package kr.xit.fims.biz.utils; + + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CommonUtil { + /** + * OS환경이 Window일 경우 C드라이브로 변경된 경로를 리턴한다. + * @param path + * @return + */ + public static String getOsPath(String path){ + if(System.getProperty("os.name").contains("Window")){ + path="C:"+path; + } + return path; + } + + /** + *
메소드 설명: 객체가 빈(empty)값인지 확인
+	 *  -비어있으면 true 반환
+	 *  -비어있지 않으면 false 반환
+ * @param value Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 1. + */ + public static boolean isEmpty(Object value){ + if(value instanceof String){ + return value==null || value.toString().isEmpty(); + }else if(value instanceof List){ + return value==null || ((List)value).isEmpty(); + }else if(value instanceof Map){ + return value==null || ((Map)value).isEmpty(); + }else{ + return value==null; + } + } + + /** + *
메소드 설명: 객체가 빈(empty)값이 아닌지 확인
+	 *  -비어있지 않으면 true 반환
+	 *  -비어있으면 false 반환
+ * @param value Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 1. + */ + public static boolean notEmpty(Object value){ + return !isEmpty(value); + } + /** + *
메소드 설명: 객체가 빈(empty)값이 아닌지 확인
+	 * 	-비어있지 않으면 true 반환
+	 * 	-비어있으면 false 반환
+	 *  ※기본적으로 notEmpty()와 동일하나 String 타입인 경우 
+	 *  	->value가 공백("")이면 true 반환
+	 *  	->value가 null이면 false 반환
+	 *  
+ * @param value Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 2. 15. + */ + public static boolean notBlank(Object value){ + if(value instanceof String){ + return !(value==null); + }else{ + return !isEmpty(value); + } + } + + /** + *
메소드 설명: 객체의 길이(사이즈)와 동일한지 확인
+	 * 	-동일하면 true 반환
+	 * 	-동일하지 않으면 false 반환
+	 * 
+ * @param value Object + * @param length 객체의 예상 길이(사이즈) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 11. 7. + */ + public static boolean isLength(Object value, int length) { + return length(value)==length; + } + /** + *
메소드 설명: 객체의 길이(사이즈)와 다른지 확인
+	 * 	-동일하면 false 반환
+	 * 	-동일하지 않으면 true 반환
+	 * 
+ * @param value Object + * @param length 객체의 예상 길이(사이즈) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 11. 7. + */ + public static boolean isNotLength(Object value, int length) { + return !isLength(value, length); + } + + /** + *
메소드 설명: 객체의 길이(사이즈)를 반환한다.
+ * @param value Object + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 11. 7. + */ + public static int length(Object value) { + if(isEmpty(value)) + return 0; + + + if(value instanceof String){ + return ((String) value).length(); + }else if(value instanceof List){ + return ((List)value).size(); + }else if(value instanceof String[]){ + return ((String[]) value).length; + }else{ + return 0; + } + + } + + /** + *
메소드 설명: 객체가 숫자(number) 타입인지 확인
+	 *   -숫자이면 true 반환
+	 *   -숫자가 아니면 false 반환
+ * @param value + * @param regex 제거할 문자or정규식 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 17. + */ + public static boolean isNumber(Object value, String regex){ + if(value instanceof String) + return isNumber(((String) value).replaceAll(regex, "")); + + return isNumber(value); + } + /** + *
메소드 설명: 객체가 숫자(number) 타입인지 확인
+	 *   -숫자이면 true 반환
+	 *   -숫자가 아니면 false 반환
+ * @param value + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 17. + */ + public static boolean isNumber(Object value){ + try { + if(value instanceof Integer || value instanceof Long ){ + return true; + }else if(value instanceof Float){ + return true; + }else if(value instanceof String){ + try { + Long.parseLong((String) value); + return true; + } catch (Exception e) { + Float.parseFloat((String) value); + return true; + } + }else{ + return false; + } + } catch (Exception e) { + return false; + } + } + + + /** + *
메소드 설명: 문자열이 금액 인지 확인
+	 *   -문자열이 금액이면 true 반환
+	 *   -문자열이 금액이 아니면 false 반환
+	 * 
+ * @param value String + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 1. 15. + */ + public static boolean isAmount(String value){ + try { + Pattern pattern = Pattern.compile("^[0-9]{1,3}(,[0-9]{3})*$"); + Matcher matcher = pattern.matcher(value); + boolean result = matcher.find(); + return result; + } catch (Exception e) { + return false; + } + } + + + /** + *
메소드 설명: 날짜 유효성 확인
+	 *  -입력값이 날짜타입(yyyyMMdd)인지 확인한다.
+	 *  
+ * @param value + * @param delimiter + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 20. + */ + public static boolean isDate(Object value){ + return isDate(value, null); + } + /** + *
메소드 설명: 날짜 유효성 확인
+	 *  -입력값이 날짜타입인지 확인한다.
+	 *  -pattern 인자를 통해 날짜 타입을 설정 할 수 있다.
+	 *  
+ * @param value + * @param pattern + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 12. 31. + */ + public static boolean isDate(Object value, String pattern){ + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + try { + String regex = "[^0-9]"; + value = String.valueOf(value).replaceAll(regex, ""); + String strDate = simpleDateFormat.format(simpleDateFormat.parse(String.valueOf(value))); + if(!strDate.equals(value)) + return false; + } catch (Exception e) { + return false; + } + return true; + } + + + /** + *
메소드 설명: 시간 유효성 확인
+	 *  -입력값이 24시간(HHmm, 0~23)타입인지 확인한다.
+	 *  -입력값에 구분자(:,.)가 포함되어 있을 경우 delimiter에 입력한다
+	 *  -delimiter를 설정하지 않을 경우 default는 콜론(:)으로 설정된다.
+	 *  
+ * @param value + * @param delimiter + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 20. + */ + public static boolean isTime(Object value, String delimiter){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmm"); + try { + value = String.valueOf(value).replace(isEmpty(delimiter)?":":delimiter,""); + String strTime = simpleDateFormat.format(simpleDateFormat.parse(String.valueOf(value))); + if(!strTime.equals(value)) + return false; + } catch (Exception e) { + return false; + } + return true; + } + + /** + *
메소드 설명: 오늘 날짜를 반환한다.
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 23. + */ + public static String getToDate(String pattern){ + return getToDate(pattern, Locale.KOREA); + } + /** + *
메소드 설명: 오늘 날짜를 반환한다.
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param locale Locale + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 8. 16. + */ + public static String getToDate(String pattern, Locale locale){ + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, locale); + return dateFormat.format((new Date())); + } + /** + *
메소드 설명: 문자열 타입의 날짜 데이터를 Date객체로 반환한다.
+ * @param day 날짜 + * @param pattern 날짜 패턴(default: yyyyMMdd) + * @return Date 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 21. + */ + public static Date parseDate(String day, String pattern) { + return parseDate(day, pattern, Locale.KOREA); + } + /** + *
메소드 설명: 문자열 타입의 날짜 데이터를 Date객체로 반환한다.
+ * @param day 날짜 + * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param locale Locale + * @return Date 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 21. + */ + public static Date parseDate(String day, String pattern, Locale locale) { + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, locale); + Date result = null; + try { + result = dateFormat.parse(day); + } catch (ParseException e) { + throw new RuntimeException("날짜변환 실패",e); + } + return result; + } + + + + /** + *
메소드 설명: 기준날짜에 대한 연산 결과를 돌려준다.
+	 *	기준날짜에 일(day) 단위 연산이 가능하다.
+	 * 		ex> 기준날짜: 20181205, 더할날짜: 1 이면 "20181206" 반환 
+	 * 		ex> 기준날짜: 20181205, 더할날짜: -1 이면 "20181204" 반환 
+	 * 
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param date 기준날짜(ex: 20181205) + * @param addDay 더할 날짜 + * @return + * @throws ParseException String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 12. 5. + */ + public static String getDateToAddDay(String pattern, String date, int addDay){ + return getDateToAddDay(pattern, date, addDay, null); + } + /** + *
메소드 설명: 기준날짜에 대한 연산 결과를 돌려준다.
+	 *	기준날짜에 일(day) 단위 연산이 가능하다.
+	 * 		ex> 기준날짜: 20181205, 더할날짜: 1 이면 "20181206" 반환 
+	 * 		ex> 기준날짜: 20181205, 더할날짜: -1 이면 "20181204" 반환 
+	 * 
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param date 기준날짜(ex: 20181205) + * @param addDay 더할 날짜 + * @param rsPattern 리턴받을 날짜 패턴 ex:yyyy-MM-dd(default: yyyyMMdd) + * @return + * @throws ParseException String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String getDateToAddDay(String pattern, String date, int addDay, String rsPattern){ + if(CommonUtil.isEmpty(date)) + return date; + + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + rsPattern = isEmpty(rsPattern)?"yyyyMMdd":rsPattern; + + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); + Calendar cal = Calendar.getInstance(); + try { + cal.setTime(dateFormat.parse(date)); + } catch (ParseException e) { + throw new RuntimeException("(날짜연산)날짜변환 실패. 날짜 값이 유효하지 않습니다.",e); + } + cal.add(Calendar.DATE, addDay); + + SimpleDateFormat rsSateFormat = new SimpleDateFormat(rsPattern); + return rsSateFormat.format(cal.getTime()); + } + + + /** + *
메소드 설명: 두 날짜간 일수를 반환한다.
+	 * 	ex)201901003(aDe)-20191001(bDe) = 2
+	 * 
+ * @param aDe 시작일(yyyyMMdd) + * @param bDe 종료일(yyyyMMdd) + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 10. 4. + */ + public static int getDateBetweenAandB(String aDe, String bDe) { + int result = 0; + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + try { + Date aDate = format.parse(aDe); + Date bDate = format.parse(bDe); + + + long calcDate = aDate.getTime() - bDate.getTime(); + long cntDay = calcDate / (24*60*60*1000); + + result = (int) Math.abs(cntDay); + } catch (ParseException e) { + throw new RuntimeException("(날짜간일수)날짜변환 실패. 날짜 값이 유효하지 않습니다.", e); + } + + return result; + } + + /** + *
메소드 설명: 세션 객체를 반환한다.
+ * @param req HttpServletRequest + * @return MngrSessionVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 26. + */ + /*public static MngrSessionVO getSession(HttpServletRequest req){ + HttpSession session = req.getSession(); + return (MngrSessionVO)session.getAttribute("mngrSessionVO"); + }*/ + + + /** + *
메소드 설명: 숫자만 남도록 치환 후 반환한다.
+ * @param str + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 10. 12. + */ + public static String replaceToNumber(String str){ + if(isEmpty(str)) + return str; + + String regex = "[^0-9]"; + str = str.replaceAll(regex, ""); + + return str; + } + /** + *
메소드 설명: 숫자만 남도록 치환 후 int형으로 반환한다.
+ * @param str + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 26. + */ + public static int parseInt(String str) { + str = replaceToNumber(str); + int result = isEmpty(str)?0:Integer.parseInt(str); + return result; + } + + /** + *
메소드 설명: 금액만 남도록 치환 후 int형으로 반환한다.
+ * @param str + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 26. + */ + public static int parseAmount(String str) { + if(str == null) + return 0; + + String regex = "[^0-9\\.]"; + str = str.replaceAll(regex, ""); + + int result = (int) (isEmpty(str)?0:Math.floor(Integer.parseInt(str))); + return result; + } + + + /** + *
메소드 설명: value의 값이 str로 시작하면 true 반환, 아니면 false 반환
+ * @param str + * @param value + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 1. + */ + public static boolean isStartWith(String str, String value) { + return value.startsWith(str); + } + + + /** + *
메소드 설명: 서울지역 택시 유무를 반환 한다.
+     * 	#반환 정보
+     * 	 -서울지역 택시인 경우 true 반환
+     * 	 -서울지역 택시가 아닌 경우 false 반환
+     * 	#판별 기준 
+     *	 -개인택시 : 31(바,사,아,자), 32(바,사,아,자), 35(바,사,아), 36(바)  
+     *	 -법인택시 : 33(바,사,아,자), 34(바,사,아,자), 37(바)             
+     * 
+ * @param vhcle_no 차량번호 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 10. 4. + */ + public static boolean isTaxiOfSeoul(String vhcle_no) + { + Map mTaxi = new HashMap(); + mTaxi.put("서울31바", ""); + mTaxi.put("서울31사", ""); + mTaxi.put("서울31아", ""); + mTaxi.put("서울31자", ""); + mTaxi.put("서울32바", ""); + mTaxi.put("서울32사", ""); + mTaxi.put("서울32아", ""); + mTaxi.put("서울32자", ""); + mTaxi.put("서울35바", ""); + mTaxi.put("서울35사", ""); + mTaxi.put("서울35아", ""); + mTaxi.put("서울36바", ""); + mTaxi.put("서울33바", ""); + mTaxi.put("서울33사", ""); + mTaxi.put("서울33아", ""); + mTaxi.put("서울33자", ""); + mTaxi.put("서울34바", ""); + mTaxi.put("서울34사", ""); + mTaxi.put("서울34아", ""); + mTaxi.put("서울34자", ""); + mTaxi.put("서울37바", ""); + + + try{ + //지역 확인 + if (!vhcle_no.startsWith("서울")) + return false; + + //차량번호 길이 확인 + if (vhcle_no.length() != 9) + return false; + + //차량번호 유효성 확인 + if (mTaxi.containsKey(vhcle_no.substring(0,5))) + return true; + + return false; + }catch (Exception e) { + throw e; + } + } + + + + + /** + *
메소드 설명: 우편번호 포맷에 맞추어 반환한다.
+     * 	-지번(구주소) 우편번호인 경우 ex)123456 -> 123-456
+     * 	-도로명(새주소) 우편번호인 경우 ex)12345 -> 12345
+     * 
+ * @param zip 우편번호 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String fmtZip(String zip) { + if(CommonUtil.isEmpty(zip)) + return zip; + + + if(zip.length()==6) + return String.format("%s-%s", zip.substring(0,3), zip.substring(3)); + + return zip; + } + /** + *
메소드 설명: 소유자번호를 유형별 포맷에 맞추어 반환한다.
+     * 	-주민번호
+     * 	 ex)1234561234567 -> 123456-1234567
+     * 	    또는 1234561234567 -> 123456-*******
+     * 	-사업자번호
+     * 	 ex)1231212345 -> 123-12-12345
+     * 
+ * @param owner_no 소유자번호 + * @param isHidden 뒷자리숨김 여부(주민번호만 해당) + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String fmtOwnerNo(String owner_no, boolean isHidden) { + if(isEmpty(owner_no)) + return owner_no; + + owner_no = owner_no.replace("-", "").replace(" ", ""); + switch (owner_no.length()) { + case 10: //사업자번호 + owner_no = String.format("%s-%s-%s", owner_no.substring(0,3), owner_no.substring(3,5), owner_no.substring(5)); + break; + case 13: //주민번호 + if(isHidden) + owner_no = String.format("%s-*******", owner_no.substring(0,6)); + else + owner_no = String.format("%s-%s", owner_no.substring(0,6), owner_no.substring(6)); + break; + default: + break; + } + + return owner_no; + } + + /** + *
메소드 설명: 가상계좌번호를 포맷에 맞추어 반환한다.
+     * 	-가상계좌번호
+     * 	 ex)61573982518679 -> 615-739825-18-679
+     * 
+ * @param accountNo 가상계좌번호 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String fmtVirtualAccount(String accountNo) { + if(isEmpty(accountNo)) + return accountNo; + + accountNo = accountNo.replace("-", "").replace(" ", ""); + if(accountNo.length()==14) + accountNo = String.format("%s-%s-%s-%s", accountNo.substring(0,3) + ,accountNo.substring(3,9) + ,accountNo.substring(9,11) + ,accountNo.substring(11)); + + + return accountNo; + } + + + /** + *
메소드 설명: 날짜 포맷을 설정하여 반환한다.
+ * @param de 날짜 + * @param spt 구분자 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 2. 8. + */ + public static String fmtDate(String de, String spt) { + try { + if(spt==null||"".equals(spt)) + spt="-"; + + String returnDe = replaceToNumber(de); + returnDe = String.format("%s%s%s%s%s", returnDe.substring(0,4),spt,returnDe.substring(4,6),spt,returnDe.substring(6,8)); + return returnDe; + } catch (Exception e) { + return de; + } + } + + + + /** + *
메소드 설명: Map에 담긴 모든 key,value를 Json 포맷 문자열로 변환 후 반환 한다.
+     * 	ex) Map map = new HashMap
+     * 		map.put("key1", "value1");
+     * 		map.put("key2", "value2");
+     * 		map.put("key3", "value3");
+     *    -> {"key1":"value1","key2":"value2","key3":"value3"}
+     * 
+ * @param map Map<String, String> + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 12. 16. + */ + public static String convertJsonFmtStrFromMap(Map map) { + /** + * json 포맷 문자열로 변환 + */ + StringBuffer sb = new StringBuffer(); + Iterator it = map.keySet().iterator(); + sb.append("{"); + int i=0; + while(it.hasNext()) { + String key = it.next(); + String value = String.valueOf(map.get(key)); + if(i>0) + sb.append(","); + try { + sb.append( String.format("\"%s\":\"%s\"", key, CommonUtil.isEmpty(value)?"":URLEncoder.encode(value, "UTF-8") ) ); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + i++; + } + sb.append("}"); + + return sb.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitExcelMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitExcelMapper.java new file mode 100644 index 00000000..14cdd058 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitExcelMapper.java @@ -0,0 +1,31 @@ +package kr.xit.framework.biz.cmm.dao; + +import org.apache.ibatis.session.ResultHandler; +import org.apache.poi.ss.formula.functions.T; +import org.mybatis.spring.support.SqlSessionDaoSupport; + +/** + * + * @업무그룹명: Select 데이터 Row단위 처리 + * @설명: + * @최초작성일: 2020. 3. 24. 오후 1:42:15 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitExcelMapper extends SqlSessionDaoSupport{ + + public void queryWithRowHandler(String queryId, Object obj, ResultHandler resultHandler){ +// if(queryId.indexOf("bcms") > -1){ +// ApplicationContext appContext = ContextLoaderListener.getCurrentWebApplicationContext(); +// SqlSessionFactory sfb = (SqlSessionFactory)appContext.getBean("sqlSessionBcms"); +// super.setSqlSessionFactory(sfb); +// }else{ +// ApplicationContext appContext = ContextLoaderListener.getCurrentWebApplicationContext(); +// SqlSessionFactory sfb = (SqlSessionFactory)appContext.getBean("sqlSession"); +// super.setSqlSessionFactory(sfb); +// } + getSqlSession().select(queryId, obj, resultHandler); + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameBizLogicMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameBizLogicMapper.java new file mode 100644 index 00000000..3965d423 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameBizLogicMapper.java @@ -0,0 +1,20 @@ +package kr.xit.framework.biz.cmm.dao; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + + +/** + * + * @업무그룹명: XIT 프레임워크 비즈니스로직 프로세스 Mapper + * @설명: XIT프레임워크에서 제공하는 컴포넌트의 비즈니스 로직 서비스를 기술 한다. + *
비즈니스로직은 단위 프로세스 및 필요에 따라 CRUD서비스를 활용하여 작성하도록 한다. + * @최초작성일: 2020. 3. 18. 오후 4:47:45 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitFrameBizLogicMapper { + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameCodeMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameCodeMapper.java new file mode 100644 index 00000000..2aa87685 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameCodeMapper.java @@ -0,0 +1,62 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.core.model.XitCodeVO; + +/** + * + * @업무그룹명: XIT 프레임워크 코드 Mapper + * @설명: + * @최초작성일: 2020. 4. 8. 오후 6:08:37 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitFrameCodeMapper { + + + + /** + *
메소드 설명: 분류코드 목록 조회
+ * @param clCode 분류코드 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findClCodes(Map m) throws SQLException; + /** + *
메소드 설명: 공통코드 목록 조회
+ * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findCmmnCodes(Map m) throws SQLException; + /** + *
메소드 설명: 공통상세코드 목록 조회
+ * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findCmmnDetailCodes(Map m) throws SQLException; + /** + *
메소드 설명: 조직코드 목록 조회
+ * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findOrgnztCodes(Map m) throws SQLException; + /** + *
메소드 설명: 그룹코드 목록 조회
+ * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findGroupCodes(Map m) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameCrudMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameCrudMapper.java new file mode 100644 index 00000000..d7b5a235 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameCrudMapper.java @@ -0,0 +1,335 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.cmm.model.XitAuthorGroupInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorRoleRelateVO; +import kr.xit.framework.biz.cmm.model.XitBbsMastrOptionVO; +import kr.xit.framework.biz.cmm.model.XitBbsMastrVO; +import kr.xit.framework.biz.cmm.model.XitBbsPrcuseVO; +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.biz.cmm.model.XitCmmnClCodeVO; +import kr.xit.framework.biz.cmm.model.XitCmmnCodeVO; +import kr.xit.framework.biz.cmm.model.XitCmmnDetailCodeVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchopertVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchresultVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschdulVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschduldfkVO; +import kr.xit.framework.biz.cmm.model.XitConectLogVO; +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitFileAttrbVO; +import kr.xit.framework.biz.cmm.model.XitFileDetailInfoVO; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitIdsVO; +import kr.xit.framework.biz.cmm.model.XitLoginPolicyVO; +import kr.xit.framework.biz.cmm.model.XitMenuCreatDtlsVO; +import kr.xit.framework.biz.cmm.model.XitMenuInfoVO; +import kr.xit.framework.biz.cmm.model.XitOrgnztInfoVO; +import kr.xit.framework.biz.cmm.model.ProgrmListVO; +import kr.xit.framework.biz.cmm.model.XitRoleInfoVO; +import kr.xit.framework.biz.cmm.model.XitRoleSclsrtRescueVO; +import kr.xit.framework.biz.cmm.model.XitSysLogSumryVO; +import kr.xit.framework.biz.cmm.model.XitTmplatInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserAbsnceVO; +import kr.xit.framework.biz.cmm.model.XitUserEtcOptionVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoChangeDtlsVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.model.XitZipVO; + +/** + * + * @업무그룹명: XIT 프레임워크 CRUD Mapper + * @설명: XIT 프레임워크에서 제공하는 모든 DB Table에 대한 CRUD 서비스를 기술 한다. + * @최초작성일: 2020. 3. 18. 오후 4:47:45 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitFrameCrudMapper { + public List findXitAuthorGroupInfos(XitAuthorGroupInfoVO vo) throws SQLException; + public XitAuthorGroupInfoVO findXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) throws SQLException; + public int addXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) throws SQLException; + public int modifyXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) throws SQLException; + public int removeXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) throws SQLException; + + + public List findXitAuthorInfos(XitAuthorInfoVO vo) throws SQLException; + public XitAuthorInfoVO findXitAuthorInfo(XitAuthorInfoVO vo) throws SQLException; + public int addXitAuthorInfo(XitAuthorInfoVO vo) throws SQLException; + public int modifyXitAuthorInfo(XitAuthorInfoVO vo) throws SQLException; + public int removeXitAuthorInfo(XitAuthorInfoVO vo) throws SQLException; + + + public List findXitAuthorRoleRelates(XitAuthorRoleRelateVO vo) throws SQLException; + public XitAuthorRoleRelateVO findXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) throws SQLException; + public int addXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) throws SQLException; + public int modifyXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) throws SQLException; + public int removeXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) throws SQLException; + + + public List findXitBbsMastrOptions(XitBbsMastrOptionVO vo) throws SQLException; + public XitBbsMastrOptionVO findXitBbsMastrOption(XitBbsMastrOptionVO vo) throws SQLException; + public int addXitBbsMastrOption(XitBbsMastrOptionVO vo) throws SQLException; + public int modifyXitBbsMastrOption(XitBbsMastrOptionVO vo) throws SQLException; + public int removeXitBbsMastrOption(XitBbsMastrOptionVO vo) throws SQLException; + + + public List findXitBbsMastrs(XitBbsMastrVO vo) throws SQLException; + public XitBbsMastrVO findXitBbsMastr(XitBbsMastrVO vo) throws SQLException; + public int addXitBbsMastr(XitBbsMastrVO vo) throws SQLException; + public int modifyXitBbsMastr(XitBbsMastrVO vo) throws SQLException; + public int removeXitBbsMastr(XitBbsMastrVO vo) throws SQLException; + + + public List findXitBbsPrcuses(XitBbsPrcuseVO vo) throws SQLException; + public XitBbsPrcuseVO findXitBbsPrcuse(XitBbsPrcuseVO vo) throws SQLException; + public int addXitBbsPrcuse(XitBbsPrcuseVO vo) throws SQLException; + public int modifyXitBbsPrcuse(XitBbsPrcuseVO vo) throws SQLException; + public int removeXitBbsPrcuse(XitBbsPrcuseVO vo) throws SQLException; + + + public List findXitBbss(XitBbsVO vo) throws SQLException; + public XitBbsVO findXitBbs(XitBbsVO vo) throws SQLException; + public int addXitBbs(XitBbsVO vo) throws SQLException; + public int modifyXitBbs(XitBbsVO vo) throws SQLException; + public int removeXitBbs(XitBbsVO vo) throws SQLException; + + + public List findXitCmmnClCodes(XitCmmnClCodeVO vo) throws SQLException; + public XitCmmnClCodeVO findXitCmmnClCode(XitCmmnClCodeVO vo) throws SQLException; + public int addXitCmmnClCode(XitCmmnClCodeVO vo) throws SQLException; + public int modifyXitCmmnClCode(XitCmmnClCodeVO vo) throws SQLException; + public int removeXitCmmnClCode(XitCmmnClCodeVO vo) throws SQLException; + + + public List findXitCmmnCodes(XitCmmnCodeVO vo) throws SQLException; + public XitCmmnCodeVO findXitCmmnCode(XitCmmnCodeVO vo) throws SQLException; + public int addXitCmmnCode(XitCmmnCodeVO vo) throws SQLException; + public int modifyXitCmmnCode(XitCmmnCodeVO vo) throws SQLException; + public int removeXitCmmnCode(XitCmmnCodeVO vo) throws SQLException; + + + public List findXitCmmnDetailCodes(XitCmmnDetailCodeVO vo) throws SQLException; + public XitCmmnDetailCodeVO findXitCmmnDetailCode(XitCmmnDetailCodeVO vo) throws SQLException; + public int addXitCmmnDetailCode(XitCmmnDetailCodeVO vo) throws SQLException; + public int modifyXitCmmnDetailCode(XitCmmnDetailCodeVO vo) throws SQLException; + public int removeXitCmmnDetailCode(XitCmmnDetailCodeVO vo) throws SQLException; + + + public List findXitConectLogs(XitConectLogVO vo) throws SQLException; + public XitConectLogVO findXitConectLog(XitConectLogVO vo) throws SQLException; + public int addXitConectLog(XitConectLogVO vo) throws SQLException; + public int modifyXitConectLog(XitConectLogVO vo) throws SQLException; + public int removeXitConectLog(XitConectLogVO vo) throws SQLException; + + + public List findXitEntrprsMbers(XitEntrprsMberVO vo) throws SQLException; + public XitEntrprsMberVO findXitEntrprsMber(XitEntrprsMberVO vo) throws SQLException; + public int addXitEntrprsMber(XitEntrprsMberVO vo) throws SQLException; + public int modifyXitEntrprsMber(XitEntrprsMberVO vo) throws SQLException; + public int removeXitEntrprsMber(XitEntrprsMberVO vo) throws SQLException; + + + public List findXitFileAttrbs(XitFileAttrbVO vo) throws SQLException; + public XitFileAttrbVO findXitFileAttrb(XitFileAttrbVO vo) throws SQLException; + public int addXitFileAttrb(XitFileAttrbVO vo) throws SQLException; + public int modifyXitFileAttrb(XitFileAttrbVO vo) throws SQLException; + public int removeXitFileAttrb(XitFileAttrbVO vo) throws SQLException; + + + public List findXitFileDetailInfos(XitFileDetailInfoVO vo) throws SQLException; + public XitFileDetailInfoVO findXitFileDetailInfo(XitFileDetailInfoVO vo) throws SQLException; + public int addXitFileDetailInfo(XitFileDetailInfoVO vo) throws SQLException; + public int modifyXitFileDetailInfo(XitFileDetailInfoVO vo) throws SQLException; + public int removeXitFileDetailInfo(XitFileDetailInfoVO vo) throws SQLException; + + + public List findXitGnrlMbers(XitGnrlMberVO vo) throws SQLException; + public XitGnrlMberVO findXitGnrlMber(XitGnrlMberVO vo) throws SQLException; + public int addXitGnrlMber(XitGnrlMberVO vo) throws SQLException; + public int modifyXitGnrlMber(XitGnrlMberVO vo) throws SQLException; + public int removeXitGnrlMber(XitGnrlMberVO vo) throws SQLException; + + + public List findXitIdss(XitIdsVO vo) throws SQLException; + public XitIdsVO findXitIds(XitIdsVO vo) throws SQLException; + public int addXitIds(XitIdsVO vo) throws SQLException; + public int modifyXitIds(XitIdsVO vo) throws SQLException; + public int removeXitIds(XitIdsVO vo) throws SQLException; + + + public List findXitLoginPolicys(XitLoginPolicyVO vo) throws SQLException; + public XitLoginPolicyVO findXitLoginPolicy(XitLoginPolicyVO vo) throws SQLException; + public int addXitLoginPolicy(XitLoginPolicyVO vo) throws SQLException; + public int modifyXitLoginPolicy(XitLoginPolicyVO vo) throws SQLException; + public int removeXitLoginPolicy(XitLoginPolicyVO vo) throws SQLException; + + + public List findXitMenuCreatDtlss(XitMenuCreatDtlsVO vo) throws SQLException; + public XitMenuCreatDtlsVO findXitMenuCreatDtls(XitMenuCreatDtlsVO vo) throws SQLException; + public int addXitMenuCreatDtls(XitMenuCreatDtlsVO vo) throws SQLException; + public int modifyXitMenuCreatDtls(XitMenuCreatDtlsVO vo) throws SQLException; + public int removeXitMenuCreatDtls(XitMenuCreatDtlsVO vo) throws SQLException; + + + public List findXitMenuInfos(XitMenuInfoVO vo) throws SQLException; + public XitMenuInfoVO findXitMenuInfo(XitMenuInfoVO vo) throws SQLException; + public int addXitMenuInfo(XitMenuInfoVO vo) throws SQLException; + public int modifyXitMenuInfo(XitMenuInfoVO vo) throws SQLException; + public int removeXitMenuInfo(XitMenuInfoVO vo) throws SQLException; + + + public List findXitOrgnztInfos(XitOrgnztInfoVO vo) throws SQLException; + public XitOrgnztInfoVO findXitOrgnztInfo(XitOrgnztInfoVO vo) throws SQLException; + public int addXitOrgnztInfo(XitOrgnztInfoVO vo) throws SQLException; + public int modifyXitOrgnztInfo(XitOrgnztInfoVO vo) throws SQLException; + public int removeXitOrgnztInfo(XitOrgnztInfoVO vo) throws SQLException; + + + public List findXitProgrmLists(ProgrmListVO vo) throws SQLException; + public ProgrmListVO findXitProgrmList(ProgrmListVO vo) throws SQLException; + public int addXitProgrmList(ProgrmListVO vo) throws SQLException; + public int modifyXitProgrmList(ProgrmListVO vo) throws SQLException; + public int removeXitProgrmList(ProgrmListVO vo) throws SQLException; + + + public List findXitRoleInfos(XitRoleInfoVO vo) throws SQLException; + public XitRoleInfoVO findXitRoleInfo(XitRoleInfoVO vo) throws SQLException; + public int addXitRoleInfo(XitRoleInfoVO vo) throws SQLException; + public int modifyXitRoleInfo(XitRoleInfoVO vo) throws SQLException; + public int removeXitRoleInfo(XitRoleInfoVO vo) throws SQLException; + + + public List findXitRoleSclsrtRescues(XitRoleSclsrtRescueVO vo) throws SQLException; + public XitRoleSclsrtRescueVO findXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) throws SQLException; + public int addXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) throws SQLException; + public int modifyXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) throws SQLException; + public int removeXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) throws SQLException; + public int removesXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) throws SQLException; + + + public List findXitSysLogSumrys(XitSysLogSumryVO vo) throws SQLException; + public XitSysLogSumryVO findXitSysLogSumry(XitSysLogSumryVO vo) throws SQLException; + public int addXitSysLogSumry(XitSysLogSumryVO vo) throws SQLException; + public int modifyXitSysLogSumry(XitSysLogSumryVO vo) throws SQLException; + public int removeXitSysLogSumry(XitSysLogSumryVO vo) throws SQLException; + + + public List findXitTmplatInfos(XitTmplatInfoVO vo) throws SQLException; + public XitTmplatInfoVO findXitTmplatInfo(XitTmplatInfoVO vo) throws SQLException; + public int addXitTmplatInfo(XitTmplatInfoVO vo) throws SQLException; + public int modifyXitTmplatInfo(XitTmplatInfoVO vo) throws SQLException; + public int removeXitTmplatInfo(XitTmplatInfoVO vo) throws SQLException; + + + public List findXitUserAbsnces(XitUserAbsnceVO vo) throws SQLException; + public XitUserAbsnceVO findXitUserAbsnce(XitUserAbsnceVO vo) throws SQLException; + public int addXitUserAbsnce(XitUserAbsnceVO vo) throws SQLException; + public int modifyXitUserAbsnce(XitUserAbsnceVO vo) throws SQLException; + public int removeXitUserAbsnce(XitUserAbsnceVO vo) throws SQLException; + + + public List findXitUserEtcOptions(XitUserEtcOptionVO vo) throws SQLException; + public XitUserEtcOptionVO findXitUserEtcOption(XitUserEtcOptionVO vo) throws SQLException; + public int addXitUserEtcOption(XitUserEtcOptionVO vo) throws SQLException; + public int modifyXitUserEtcOption(XitUserEtcOptionVO vo) throws SQLException; + public int removeXitUserEtcOption(XitUserEtcOptionVO vo) throws SQLException; + + + public List findXitUserInfoChangeDtlss(XitUserInfoChangeDtlsVO vo) throws SQLException; + public XitUserInfoChangeDtlsVO findXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) throws SQLException; + public int addXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) throws SQLException; + public int modifyXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) throws SQLException; + public int removeXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) throws SQLException; + public int removeXitUserInfoChangeDtlss(XitUserInfoChangeDtlsVO vo) throws SQLException; + + + public List findXitUserInfos(XitUserInfoVO vo) throws SQLException; + public XitUserInfoVO findXitUserInfo(XitUserInfoVO vo) throws SQLException; + public int addXitUserInfo(XitUserInfoVO vo) throws SQLException; + public int modifyXitUserInfo(XitUserInfoVO vo) throws SQLException; + public int removeXitUserInfo(XitUserInfoVO vo) throws SQLException; + /** + *
메소드 설명: 사용자의 정보 및 기타옵션 정보 목록 조회 한다.
+	 * 	-XIT_USER_INFO 테이블에서 범용성을 위해 다음 컬럼에 대해 별도 테이블로 분리 함에 따라 기존 XitFrameCrudService.findXitUserInfos를 본 서비스로 대체 한다.
+	 * 	  > JOB_DATA_AUTHOR      //업무 데이터 권한
+	 * 	  > USER_MANAGE_AUTHOR   //사용자 관리 권한
+	 * 	  > ELCTRNSANCTN_USE_AT  //전자결재 사용 여부
+	 * 	  > JOB_CONFM_AUTHOR_AT  //업무 승인 권한 여부
+	 * 
+ * @param vo XitUserInfoVO + * @return + * @throws SQLException List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public List findsXitUserInfoWithEtcOption(XitUserInfoVO vo) throws SQLException; + /** + *
메소드 설명: 사용자의 정보 및 기타옵션 정보를 조회 한다.
+	 * 	-XIT_USER_INFO 테이블에서 범용성을 위해 다음 컬럼에 대해 별도 테이블로 분리 함에 따라 기존 XitFrameCrudService.findXitUserInfo를 본 서비스로 대체 한다.
+	 * 	  > JOB_DATA_AUTHOR      //업무 데이터 권한
+	 * 	  > USER_MANAGE_AUTHOR   //사용자 관리 권한
+	 * 	  > ELCTRNSANCTN_USE_AT  //전자결재 사용 여부
+	 * 	  > JOB_CONFM_AUTHOR_AT  //업무 승인 권한 여부
+	 * 
+ * @param vo XitUserInfoVO + * @return + * @throws SQLException List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public XitUserInfoVO findXitUserInfoWithEtcOption(XitUserInfoVO vo) throws SQLException; + + + public List findXitUserScrtySetups(XitUserScrtySetupVO vo) throws SQLException; + public XitUserScrtySetupVO findXitUserScrtySetup(XitUserScrtySetupVO vo) throws SQLException; + public int addXitUserScrtySetup(XitUserScrtySetupVO vo) throws SQLException; + public int modifyXitUserScrtySetup(XitUserScrtySetupVO vo) throws SQLException; + public int removeXitUserScrtySetup(XitUserScrtySetupVO vo) throws SQLException; + + + public List findXitZips(XitZipVO vo) throws SQLException; + public XitZipVO findXitZip(XitZipVO vo) throws SQLException; + public int addXitZip(XitZipVO vo) throws SQLException; + public int modifyXitZip(XitZipVO vo) throws SQLException; + public int removeXitZip(XitZipVO vo) throws SQLException; + public int removesXitZip(XitZipVO vo) throws SQLException; + + + public List findComtnbatchoperts(XitComtnbatchopertVO vo) throws SQLException; + public XitComtnbatchopertVO findComtnbatchopert(XitComtnbatchopertVO vo) throws SQLException; + public int addComtnbatchopert(XitComtnbatchopertVO vo) throws SQLException; + public int modifyComtnbatchopert(XitComtnbatchopertVO vo) throws SQLException; + public int removeComtnbatchopert(XitComtnbatchopertVO vo) throws SQLException; + public int removesComtnbatchopert(XitComtnbatchopertVO vo) throws SQLException; + + + public List findComtnbatchschduls(XitComtnbatchschdulVO vo) throws SQLException; + public XitComtnbatchschdulVO findComtnbatchschdul(XitComtnbatchschdulVO vo) throws SQLException; + public int addComtnbatchschdul(XitComtnbatchschdulVO vo) throws SQLException; + public int modifyComtnbatchschdul(XitComtnbatchschdulVO vo) throws SQLException; + public int removeComtnbatchschdul(XitComtnbatchschdulVO vo) throws SQLException; + public int removesComtnbatchschdul(XitComtnbatchschdulVO vo) throws SQLException; + + + public List findComtnbatchschduldfks(XitComtnbatchschduldfkVO vo) throws SQLException; + public XitComtnbatchschduldfkVO findComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) throws SQLException; + public int addComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) throws SQLException; + public int modifyComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) throws SQLException; + public int removeComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) throws SQLException; + public int removesComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) throws SQLException; + + + public List findComtnbatchresults(XitComtnbatchresultVO vo) throws SQLException; + public XitComtnbatchresultVO findComtnbatchresult(XitComtnbatchresultVO vo) throws SQLException; + public int addComtnbatchresult(XitComtnbatchresultVO vo) throws SQLException; + public int modifyComtnbatchresult(XitComtnbatchresultVO vo) throws SQLException; + public int removeComtnbatchresult(XitComtnbatchresultVO vo) throws SQLException; + public int removesComtnbatchresult(XitComtnbatchresultVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameFileMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameFileMapper.java new file mode 100644 index 00000000..f9939f4b --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameFileMapper.java @@ -0,0 +1,39 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * + * @업무그룹명: XIT 프레임워크 첨부파일 Mapper + * @설명: + * @최초작성일: 2020. 4. 10. 오전 9:02:30 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitFrameFileMapper { + + /** + *
메소드 설명: 첨부파일 목록을 조회 한다.
+ * @param m + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public List> findList(Map m); + + /** + *
메소드 설명: 첨부파일 상세정보를 조회 한다.
+ * @param m + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public Map findView(Map m); + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFramePopupMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFramePopupMapper.java new file mode 100644 index 00000000..ddcbc003 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFramePopupMapper.java @@ -0,0 +1,45 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: XIT 프레임워크 팝업 Mapper + * @설명: + * @최초작성일: 2020. 4. 10. 오전 9:02:30 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitFramePopupMapper { + + + /** + *
메소드 설명: 우편번호 목록 조회
+ * @param searchVO + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public List> findListZip(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 우편번호 목록 조회 총 건수
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public int findListZipTotCnt(XitBaseSearchVO searchVO); + + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameSchedulerMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameSchedulerMapper.java new file mode 100644 index 00000000..f665337d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameSchedulerMapper.java @@ -0,0 +1,18 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.sql.SQLException; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper +public interface XitFrameSchedulerMapper { + + /** + *
메소드 설명: 전날의 시스템로그 요약 등록
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 4. + */ + public int addSysLogSummaryOfYesterday() throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameUnitMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameUnitMapper.java new file mode 100644 index 00000000..ca790229 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitFrameUnitMapper.java @@ -0,0 +1,78 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.core.model.XitRollingNotiVO; + +/** + * + * @업무그룹명: XIT 프레임워크 단위 프로세스 Mapper + * @설명: XIT 프레임워크에서 제공하는 컴포넌트의 단위 프로세스를 기술 한다. + * @최초작성일: 2020. 3. 18. 오후 4:47:45 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitFrameUnitMapper { + + + /** + *
메소드 설명: 사용자별 메뉴목록 조회
+	 * 	-사용자별 권한이 주어진 메뉴 목록을 조회 한다.
+	 *  
+ * @param userId 사용자 고유키 + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 25. + */ + public List> findMenuListByUser(String uniqId) throws SQLException; + /** + *
메소드 설명: 권한코드별 메뉴목록 조회
+	 * 	-권한에 부여된 메뉴 목록을 조회 한다.
+	 *  
+ * @param authorCode 권한코드 + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 20. + */ + public List> findMenuListByAuthorCode(String authorCode) throws SQLException; + + + /** + *
메소드 설명: 파일순번 채번
+ * @param atchFileId 첨부파일ID + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 12. + */ + public int findMaxFileSn(String atchFileId); + + + + + /** + *
메소드 설명: 장기미접속 사용자 조회
+ * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 21. + */ + public List> findLongTermDisconectUser(Map m); + + + + + /** + *
메소드 설명: 게시판 최신 게시글 목록 조회
+ * @param xitRollingNotiVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 14. + */ + public List findLatestBbsList(XitRollingNotiVO xitRollingNotiVO); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/dao/XitTestMapper.java b/src/main/java/kr/xit/framework/biz/cmm/dao/XitTestMapper.java new file mode 100644 index 00000000..08bbbcba --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/dao/XitTestMapper.java @@ -0,0 +1,55 @@ +package kr.xit.framework.biz.cmm.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.core.utils.XitMap; + +@Mapper +public interface XitTestMapper { + + + /** + *
메소드 설명: 조회 테스트
+ * @return XitMap 요청처리 후 응답객체 + * @throws SQLException XitMap 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 18. + */ + public XitMap findTest() throws SQLException; + public XitMap findTest(String param) throws SQLException; + + /** + *
메소드 설명: 등록 테스트
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + public int addTest() throws SQLException; + public int addTest(String error_code) throws SQLException; + public int addTest(Map param) throws SQLException; + + /** + *
메소드 설명: 등록 테스트
+	 * 	-n개의 단위로 insert를 수행 한다.
+	 * 
+ * @param listParam + * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 17. + */ + public int addListTest(List> listParam) throws SQLException; + + /** + *
메소드 설명: 접속로그 테이블의 테스트 데이터 일괄 삭제
+ * @param param + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 17. + */ + public int removesXitConectLogForTestData(Map param); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/ProgrmListVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/ProgrmListVO.java new file mode 100644 index 00000000..3d10d8dd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/ProgrmListVO.java @@ -0,0 +1,59 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 프로그램목록VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:35:58 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class ProgrmListVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 2737573895491481799L; + + + protected String progrm_file_nm; //프로그램 파일 명 + protected String progrm_stre_cours; //프로그램 저장 경로 + protected String progrm_korean_nm; //프로그램 한글 명 + protected String progrm_dc; //프로그램 설명 + protected String url; //url + + + public String getProgrm_file_nm() { + return progrm_file_nm; + } + public void setProgrm_file_nm(String progrm_file_nm) { + this.progrm_file_nm = progrm_file_nm; + } + public String getProgrm_stre_cours() { + return progrm_stre_cours; + } + public void setProgrm_stre_cours(String progrm_stre_cours) { + this.progrm_stre_cours = progrm_stre_cours; + } + public String getProgrm_korean_nm() { + return progrm_korean_nm; + } + public void setProgrm_korean_nm(String progrm_korean_nm) { + this.progrm_korean_nm = progrm_korean_nm; + } + public String getProgrm_dc() { + return progrm_dc; + } + public void setProgrm_dc(String progrm_dc) { + this.progrm_dc = progrm_dc; + } + public String getUrl() { + return url; + } + public void setUrl(String url) { + this.url = url; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorGroupInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorGroupInfoVO.java new file mode 100644 index 00000000..38f470e1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorGroupInfoVO.java @@ -0,0 +1,61 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 권한그룹정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 9:44:42 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthorGroupInfoVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -4390096179096398215L; + + + protected String group_id; //그룹 id + protected String group_nm; //그룹 명 + protected String group_creat_de; //그룹 생성 일 + protected String group_dc; //그룹 설명 + protected String author_code; //권한 코드 + + + public String getGroup_id() { + return group_id; + } + public void setGroup_id(String group_id) { + this.group_id = group_id; + } + public String getGroup_nm() { + return group_nm; + } + public void setGroup_nm(String group_nm) { + this.group_nm = group_nm; + } + public String getGroup_creat_de() { + return group_creat_de; + } + public void setGroup_creat_de(String group_creat_de) { + this.group_creat_de = group_creat_de; + } + public String getGroup_dc() { + return group_dc; + } + public void setGroup_dc(String group_dc) { + this.group_dc = group_dc; + } + public String getAuthor_code() { + return author_code; + } + public void setAuthor_code(String author_code) { + this.author_code = author_code; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorInfoVO.java new file mode 100644 index 00000000..7db8f3a0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorInfoVO.java @@ -0,0 +1,53 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 권한정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 9:48:30 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthorInfoVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 4982342550430087973L; + + protected String author_code; //권한 코드 + protected String author_nm; //권한 명 + protected String author_dc; //권한 설명 + protected String author_creat_de; //권한 생성 일 + + public String getAuthor_code() { + return author_code; + } + public void setAuthor_code(String author_code) { + this.author_code = author_code; + } + public String getAuthor_nm() { + return author_nm; + } + public void setAuthor_nm(String author_nm) { + this.author_nm = author_nm; + } + public String getAuthor_dc() { + return author_dc; + } + public void setAuthor_dc(String author_dc) { + this.author_dc = author_dc; + } + public String getAuthor_creat_de() { + return author_creat_de; + } + public void setAuthor_creat_de(String author_creat_de) { + this.author_creat_de = author_creat_de; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorRoleRelateVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorRoleRelateVO.java new file mode 100644 index 00000000..863b17da --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitAuthorRoleRelateVO.java @@ -0,0 +1,47 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 권한역할관계VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:00:03 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthorRoleRelateVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 3707886158690476749L; + + protected String author_code; //권한 코드 + protected String role_code; //역할 코드 + protected String creat_dt; //생성 일시 + + + public String getAuthor_code() { + return author_code; + } + public void setAuthor_code(String author_code) { + this.author_code = author_code; + } + public String getRole_code() { + return role_code; + } + public void setRole_code(String role_code) { + this.role_code = role_code; + } + public String getCreat_dt() { + return creat_dt; + } + public void setCreat_dt(String creat_dt) { + this.creat_dt = creat_dt; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsMastrOptionVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsMastrOptionVO.java new file mode 100644 index 00000000..e1067de6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsMastrOptionVO.java @@ -0,0 +1,75 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판마스터옵션VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 9:53:24 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsMastrOptionVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 2927192888379031338L; + + + protected String bbs_id; //게시판 id + protected String answer_at; //댓글 여부 + protected String stsfdg_at; //만족도 여부 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getBbs_id() { + return bbs_id; + } + public void setBbs_id(String bbs_id) { + this.bbs_id = bbs_id; + } + public String getAnswer_at() { + return answer_at; + } + public void setAnswer_at(String answer_at) { + this.answer_at = answer_at; + } + public String getStsfdg_at() { + return stsfdg_at; + } + public void setStsfdg_at(String stsfdg_at) { + this.stsfdg_at = stsfdg_at; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsMastrVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsMastrVO.java new file mode 100644 index 00000000..0b8c2c91 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsMastrVO.java @@ -0,0 +1,131 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판마스터VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:02:31 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsMastrVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -1339959559600118490L; + + protected String bbs_id; //게시판 id + protected String bbs_nm; //게시판 명 + protected String bbs_intrcn; //게시판 소개 + protected String bbs_ty_code; //게시판 유형 코드 + protected String bbs_attrb_code; //게시판 속성 코드 + protected String reply_posbl_at; //답장 가능 여부 + protected String file_atch_posbl_at; //파일 첨부 가능 여부 + protected String atch_posbl_file_number; //첨부 가능 파일 숫자 + protected String atch_posbl_file_size; //첨부 가능 파일 사이즈 + protected String use_at; //사용 여부 + protected String tmplat_id; //템플릿 id + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getBbs_id() { + return bbs_id; + } + public void setBbs_id(String bbs_id) { + this.bbs_id = bbs_id; + } + public String getBbs_nm() { + return bbs_nm; + } + public void setBbs_nm(String bbs_nm) { + this.bbs_nm = bbs_nm; + } + public String getBbs_intrcn() { + return bbs_intrcn; + } + public void setBbs_intrcn(String bbs_intrcn) { + this.bbs_intrcn = bbs_intrcn; + } + public String getBbs_ty_code() { + return bbs_ty_code; + } + public void setBbs_ty_code(String bbs_ty_code) { + this.bbs_ty_code = bbs_ty_code; + } + public String getBbs_attrb_code() { + return bbs_attrb_code; + } + public void setBbs_attrb_code(String bbs_attrb_code) { + this.bbs_attrb_code = bbs_attrb_code; + } + public String getReply_posbl_at() { + return reply_posbl_at; + } + public void setReply_posbl_at(String reply_posbl_at) { + this.reply_posbl_at = reply_posbl_at; + } + public String getFile_atch_posbl_at() { + return file_atch_posbl_at; + } + public void setFile_atch_posbl_at(String file_atch_posbl_at) { + this.file_atch_posbl_at = file_atch_posbl_at; + } + public String getAtch_posbl_file_number() { + return atch_posbl_file_number; + } + public void setAtch_posbl_file_number(String atch_posbl_file_number) { + this.atch_posbl_file_number = atch_posbl_file_number; + } + public String getAtch_posbl_file_size() { + return atch_posbl_file_size; + } + public void setAtch_posbl_file_size(String atch_posbl_file_size) { + this.atch_posbl_file_size = atch_posbl_file_size; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getTmplat_id() { + return tmplat_id; + } + public void setTmplat_id(String tmplat_id) { + this.tmplat_id = tmplat_id; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsPrcuseVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsPrcuseVO.java new file mode 100644 index 00000000..475db3ce --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsPrcuseVO.java @@ -0,0 +1,82 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판활용VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 9:55:57 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsPrcuseVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -3917966318177747811L; + + + protected String trget_id; //대상 id + protected String bbs_id; //게시판 id + protected String use_at; //사용 여부 + protected String regist_se_code; //등록 구분 코드 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getTrget_id() { + return trget_id; + } + public void setTrget_id(String trget_id) { + this.trget_id = trget_id; + } + public String getBbs_id() { + return bbs_id; + } + public void setBbs_id(String bbs_id) { + this.bbs_id = bbs_id; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getRegist_se_code() { + return regist_se_code; + } + public void setRegist_se_code(String regist_se_code) { + this.regist_se_code = regist_se_code; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsVO.java new file mode 100644 index 00000000..e7265bde --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitBbsVO.java @@ -0,0 +1,174 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 9:51:01 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -4864054465823963465L; + + protected String bbs_id; //게시판 id + protected String ntt_id; //게시물 id + protected String ntt_no; //게시물 번호 + protected String ntt_sj; //게시물 제목 + protected String ntt_cn; //게시물 내용 + protected String answer_at; //댓글 여부 + protected String parnts_sntnc_no; //부모 글 번호 + protected String answer_lc; //댓글 위치 + protected String sort_ordr; //정렬 순서 + protected String rdcnt; //조회수 + protected String use_at; //사용 여부 + protected String ntce_begin_de; //게시 시작 일 + protected String ntce_end_de; //게시 종료 일 + protected String ntcr_id; //게시자 id + protected String ntcr_nm; //게시자 명 + protected String password; //비밀번호 + protected String atch_file_id; //첨부 파일 id + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getBbs_id() { + return bbs_id; + } + public void setBbs_id(String bbs_id) { + this.bbs_id = bbs_id; + } + public String getNtt_id() { + return ntt_id; + } + public void setNtt_id(String ntt_id) { + this.ntt_id = ntt_id; + } + public String getNtt_no() { + return ntt_no; + } + public void setNtt_no(String ntt_no) { + this.ntt_no = ntt_no; + } + public String getNtt_sj() { + return ntt_sj; + } + public void setNtt_sj(String ntt_sj) { + this.ntt_sj = ntt_sj; + } + public String getNtt_cn() { + return ntt_cn; + } + public void setNtt_cn(String ntt_cn) { + this.ntt_cn = ntt_cn; + } + public String getAnswer_at() { + return answer_at; + } + public void setAnswer_at(String answer_at) { + this.answer_at = answer_at; + } + public String getParnts_sntnc_no() { + return parnts_sntnc_no; + } + public void setParnts_sntnc_no(String parnts_sntnc_no) { + this.parnts_sntnc_no = parnts_sntnc_no; + } + public String getAnswer_lc() { + return answer_lc; + } + public void setAnswer_lc(String answer_lc) { + this.answer_lc = answer_lc; + } + public String getSort_ordr() { + return sort_ordr; + } + public void setSort_ordr(String sort_ordr) { + this.sort_ordr = sort_ordr; + } + public String getRdcnt() { + return rdcnt; + } + public void setRdcnt(String rdcnt) { + this.rdcnt = rdcnt; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getNtce_begin_de() { + return ntce_begin_de; + } + public void setNtce_begin_de(String ntce_begin_de) { + this.ntce_begin_de = ntce_begin_de; + } + public String getNtce_end_de() { + return ntce_end_de; + } + public void setNtce_end_de(String ntce_end_de) { + this.ntce_end_de = ntce_end_de; + } + public String getNtcr_id() { + return ntcr_id; + } + public void setNtcr_id(String ntcr_id) { + this.ntcr_id = ntcr_id; + } + public String getNtcr_nm() { + return ntcr_nm; + } + public void setNtcr_nm(String ntcr_nm) { + this.ntcr_nm = ntcr_nm; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + public String getAtch_file_id() { + return atch_file_id; + } + public void setAtch_file_id(String atch_file_id) { + this.atch_file_id = atch_file_id; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnClCodeVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnClCodeVO.java new file mode 100644 index 00000000..960147bf --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnClCodeVO.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 공통분류코드VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:07:28 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCmmnClCodeVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1401681168922461269L; + + protected String cl_code; //분류 코드 + protected String cl_code_nm; //분류 코드 명 + protected String cl_code_dc; //분류 코드 설명 + protected String use_at; //사용 여부 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getCl_code() { + return cl_code; + } + public void setCl_code(String cl_code) { + this.cl_code = cl_code; + } + public String getCl_code_nm() { + return cl_code_nm; + } + public void setCl_code_nm(String cl_code_nm) { + this.cl_code_nm = cl_code_nm; + } + public String getCl_code_dc() { + return cl_code_dc; + } + public void setCl_code_dc(String cl_code_dc) { + this.cl_code_dc = cl_code_dc; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnCodeVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnCodeVO.java new file mode 100644 index 00000000..d0fba150 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnCodeVO.java @@ -0,0 +1,91 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 공통코드VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:05:36 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCmmnCodeVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -5850726883706732980L; + + protected String code_id; //코드 id + protected String code_id_nm; //코드 id 명 + protected String code_id_dc; //코드 id 설명 + protected String use_at; //사용 여부 + protected String cl_code; //분류 코드 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getCode_id() { + return code_id; + } + public void setCode_id(String code_id) { + this.code_id = code_id; + } + public String getCode_id_nm() { + return code_id_nm; + } + public void setCode_id_nm(String code_id_nm) { + this.code_id_nm = code_id_nm; + } + public String getCode_id_dc() { + return code_id_dc; + } + public void setCode_id_dc(String code_id_dc) { + this.code_id_dc = code_id_dc; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getCl_code() { + return cl_code; + } + public void setCl_code(String cl_code) { + this.cl_code = cl_code; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + public static long getSerialversionuid() { + return serialVersionUID; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnDetailCodeVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnDetailCodeVO.java new file mode 100644 index 00000000..05e2c1d8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitCmmnDetailCodeVO.java @@ -0,0 +1,117 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 공통상세코드VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:10:37 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCmmnDetailCodeVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -2614343577591823637L; + + protected String code_id; //코드 id + protected String code; //코드 + protected String code_nm; //코드 명 + protected String code_dc; //코드 설명 + protected String use_at; //사용 여부 + protected String etc_1; //기타1 + protected String etc_2; //기타2 + protected String etc_3; //기타3 + protected String ordr; //순서 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + public String getCode_id() { + return code_id; + } + public void setCode_id(String code_id) { + this.code_id = code_id; + } + public String getCode() { + return code; + } + public void setCode(String code) { + this.code = code; + } + public String getCode_nm() { + return code_nm; + } + public void setCode_nm(String code_nm) { + this.code_nm = code_nm; + } + public String getCode_dc() { + return code_dc; + } + public void setCode_dc(String code_dc) { + this.code_dc = code_dc; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getEtc_1() { + return etc_1; + } + public void setEtc_1(String etc_1) { + this.etc_1 = etc_1; + } + public String getEtc_2() { + return etc_2; + } + public void setEtc_2(String etc_2) { + this.etc_2 = etc_2; + } + public String getEtc_3() { + return etc_3; + } + public void setEtc_3(String etc_3) { + this.etc_3 = etc_3; + } + public String getOrdr() { + return ordr; + } + public void setOrdr(String ordr) { + this.ordr = ordr; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchopertVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchopertVO.java new file mode 100644 index 00000000..71493cbb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchopertVO.java @@ -0,0 +1,94 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치작업 VO + * @설명: + * @최초작성일: 2020. 7. 14. 오전 8:59:03 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitComtnbatchopertVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 5163451749856791820L; + + protected String batch_opert_id ;//배치작업ID + protected String batch_opert_nm ;//배치작업명 + protected String batch_opert_se ;//배치작업유형 + protected String batch_progrm ;//배치프로그램 + protected String paramtr ;//파라미터 + protected String use_at ;//사용여부 + protected String frst_register_id ;//최초등록자ID + protected String frst_regist_pnttm;//최초등록시점 + protected String last_updusr_id ;//최종수정자ID + protected String last_updt_pnttm ;//최종수정시점 + public String getBatch_opert_id() { + return batch_opert_id; + } + public void setBatch_opert_id(String batch_opert_id) { + this.batch_opert_id = batch_opert_id; + } + public String getBatch_opert_nm() { + return batch_opert_nm; + } + public void setBatch_opert_nm(String batch_opert_nm) { + this.batch_opert_nm = batch_opert_nm; + } + public String getBatch_opert_se() { + return batch_opert_se; + } + public void setBatch_opert_se(String batch_opert_se) { + this.batch_opert_se = batch_opert_se; + } + public String getBatch_progrm() { + return batch_progrm; + } + public void setBatch_progrm(String batch_progrm) { + this.batch_progrm = batch_progrm; + } + public String getParamtr() { + return paramtr; + } + public void setParamtr(String paramtr) { + this.paramtr = paramtr; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchresultVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchresultVO.java new file mode 100644 index 00000000..dabd6af3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchresultVO.java @@ -0,0 +1,110 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치결과 VO + * @설명: + * @최초작성일: 2020. 7. 15. 오전 10:45:30 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitComtnbatchresultVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -9154368238073909828L; + + protected String batch_result_id ; //배치결과ID + protected String batch_schdul_id ; //배치일정ID + protected String batch_opert_id ; //배치작업ID + protected String paramtr ; //파라미터 + protected String sttus ; //상태 + protected String error_info ; //오류정보 + protected String execut_begin_tm ; //실행시작시각 + protected String execut_end_tm ; //실행종료시각 + protected String last_updt_pnttm ; //최종수정시점 + protected String last_updusr_id ; //최종수정자ID + protected String frst_regist_pnttm; //최초등록시점 + protected String frst_register_id ; //최초등록ID + + + public String getBatch_result_id() { + return batch_result_id; + } + public void setBatch_result_id(String batch_result_id) { + this.batch_result_id = batch_result_id; + } + public String getBatch_schdul_id() { + return batch_schdul_id; + } + public void setBatch_schdul_id(String batch_schdul_id) { + this.batch_schdul_id = batch_schdul_id; + } + public String getBatch_opert_id() { + return batch_opert_id; + } + public void setBatch_opert_id(String batch_opert_id) { + this.batch_opert_id = batch_opert_id; + } + public String getParamtr() { + return paramtr; + } + public void setParamtr(String paramtr) { + this.paramtr = paramtr; + } + public String getSttus() { + return sttus; + } + public void setSttus(String sttus) { + this.sttus = sttus; + } + public String getError_info() { + return error_info; + } + public void setError_info(String error_info) { + this.error_info = error_info; + } + public String getExecut_begin_tm() { + return execut_begin_tm; + } + public void setExecut_begin_tm(String execut_begin_tm) { + this.execut_begin_tm = execut_begin_tm; + } + public String getExecut_end_tm() { + return execut_end_tm; + } + public void setExecut_end_tm(String execut_end_tm) { + this.execut_end_tm = execut_end_tm; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchschdulVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchschdulVO.java new file mode 100644 index 00000000..364df12a --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchschdulVO.java @@ -0,0 +1,102 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치스케줄 VO + * @설명: + * @최초작성일: 2020. 7. 14. 오후 1:51:28 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitComtnbatchschdulVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -7124941272530200632L; + + protected String batch_schdul_id ; //배치일정ID + protected String batch_opert_id ; //배치작업ID + protected String execut_cycle ; //실행주기 + protected String execut_schdul_de ; //실행일정 일 + protected String execut_schdul_hour ; //실행일정 시 + protected String execut_schdul_mnt ; //실행일정 분 + protected String execut_schdul_secnd; //실행일정 초 + protected String frst_register_id ; //최초등록자ID + protected String frst_regist_pnttm ; //최초등록시점 + protected String last_updusr_id ; //최종수정자ID + protected String last_updt_pnttm ; //최종수정시점 + + + public String getBatch_schdul_id() { + return batch_schdul_id; + } + public void setBatch_schdul_id(String batch_schdul_id) { + this.batch_schdul_id = batch_schdul_id; + } + public String getBatch_opert_id() { + return batch_opert_id; + } + public void setBatch_opert_id(String batch_opert_id) { + this.batch_opert_id = batch_opert_id; + } + public String getExecut_cycle() { + return execut_cycle; + } + public void setExecut_cycle(String execut_cycle) { + this.execut_cycle = execut_cycle; + } + public String getExecut_schdul_de() { + return execut_schdul_de; + } + public void setExecut_schdul_de(String execut_schdul_de) { + this.execut_schdul_de = execut_schdul_de; + } + public String getExecut_schdul_hour() { + return execut_schdul_hour; + } + public void setExecut_schdul_hour(String execut_schdul_hour) { + this.execut_schdul_hour = execut_schdul_hour; + } + public String getExecut_schdul_mnt() { + return execut_schdul_mnt; + } + public void setExecut_schdul_mnt(String execut_schdul_mnt) { + this.execut_schdul_mnt = execut_schdul_mnt; + } + public String getExecut_schdul_secnd() { + return execut_schdul_secnd; + } + public void setExecut_schdul_secnd(String execut_schdul_secnd) { + this.execut_schdul_secnd = execut_schdul_secnd; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchschduldfkVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchschduldfkVO.java new file mode 100644 index 00000000..7d2d47ac --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitComtnbatchschduldfkVO.java @@ -0,0 +1,38 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치스케줄요일 VO + * @설명: + * @최초작성일: 2020. 7. 14. 오후 3:27:54 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitComtnbatchschduldfkVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 2666490228047408792L; + + protected String batch_schdul_id ; //배치일정ID + protected String execut_schdul_dfk_se; //실행일정 요일구분 + + + public String getBatch_schdul_id() { + return batch_schdul_id; + } + public void setBatch_schdul_id(String batch_schdul_id) { + this.batch_schdul_id = batch_schdul_id; + } + public String getExecut_schdul_dfk_se() { + return execut_schdul_dfk_se; + } + public void setExecut_schdul_dfk_se(String execut_schdul_dfk_se) { + this.execut_schdul_dfk_se = execut_schdul_dfk_se; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitConectLogVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitConectLogVO.java new file mode 100644 index 00000000..27614620 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitConectLogVO.java @@ -0,0 +1,73 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 접속로그VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:12:36 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitConectLogVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1438044451146791997L; + + protected String log_id; //로그 id + protected String conect_id; //접속 id + protected String conect_ip; //접속 ip + protected String conect_mthd; //접속 방식 + protected String error_occrrnc_at; //오류 발생 여부 + protected String error_code; //오류 코드 + protected String creat_dt; //생성 일시 + + + public String getLog_id() { + return log_id; + } + public void setLog_id(String log_id) { + this.log_id = log_id; + } + public String getConect_id() { + return conect_id; + } + public void setConect_id(String conect_id) { + this.conect_id = conect_id; + } + public String getConect_ip() { + return conect_ip; + } + public void setConect_ip(String conect_ip) { + this.conect_ip = conect_ip; + } + public String getConect_mthd() { + return conect_mthd; + } + public void setConect_mthd(String conect_mthd) { + this.conect_mthd = conect_mthd; + } + public String getError_occrrnc_at() { + return error_occrrnc_at; + } + public void setError_occrrnc_at(String error_occrrnc_at) { + this.error_occrrnc_at = error_occrrnc_at; + } + public String getError_code() { + return error_code; + } + public void setError_code(String error_code) { + this.error_code = error_code; + } + public String getCreat_dt() { + return creat_dt; + } + public void setCreat_dt(String creat_dt) { + this.creat_dt = creat_dt; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitEntrprsMberVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitEntrprsMberVO.java new file mode 100644 index 00000000..f1502a9d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitEntrprsMberVO.java @@ -0,0 +1,194 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 기업회원VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:15:53 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitEntrprsMberVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -279550027005549283L; + + protected String entrprs_mber_id; //기업 회원 id + protected String entrprs_se_code; //기업 구분 코드 + protected String bizrno; //사업자등록번호 + protected String jurirno; //법인등록번호 + protected String cmpny_nm; //회사 명 + protected String cxfc; //대표이사 + protected String zip; //우편번호 + protected String adres; //주소 + protected String entrprs_middle_telno; //기업 중간 전화번호 + protected String fxnum; //팩스번호 + protected String induty_code; //업종 코드 + protected String applcnt_nm; //신청인 명 + protected String applcnt_ihidnum; //신청인 주민등록번호 + protected String sbscrb_de; //가입 일 + protected String entrprs_mber_sttus; //기업 회원 상태 + protected String entrprs_mber_password; //기업 회원 비밀번호 + protected String entrprs_mber_password_hint; //기업 회원 비밀번호 힌트 + protected String entrprs_mber_password_cnsr; //기업 회원 비밀번호 정답 + protected String group_id; //그룹 id + protected String detail_adres; //상세 주소 + protected String entrprs_end_telno; //기업 끝 전화번호 + protected String area_no; //지역 번호 + protected String applcnt_email_adres; //신청자 이메일 주소 + protected String esntl_id; //고유 id + + + + public String getEntrprs_mber_id() { + return entrprs_mber_id; + } + public void setEntrprs_mber_id(String entrprs_mber_id) { + this.entrprs_mber_id = entrprs_mber_id; + } + public String getEntrprs_se_code() { + return entrprs_se_code; + } + public void setEntrprs_se_code(String entrprs_se_code) { + this.entrprs_se_code = entrprs_se_code; + } + public String getBizrno() { + return bizrno; + } + public void setBizrno(String bizrno) { + this.bizrno = bizrno; + } + public String getJurirno() { + return jurirno; + } + public void setJurirno(String jurirno) { + this.jurirno = jurirno; + } + public String getCmpny_nm() { + return cmpny_nm; + } + public void setCmpny_nm(String cmpny_nm) { + this.cmpny_nm = cmpny_nm; + } + public String getCxfc() { + return cxfc; + } + public void setCxfc(String cxfc) { + this.cxfc = cxfc; + } + public String getZip() { + return zip; + } + public void setZip(String zip) { + this.zip = zip; + } + public String getAdres() { + return adres; + } + public void setAdres(String adres) { + this.adres = adres; + } + public String getEntrprs_middle_telno() { + return entrprs_middle_telno; + } + public void setEntrprs_middle_telno(String entrprs_middle_telno) { + this.entrprs_middle_telno = entrprs_middle_telno; + } + public String getFxnum() { + return fxnum; + } + public void setFxnum(String fxnum) { + this.fxnum = fxnum; + } + public String getInduty_code() { + return induty_code; + } + public void setInduty_code(String induty_code) { + this.induty_code = induty_code; + } + public String getApplcnt_nm() { + return applcnt_nm; + } + public void setApplcnt_nm(String applcnt_nm) { + this.applcnt_nm = applcnt_nm; + } + public String getApplcnt_ihidnum() { + return applcnt_ihidnum; + } + public void setApplcnt_ihidnum(String applcnt_ihidnum) { + this.applcnt_ihidnum = applcnt_ihidnum; + } + public String getSbscrb_de() { + return sbscrb_de; + } + public void setSbscrb_de(String sbscrb_de) { + this.sbscrb_de = sbscrb_de; + } + public String getEntrprs_mber_sttus() { + return entrprs_mber_sttus; + } + public void setEntrprs_mber_sttus(String entrprs_mber_sttus) { + this.entrprs_mber_sttus = entrprs_mber_sttus; + } + public String getEntrprs_mber_password() { + return entrprs_mber_password; + } + public void setEntrprs_mber_password(String entrprs_mber_password) { + this.entrprs_mber_password = entrprs_mber_password; + } + public String getEntrprs_mber_password_hint() { + return entrprs_mber_password_hint; + } + public void setEntrprs_mber_password_hint(String entrprs_mber_password_hint) { + this.entrprs_mber_password_hint = entrprs_mber_password_hint; + } + public String getEntrprs_mber_password_cnsr() { + return entrprs_mber_password_cnsr; + } + public void setEntrprs_mber_password_cnsr(String entrprs_mber_password_cnsr) { + this.entrprs_mber_password_cnsr = entrprs_mber_password_cnsr; + } + public String getGroup_id() { + return group_id; + } + public void setGroup_id(String group_id) { + this.group_id = group_id; + } + public String getDetail_adres() { + return detail_adres; + } + public void setDetail_adres(String detail_adres) { + this.detail_adres = detail_adres; + } + public String getEntrprs_end_telno() { + return entrprs_end_telno; + } + public void setEntrprs_end_telno(String entrprs_end_telno) { + this.entrprs_end_telno = entrprs_end_telno; + } + public String getArea_no() { + return area_no; + } + public void setArea_no(String area_no) { + this.area_no = area_no; + } + public String getApplcnt_email_adres() { + return applcnt_email_adres; + } + public void setApplcnt_email_adres(String applcnt_email_adres) { + this.applcnt_email_adres = applcnt_email_adres; + } + public String getEsntl_id() { + return esntl_id; + } + public void setEsntl_id(String esntl_id) { + this.esntl_id = esntl_id; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitFileAttrbVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitFileAttrbVO.java new file mode 100644 index 00000000..adb812a5 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitFileAttrbVO.java @@ -0,0 +1,47 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 파일속성VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:19:35 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitFileAttrbVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -5528735210988956746L; + + protected String atch_file_id; //첨부 파일 id + protected String creat_dt; //생성 일시 + protected String use_at; //사용 여부 + + + public String getAtch_file_id() { + return atch_file_id; + } + public void setAtch_file_id(String atch_file_id) { + this.atch_file_id = atch_file_id; + } + public String getCreat_dt() { + return creat_dt; + } + public void setCreat_dt(String creat_dt) { + this.creat_dt = creat_dt; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitFileDetailInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitFileDetailInfoVO.java new file mode 100644 index 00000000..fc195ac4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitFileDetailInfoVO.java @@ -0,0 +1,80 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 파일상세정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:21:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitFileDetailInfoVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 6298959309900359185L; + + + protected String atch_file_id; //첨부 파일 id + protected String file_sn; //파일 순번 + protected String file_stre_cours; //파일 저장 경로 + protected String stre_file_nm; //저장 파일 명 + protected String orignl_file_nm; //본래 파일 명 + protected String file_extsn; //파일 확장자 + protected String file_cn; //파일 내용 + protected String file_size; //파일 사이즈 + + public String getAtch_file_id() { + return atch_file_id; + } + public void setAtch_file_id(String atch_file_id) { + this.atch_file_id = atch_file_id; + } + public String getFile_sn() { + return file_sn; + } + public void setFile_sn(String file_sn) { + this.file_sn = file_sn; + } + public String getFile_stre_cours() { + return file_stre_cours; + } + public void setFile_stre_cours(String file_stre_cours) { + this.file_stre_cours = file_stre_cours; + } + public String getStre_file_nm() { + return stre_file_nm; + } + public void setStre_file_nm(String stre_file_nm) { + this.stre_file_nm = stre_file_nm; + } + public String getOrignl_file_nm() { + return orignl_file_nm; + } + public void setOrignl_file_nm(String orignl_file_nm) { + this.orignl_file_nm = orignl_file_nm; + } + public String getFile_extsn() { + return file_extsn; + } + public void setFile_extsn(String file_extsn) { + this.file_extsn = file_extsn; + } + public String getFile_cn() { + return file_cn; + } + public void setFile_cn(String file_cn) { + this.file_cn = file_cn; + } + public String getFile_size() { + return file_size; + } + public void setFile_size(String file_size) { + this.file_size = file_size; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitGnrlMberVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitGnrlMberVO.java new file mode 100644 index 00000000..2e44b468 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitGnrlMberVO.java @@ -0,0 +1,164 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 일반회원VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:23:42 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitGnrlMberVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -8432104288694124828L; + + protected String mber_id; //회원 id + protected String password; //비밀번호 + protected String password_hint; //비밀번호 힌트 + protected String password_cnsr; //비밀번호 정답 + protected String ihidnum; //주민등록번호 + protected String mber_nm; //회원 명 + protected String zip; //우편번호 + protected String adres; //주소 + protected String area_no; //지역 번호 + protected String mber_sttus; //회원 상태 + protected String detail_adres; //상세 주소 + protected String end_telno; //끝 전화번호 + protected String mbtlnum; //이동전화번호 + protected String group_id; //그룹 id + protected String mber_fxnum; //회원 팩스번호 + protected String mber_email_adres; //회원 이메일 주소 + protected String middle_telno; //중간 전화번호 + protected String sbscrb_de; //가입 일자 + protected String sexdstn_code; //성별 코드 + protected String esntl_id; //고유 id + + + public String getMber_id() { + return mber_id; + } + public void setMber_id(String mber_id) { + this.mber_id = mber_id; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + public String getPassword_hint() { + return password_hint; + } + public void setPassword_hint(String password_hint) { + this.password_hint = password_hint; + } + public String getPassword_cnsr() { + return password_cnsr; + } + public void setPassword_cnsr(String password_cnsr) { + this.password_cnsr = password_cnsr; + } + public String getIhidnum() { + return ihidnum; + } + public void setIhidnum(String ihidnum) { + this.ihidnum = ihidnum; + } + public String getMber_nm() { + return mber_nm; + } + public void setMber_nm(String mber_nm) { + this.mber_nm = mber_nm; + } + public String getZip() { + return zip; + } + public void setZip(String zip) { + this.zip = zip; + } + public String getAdres() { + return adres; + } + public void setAdres(String adres) { + this.adres = adres; + } + public String getArea_no() { + return area_no; + } + public void setArea_no(String area_no) { + this.area_no = area_no; + } + public String getMber_sttus() { + return mber_sttus; + } + public void setMber_sttus(String mber_sttus) { + this.mber_sttus = mber_sttus; + } + public String getDetail_adres() { + return detail_adres; + } + public void setDetail_adres(String detail_adres) { + this.detail_adres = detail_adres; + } + public String getEnd_telno() { + return end_telno; + } + public void setEnd_telno(String end_telno) { + this.end_telno = end_telno; + } + public String getMbtlnum() { + return mbtlnum; + } + public void setMbtlnum(String mbtlnum) { + this.mbtlnum = mbtlnum; + } + public String getGroup_id() { + return group_id; + } + public void setGroup_id(String group_id) { + this.group_id = group_id; + } + public String getMber_fxnum() { + return mber_fxnum; + } + public void setMber_fxnum(String mber_fxnum) { + this.mber_fxnum = mber_fxnum; + } + public String getMber_email_adres() { + return mber_email_adres; + } + public void setMber_email_adres(String mber_email_adres) { + this.mber_email_adres = mber_email_adres; + } + public String getMiddle_telno() { + return middle_telno; + } + public void setMiddle_telno(String middle_telno) { + this.middle_telno = middle_telno; + } + public String getSbscrb_de() { + return sbscrb_de; + } + public void setSbscrb_de(String sbscrb_de) { + this.sbscrb_de = sbscrb_de; + } + public String getSexdstn_code() { + return sexdstn_code; + } + public void setSexdstn_code(String sexdstn_code) { + this.sexdstn_code = sexdstn_code; + } + public String getEsntl_id() { + return esntl_id; + } + public void setEsntl_id(String esntl_id) { + this.esntl_id = esntl_id; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitIdsVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitIdsVO.java new file mode 100644 index 00000000..01510c89 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitIdsVO.java @@ -0,0 +1,37 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: IDS VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:26:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitIdsVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 958659413860795629L; + + protected String table_nm; //테이블 명 + protected String next_id; //다음 id + + public String getTable_nm() { + return table_nm; + } + public void setTable_nm(String table_nm) { + this.table_nm = table_nm; + } + public String getNext_id() { + return next_id; + } + public void setNext_id(String next_id) { + this.next_id = next_id; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitLoginPolicyVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitLoginPolicyVO.java new file mode 100644 index 00000000..6c8cce88 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitLoginPolicyVO.java @@ -0,0 +1,82 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 로그인정책VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:28:13 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitLoginPolicyVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -7656857482565281814L; + + + protected String user_id; //사용자 id + protected String ip_info; //ip 정보 + protected String dplct_perm_at; //중복 허용 여부 + protected String lmtt_at; //제한 여부 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + public String getUser_id() { + return user_id; + } + public void setUser_id(String user_id) { + this.user_id = user_id; + } + public String getIp_info() { + return ip_info; + } + public void setIp_info(String ip_info) { + this.ip_info = ip_info; + } + public String getDplct_perm_at() { + return dplct_perm_at; + } + public void setDplct_perm_at(String dplct_perm_at) { + this.dplct_perm_at = dplct_perm_at; + } + public String getLmtt_at() { + return lmtt_at; + } + public void setLmtt_at(String lmtt_at) { + this.lmtt_at = lmtt_at; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitMenuCreatDtlsVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitMenuCreatDtlsVO.java new file mode 100644 index 00000000..585a231d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitMenuCreatDtlsVO.java @@ -0,0 +1,47 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 메뉴생성내역VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:29:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuCreatDtlsVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 568460849738293096L; + + + protected String menu_no; //메뉴 번호 + protected String author_code; //권한 코드 + protected String mapng_creat_id; //매핑 생성 id + + public String getMenu_no() { + return menu_no; + } + public void setMenu_no(String menu_no) { + this.menu_no = menu_no; + } + public String getAuthor_code() { + return author_code; + } + public void setAuthor_code(String author_code) { + this.author_code = author_code; + } + public String getMapng_creat_id() { + return mapng_creat_id; + } + public void setMapng_creat_id(String mapng_creat_id) { + this.mapng_creat_id = mapng_creat_id; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitMenuInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitMenuInfoVO.java new file mode 100644 index 00000000..461721b1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitMenuInfoVO.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 메뉴정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:33:02 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuInfoVO extends BaseVO { + + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -1346557609566350808L; + + + protected String menu_no; //메뉴 번호 + protected String menu_nm; //메뉴 명 + protected String progrm_file_nm; //프로그램 파일 명 + protected String upper_menu_no; //상위 메뉴 번호 + protected String menu_ordr; //메뉴 순서 + protected String menu_dc; //메뉴 설명 + protected String relate_image_cours; //관계 이미지 경로 + protected String relate_image_nm; //관계 이미지 명 + + public String getMenu_no() { + return menu_no; + } + public void setMenu_no(String menu_no) { + this.menu_no = menu_no; + } + public String getMenu_nm() { + return menu_nm; + } + public void setMenu_nm(String menu_nm) { + this.menu_nm = menu_nm; + } + public String getProgrm_file_nm() { + return progrm_file_nm; + } + public void setProgrm_file_nm(String progrm_file_nm) { + this.progrm_file_nm = progrm_file_nm; + } + public String getUpper_menu_no() { + return upper_menu_no; + } + public void setUpper_menu_no(String upper_menu_no) { + this.upper_menu_no = upper_menu_no; + } + public String getMenu_ordr() { + return menu_ordr; + } + public void setMenu_ordr(String menu_ordr) { + this.menu_ordr = menu_ordr; + } + public String getMenu_dc() { + return menu_dc; + } + public void setMenu_dc(String menu_dc) { + this.menu_dc = menu_dc; + } + public String getRelate_image_cours() { + return relate_image_cours; + } + public void setRelate_image_cours(String relate_image_cours) { + this.relate_image_cours = relate_image_cours; + } + public String getRelate_image_nm() { + return relate_image_nm; + } + public void setRelate_image_nm(String relate_image_nm) { + this.relate_image_nm = relate_image_nm; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitOrgnztInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitOrgnztInfoVO.java new file mode 100644 index 00000000..2bb0a9d0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitOrgnztInfoVO.java @@ -0,0 +1,47 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 조직정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:34:31 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitOrgnztInfoVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 2971244133704702294L; + + + protected String orgnzt_id; //조직 id + protected String orgnzt_nm; //조직 명 + protected String orgnzt_dc; //조직 설명 + + + public String getOrgnzt_id() { + return orgnzt_id; + } + public void setOrgnzt_id(String orgnzt_id) { + this.orgnzt_id = orgnzt_id; + } + public String getOrgnzt_nm() { + return orgnzt_nm; + } + public void setOrgnzt_nm(String orgnzt_nm) { + this.orgnzt_nm = orgnzt_nm; + } + public String getOrgnzt_dc() { + return orgnzt_dc; + } + public void setOrgnzt_dc(String orgnzt_dc) { + this.orgnzt_dc = orgnzt_dc; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitRoleInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitRoleInfoVO.java new file mode 100644 index 00000000..836e3659 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitRoleInfoVO.java @@ -0,0 +1,72 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 역할정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:37:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitRoleInfoVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = -2397747474398186436L; + + protected String role_code; //역할 코드 + protected String role_nm; //역할 명 + protected String role_pttrn; //역할 패턴 + protected String role_dc; //역할 설명 + protected String role_ty; //역할 유형 + protected String role_sort; //역할 정렬 + protected String role_creat_de; //역할 생성 일 + + + public String getRole_code() { + return role_code; + } + public void setRole_code(String role_code) { + this.role_code = role_code; + } + public String getRole_nm() { + return role_nm; + } + public void setRole_nm(String role_nm) { + this.role_nm = role_nm; + } + public String getRole_pttrn() { + return role_pttrn; + } + public void setRole_pttrn(String role_pttrn) { + this.role_pttrn = role_pttrn; + } + public String getRole_dc() { + return role_dc; + } + public void setRole_dc(String role_dc) { + this.role_dc = role_dc; + } + public String getRole_ty() { + return role_ty; + } + public void setRole_ty(String role_ty) { + this.role_ty = role_ty; + } + public String getRole_sort() { + return role_sort; + } + public void setRole_sort(String role_sort) { + this.role_sort = role_sort; + } + public String getRole_creat_de() { + return role_creat_de; + } + public void setRole_creat_de(String role_creat_de) { + this.role_creat_de = role_creat_de; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitRoleSclsrtRescueVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitRoleSclsrtRescueVO.java new file mode 100644 index 00000000..bf45197f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitRoleSclsrtRescueVO.java @@ -0,0 +1,38 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 역할계층구조VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:54:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitRoleSclsrtRescueVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 8476668045494460949L; + + + protected String parnts_role; //부모 역할 + protected String chldrn_role; //자식 역할 + + + public String getParnts_role() { + return parnts_role; + } + public void setParnts_role(String parnts_role) { + this.parnts_role = parnts_role; + } + public String getChldrn_role() { + return chldrn_role; + } + public void setChldrn_role(String chldrn_role) { + this.chldrn_role = chldrn_role; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitSysLogSumryVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitSysLogSumryVO.java new file mode 100644 index 00000000..af0bcf92 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitSysLogSumryVO.java @@ -0,0 +1,87 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 시스템로그요약VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:56:55 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitSysLogSumryVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -5628701547777983067L; + + protected String occrrnc_de; //발생 일 + protected String srvc_nm; //서비스 명 + protected String method_nm; //방안 명 + protected String creat_co; //생성 수 + protected String updt_co; //수정 수 + protected String rdcnt; //조회수 + protected String delete_co; //삭제 수 + protected String outpt_co; //출력 수 + protected String error_co; //오류 수 + + + public String getOccrrnc_de() { + return occrrnc_de; + } + public void setOccrrnc_de(String occrrnc_de) { + this.occrrnc_de = occrrnc_de; + } + public String getSrvc_nm() { + return srvc_nm; + } + public void setSrvc_nm(String srvc_nm) { + this.srvc_nm = srvc_nm; + } + public String getMethod_nm() { + return method_nm; + } + public void setMethod_nm(String method_nm) { + this.method_nm = method_nm; + } + public String getCreat_co() { + return creat_co; + } + public void setCreat_co(String creat_co) { + this.creat_co = creat_co; + } + public String getUpdt_co() { + return updt_co; + } + public void setUpdt_co(String updt_co) { + this.updt_co = updt_co; + } + public String getRdcnt() { + return rdcnt; + } + public void setRdcnt(String rdcnt) { + this.rdcnt = rdcnt; + } + public String getDelete_co() { + return delete_co; + } + public void setDelete_co(String delete_co) { + this.delete_co = delete_co; + } + public String getOutpt_co() { + return outpt_co; + } + public void setOutpt_co(String outpt_co) { + this.outpt_co = outpt_co; + } + public String getError_co() { + return error_co; + } + public void setError_co(String error_co) { + this.error_co = error_co; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitTmplatInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitTmplatInfoVO.java new file mode 100644 index 00000000..f03998e9 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitTmplatInfoVO.java @@ -0,0 +1,87 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 템플릿정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 10:58:48 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitTmplatInfoVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 2918033146249358704L; + + protected String tmplat_id; //템플릿 id + protected String tmplat_nm; //템플릿 명 + protected String tmplat_cours; //템플릿 경로 + protected String use_at; //사용 여부 + protected String tmplat_se_code; //템플릿 구분 코드 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + + public String getTmplat_id() { + return tmplat_id; + } + public void setTmplat_id(String tmplat_id) { + this.tmplat_id = tmplat_id; + } + public String getTmplat_nm() { + return tmplat_nm; + } + public void setTmplat_nm(String tmplat_nm) { + this.tmplat_nm = tmplat_nm; + } + public String getTmplat_cours() { + return tmplat_cours; + } + public void setTmplat_cours(String tmplat_cours) { + this.tmplat_cours = tmplat_cours; + } + public String getUse_at() { + return use_at; + } + public void setUse_at(String use_at) { + this.use_at = use_at; + } + public String getTmplat_se_code() { + return tmplat_se_code; + } + public void setTmplat_se_code(String tmplat_se_code) { + this.tmplat_se_code = tmplat_se_code; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitUserAbsnceVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserAbsnceVO.java new file mode 100644 index 00000000..3e1146c0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserAbsnceVO.java @@ -0,0 +1,66 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자부재VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 11:01:24 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserAbsnceVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 5956240207771103612L; + + + protected String user_id; //사용자 id + protected String user_absnce_at; //사용자 부재 여부 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + public String getUser_id() { + return user_id; + } + public void setUser_id(String user_id) { + this.user_id = user_id; + } + public String getUser_absnce_at() { + return user_absnce_at; + } + public void setUser_absnce_at(String user_absnce_at) { + this.user_absnce_at = user_absnce_at; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitUserEtcOptionVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserEtcOptionVO.java new file mode 100644 index 00000000..b7eb8c52 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserEtcOptionVO.java @@ -0,0 +1,64 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자기타옵션VO + * @설명: 사용자의 기타 옵션을 설정 한다. (프로젝트별 옵션 추가 필요 시 컬럼을 추가하여 사용) + * @최초작성일: 2020. 11. 5. 오후 4:41:01 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserEtcOptionVO extends BaseVO { + + + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 2424456977596618565L; + + + protected String user_id; //사용자 id + protected String job_data_author; //업무 데이터 권한 + protected String user_manage_author; //사용자 관리 권한 + protected String elctrnsanctn_use_at; //전자결재 사용 여부(시스템별 필요 시 사용) + protected String job_confm_author_at; //업무 승인 권한(시스템별 필요 시 사용) + + + + public String getUser_id() { + return user_id; + } + public void setUser_id(String user_id) { + this.user_id = user_id; + } + public String getJob_data_author() { + return job_data_author; + } + public void setJob_data_author(String job_data_author) { + this.job_data_author = job_data_author; + } + public String getUser_manage_author() { + return user_manage_author; + } + public void setUser_manage_author(String user_manage_author) { + this.user_manage_author = user_manage_author; + } + public String getElctrnsanctn_use_at() { + return elctrnsanctn_use_at; + } + public void setElctrnsanctn_use_at(String elctrnsanctn_use_at) { + this.elctrnsanctn_use_at = elctrnsanctn_use_at; + } + public String getJob_confm_author_at() { + return job_confm_author_at; + } + public void setJob_confm_author_at(String job_confm_author_at) { + this.job_confm_author_at = job_confm_author_at; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitUserInfoChangeDtlsVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserInfoChangeDtlsVO.java new file mode 100644 index 00000000..d29a96a2 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserInfoChangeDtlsVO.java @@ -0,0 +1,164 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자정보변경내역VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 11:05:06 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserInfoChangeDtlsVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 5110481577978255607L; + + protected String user_id; //사용자 id + protected String change_de; //변경 일 + protected String orgnzt_id; //조직 id + protected String group_id; //그룹 id + protected String empl_no; //사원 번호 + protected String sexdstn_code; //성별 코드 + protected String brthdy; //생일 + protected String fxnum; //팩스번호 + protected String house_adres; //주택 주소 + protected String house_end_telno; //주택 끝 전화번호 + protected String area_no; //지역 번호 + protected String detail_adres; //상세 주소 + protected String zip; //우편번호 + protected String offm_telno; //사무실 전화번호 + protected String mbtlnum; //이동전화번호 + protected String email_adres; //이메일 주소 + protected String house_middle_telno; //주택 중간 전화번호 + protected String pstinst_code; //소속기관 코드 + protected String user_sttus_code; //사용자 상태 코드 + protected String esntl_id; //고유 id + + public String getUser_id() { + return user_id; + } + public void setUser_id(String user_id) { + this.user_id = user_id; + } + public String getChange_de() { + return change_de; + } + public void setChange_de(String change_de) { + this.change_de = change_de; + } + public String getOrgnzt_id() { + return orgnzt_id; + } + public void setOrgnzt_id(String orgnzt_id) { + this.orgnzt_id = orgnzt_id; + } + public String getGroup_id() { + return group_id; + } + public void setGroup_id(String group_id) { + this.group_id = group_id; + } + public String getEmpl_no() { + return empl_no; + } + public void setEmpl_no(String empl_no) { + this.empl_no = empl_no; + } + public String getSexdstn_code() { + return sexdstn_code; + } + public void setSexdstn_code(String sexdstn_code) { + this.sexdstn_code = sexdstn_code; + } + public String getBrthdy() { + return brthdy; + } + public void setBrthdy(String brthdy) { + this.brthdy = brthdy; + } + public String getFxnum() { + return fxnum; + } + public void setFxnum(String fxnum) { + this.fxnum = fxnum; + } + public String getHouse_adres() { + return house_adres; + } + public void setHouse_adres(String house_adres) { + this.house_adres = house_adres; + } + public String getHouse_end_telno() { + return house_end_telno; + } + public void setHouse_end_telno(String house_end_telno) { + this.house_end_telno = house_end_telno; + } + public String getArea_no() { + return area_no; + } + public void setArea_no(String area_no) { + this.area_no = area_no; + } + public String getDetail_adres() { + return detail_adres; + } + public void setDetail_adres(String detail_adres) { + this.detail_adres = detail_adres; + } + public String getZip() { + return zip; + } + public void setZip(String zip) { + this.zip = zip; + } + public String getOffm_telno() { + return offm_telno; + } + public void setOffm_telno(String offm_telno) { + this.offm_telno = offm_telno; + } + public String getMbtlnum() { + return mbtlnum; + } + public void setMbtlnum(String mbtlnum) { + this.mbtlnum = mbtlnum; + } + public String getEmail_adres() { + return email_adres; + } + public void setEmail_adres(String email_adres) { + this.email_adres = email_adres; + } + public String getHouse_middle_telno() { + return house_middle_telno; + } + public void setHouse_middle_telno(String house_middle_telno) { + this.house_middle_telno = house_middle_telno; + } + public String getPstinst_code() { + return pstinst_code; + } + public void setPstinst_code(String pstinst_code) { + this.pstinst_code = pstinst_code; + } + public String getUser_sttus_code() { + return user_sttus_code; + } + public void setUser_sttus_code(String user_sttus_code) { + this.user_sttus_code = user_sttus_code; + } + public String getEsntl_id() { + return esntl_id; + } + public void setEsntl_id(String esntl_id) { + this.esntl_id = esntl_id; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitUserInfoVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserInfoVO.java new file mode 100644 index 00000000..d6257d9d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserInfoVO.java @@ -0,0 +1,224 @@ +package kr.xit.framework.biz.cmm.model; + +/** + * + * @업무그룹명: 사용자정보VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 11:03:03 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserInfoVO extends XitUserEtcOptionVO{ + /** + * serialVersionUID + */ + private static final long serialVersionUID = -4545167436366021662L; + + +// protected String user_id; //사용자 id + protected String orgnzt_id; //조직 id + protected String user_nm; //사용자 명 + protected String password; //비밀번호 + protected String empl_no; //사원 번호 + protected String ihidnum; //주민등록번호 + protected String sexdstn_code; //성별 코드 + protected String brthdy; //생일 + protected String fxnum; //팩스번호 + protected String house_adres; //주택 주소 + protected String password_hint; //비밀번호 힌트 + protected String password_cnsr; //비밀번호 정답 + protected String house_end_telno; //주택 끝 전화번호 + protected String area_no; //지역 번호 + protected String detail_adres; //상세 주소 + protected String zip; //우편번호 + protected String offm_telno; //사무실 전화번호 + protected String mbtlnum; //이동전화번호 + protected String email_adres; //이메일 주소 + protected String ofcps_nm; //직위 명 + protected String house_middle_telno; //주택 중간 전화번호 + protected String group_id; //그룹 id + protected String pstinst_code; //소속기관 코드 + protected String user_sttus_code; //사용자 상태 코드 + protected String esntl_id; //고유 id + protected String crtfc_dn_value; //인증 dn 값 + protected String sbscrb_de; //가입 일 + + + /* ********************** + * 기타 컬럼 + ***********************/ + protected String orgnzt_nm; //조직 id 명 + +// public String getUser_id() { +// return user_id; +// } +// public void setUser_id(String user_id) { +// this.user_id = user_id; +// } + public String getOrgnzt_id() { + return orgnzt_id; + } + public void setOrgnzt_id(String orgnzt_id) { + this.orgnzt_id = orgnzt_id; + } + public String getUser_nm() { + return user_nm; + } + public void setUser_nm(String user_nm) { + this.user_nm = user_nm; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + public String getEmpl_no() { + return empl_no; + } + public void setEmpl_no(String empl_no) { + this.empl_no = empl_no; + } + public String getIhidnum() { + return ihidnum; + } + public void setIhidnum(String ihidnum) { + this.ihidnum = ihidnum; + } + public String getSexdstn_code() { + return sexdstn_code; + } + public void setSexdstn_code(String sexdstn_code) { + this.sexdstn_code = sexdstn_code; + } + public String getBrthdy() { + return brthdy; + } + public void setBrthdy(String brthdy) { + this.brthdy = brthdy; + } + public String getFxnum() { + return fxnum; + } + public void setFxnum(String fxnum) { + this.fxnum = fxnum; + } + public String getHouse_adres() { + return house_adres; + } + public void setHouse_adres(String house_adres) { + this.house_adres = house_adres; + } + public String getPassword_hint() { + return password_hint; + } + public void setPassword_hint(String password_hint) { + this.password_hint = password_hint; + } + public String getPassword_cnsr() { + return password_cnsr; + } + public void setPassword_cnsr(String password_cnsr) { + this.password_cnsr = password_cnsr; + } + public String getHouse_end_telno() { + return house_end_telno; + } + public void setHouse_end_telno(String house_end_telno) { + this.house_end_telno = house_end_telno; + } + public String getArea_no() { + return area_no; + } + public void setArea_no(String area_no) { + this.area_no = area_no; + } + public String getDetail_adres() { + return detail_adres; + } + public void setDetail_adres(String detail_adres) { + this.detail_adres = detail_adres; + } + public String getZip() { + return zip; + } + public void setZip(String zip) { + this.zip = zip; + } + public String getOffm_telno() { + return offm_telno; + } + public void setOffm_telno(String offm_telno) { + this.offm_telno = offm_telno; + } + public String getMbtlnum() { + return mbtlnum; + } + public void setMbtlnum(String mbtlnum) { + this.mbtlnum = mbtlnum; + } + public String getEmail_adres() { + return email_adres; + } + public void setEmail_adres(String email_adres) { + this.email_adres = email_adres; + } + public String getOfcps_nm() { + return ofcps_nm; + } + public void setOfcps_nm(String ofcps_nm) { + this.ofcps_nm = ofcps_nm; + } + public String getHouse_middle_telno() { + return house_middle_telno; + } + public void setHouse_middle_telno(String house_middle_telno) { + this.house_middle_telno = house_middle_telno; + } + public String getGroup_id() { + return group_id; + } + public void setGroup_id(String group_id) { + this.group_id = group_id; + } + public String getPstinst_code() { + return pstinst_code; + } + public void setPstinst_code(String pstinst_code) { + this.pstinst_code = pstinst_code; + } + public String getUser_sttus_code() { + return user_sttus_code; + } + public void setUser_sttus_code(String user_sttus_code) { + this.user_sttus_code = user_sttus_code; + } + public String getEsntl_id() { + return esntl_id; + } + public void setEsntl_id(String esntl_id) { + this.esntl_id = esntl_id; + } + public String getCrtfc_dn_value() { + return crtfc_dn_value; + } + public void setCrtfc_dn_value(String crtfc_dn_value) { + this.crtfc_dn_value = crtfc_dn_value; + } + public String getSbscrb_de() { + return sbscrb_de; + } + public void setSbscrb_de(String sbscrb_de) { + this.sbscrb_de = sbscrb_de; + } + public String getOrgnzt_nm() { + return orgnzt_nm; + } + public void setOrgnzt_nm(String orgnzt_nm) { + this.orgnzt_nm = orgnzt_nm; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitUserScrtySetupVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserScrtySetupVO.java new file mode 100644 index 00000000..9265873f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitUserScrtySetupVO.java @@ -0,0 +1,43 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자보안설정VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 11:07:43 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserScrtySetupVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = -4431553754531650113L; + + protected String scrty_setup_trget_id; //보안 설정 대상 id + protected String mber_ty_code; //회원 유형 코드 + protected String author_code; //권한 코드 + + public String getScrty_setup_trget_id() { + return scrty_setup_trget_id; + } + public void setScrty_setup_trget_id(String scrty_setup_trget_id) { + this.scrty_setup_trget_id = scrty_setup_trget_id; + } + public String getMber_ty_code() { + return mber_ty_code; + } + public void setMber_ty_code(String mber_ty_code) { + this.mber_ty_code = mber_ty_code; + } + public String getAuthor_code() { + return author_code; + } + public void setAuthor_code(String author_code) { + this.author_code = author_code; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/XitZipVO.java b/src/main/java/kr/xit/framework/biz/cmm/model/XitZipVO.java new file mode 100644 index 00000000..3969e4f8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/XitZipVO.java @@ -0,0 +1,99 @@ +package kr.xit.framework.biz.cmm.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 우편번호VO + * @설명: + * @최초작성일: 2020. 3. 21. 오전 11:09:43 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitZipVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 4605306814494484965L; + + protected String zip; //우편번호 + protected String sn; //순번 + protected String ctprvn_nm; //시도 명 + protected String signgu_nm; //시군구 명 + protected String emd_nm; //읍면동 명 + protected String li_buld_nm; //리 건물 명 + protected String lnbr_dong_ho; //번지 동 호 + protected String frst_regist_pnttm; //최초 등록 시점 + protected String frst_register_id; //최초 등록자 id + protected String last_updt_pnttm; //최종 수정 시점 + protected String last_updusr_id; //최종 수정자 id + + public String getZip() { + return zip; + } + public void setZip(String zip) { + this.zip = zip; + } + public String getSn() { + return sn; + } + public void setSn(String sn) { + this.sn = sn; + } + public String getCtprvn_nm() { + return ctprvn_nm; + } + public void setCtprvn_nm(String ctprvn_nm) { + this.ctprvn_nm = ctprvn_nm; + } + public String getSigngu_nm() { + return signgu_nm; + } + public void setSigngu_nm(String signgu_nm) { + this.signgu_nm = signgu_nm; + } + public String getEmd_nm() { + return emd_nm; + } + public void setEmd_nm(String emd_nm) { + this.emd_nm = emd_nm; + } + public String getLi_buld_nm() { + return li_buld_nm; + } + public void setLi_buld_nm(String li_buld_nm) { + this.li_buld_nm = li_buld_nm; + } + public String getLnbr_dong_ho() { + return lnbr_dong_ho; + } + public void setLnbr_dong_ho(String lnbr_dong_ho) { + this.lnbr_dong_ho = lnbr_dong_ho; + } + public String getFrst_regist_pnttm() { + return frst_regist_pnttm; + } + public void setFrst_regist_pnttm(String frst_regist_pnttm) { + this.frst_regist_pnttm = frst_regist_pnttm; + } + public String getFrst_register_id() { + return frst_register_id; + } + public void setFrst_register_id(String frst_register_id) { + this.frst_register_id = frst_register_id; + } + public String getLast_updt_pnttm() { + return last_updt_pnttm; + } + public void setLast_updt_pnttm(String last_updt_pnttm) { + this.last_updt_pnttm = last_updt_pnttm; + } + public String getLast_updusr_id() { + return last_updusr_id; + } + public void setLast_updusr_id(String last_updusr_id) { + this.last_updusr_id = last_updusr_id; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameBizLogicService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameBizLogicService.java new file mode 100644 index 00000000..619e9b01 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameBizLogicService.java @@ -0,0 +1,16 @@ +package kr.xit.framework.biz.cmm.service; + +/** + * + * @업무그룹명: XIT 프레임워크 비즈니스로직 프로세스 Service + * @설명: XIT프레임워크에서 제공하는 컴포넌트의 비즈니스 로직 서비스를 기술 한다. + *
비즈니스로직은 단위 프로세스 및 필요에 따라 CRUD서비스를 활용하여 작성하도록 한다. + * @최초작성일: 2020. 3. 18. 오후 4:47:45 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitFrameBizLogicService { + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameCodeService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameCodeService.java new file mode 100644 index 00000000..372ef40b --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameCodeService.java @@ -0,0 +1,90 @@ +package kr.xit.framework.biz.cmm.service; + +import java.util.List; + +import kr.xit.framework.core.model.XitCodeVO; + +/** + * + * @업무그룹명: XIT 프레임워크 코드 Service + * @설명: XIT프레임워크에서 사용하는 공통 코드 서비스를 기술 한다. + * @최초작성일: 2020. 4. 8. 오후 6:07:39 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitFrameCodeService { + + + /** + *
메소드 설명: 분류코드 목록 조회
+ * @param clCode 분류코드 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findClCodes(String clCode); + /** + *
메소드 설명: 공통코드 목록 조회
+ * @param clCode 분류코드 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findCmmnCodes(String clCode); + /** + *
메소드 설명: 공통코드 목록 조회
+ * @param clCode 분류코드 + * @param codeId 코드ID + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findCmmnCodes(String clCode, String codeId); + /** + *
메소드 설명: 공통상세코드 목록 조회
+ * @param codeId 코드ID + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findCmmnDetailCodes(String codeId); + /** + *
메소드 설명: 조직코드 조회
+ * @param tableNm 테이블명 + * @param orgnztId 조직ID + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public XitCodeVO findOrgnztCode(String tableNm, String orgnztId); + /** + *
메소드 설명: 조직코드 목록 조회
+ * @param tableNm 테이블명 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findOrgnztCodes(String tableNm); + /** + *
메소드 설명: 그룹코드 조회
+ * @param tableNm 테이블명 + * @param groupId 그룹ID + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public XitCodeVO findGroupCode(String tableNm, String groupId); + /** + *
메소드 설명: 그룹코드 목록 조회
+ * @param tableNm 테이블명 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findGroupCodes(String tableNm); + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameCrudService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameCrudService.java new file mode 100644 index 00000000..242317cd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameCrudService.java @@ -0,0 +1,303 @@ +package kr.xit.framework.biz.cmm.service; + +import java.util.List; + +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorRoleRelateVO; +import kr.xit.framework.biz.cmm.model.XitBbsMastrOptionVO; +import kr.xit.framework.biz.cmm.model.XitBbsPrcuseVO; +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.biz.cmm.model.XitCmmnCodeVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschduldfkVO; +import kr.xit.framework.biz.cmm.model.XitConectLogVO; +import kr.xit.framework.biz.cmm.model.XitFileDetailInfoVO; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitIdsVO; +import kr.xit.framework.biz.cmm.model.XitMenuInfoVO; +import kr.xit.framework.biz.cmm.model.ProgrmListVO; +import kr.xit.framework.biz.cmm.model.XitRoleSclsrtRescueVO; +import kr.xit.framework.biz.cmm.model.XitUserEtcOptionVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.model.XitAuthorGroupInfoVO; +import kr.xit.framework.biz.cmm.model.XitBbsMastrVO; +import kr.xit.framework.biz.cmm.model.XitCmmnClCodeVO; +import kr.xit.framework.biz.cmm.model.XitCmmnDetailCodeVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchopertVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchresultVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschdulVO; +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitFileAttrbVO; +import kr.xit.framework.biz.cmm.model.XitLoginPolicyVO; +import kr.xit.framework.biz.cmm.model.XitMenuCreatDtlsVO; +import kr.xit.framework.biz.cmm.model.XitOrgnztInfoVO; +import kr.xit.framework.biz.cmm.model.XitRoleInfoVO; +import kr.xit.framework.biz.cmm.model.XitSysLogSumryVO; +import kr.xit.framework.biz.cmm.model.XitTmplatInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserAbsnceVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoChangeDtlsVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitZipVO; + +/** + * + * @업무그룹명: XIT 프레임워크 CRUD Service + * @설명: XIT 프레임워크에서 제공하는 모든 DB Table에 대한 CRUD 서비스를 기술 한다. + * @최초작성일: 2020. 3. 18. 오후 2:52:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitFrameCrudService { + public List findXitAuthorGroupInfos(XitAuthorGroupInfoVO vo); + public XitAuthorGroupInfoVO findXitAuthorGroupInfo(XitAuthorGroupInfoVO vo); + public int addXitAuthorGroupInfo(XitAuthorGroupInfoVO vo); + public int modifyXitAuthorGroupInfo(XitAuthorGroupInfoVO vo); + public int removeXitAuthorGroupInfo(XitAuthorGroupInfoVO vo); + + + public List findXitAuthorInfos(XitAuthorInfoVO vo); + public XitAuthorInfoVO findXitAuthorInfo(XitAuthorInfoVO vo); + public int addXitAuthorInfo(XitAuthorInfoVO vo); + public int modifyXitAuthorInfo(XitAuthorInfoVO vo); + public int removeXitAuthorInfo(XitAuthorInfoVO vo); + + + public List findXitAuthorRoleRelates(XitAuthorRoleRelateVO vo); + public XitAuthorRoleRelateVO findXitAuthorRoleRelate(XitAuthorRoleRelateVO vo); + public int addXitAuthorRoleRelate(XitAuthorRoleRelateVO vo); + public int modifyXitAuthorRoleRelate(XitAuthorRoleRelateVO vo); + public int removeXitAuthorRoleRelate(XitAuthorRoleRelateVO vo); + + + public List findXitBbsMastrOptions(XitBbsMastrOptionVO vo); + public XitBbsMastrOptionVO findXitBbsMastrOption(XitBbsMastrOptionVO vo); + public int addXitBbsMastrOption(XitBbsMastrOptionVO vo); + public int modifyXitBbsMastrOption(XitBbsMastrOptionVO vo); + public int removeXitBbsMastrOption(XitBbsMastrOptionVO vo); + + + public List findXitBbsMastrs(XitBbsMastrVO vo); + public XitBbsMastrVO findXitBbsMastr(XitBbsMastrVO vo); + public int addXitBbsMastr(XitBbsMastrVO vo); + public int modifyXitBbsMastr(XitBbsMastrVO vo); + public int removeXitBbsMastr(XitBbsMastrVO vo); + + + public List findXitBbsPrcuses(XitBbsPrcuseVO vo); + public XitBbsPrcuseVO findXitBbsPrcuse(XitBbsPrcuseVO vo); + public int addXitBbsPrcuse(XitBbsPrcuseVO vo); + public int modifyXitBbsPrcuse(XitBbsPrcuseVO vo); + public int removeXitBbsPrcuse(XitBbsPrcuseVO vo); + + + public List findXitBbss(XitBbsVO vo); + public XitBbsVO findXitBbs(XitBbsVO vo); + public int addXitBbs(XitBbsVO vo); + public int modifyXitBbs(XitBbsVO vo); + public int removeXitBbs(XitBbsVO vo); + + + public List findXitCmmnClCodes(XitCmmnClCodeVO vo); + public XitCmmnClCodeVO findXitCmmnClCode(XitCmmnClCodeVO vo); + public int addXitCmmnClCode(XitCmmnClCodeVO vo); + public int modifyXitCmmnClCode(XitCmmnClCodeVO vo); + public int removeXitCmmnClCode(XitCmmnClCodeVO vo); + + + public List findXitCmmnCodes(XitCmmnCodeVO vo); + public XitCmmnCodeVO findXitCmmnCode(XitCmmnCodeVO vo); + public int addXitCmmnCode(XitCmmnCodeVO vo); + public int modifyXitCmmnCode(XitCmmnCodeVO vo); + public int removeXitCmmnCode(XitCmmnCodeVO vo); + + + public List findXitCmmnDetailCodes(XitCmmnDetailCodeVO vo); + public XitCmmnDetailCodeVO findXitCmmnDetailCode(XitCmmnDetailCodeVO vo); + public int addXitCmmnDetailCode(XitCmmnDetailCodeVO vo); + public int modifyXitCmmnDetailCode(XitCmmnDetailCodeVO vo); + public int removeXitCmmnDetailCode(XitCmmnDetailCodeVO vo); + + + public List findXitConectLogs(XitConectLogVO vo); + public XitConectLogVO findXitConectLog(XitConectLogVO vo); + public int addXitConectLog(XitConectLogVO vo); + public int modifyXitConectLog(XitConectLogVO vo); + public int removeXitConectLog(XitConectLogVO vo); + + + public List findXitEntrprsMbers(XitEntrprsMberVO vo); + public XitEntrprsMberVO findXitEntrprsMber(XitEntrprsMberVO vo); + public int addXitEntrprsMber(XitEntrprsMberVO vo); + public int modifyXitEntrprsMber(XitEntrprsMberVO vo); + public int removeXitEntrprsMber(XitEntrprsMberVO vo); + + + public List findXitFileAttrbs(XitFileAttrbVO vo); + public XitFileAttrbVO findXitFileAttrb(XitFileAttrbVO vo); + public int addXitFileAttrb(XitFileAttrbVO vo); + public int modifyXitFileAttrb(XitFileAttrbVO vo); + public int removeXitFileAttrb(XitFileAttrbVO vo); + + + public List findXitFileDetailInfos(XitFileDetailInfoVO vo); + public XitFileDetailInfoVO findXitFileDetailInfo(XitFileDetailInfoVO vo); + public int addXitFileDetailInfo(XitFileDetailInfoVO vo); + public int modifyXitFileDetailInfo(XitFileDetailInfoVO vo); + public int removeXitFileDetailInfo(XitFileDetailInfoVO vo); + + + public List findXitGnrlMbers(XitGnrlMberVO vo); + public XitGnrlMberVO findXitGnrlMber(XitGnrlMberVO vo); + public int addXitGnrlMber(XitGnrlMberVO vo); + public int modifyXitGnrlMber(XitGnrlMberVO vo); + public int removeXitGnrlMber(XitGnrlMberVO vo); + + + public List findXitIdss(XitIdsVO vo); + public XitIdsVO findXitIds(XitIdsVO vo); + public int addXitIds(XitIdsVO vo); + public int modifyXitIds(XitIdsVO vo); + public int removeXitIds(XitIdsVO vo); + + + public List findXitLoginPolicys(XitLoginPolicyVO vo); + public XitLoginPolicyVO findXitLoginPolicy(XitLoginPolicyVO vo); + public int addXitLoginPolicy(XitLoginPolicyVO vo); + public int modifyXitLoginPolicy(XitLoginPolicyVO vo); + public int removeXitLoginPolicy(XitLoginPolicyVO vo); + + + public List findXitMenuCreatDtlss(XitMenuCreatDtlsVO vo); + public XitMenuCreatDtlsVO findXitMenuCreatDtls(XitMenuCreatDtlsVO vo); + public int addXitMenuCreatDtls(XitMenuCreatDtlsVO vo); + public int modifyXitMenuCreatDtls(XitMenuCreatDtlsVO vo); + public int removeXitMenuCreatDtls(XitMenuCreatDtlsVO vo); + + + public List findXitMenuInfos(XitMenuInfoVO vo); + public XitMenuInfoVO findXitMenuInfo(XitMenuInfoVO vo); + public int addXitMenuInfo(XitMenuInfoVO vo); + public int modifyXitMenuInfo(XitMenuInfoVO vo); + public int removeXitMenuInfo(XitMenuInfoVO vo); + + + public List findXitOrgnztInfos(XitOrgnztInfoVO vo); + public XitOrgnztInfoVO findXitOrgnztInfo(XitOrgnztInfoVO vo); + public int addXitOrgnztInfo(XitOrgnztInfoVO vo); + public int modifyXitOrgnztInfo(XitOrgnztInfoVO vo); + public int removeXitOrgnztInfo(XitOrgnztInfoVO vo); + + + public List findXitProgrmLists(ProgrmListVO vo); + public ProgrmListVO findXitProgrmList(ProgrmListVO vo); + public int addXitProgrmList(ProgrmListVO vo); + public int modifyXitProgrmList(ProgrmListVO vo); + public int removeXitProgrmList(ProgrmListVO vo); + + + public List findXitRoleInfos(XitRoleInfoVO vo); + public XitRoleInfoVO findXitRoleInfo(XitRoleInfoVO vo); + public int addXitRoleInfo(XitRoleInfoVO vo); + public int modifyXitRoleInfo(XitRoleInfoVO vo); + public int removeXitRoleInfo(XitRoleInfoVO vo); + + + public List findXitRoleSclsrtRescues(XitRoleSclsrtRescueVO vo); + public XitRoleSclsrtRescueVO findXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo); + public int addXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo); + public int modifyXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo); + public int removeXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo); + public int removesXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo); + + + public List findXitSysLogSumrys(XitSysLogSumryVO vo); + public XitSysLogSumryVO findXitSysLogSumry(XitSysLogSumryVO vo); + public int addXitSysLogSumry(XitSysLogSumryVO vo); + public int modifyXitSysLogSumry(XitSysLogSumryVO vo); + public int removeXitSysLogSumry(XitSysLogSumryVO vo); + + + public List findXitTmplatInfos(XitTmplatInfoVO vo); + public XitTmplatInfoVO findXitTmplatInfo(XitTmplatInfoVO vo); + public int addXitTmplatInfo(XitTmplatInfoVO vo); + public int modifyXitTmplatInfo(XitTmplatInfoVO vo); + public int removeXitTmplatInfo(XitTmplatInfoVO vo); + + + public List findXitUserAbsnces(XitUserAbsnceVO vo); + public XitUserAbsnceVO findXitUserAbsnce(XitUserAbsnceVO vo); + public int addXitUserAbsnce(XitUserAbsnceVO vo); + public int modifyXitUserAbsnce(XitUserAbsnceVO vo); + public int removeXitUserAbsnce(XitUserAbsnceVO vo); + + + public List findXitUserEtcOptions(XitUserEtcOptionVO vo); + public XitUserEtcOptionVO findXitUserEtcOption(XitUserEtcOptionVO vo); + public int addXitUserEtcOption(XitUserEtcOptionVO vo); + public int modifyXitUserEtcOption(XitUserEtcOptionVO vo); + public int removeXitUserEtcOption(XitUserEtcOptionVO vo); + + + public List findXitUserInfoChangeDtlss(XitUserInfoChangeDtlsVO vo); + public XitUserInfoChangeDtlsVO findXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo); + public int addXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo); + public int modifyXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo); + public int removeXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo); + public int removeXitUserInfoChangeDtlss(XitUserInfoChangeDtlsVO vo); + + + public List findXitUserInfos(XitUserInfoVO vo); + public XitUserInfoVO findXitUserInfo(XitUserInfoVO vo); + public int addXitUserInfo(XitUserInfoVO vo); + public int modifyXitUserInfo(XitUserInfoVO vo); + public int removeXitUserInfo(XitUserInfoVO vo); + + + public List findXitUserScrtySetups(XitUserScrtySetupVO vo); + public XitUserScrtySetupVO findXitUserScrtySetup(XitUserScrtySetupVO vo); + public int addXitUserScrtySetup(XitUserScrtySetupVO vo); + public int modifyXitUserScrtySetup(XitUserScrtySetupVO vo); + public int removeXitUserScrtySetup(XitUserScrtySetupVO vo); + + + public List findXitZips(XitZipVO vo); + public XitZipVO findXitZip(XitZipVO vo); + public int addXitZip(XitZipVO vo); + public int modifyXitZip(XitZipVO vo); + public int removeXitZip(XitZipVO vo); + public int removesXitZip(XitZipVO vo); + + + public List findComtnbatchoperts(XitComtnbatchopertVO vo); + public XitComtnbatchopertVO findComtnbatchopert(XitComtnbatchopertVO vo); + public int addComtnbatchopert(XitComtnbatchopertVO vo); + public int modifyComtnbatchopert(XitComtnbatchopertVO vo); + public int removeComtnbatchopert(XitComtnbatchopertVO vo); + public int removesComtnbatchopert(XitComtnbatchopertVO vo); + + + public List findComtnbatchschduls(XitComtnbatchschdulVO vo); + public XitComtnbatchschdulVO findComtnbatchschdul(XitComtnbatchschdulVO vo); + public int addComtnbatchschdul(XitComtnbatchschdulVO vo); + public int modifyComtnbatchschdul(XitComtnbatchschdulVO vo); + public int removeComtnbatchschdul(XitComtnbatchschdulVO vo); + public int removesComtnbatchschdul(XitComtnbatchschdulVO vo); + + + public List findComtnbatchschduldfks(XitComtnbatchschduldfkVO vo); + public XitComtnbatchschduldfkVO findComtnbatchschduldfk(XitComtnbatchschduldfkVO vo); + public int addComtnbatchschduldfk(XitComtnbatchschduldfkVO vo); + public int modifyComtnbatchschduldfk(XitComtnbatchschduldfkVO vo); + public int removeComtnbatchschduldfk(XitComtnbatchschduldfkVO vo); + public int removesComtnbatchschduldfk(XitComtnbatchschduldfkVO vo); + + + public List findComtnbatchresults(XitComtnbatchresultVO vo); + public XitComtnbatchresultVO findComtnbatchresult(XitComtnbatchresultVO vo); + public int addComtnbatchresult(XitComtnbatchresultVO vo); + public int modifyComtnbatchresult(XitComtnbatchresultVO vo); + public int removeComtnbatchresult(XitComtnbatchresultVO vo); + public int removesComtnbatchresult(XitComtnbatchresultVO vo); + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameFileService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameFileService.java new file mode 100644 index 00000000..84a76810 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameFileService.java @@ -0,0 +1,77 @@ +package kr.xit.framework.biz.cmm.service; + +import java.util.List; +import java.util.Map; + +/** + * + * @업무그룹명: XIT 프레임워크 첨부파일 Service + * @설명: + * @최초작성일: 2020. 4. 10. 오전 9:02:18 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitFrameFileService { + + /** + *
메소드 설명: 첨부파일 목록을 조회 한다.
+ * @param atchFileId 첨부파일ID + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public List> findList(String atchFileId); + /** + *
메소드 설명: 첨부파일 목록을 조회 한다.
+ * @param atchFileId 첨부파일ID + * @param isImageFile 이미지파일 여부 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public List> findList(String atchFileId, boolean isImageFile); + + /** + *
메소드 설명: 첨부파일 상세정보를 조회 한다.
+ * @param atchFileId 첨부파일ID + * @param fileSn 파일순번 + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public Map findView(String atchFileId, String fileSn); + + /** + *
메소드 설명: 첨부파일 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public void addProc(Map m); + + /** + *
메소드 설명: 첨부파일 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public void modifyProc(Map m); + + /** + *
메소드 설명: 첨부파일 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public void removeProc(Map m); + + /** + *
메소드 설명: 첨부파일 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + public void removesProc(String ids); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFramePopupService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFramePopupService.java new file mode 100644 index 00000000..f3883ecd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFramePopupService.java @@ -0,0 +1,44 @@ +package kr.xit.framework.biz.cmm.service; + +import java.util.List; +import java.util.Map; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: XIT 프레임워크 팝업 Service + * @설명: + * @최초작성일: 2020. 4. 10. 오전 9:02:18 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitFramePopupService { + + /** + *
메소드 설명: 우편번호 목록 조회
+ * @param searchVO + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public List> findListZip(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 우편번호 목록 조회 총 건수
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public int findListZipTotCnt(XitBaseSearchVO searchVO); + + + + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameSchedulerService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameSchedulerService.java new file mode 100644 index 00000000..770b0f58 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameSchedulerService.java @@ -0,0 +1,25 @@ +package kr.xit.framework.biz.cmm.service; + +public interface XitFrameSchedulerService { + + + /** + *
메소드 설명: 전날의 시스템로그 요약 등록
+ * @return + * @author: 박민규 + * @date: 2020. 5. 4. + */ + public void addSysLogSummaryOfYesterday(); + + + /** + *
메소드 설명: 장기 미접속 사용자 부재 등록
+	 * 	-장기 미접속 사용자 계정을 부재상태(휴먼계정)으로 등록 한다.
+	 * 
+ * @param userId 사용자ID + * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 21. + */ + public void addLongTermDisconectUser(String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameUnitService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameUnitService.java new file mode 100644 index 00000000..611ca436 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitFrameUnitService.java @@ -0,0 +1,326 @@ +package kr.xit.framework.biz.cmm.service; + +import java.util.List; +import java.util.Map; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.core.constants.FrameworkConstants.USER_SE; +import kr.xit.framework.core.model.XitAttachFileRespVO; +import kr.xit.framework.core.utils.attachfile.XitAttachFileVO; + +/** + * + * @업무그룹명: XIT 프레임워크 단위 프로세스 Service + * @설명: XIT 프레임워크에서 제공하는 컴포넌트의 단위 프로세스를 기술 한다. + * @최초작성일: 2020. 3. 18. 오후 4:47:45 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitFrameUnitService { + + + /** + *
메소드 설명: 사용자정보를 조회 한다.
+	 * 	-사용자고유ID와 일치하는 사용자정보가 없을 경우 null을 반환 한다.
+	 * 
+ * @param uniqId 사용자 고유 ID + * @return XitUserInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + public XitUserInfoVO findUserInfo(String uniqId); + + /** + *
메소드 설명: 사용자 구분별 사용중인 사용자 조회
+	 *	-사용자구분에 따라 일반/기업/업무사용자 테이블에서 사용자정보를 조회 한다. 
+	 *	-아래의 사유에 해당될 경우 null을 반환한다.
+	 *	 :상태코드가 "P"(사용가능)이 아닌 경우
+	 *	 :조회된 사용자가 없을 경우
+	 * 
+ * @param user_se + * @param id 로그인 ID + * @return XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String id); + /** + *
메소드 설명: 사용자 구분별 사용중인 사용자 조회
+	 *	-사용자구분에 따라 일반/기업/업무사용자 테이블에서 사용자정보를 조회 한다. 
+	 *	-아래의 사유에 해당될 경우 null을 반환한다.
+	 *	 :상태코드가 "P"(사용가능)이 아닌 경우
+	 *	 :조회된 사용자가 없을 경우
+	 *   :이름이 일치하지 않을 경우
+	 *   :이메일주소가 일치하지 않을 경우
+	 * 
+ * @param user_se + * @param name + * @param email + * @return XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String name, String email); + /** + *
메소드 설명: 사용자 구분별 사용중인 사용자 조회
+	 *	-사용자구분에 따라 일반/기업/업무사용자 테이블에서 사용자정보를 조회 한다. 
+	 *	-아래의 사유에 해당될 경우 null을 반환한다.
+	 *	 :상태코드가 "P"(사용가능)이 아닌 경우
+	 *	 :조회된 사용자가 없을 경우
+	 *   :이름이 일치하지 않을 경우
+	 *   :이메일주소가 일치하지 않을 경우
+	 * 
+ * @param user_se + * @param id 로그인 ID + * @param name + * @param email + * @return XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String id, String name, String email); + /** + *
메소드 설명: 사용자 구분별 사용중인 사용자 조회
+	 *	-사용자구분에 따라 일반/기업/업무사용자 테이블에서 사용자정보를 조회 한다. 
+	 *	-아래의 사유에 해당될 경우 null을 반환한다.
+	 *	 :상태코드가 "P"(사용가능)이 아닌 경우
+	 *	 :조회된 사용자가 없을 경우
+	 *   :이름이 일치하지 않을 경우
+	 *   :이메일주소가 일치하지 않을 경우
+	 *   :비밀번호힌트가 일치하지 않을 경우
+	 *   :비밀번호정답이 일치하지 않을 경우
+	 * 
+ * @param user_se + * @param id 로그인 ID + * @param name + * @param email + * @param passwordHint + * @param passwordCnsr + * @return XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String id, String name, String email, String passwordHint, String passwordCnsr); + + + + + + + /** + *
메소드 설명: 사용자 구분별 사용자 비밀번호 변경
+ * @param user_se + * @param id + * @param password void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public void modifyUserPasswordByUserSe(USER_SE user_se, String id, String password); + + + + + + /** + *
메소드 설명: 사용자별 메뉴목록 조회
+	 * 	-사용자별 권한이 주어진 메뉴 목록을 조회 한다.
+	 *  
+ * @param uniqId 사용자 고유키 + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 25. + */ + public List> findMenuListByUser(String uniqId); + /** + *
메소드 설명: 권한코드별 메뉴목록 조회
+	 * 	-권한에 부여된 메뉴 목록을 조회 한다.
+	 * 
+ * @param authorCode 권한코드 + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 20. + */ + public List> findMenuListByAuthorCode(String authorCode); + + + + /** + *
메소드 설명: 사용자ID 중복 확인
+	 * 	-기등록된 ID가 존재할 경우 1, 없을 경우 0을 반환 한다.
+	 * 
+ * @param id + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public int findUserIdDuplCheck(String id); + + + + /** + *
메소드 설명: 권한역할관계 추가/제거
+	 * 	-권한에 역할(Role)을 연결 또는 제거 한다.
+	 * 
+ * @param authorCode 권한코드 + * @param roleCode 역할코드 + * @param isAdd 등록여부 + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 17. + */ + public void addAuthRoleRelation(String authorCode, String roleCode, boolean isAdd); + + + + + /** + *
메소드 설명: 게시판 조회 수 수정
+	 * 	-게시글에 대해 사용자 조회수를 누적 한다.
+	 * 	-관련테이블: XIT_BBS
+	 * 
+ * @param bbsId 게시판ID + * @param nttId 게시물ID + * @param uniqId 사용자고유ID + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 11. + */ + public void modifyBbsRdcnt(String bbsId, String nttId, String uniqId); + + + + + + /** + *
메소드 설명: 첨부파일 목록을 DB에 저장 한다.(※첨부파일 최초등록 시 사용)
+	 * 	-저장 후 첨부파일VO(AttachfileVO)에 등록한 첨부파일 ID/순번/목록 등을 반환 한다.
+	 * 
+ * @param listAttachFileVO 첨부파일 목록 + * @return XitAttachFileRespVO + * @throws FdlException 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 11. + */ + public XitAttachFileRespVO addAttachFileInfo(List listAttachFileVO) throws FdlException; + /** + *
메소드 설명: 첨부파일 목록을 DB에 저장 한다.(※기등록 파일 존재 시 사용)
+	 * 	-저장 후 첨부파일VO(AttachfileVO)에 등록한 첨부파일 ID/순번/목록 등을 반환 한다.
+	 * 
+ * @param listAttachFileVO 첨부파일 목록 + * @param atchFileId 첨부파일ID + * @return XitAttachFileRespVO + * @throws FdlException XitAttachFileRespVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 12. + */ + public XitAttachFileRespVO addAttachFileInfo(List listAttachFileVO, String atchFileId) throws FdlException; + + + + + + + + + + /** + *
메소드 설명: 장기미접속 사용자 목록 조회
+ * @param term 기간(단위: 월(month)) + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 21. + */ + public List> findLongTermDisconectUser(int term); + /** + *
메소드 설명: 사용자 장기미접속 여부
+	  * 	-true: 기간내 미접속
+	  * 	-false: 기간내 접속
+	  * 
+ * @param term 기간(단위: 월(month)) + * @param uniqId 사용자 고유 ID + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 21. + */ + public boolean findLongTermDisconectUser(int term, String uniqId); + + + + + + + /** + *
메소드 설명: 게시판 최신 게시글 목록 조회
+ * @param isRequired 필수여부(true: 무조건 조회, false: 조회된 목록 데이터가 없을 경우만 조회) + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 14. + */ + public List findLatestBbsList(boolean isRequired); + + + + + + + + + + /** + *
메소드 설명: 그룹의 기본 권한을 반환 한다.
+	 * 	-그룹 아이디가 빈(Empty) 값이면 "일반사용자(ROLE_USER)" 권한 반환
+	 * 	-그룹 아이디에 대한 그룹정보가 없으면 "일반사용자(ROLE_USER)" 권한 반환
+	 * 	-그룹의 권한코드 설정 값이 빈(Empty) 값이면 "일반사용자(ROLE_USER)" 권한 반환
+	 * 	-그룹의 권한코드 설정 값이 있으면 해당 권한코드 반환
+	 * 
+ * @param groupId 그룹 ID + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 30. + */ + public String getDefaultAuthorCode(String groupId); + + + + + + + + /** + *
메소드 설명: 사용자 고유ID로 변경 가능 여부를 확인 후 true/false를 반환한다.
+	 * 	 -본 메서드의 목적은 비정상적인 루트로 관리자 권한을 취득 할 수 없도록 하는 것이다.
+	 * 	 -웹 취약점에 대한 보안을 강화하여 악의적인 목적으로부터 권한 탈취 및 취득 할 수 없도록 한다.
+	 * 	 -권한계층 구조는 상속 구조로 되어 있으며 상속을 많이 받는 자녀권한 일수록 상위권한이 되는 구조다.
+	 * 	 -권한의 변경 시 가능과 불가능한 경우는 다음과 같다. 
+	 * 		case1. 자신의 권한보다 상위 권한으로 변경 or 타인에게 부여 할 수 없다.
+	 * 		case2. 자신의 권한과 권한계층상의 동일or하위 권한으로만 변경 or 타인에게 부여가 가능하다.
+	 *   
+ * @param uniqId 사용자 고유ID + * @param trgetAuthorCode 대상 권한코드(변경하려는 권한 코드) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 1. + */ + public boolean isCheckUserForCanChange(String uniqId, String trgetAuthorCode); + /** + *
메소드 설명: 사용자권한코드로 변경 가능 여부를 확인 후 true/false를 반환한다.
+	 * 	 -본 메서드의 목적은 비정상적인 루트로 관리자 권한을 취득 할 수 없도록 하는 것이다.
+	 * 	 -웹 취약점에 대한 보안을 강화하여 악의적인 목적으로부터 권한 탈취 및 취득 할 수 없도록 한다.
+	 * 	 -권한계층 구조는 상속 구조로 되어 있으며 상속을 많이 받는 자녀권한 일수록 상위권한이 되는 구조다.
+	 * 	 -권한의 변경 시 가능과 불가능한 경우는 다음과 같다. 
+	 * 		case1. 자신의 권한보다 상위 권한으로 변경 or 타인에게 부여 할 수 없다.
+	 * 		case2. 자신의 권한과 권한계층상의 동일or하위 권한으로만 변경 or 타인에게 부여가 가능하다.
+	 *   
+ * @param userAuthorCode 사용자 권한코드 + * @param trgetAuthorCode 대상 권한코드(변경하려는 권한 코드) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 1. + */ + public boolean isCheckUserAuthorCodeForCanChange(String userAuthorCode, String trgetAuthorCode); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitTest2Service.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitTest2Service.java new file mode 100644 index 00000000..7485da28 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitTest2Service.java @@ -0,0 +1,23 @@ +package kr.xit.framework.biz.cmm.service; + +/** + * + * @업무그룹명: XIT프레임워크 테스트 Service + * @설명: 테스트를 위한 서비스를 기술 한다. + * @최초작성일: 2020. 3. 18. 오후 6:13:48 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitTest2Service { + + + /** + *
메소드 설명: 연쇄적 서비스 호출 시 트랜잭션 테스트
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + public void transactionOfServiceChainTest(); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/XitTestService.java b/src/main/java/kr/xit/framework/biz/cmm/service/XitTestService.java new file mode 100644 index 00000000..8396fc19 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/XitTestService.java @@ -0,0 +1,59 @@ +package kr.xit.framework.biz.cmm.service; + +import kr.xit.framework.core.utils.XitMap; + +/** + * + * @업무그룹명: XIT프레임워크 테스트 Service + * @설명: 테스트를 위한 서비스를 기술 한다. + * @최초작성일: 2020. 3. 18. 오후 6:13:48 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitTestService { + + /** + *
메소드 설명: 조회 테스트
+ * @return XitMap 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 18. + */ + public XitMap findTest(); + + + /** + *
메소드 설명: 트랜잭션 테스트
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + public void transactionTest(); + + /** + *
메소드 설명: 연쇄적 서비스 호출 시 트랜잭션 테스트
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + public void transactionOfServiceChainTest(); + + + /** + *
메소드 설명: 배치등록 테스트
+ * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 17. + */ + public int insertBatchTestBySingle(int dataSize); + /** + *
메소드 설명: 배치등록 테스트
+	 * 	-n개의 단위로 insert를 수행 한다.
+	 * 
+ * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 17. + */ + public int insertBatchTestByBulk(int dataSize); +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameBizLogicServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameBizLogicServiceImpl.java new file mode 100644 index 00000000..267a523f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameBizLogicServiceImpl.java @@ -0,0 +1,15 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitFrameBizLogicMapper; +import kr.xit.framework.biz.cmm.service.XitFrameBizLogicService; + +@Service +public class XitFrameBizLogicServiceImpl implements XitFrameBizLogicService{ + + @Resource + private XitFrameBizLogicMapper xitFrameBizLogicMapper; +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameCodeServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameCodeServiceImpl.java new file mode 100644 index 00000000..a0d3fb89 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameCodeServiceImpl.java @@ -0,0 +1,220 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitFrameCodeMapper; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.core.model.XitCodeVO; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitFrameCodeServiceImpl implements XitFrameCodeService{ + + @Resource + private XitFrameCodeMapper xitFrameCodeMapper; + + @Override + public List findClCodes(String clCode) { + /** + * 필수값 확인 + */ + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("clCode", clCode); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findClCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("분류코드 목록 조회 실패: %s", e.getMessage())); + } + + return result; + } + + @Override + public List findCmmnCodes(String clCode) { + return this.findCmmnCodes(clCode, null); + } + + @Override + public List findCmmnCodes(String clCode, String codeId) { + /** + * 필수값 확인 + */ + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("clCode", clCode); + m.put("codeId", codeId); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findCmmnCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("공통코드 목록 조회 실패: %s", e.getMessage())); + } + + return result; + } + + @Override + public List findCmmnDetailCodes(String codeId) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(codeId)) + throw new RuntimeException("코드ID(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("codeId", codeId); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findCmmnDetailCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("공통상세코드 목록 조회 실패: %s", e.getMessage())); + } + + return result; + } + + @Override + public XitCodeVO findOrgnztCode(String tableNm, String orgnztId) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(tableNm)) + throw new RuntimeException("테이블명(은)는 필수조건 입니다."); + if(XitCmmnUtil.isEmpty(orgnztId)) + throw new RuntimeException("조직ID(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("tableNm", tableNm); + m.put("orgnztId", orgnztId); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findOrgnztCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("조직코드 조회 실패: %s", e.getMessage())); + } + + return XitCmmnUtil.isEmpty(result)?new XitCodeVO():result.get(0); + } + + @Override + public List findOrgnztCodes(String tableNm) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(tableNm)) + throw new RuntimeException("테이블명(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("tableNm", tableNm); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findOrgnztCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("조직코드 목록 조회 실패: %s", e.getMessage())); + } + + return result; + } + + @Override + public XitCodeVO findGroupCode(String tableNm, String groupId) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(tableNm)) + throw new RuntimeException("테이블명(은)는 필수조건 입니다."); + if(XitCmmnUtil.isEmpty(groupId)) + throw new RuntimeException("그룹ID(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("tableNm", tableNm); + m.put("groupId", groupId); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findGroupCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("그룹코드 조회 실패: %s", e.getMessage())); + } + + return XitCmmnUtil.isEmpty(result)?new XitCodeVO():result.get(0); + + } + + @Override + public List findGroupCodes(String tableNm) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(tableNm)) + throw new RuntimeException("테이블명(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + Map m = new HashMap(); + m.put("tableNm", tableNm); + + /** + * 처리 + */ + List result; + try { + result = xitFrameCodeMapper.findGroupCodes(m); + } catch (SQLException e) { + throw new RuntimeException(String.format("그룹코드 목록 조회 실패: %s", e.getMessage())); + } + + return result; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameCrudServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameCrudServiceImpl.java new file mode 100644 index 00000000..41de15b5 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameCrudServiceImpl.java @@ -0,0 +1,6199 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jdbc.UncategorizedSQLException; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitFrameCrudMapper; +import kr.xit.framework.biz.cmm.model.XitAuthorGroupInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorRoleRelateVO; +import kr.xit.framework.biz.cmm.model.XitBbsMastrOptionVO; +import kr.xit.framework.biz.cmm.model.XitBbsMastrVO; +import kr.xit.framework.biz.cmm.model.XitBbsPrcuseVO; +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.biz.cmm.model.XitCmmnClCodeVO; +import kr.xit.framework.biz.cmm.model.XitCmmnCodeVO; +import kr.xit.framework.biz.cmm.model.XitCmmnDetailCodeVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchopertVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchresultVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschdulVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschduldfkVO; +import kr.xit.framework.biz.cmm.model.XitConectLogVO; +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitFileAttrbVO; +import kr.xit.framework.biz.cmm.model.XitFileDetailInfoVO; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitIdsVO; +import kr.xit.framework.biz.cmm.model.XitLoginPolicyVO; +import kr.xit.framework.biz.cmm.model.XitMenuCreatDtlsVO; +import kr.xit.framework.biz.cmm.model.XitMenuInfoVO; +import kr.xit.framework.biz.cmm.model.XitOrgnztInfoVO; +import kr.xit.framework.biz.cmm.model.ProgrmListVO; +import kr.xit.framework.biz.cmm.model.XitRoleInfoVO; +import kr.xit.framework.biz.cmm.model.XitRoleSclsrtRescueVO; +import kr.xit.framework.biz.cmm.model.XitSysLogSumryVO; +import kr.xit.framework.biz.cmm.model.XitTmplatInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserAbsnceVO; +import kr.xit.framework.biz.cmm.model.XitUserEtcOptionVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoChangeDtlsVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.model.XitZipVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.core.constants.FrameworkConstants.DB_ACTION; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitFrameCrudServiceImpl implements XitFrameCrudService{ + private static final Logger logger = LoggerFactory.getLogger(XitFrameCrudServiceImpl.class); + + @Resource + private XitFrameCrudMapper xitFrameCrudMapper; + + @Override + public List findXitAuthorGroupInfos(XitAuthorGroupInfoVO vo) { + String table = "권한그룹정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getGroup_id())) +// emsg = String.format("(%s)그룹ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitAuthorGroupInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitAuthorGroupInfoVO findXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) { + String table = "권한그룹정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getGroup_id())) + emsg = String.format("(%s)그룹ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitAuthorGroupInfoVO result = xitFrameCrudMapper.findXitAuthorGroupInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) { + String table = "권한그룹정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getGroup_id())) + emsg = String.format("(%s)그룹ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitAuthorGroupInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) { + String table = "권한그룹정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getGroup_id())) + emsg = String.format("(%s)그룹ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitAuthorGroupInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitAuthorGroupInfo(XitAuthorGroupInfoVO vo) { + String table = "권한그룹정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getGroup_id())) + emsg = String.format("(%s)그룹ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitAuthorGroupInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitAuthorInfos(XitAuthorInfoVO vo) { + String table = "권한정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) +// emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitAuthorInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitAuthorInfoVO findXitAuthorInfo(XitAuthorInfoVO vo) { + String table = "권한정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitAuthorInfoVO result = xitFrameCrudMapper.findXitAuthorInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitAuthorInfo(XitAuthorInfoVO vo) { + String table = "권한정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitAuthorInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitAuthorInfo(XitAuthorInfoVO vo) { + String table = "권한정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitAuthorInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitAuthorInfo(XitAuthorInfoVO vo) { + String table = "권한정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitAuthorInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitAuthorRoleRelates(XitAuthorRoleRelateVO vo) { + String table = "권한역할관계"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) +// emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getRole_code())) +// emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitAuthorRoleRelates(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitAuthorRoleRelateVO findXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) { + String table = "권한역할관계"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitAuthorRoleRelateVO result = xitFrameCrudMapper.findXitAuthorRoleRelate(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) { + String table = "권한역할관계"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitAuthorRoleRelate(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) { + String table = "권한역할관계"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitAuthorRoleRelate(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitAuthorRoleRelate(XitAuthorRoleRelateVO vo) { + String table = "권한역할관계"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitAuthorRoleRelate(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitBbsMastrOptions(XitBbsMastrOptionVO vo) { + String table = "게시판마스터옵션"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBbs_id())) +// emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitBbsMastrOptions(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitBbsMastrOptionVO findXitBbsMastrOption(XitBbsMastrOptionVO vo) { + String table = "게시판마스터옵션"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitBbsMastrOptionVO result = xitFrameCrudMapper.findXitBbsMastrOption(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitBbsMastrOption(XitBbsMastrOptionVO vo) { + String table = "게시판마스터옵션"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitBbsMastrOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitBbsMastrOption(XitBbsMastrOptionVO vo) { + String table = "게시판마스터옵션"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitBbsMastrOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitBbsMastrOption(XitBbsMastrOptionVO vo) { + String table = "게시판마스터옵션"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitBbsMastrOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitBbsMastrs(XitBbsMastrVO vo) { + String table = "게시판마스터"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBbs_id())) +// emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitBbsMastrs(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitBbsMastrVO findXitBbsMastr(XitBbsMastrVO vo) { + String table = "게시판마스터"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitBbsMastrVO result = xitFrameCrudMapper.findXitBbsMastr(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitBbsMastr(XitBbsMastrVO vo) { + String table = "게시판마스터"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitBbsMastr(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitBbsMastr(XitBbsMastrVO vo) { + String table = "게시판마스터"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitBbsMastr(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitBbsMastr(XitBbsMastrVO vo) { + String table = "게시판마스터"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitBbsMastr(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitBbsPrcuses(XitBbsPrcuseVO vo) { + String table = "게시판활용"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getTrget_id())) +// emsg = String.format("(%s)대상ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getBbs_id())) +// emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitBbsPrcuses(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitBbsPrcuseVO findXitBbsPrcuse(XitBbsPrcuseVO vo) { + String table = "게시판활용"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTrget_id())) + emsg = String.format("(%s)대상ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitBbsPrcuseVO result = xitFrameCrudMapper.findXitBbsPrcuse(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitBbsPrcuse(XitBbsPrcuseVO vo) { + String table = "게시판활용"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTrget_id())) + emsg = String.format("(%s)대상ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitBbsPrcuse(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitBbsPrcuse(XitBbsPrcuseVO vo) { + String table = "게시판활용"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTrget_id())) + emsg = String.format("(%s)대상ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitBbsPrcuse(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitBbsPrcuse(XitBbsPrcuseVO vo) { + String table = "게시판활용"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTrget_id())) + emsg = String.format("(%s)대상ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitBbsPrcuse(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitBbss(XitBbsVO vo) { + String table = "게시판"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBbs_id())) +// emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getNtt_id())) +// emsg = String.format("(%s)게시물ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitBbss(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitBbsVO findXitBbs(XitBbsVO vo) { + String table = "게시판"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getNtt_id())) + emsg = String.format("(%s)게시물ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitBbsVO result = xitFrameCrudMapper.findXitBbs(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitBbs(XitBbsVO vo) { + String table = "게시판"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getNtt_id())) + emsg = String.format("(%s)게시물ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitBbs(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitBbs(XitBbsVO vo) { + String table = "게시판"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getNtt_id())) + emsg = String.format("(%s)게시물ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitBbs(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitBbs(XitBbsVO vo) { + String table = "게시판"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBbs_id())) + emsg = String.format("(%s)게시판ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getNtt_id())) + emsg = String.format("(%s)게시물ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitBbs(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitCmmnClCodes(XitCmmnClCodeVO vo) { + String table = "공통분류코드"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getCl_code())) +// emsg = String.format("(%s)분류코드(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitCmmnClCodes(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitCmmnClCodeVO findXitCmmnClCode(XitCmmnClCodeVO vo) { + String table = "공통분류코드"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCl_code())) + emsg = String.format("(%s)분류코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitCmmnClCodeVO result = xitFrameCrudMapper.findXitCmmnClCode(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitCmmnClCode(XitCmmnClCodeVO vo) { + String table = "공통분류코드"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCl_code())) + emsg = String.format("(%s)분류코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitCmmnClCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitCmmnClCode(XitCmmnClCodeVO vo) { + String table = "공통분류코드"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCl_code())) + emsg = String.format("(%s)분류코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitCmmnClCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitCmmnClCode(XitCmmnClCodeVO vo) { + String table = "공통분류코드"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCl_code())) + emsg = String.format("(%s)분류코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitCmmnClCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitCmmnCodes(XitCmmnCodeVO vo) { + String table = "공통코드"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getCode_id())) +// emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitCmmnCodes(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitCmmnCodeVO findXitCmmnCode(XitCmmnCodeVO vo) { + String table = "공통코드"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitCmmnCodeVO result = xitFrameCrudMapper.findXitCmmnCode(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitCmmnCode(XitCmmnCodeVO vo) { + String table = "공통코드"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitCmmnCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitCmmnCode(XitCmmnCodeVO vo) { + String table = "공통코드"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitCmmnCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitCmmnCode(XitCmmnCodeVO vo) { + String table = "공통코드"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitCmmnCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitCmmnDetailCodes(XitCmmnDetailCodeVO vo) { + String table = "공통상세코드"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getCode_id())) +// emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getCode())) +// emsg = String.format("(%s)코드(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitCmmnDetailCodes(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitCmmnDetailCodeVO findXitCmmnDetailCode(XitCmmnDetailCodeVO vo) { + String table = "공통상세코드"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getCode())) + emsg = String.format("(%s)코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitCmmnDetailCodeVO result = xitFrameCrudMapper.findXitCmmnDetailCode(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitCmmnDetailCode(XitCmmnDetailCodeVO vo) { + String table = "공통상세코드"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getCode())) + emsg = String.format("(%s)코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitCmmnDetailCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitCmmnDetailCode(XitCmmnDetailCodeVO vo) { + String table = "공통상세코드"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getCode())) + emsg = String.format("(%s)코드(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitCmmnDetailCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitCmmnDetailCode(XitCmmnDetailCodeVO vo) { + String table = "공통상세코드"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getCode_id())) + emsg = String.format("(%s)코드ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getCode())) + emsg = String.format("(%s)코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitCmmnDetailCode(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitConectLogs(XitConectLogVO vo) { + String table = "접속로그"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getLog_id())) +// emsg = String.format("(%s)로그ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitConectLogs(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitConectLogVO findXitConectLog(XitConectLogVO vo) { + String table = "접속로그"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getLog_id())) + emsg = String.format("(%s)로그ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitConectLogVO result = xitFrameCrudMapper.findXitConectLog(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitConectLog(XitConectLogVO vo) { + String table = "접속로그"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getLog_id())) + emsg = String.format("(%s)로그ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitConectLog(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitConectLog(XitConectLogVO vo) { + String table = "접속로그"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getLog_id())) + emsg = String.format("(%s)로그ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitConectLog(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitConectLog(XitConectLogVO vo) { + String table = "접속로그"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getLog_id())) + emsg = String.format("(%s)로그ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitConectLog(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitEntrprsMbers(XitEntrprsMberVO vo) { + String table = "기업회원"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getEntrprs_mber_id())) +// emsg = String.format("(%s)기업회원ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitEntrprsMbers(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitEntrprsMberVO findXitEntrprsMber(XitEntrprsMberVO vo) { + String table = "기업회원"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getEntrprs_mber_id())) + emsg = String.format("(%s)기업회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitEntrprsMberVO result = xitFrameCrudMapper.findXitEntrprsMber(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitEntrprsMber(XitEntrprsMberVO vo) { + String table = "기업회원"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getEntrprs_mber_id())) + emsg = String.format("(%s)기업회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitEntrprsMber(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitEntrprsMber(XitEntrprsMberVO vo) { + String table = "기업회원"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getEntrprs_mber_id())) + emsg = String.format("(%s)기업회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitEntrprsMber(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitEntrprsMber(XitEntrprsMberVO vo) { + String table = "기업회원"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getEntrprs_mber_id())) + emsg = String.format("(%s)기업회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitEntrprsMber(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitFileAttrbs(XitFileAttrbVO vo) { + String table = "파일속성"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) +// emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitFileAttrbs(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitFileAttrbVO findXitFileAttrb(XitFileAttrbVO vo) { + String table = "파일속성"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitFileAttrbVO result = xitFrameCrudMapper.findXitFileAttrb(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitFileAttrb(XitFileAttrbVO vo) { + String table = "파일속성"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitFileAttrb(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitFileAttrb(XitFileAttrbVO vo) { + String table = "파일속성"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitFileAttrb(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitFileAttrb(XitFileAttrbVO vo) { + String table = "파일속성"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitFileAttrb(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitFileDetailInfos(XitFileDetailInfoVO vo) { + String table = "파일상세정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) +// emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFile_sn())) +// emsg = String.format("(%s)파일순번(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitFileDetailInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitFileDetailInfoVO findXitFileDetailInfo(XitFileDetailInfoVO vo) { + String table = "파일상세정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFile_sn())) + emsg = String.format("(%s)파일순번(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitFileDetailInfoVO result = xitFrameCrudMapper.findXitFileDetailInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitFileDetailInfo(XitFileDetailInfoVO vo) { + String table = "파일상세정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFile_sn())) + emsg = String.format("(%s)파일순번(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitFileDetailInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitFileDetailInfo(XitFileDetailInfoVO vo) { + String table = "파일상세정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFile_sn())) + emsg = String.format("(%s)파일순번(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitFileDetailInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitFileDetailInfo(XitFileDetailInfoVO vo) { + String table = "파일상세정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getAtch_file_id())) + emsg = String.format("(%s)첨부파일ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFile_sn())) + emsg = String.format("(%s)파일순번(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitFileDetailInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitGnrlMbers(XitGnrlMberVO vo) { + String table = "일반회원"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getMber_id())) +// emsg = String.format("(%s)회원ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitGnrlMbers(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitGnrlMberVO findXitGnrlMber(XitGnrlMberVO vo) { + String table = "일반회원"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMber_id())) + emsg = String.format("(%s)회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitGnrlMberVO result = xitFrameCrudMapper.findXitGnrlMber(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitGnrlMber(XitGnrlMberVO vo) { + String table = "일반회원"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMber_id())) + emsg = String.format("(%s)회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitGnrlMber(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitGnrlMber(XitGnrlMberVO vo) { + String table = "일반회원"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMber_id())) + emsg = String.format("(%s)회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitGnrlMber(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitGnrlMber(XitGnrlMberVO vo) { + String table = "일반회원"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMber_id())) + emsg = String.format("(%s)회원ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitGnrlMber(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitIdss(XitIdsVO vo) { + String table = "IDS"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getTable_nm())) +// emsg = String.format("(%s)테이블명(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitIdss(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitIdsVO findXitIds(XitIdsVO vo) { + String table = "IDS"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTable_nm())) + emsg = String.format("(%s)테이블명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitIdsVO result = xitFrameCrudMapper.findXitIds(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitIds(XitIdsVO vo) { + String table = "IDS"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTable_nm())) + emsg = String.format("(%s)테이블명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitIds(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitIds(XitIdsVO vo) { + String table = "IDS"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTable_nm())) + emsg = String.format("(%s)테이블명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitIds(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitIds(XitIdsVO vo) { + String table = "IDS"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTable_nm())) + emsg = String.format("(%s)테이블명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitIds(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitLoginPolicys(XitLoginPolicyVO vo) { + String table = "로그인정책"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getUser_id())) +// emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitLoginPolicys(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitLoginPolicyVO findXitLoginPolicy(XitLoginPolicyVO vo) { + String table = "로그인정책"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitLoginPolicyVO result = xitFrameCrudMapper.findXitLoginPolicy(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitLoginPolicy(XitLoginPolicyVO vo) { + String table = "로그인정책"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitLoginPolicy(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitLoginPolicy(XitLoginPolicyVO vo) { + String table = "로그인정책"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitLoginPolicy(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitLoginPolicy(XitLoginPolicyVO vo) { + String table = "로그인정책"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitLoginPolicy(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitMenuCreatDtlss(XitMenuCreatDtlsVO vo) { + String table = "메뉴생성내역"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getMenu_no())) +// emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) +// emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitMenuCreatDtlss(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitMenuCreatDtlsVO findXitMenuCreatDtls(XitMenuCreatDtlsVO vo) { + String table = "메뉴생성내역"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitMenuCreatDtlsVO result = xitFrameCrudMapper.findXitMenuCreatDtls(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitMenuCreatDtls(XitMenuCreatDtlsVO vo) { + String table = "메뉴생성내역"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitMenuCreatDtls(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitMenuCreatDtls(XitMenuCreatDtlsVO vo) { + String table = "메뉴생성내역"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitMenuCreatDtls(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitMenuCreatDtls(XitMenuCreatDtlsVO vo) { + String table = "메뉴생성내역"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getAuthor_code())) + emsg = String.format("(%s)권한코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitMenuCreatDtls(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitMenuInfos(XitMenuInfoVO vo) { + String table = "메뉴정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getMenu_no())) +// emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitMenuInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitMenuInfoVO findXitMenuInfo(XitMenuInfoVO vo) { + String table = "메뉴정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitMenuInfoVO result = xitFrameCrudMapper.findXitMenuInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitMenuInfo(XitMenuInfoVO vo) { + String table = "메뉴정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitMenuInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitMenuInfo(XitMenuInfoVO vo) { + String table = "메뉴정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitMenuInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitMenuInfo(XitMenuInfoVO vo) { + String table = "메뉴정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getMenu_no())) + emsg = String.format("(%s)메뉴번호(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitMenuInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitOrgnztInfos(XitOrgnztInfoVO vo) { + String table = "조직정보"; + DB_ACTION action = DB_ACTION.NR; +// +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getOrgnzt_id())) +// emsg = String.format("(%s)조직ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitOrgnztInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitOrgnztInfoVO findXitOrgnztInfo(XitOrgnztInfoVO vo) { + String table = "조직정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOrgnzt_id())) + emsg = String.format("(%s)조직ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitOrgnztInfoVO result = xitFrameCrudMapper.findXitOrgnztInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitOrgnztInfo(XitOrgnztInfoVO vo) { + String table = "조직정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOrgnzt_id())) + emsg = String.format("(%s)조직ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitOrgnztInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitOrgnztInfo(XitOrgnztInfoVO vo) { + String table = "조직정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOrgnzt_id())) + emsg = String.format("(%s)조직ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitOrgnztInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitOrgnztInfo(XitOrgnztInfoVO vo) { + String table = "조직정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOrgnzt_id())) + emsg = String.format("(%s)조직ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitOrgnztInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitProgrmLists(ProgrmListVO vo) { + String table = "프로그램목록"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getProgrm_file_nm())) +// emsg = String.format("(%s)프로그램파일명(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitProgrmLists(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public ProgrmListVO findXitProgrmList(ProgrmListVO vo) { + String table = "프로그램목록"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getProgrm_file_nm())) + emsg = String.format("(%s)프로그램파일명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + ProgrmListVO result = xitFrameCrudMapper.findXitProgrmList(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitProgrmList(ProgrmListVO vo) { + String table = "프로그램목록"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getProgrm_file_nm())) + emsg = String.format("(%s)프로그램파일명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitProgrmList(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitProgrmList(ProgrmListVO vo) { + String table = "프로그램목록"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getProgrm_file_nm())) + emsg = String.format("(%s)프로그램파일명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitProgrmList(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitProgrmList(ProgrmListVO vo) { + String table = "프로그램목록"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getProgrm_file_nm())) + emsg = String.format("(%s)프로그램파일명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitProgrmList(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitRoleInfos(XitRoleInfoVO vo) { + String table = "역할정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getRole_code())) +// emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitRoleInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitRoleInfoVO findXitRoleInfo(XitRoleInfoVO vo) { + String table = "역할정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitRoleInfoVO result = xitFrameCrudMapper.findXitRoleInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitRoleInfo(XitRoleInfoVO vo) { + String table = "역할정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitRoleInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitRoleInfo(XitRoleInfoVO vo) { + String table = "역할정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitRoleInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitRoleInfo(XitRoleInfoVO vo) { + String table = "역할정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getRole_code())) + emsg = String.format("(%s)역할코드(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitRoleInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitRoleSclsrtRescues(XitRoleSclsrtRescueVO vo) { + String table = "역할계층구조"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getParnts_role())) +// emsg = String.format("(%s)부모역할(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getChldrn_role())) +// emsg = String.format("(%s)자식역할(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitRoleSclsrtRescues(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitRoleSclsrtRescueVO findXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) { + String table = "역할계층구조"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getParnts_role())) + emsg = String.format("(%s)부모역할(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChldrn_role())) + emsg = String.format("(%s)자식역할(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitRoleSclsrtRescueVO result = xitFrameCrudMapper.findXitRoleSclsrtRescue(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) { + String table = "역할계층구조"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getParnts_role())) + emsg = String.format("(%s)부모역할(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChldrn_role())) + emsg = String.format("(%s)자식역할(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitRoleSclsrtRescue(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) { + String table = "역할계층구조"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getParnts_role())) + emsg = String.format("(%s)부모역할(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChldrn_role())) + emsg = String.format("(%s)자식역할(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitRoleSclsrtRescue(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) { + String table = "역할계층구조"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getParnts_role())) + emsg = String.format("(%s)부모역할(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChldrn_role())) + emsg = String.format("(%s)자식역할(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitRoleSclsrtRescue(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removesXitRoleSclsrtRescue(XitRoleSclsrtRescueVO vo) { + String table = "역할계층구조"; + DB_ACTION action = DB_ACTION.ND; + + /** + * 필수조건 확인 + */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getParnts_role())) +// emsg = String.format("(%s)부모역할(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getChldrn_role())) +// emsg = String.format("(%s)자식역할(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removesXitRoleSclsrtRescue(vo); +// if(result<1) +// throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitSysLogSumrys(XitSysLogSumryVO vo) { + String table = "시스템로그요약"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getOccrrnc_de())) +// emsg = String.format("(%s)발생일(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getSrvc_nm())) +// emsg = String.format("(%s)서비스명(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getMethod_nm())) +// emsg = String.format("(%s)메서드명(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitSysLogSumrys(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitSysLogSumryVO findXitSysLogSumry(XitSysLogSumryVO vo) { + String table = "시스템로그요약"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOccrrnc_de())) + emsg = String.format("(%s)발생일(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSrvc_nm())) + emsg = String.format("(%s)서비스명(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getMethod_nm())) + emsg = String.format("(%s)메서드명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitSysLogSumryVO result = xitFrameCrudMapper.findXitSysLogSumry(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitSysLogSumry(XitSysLogSumryVO vo) { + String table = "시스템로그요약"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOccrrnc_de())) + emsg = String.format("(%s)발생일(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSrvc_nm())) + emsg = String.format("(%s)서비스명(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getMethod_nm())) + emsg = String.format("(%s)메서드명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitSysLogSumry(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitSysLogSumry(XitSysLogSumryVO vo) { + String table = "시스템로그요약"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOccrrnc_de())) + emsg = String.format("(%s)발생일(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSrvc_nm())) + emsg = String.format("(%s)서비스명(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getMethod_nm())) + emsg = String.format("(%s)메서드명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitSysLogSumry(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitSysLogSumry(XitSysLogSumryVO vo) { + String table = "시스템로그요약"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getOccrrnc_de())) + emsg = String.format("(%s)발생일(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSrvc_nm())) + emsg = String.format("(%s)서비스명(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getMethod_nm())) + emsg = String.format("(%s)메서드명(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitSysLogSumry(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitTmplatInfos(XitTmplatInfoVO vo) { + String table = "템플릿정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getTmplat_id())) +// emsg = String.format("(%s)템플릿ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitTmplatInfos(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitTmplatInfoVO findXitTmplatInfo(XitTmplatInfoVO vo) { + String table = "템플릿정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTmplat_id())) + emsg = String.format("(%s)템플릿ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitTmplatInfoVO result = xitFrameCrudMapper.findXitTmplatInfo(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitTmplatInfo(XitTmplatInfoVO vo) { + String table = "템플릿정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTmplat_id())) + emsg = String.format("(%s)템플릿ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitTmplatInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitTmplatInfo(XitTmplatInfoVO vo) { + String table = "템플릿정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTmplat_id())) + emsg = String.format("(%s)템플릿ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitTmplatInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitTmplatInfo(XitTmplatInfoVO vo) { + String table = "템플릿정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getTmplat_id())) + emsg = String.format("(%s)템플릿ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitTmplatInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitUserAbsnces(XitUserAbsnceVO vo) { + String table = "사용자부재"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getUser_id())) +// emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitUserAbsnces(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitUserAbsnceVO findXitUserAbsnce(XitUserAbsnceVO vo) { + String table = "사용자부재"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitUserAbsnceVO result = xitFrameCrudMapper.findXitUserAbsnce(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitUserAbsnce(XitUserAbsnceVO vo) { + String table = "사용자부재"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitUserAbsnce(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitUserAbsnce(XitUserAbsnceVO vo) { + String table = "사용자부재"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitUserAbsnce(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitUserAbsnce(XitUserAbsnceVO vo) { + String table = "사용자부재"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitUserAbsnce(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitUserEtcOptions(XitUserEtcOptionVO vo) { + String table = "사용자기타옵션"; + DB_ACTION action = DB_ACTION.NR; + + /** + * 필수조건 확인 + */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getUser_id())) +// emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitUserEtcOptions(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitUserEtcOptionVO findXitUserEtcOption(XitUserEtcOptionVO vo) { + String table = "사용자기타옵션"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitUserEtcOptionVO result = xitFrameCrudMapper.findXitUserEtcOption(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitUserEtcOption(XitUserEtcOptionVO vo) { + String table = "사용자기타옵션"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitUserEtcOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitUserEtcOption(XitUserEtcOptionVO vo) { + String table = "사용자기타옵션"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitUserEtcOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitUserEtcOption(XitUserEtcOptionVO vo) { + String table = "사용자기타옵션"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitUserEtcOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitUserInfoChangeDtlss(XitUserInfoChangeDtlsVO vo) { + String table = "사용자정보변경내역"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getUser_id())) +// emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getChange_de())) +// emsg = String.format("(%s)변경일(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitUserInfoChangeDtlss(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitUserInfoChangeDtlsVO findXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) { + String table = "사용자정보변경내역"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChange_de())) + emsg = String.format("(%s)변경일(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitUserInfoChangeDtlsVO result = xitFrameCrudMapper.findXitUserInfoChangeDtls(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) { + String table = "사용자정보변경내역"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getChange_de())) +// emsg = String.format("(%s)변경일(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitUserInfoChangeDtls(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) { + String table = "사용자정보변경내역"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChange_de())) + emsg = String.format("(%s)변경일(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitUserInfoChangeDtls(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitUserInfoChangeDtls(XitUserInfoChangeDtlsVO vo) { + String table = "사용자정보변경내역"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getChange_de())) + emsg = String.format("(%s)변경일(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitUserInfoChangeDtls(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitUserInfoChangeDtlss(XitUserInfoChangeDtlsVO vo) { + String table = "사용자정보변경내역"; + DB_ACTION action = DB_ACTION.ND; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitUserInfoChangeDtlss(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitUserInfos(XitUserInfoVO vo) { + String table = "사용자정보"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getUser_id())) +// emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + /** + * 2020.11.05. 박민규 + * 처리 서비스 변경or추가 + * -사유: XIT_USER_INFO 테이블에서 범용성을 위해 다음 컬럼에 대해 별도 테이블로 분리 함에 따라 요청처리 서비스를 변경 한다 + * > JOB_DATA_AUTHOR //업무 데이터 권한 + * > USER_MANAGE_AUTHOR //사용자 관리 권한 + * > ELCTRNSANCTN_USE_AT //전자결재 사용 여부 + * > JOB_CONFM_AUTHOR_AT //업무 승인 권한 여부 + */ + //2020.11.05. 주석처리 +// List result = xitFrameCrudMapper.findXitUserInfos(vo); + List result = xitFrameCrudMapper.findsXitUserInfoWithEtcOption(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitUserInfoVO findXitUserInfo(XitUserInfoVO vo) { + String table = "사용자정보"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + /** + * 2020.11.05. 박민규 + * 처리 서비스 변경or추가 + * -사유: XIT_USER_INFO 테이블에서 범용성을 위해 다음 컬럼에 대해 별도 테이블로 분리 함에 따라 요청처리 서비스를 변경 한다 + * > JOB_DATA_AUTHOR //업무 데이터 권한 + * > USER_MANAGE_AUTHOR //사용자 관리 권한 + * > ELCTRNSANCTN_USE_AT //전자결재 사용 여부 + * > JOB_CONFM_AUTHOR_AT //업무 승인 권한 여부 + */ + //2020.11.05. 주석처리 +// XitUserInfoVO result = xitFrameCrudMapper.findXitUserInfo(vo); + XitUserInfoVO result = xitFrameCrudMapper.findXitUserInfoWithEtcOption(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitUserInfo(XitUserInfoVO vo) { + String table = "사용자정보"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitUserInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitUserInfo(XitUserInfoVO vo) { + String table = "사용자정보"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitUserInfo(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitUserInfo(XitUserInfoVO vo) { + String table = "사용자정보"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getUser_id())) + emsg = String.format("(%s)사용자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + /** + * 2020.11.05. 박민규 + * 처리 서비스 변경or추가 + * -사유: XIT_USER_INFO 테이블에서 범용성을 위해 다음 컬럼에 대해 별도 테이블로 분리 함에 따라 "사용자기타옵션" 서비스를 추가 한다. + * > JOB_DATA_AUTHOR //업무 데이터 권한 + * > USER_MANAGE_AUTHOR //사용자 관리 권한 + * > ELCTRNSANCTN_USE_AT //전자결재 사용 여부 + * > JOB_CONFM_AUTHOR_AT //업무 승인 권한 여부 + */ + int result = xitFrameCrudMapper.removeXitUserInfo(vo); + //2020.11.05 사용자기타옵션 서비스 추가 + if(XitCmmnUtil.notEmpty(this.findXitUserEtcOption(vo))) + this.removeXitUserEtcOption(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitUserScrtySetups(XitUserScrtySetupVO vo) { + String table = "사용자보안설정"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getScrty_setup_trget_id())) +// emsg = String.format("(%s)보안설정대상ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitUserScrtySetups(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitUserScrtySetupVO findXitUserScrtySetup(XitUserScrtySetupVO vo) { + String table = "사용자보안설정"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getScrty_setup_trget_id())) + emsg = String.format("(%s)보안설정대상ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitUserScrtySetupVO result = xitFrameCrudMapper.findXitUserScrtySetup(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitUserScrtySetup(XitUserScrtySetupVO vo) { + String table = "사용자보안설정"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getScrty_setup_trget_id())) + emsg = String.format("(%s)보안설정대상ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitUserScrtySetup(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitUserScrtySetup(XitUserScrtySetupVO vo) { + String table = "사용자보안설정"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getScrty_setup_trget_id())) + emsg = String.format("(%s)보안설정대상ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitUserScrtySetup(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitUserScrtySetup(XitUserScrtySetupVO vo) { + String table = "사용자보안설정"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getScrty_setup_trget_id())) + emsg = String.format("(%s)보안설정대상ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitUserScrtySetup(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findXitZips(XitZipVO vo) { + String table = "우편번호"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getZip())) +// emsg = String.format("(%s)우편번호(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getSn())) +// emsg = String.format("(%s)순번(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findXitZips(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitZipVO findXitZip(XitZipVO vo) { + String table = "우편번호"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getZip())) + emsg = String.format("(%s)우편번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSn())) + emsg = String.format("(%s)순번(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitZipVO result = xitFrameCrudMapper.findXitZip(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addXitZip(XitZipVO vo) { + String table = "우편번호"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getZip())) + emsg = String.format("(%s)우편번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSn())) + emsg = String.format("(%s)순번(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addXitZip(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyXitZip(XitZipVO vo) { + String table = "우편번호"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getZip())) + emsg = String.format("(%s)우편번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSn())) + emsg = String.format("(%s)순번(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyXitZip(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeXitZip(XitZipVO vo) { + String table = "우편번호"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getZip())) + emsg = String.format("(%s)우편번호(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getSn())) + emsg = String.format("(%s)순번(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeXitZip(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removesXitZip(XitZipVO vo) { + String table = "우편번호"; + DB_ACTION action = DB_ACTION.ND; + + /** + * 필수조건 확인 + */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getZip())) +// emsg = String.format("(%s)우편번호(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getSn())) +// emsg = String.format("(%s)순번(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removesXitZip(vo); +// if(result<1) +// throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findComtnbatchoperts(XitComtnbatchopertVO vo) { + String table = "배치작업"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) +// emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findComtnbatchoperts(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitComtnbatchopertVO findComtnbatchopert(XitComtnbatchopertVO vo) { + String table = "배치작업"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitComtnbatchopertVO result = xitFrameCrudMapper.findComtnbatchopert(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addComtnbatchopert(XitComtnbatchopertVO vo) { + String table = "배치작업"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addComtnbatchopert(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyComtnbatchopert(XitComtnbatchopertVO vo) { + String table = "배치작업"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyComtnbatchopert(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeComtnbatchopert(XitComtnbatchopertVO vo) { + String table = "배치작업"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeComtnbatchopert(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removesComtnbatchopert(XitComtnbatchopertVO vo) { + String table = "배치작업"; + DB_ACTION action = DB_ACTION.ND; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) +// emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removesComtnbatchopert(vo); +// if(result<1) +// throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findComtnbatchschduls(XitComtnbatchschdulVO vo) { + String table = "배치스케줄"; + DB_ACTION action = DB_ACTION.NR; + + /** + * 필수조건 확인 + */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) +// emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) +// emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findComtnbatchschduls(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitComtnbatchschdulVO findComtnbatchschdul(XitComtnbatchschdulVO vo) { + String table = "배치스케줄"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitComtnbatchschdulVO result = xitFrameCrudMapper.findComtnbatchschdul(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addComtnbatchschdul(XitComtnbatchschdulVO vo) { + String table = "배치스케줄"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addComtnbatchschdul(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyComtnbatchschdul(XitComtnbatchschdulVO vo) { + String table = "배치스케줄"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyComtnbatchschdul(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeComtnbatchschdul(XitComtnbatchschdulVO vo) { + String table = "배치스케줄"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) + emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeComtnbatchschdul(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removesComtnbatchschdul(XitComtnbatchschdulVO vo) { + String table = "배치스케줄"; + DB_ACTION action = DB_ACTION.ND; + + /** + * 필수조건 확인 + */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_opert_id())) +// emsg = String.format("(%s)배치작업ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) +// emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removesComtnbatchschdul(vo); +// if(result<1) +// throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findComtnbatchschduldfks(XitComtnbatchschduldfkVO vo) { + String table = "배치스케줄요일"; + DB_ACTION action = DB_ACTION.NR; + + /** + * 필수조건 확인 + */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) +// emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getExecut_schdul_dfk_se())) +// emsg = String.format("(%s)실행일정요일구분(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findComtnbatchschduldfks(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitComtnbatchschduldfkVO findComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) { + String table = "배치스케줄요일"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getExecut_schdul_dfk_se())) + emsg = String.format("(%s)실행일정요일구분(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitComtnbatchschduldfkVO result = xitFrameCrudMapper.findComtnbatchschduldfk(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) { + String table = "배치스케줄요일"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getExecut_schdul_dfk_se())) + emsg = String.format("(%s)실행일정요일구분(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addComtnbatchschduldfk(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) { + String table = "배치스케줄요일"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getExecut_schdul_dfk_se())) + emsg = String.format("(%s)실행일정요일구분(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyComtnbatchschduldfk(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) { + String table = "배치스케줄요일"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) + emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getExecut_schdul_dfk_se())) + emsg = String.format("(%s)실행일정요일구분(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeComtnbatchschduldfk(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removesComtnbatchschduldfk(XitComtnbatchschduldfkVO vo) { + String table = "배치스케줄요일"; + DB_ACTION action = DB_ACTION.ND; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_schdul_id())) +// emsg = String.format("(%s)배치일정ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getExecut_schdul_dfk_se())) +// emsg = String.format("(%s)실행일정요일구분(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removesComtnbatchschduldfk(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public List findComtnbatchresults(XitComtnbatchresultVO vo) { + String table = "배치결과"; + DB_ACTION action = DB_ACTION.NR; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_result_id())) +// emsg = String.format("(%s)배치결과ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + List result = xitFrameCrudMapper.findComtnbatchresults(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public XitComtnbatchresultVO findComtnbatchresult(XitComtnbatchresultVO vo) { + String table = "배치결과"; + DB_ACTION action = DB_ACTION.R; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_result_id())) + emsg = String.format("(%s)배치결과ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + XitComtnbatchresultVO result = xitFrameCrudMapper.findComtnbatchresult(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int addComtnbatchresult(XitComtnbatchresultVO vo) { + String table = "배치결과"; + DB_ACTION action = DB_ACTION.C; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_result_id())) + emsg = String.format("(%s)배치결과ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) + emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.addComtnbatchresult(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int modifyComtnbatchresult(XitComtnbatchresultVO vo) { + String table = "배치결과"; + DB_ACTION action = DB_ACTION.U; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_result_id())) + emsg = String.format("(%s)배치결과ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); + if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) + emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.modifyComtnbatchresult(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removeComtnbatchresult(XitComtnbatchresultVO vo) { + String table = "배치결과"; + DB_ACTION action = DB_ACTION.D; + + /** + * 필수조건 확인 + */ + String emsg = null; + if(XitCmmnUtil.isEmpty(vo.getBatch_result_id())) + emsg = String.format("(%s)배치결과ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); + if(emsg!=null){ + logger.error(emsg); + throw new RuntimeException(emsg); + } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removeComtnbatchresult(vo); + if(result<1) + throw new RuntimeException(String.format("%s 실패. 일치하는 자료가 없습니다.", action.getKorNm())); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } + + @Override + public int removesComtnbatchresult(XitComtnbatchresultVO vo) { + String table = "배치결과"; + DB_ACTION action = DB_ACTION.ND; + +// /** +// * 필수조건 확인 +// */ +// String emsg = null; +// if(XitCmmnUtil.isEmpty(vo.getBatch_result_id())) +// emsg = String.format("(%s)배치결과ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getFrst_register_id())) +// emsg = String.format("(%s)최초등록자ID(은)는 필수조건 입니다.", table); +// if(XitCmmnUtil.isEmpty(vo.getLast_updusr_id())) +// emsg = String.format("(%s)최종수정자ID(은)는 필수조건 입니다.", table); +// if(emsg!=null){ +// logger.error(emsg); +// throw new RuntimeException(emsg); +// } + + /** + * 처리 + */ + try { + int result = xitFrameCrudMapper.removesComtnbatchresult(vo); + return result; + } catch (SQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL ERROR 발생", table, action.getKorNm()), e); + } catch (UncategorizedSQLException e) { + throw new RuntimeException(String.format("%s %s 중 SQL 부적합한 열 ERROR 발생", table, action.getKorNm()), e); + } catch (Exception e) { + throw new RuntimeException(String.format("%s %s 처리 중 SQL ERROR 발생", table, action.getKorNm()), e); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameFileServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameFileServiceImpl.java new file mode 100644 index 00000000..364e09e0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameFileServiceImpl.java @@ -0,0 +1,80 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.service.XitFrameFileService; +import kr.xit.framework.biz.cmm.dao.XitFrameFileMapper; +import kr.xit.framework.biz.cmm.model.XitFileDetailInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; + +@Service +public class XitFrameFileServiceImpl implements XitFrameFileService { + + @Resource + private XitFrameFileMapper xitFrameFileMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + + @Override + public List> findList(String atchFileId) { + return this.findList(atchFileId, false); + } + + @Override + public List> findList(String atchFileId, boolean isImageFile) { + Map param = new HashMap(); + param.put("atchFileId", atchFileId); + param.put("isImageFile", isImageFile?"true":"false"); + + return xitFrameFileMapper.findList(param); + } + + @Override + public Map findView(String atchFileId, String fileSn) { + Map m = new HashMap(); + m.put("atchFileId", atchFileId); + m.put("fileSn", fileSn); + return xitFrameFileMapper.findView(m); + } + + @Override + public void addProc(Map m) { + // TODO Auto-generated method stub + + } + + @Override + public void modifyProc(Map m) { + // TODO Auto-generated method stub + + } + + @Override + public void removeProc(Map m) { + /** + * 필수값 설정 + */ + XitFileDetailInfoVO vo = new XitFileDetailInfoVO(); + vo.setAtch_file_id(m.get("atchFileId")); + vo.setFile_sn(m.get("fileSn")); + + + /** + * 처리 + */ + xitFrameCrudService.removeXitFileDetailInfo(vo); + + } + + @Override + public void removesProc(String ids) { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFramePopupServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFramePopupServiceImpl.java new file mode 100644 index 00000000..d661784e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFramePopupServiceImpl.java @@ -0,0 +1,35 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitFramePopupMapper; +import kr.xit.framework.biz.cmm.service.XitFramePopupService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.core.model.XitBaseSearchVO; + +@Service +public class XitFramePopupServiceImpl implements XitFramePopupService{ + + @Resource + private XitFramePopupMapper xitFramePopupMapper; + @Resource + private XitFrameUnitService xitFrameUnitService; + + @Override + public List> findListZip(XitBaseSearchVO searchVO) { + + return xitFramePopupMapper.findListZip(searchVO); + } + + @Override + public int findListZipTotCnt(XitBaseSearchVO searchVO) { + + return xitFramePopupMapper.findListZipTotCnt(searchVO); + } + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameSchedulerServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameSchedulerServiceImpl.java new file mode 100644 index 00000000..60feeea8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameSchedulerServiceImpl.java @@ -0,0 +1,68 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.sql.SQLException; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitFrameSchedulerMapper; +import kr.xit.framework.biz.cmm.model.XitUserAbsnceVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameSchedulerService; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitFrameSchedulerServiceImpl implements XitFrameSchedulerService{ + + @Resource + private XitFrameSchedulerMapper xitFrameSchedulerMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + + @Override + public void addSysLogSummaryOfYesterday() { + try { + xitFrameSchedulerMapper.addSysLogSummaryOfYesterday(); + } catch (SQLException e) { + throw new RuntimeException(String.format("전날 시스템로그 요약 정보 등록 실패::: %s", e.getMessage()), e); + } + } + + @Override + public void addLongTermDisconectUser(String userId) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(userId)) + throw new RuntimeException("사용자ID(은)는 필수조건 입니다."); + + + /** + * 조회 + */ + XitUserAbsnceVO param = new XitUserAbsnceVO(); + param.setUser_id(userId); + XitUserAbsnceVO userAbsnceVO = xitFrameCrudService.findXitUserAbsnce(param); + + + /** + * 처리 + * -등록된 사용자부재 데이터가 있으면 update, 없을 경우 insert를 수행 한다. + */ + if(XitCmmnUtil.isEmpty(userAbsnceVO)) { + param.setUser_absnce_at("Y"); + param.setFrst_register_id("SYSTEM"); + xitFrameCrudService.addXitUserAbsnce(param); + }else { + if(!"Y".equals(userAbsnceVO.getUser_absnce_at())) { + param.setUser_absnce_at("Y"); + param.setLast_updusr_id("SYSTEM"); + xitFrameCrudService.modifyXitUserAbsnce(param); + } + } + + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameUnitServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameUnitServiceImpl.java new file mode 100644 index 00000000..4fd9e624 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitFrameUnitServiceImpl.java @@ -0,0 +1,651 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.sql.SQLException; +import java.util.ArrayList; +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.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.security.intercept.EgovReloadableFilterInvocationSecurityMetadataSource; +import lombok.extern.slf4j.Slf4j; +import kr.xit.framework.biz.cmm.dao.XitFrameUnitMapper; +import kr.xit.framework.biz.cmm.model.XitAuthorGroupInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorRoleRelateVO; +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitFileAttrbVO; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitOrgnztInfoVO; +import kr.xit.framework.biz.cmm.model.XitRoleSclsrtRescueVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.core.constants.FrameworkConstants.USER_SE; +import kr.xit.framework.core.model.XitAttachFileRespVO; +import kr.xit.framework.core.model.XitRollingNotiVO; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileVO; + +@Slf4j +@Service +public class XitFrameUnitServiceImpl implements XitFrameUnitService { + @Resource + private XitFrameUnitMapper xitFrameUnitMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name = "xitFileIdGnrService") + private EgovIdGnrService atchFileIdgenService; + @Resource(name = "databaseSecurityMetadataSource") + private EgovReloadableFilterInvocationSecurityMetadataSource databaseSecurityMetadataSource; + @Resource + private XitRollingNotiVO xitRollingNotiVO; + + @Override + public XitUserInfoVO findUserInfo(String uniqId) { + /** + * 필수값 설정 + */ + XitUserInfoVO vo = new XitUserInfoVO(); + vo.setEsntl_id(uniqId); + + /** + * 사용자정보 조회 + */ + List listUserInfo = xitFrameCrudService.findXitUserInfos(vo); + + /** + * 결과 반환 + */ + if (XitCmmnUtil.isEmpty(listUserInfo)) + return null; + else + return listUserInfo.get(0); + } + + @Override + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String id) { + + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(id)) + throw new RuntimeException("아이디(은)는 필수조건 입니다."); + + /** + * 사용자정보 조회 + */ + XitLoginVO loginVO = null; + switch (user_se) { + case GNR: // 일반회원 + XitGnrlMberVO userGnrVO = new XitGnrlMberVO(); + userGnrVO.setMber_id(id); + userGnrVO = xitFrameCrudService.findXitGnrlMber(userGnrVO); + + // "회원가입승인" 상태인지 확인 + if (XitCmmnUtil.notEmpty(userGnrVO) && "P".equals(userGnrVO.getMber_sttus())) { + // XitLoginVO에 매핑 + loginVO = new XitLoginVO(); + loginVO.convertToLoginVO(userGnrVO); + } + break; + + case ENT: // 기업회원 + XitEntrprsMberVO userEntVO = new XitEntrprsMberVO(); + userEntVO.setEntrprs_mber_id(id); + userEntVO = xitFrameCrudService.findXitEntrprsMber(userEntVO); + + // "회원가입승인" 상태인지 확인 + if (XitCmmnUtil.notEmpty(userEntVO) && "P".equals(userEntVO.getEntrprs_mber_sttus())) { + // XitLoginVO에 매핑 + loginVO = new XitLoginVO(); + loginVO.convertToLoginVO(userEntVO); + } + break; + case USR: // 업무사용자 + XitUserInfoVO userUsrVO = new XitUserInfoVO(); + userUsrVO.setUser_id(id); + userUsrVO = xitFrameCrudService.findXitUserInfo(userUsrVO); + + // "회원가입승인" 상태인지 확인 + if (XitCmmnUtil.notEmpty(userUsrVO) && "P".equals(userUsrVO.getUser_sttus_code())) { + // XitLoginVO에 매핑 + loginVO = new XitLoginVO(); + loginVO.convertToLoginVO(userUsrVO); + // 조직id명 설정 + XitOrgnztInfoVO orgnztInfoVO = new XitOrgnztInfoVO(); + orgnztInfoVO.setOrgnzt_id(userUsrVO.getOrgnzt_id()); + orgnztInfoVO = xitFrameCrudService.findXitOrgnztInfo(orgnztInfoVO); + if (XitCmmnUtil.notEmpty(orgnztInfoVO)) + loginVO.setOrgnztNm(orgnztInfoVO.getOrgnzt_nm()); + } + break; + default: + break; + } + + /** + * 결과 반환 + */ + return loginVO; + } + + @Override + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String name, String email) { + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(name)) + throw new RuntimeException("이름(은)는 필수조건 입니다."); + if (XitCmmnUtil.isEmpty(email)) + throw new RuntimeException("이메일주소(은)는 필수조건 입니다."); + + /** + * 사용자정보 조회 + */ + String id = null; + switch (user_se) { + case GNR: // 일반회원 + XitGnrlMberVO userGnrVO = new XitGnrlMberVO(); + userGnrVO.setMber_nm(name); + userGnrVO.setMber_email_adres(email); + List listUserGnr = xitFrameCrudService.findXitGnrlMbers(userGnrVO); + id = XitCmmnUtil.isEmpty(listUserGnr) ? null : listUserGnr.get(0).getMber_id(); + break; + case ENT: // 기업회원 + XitEntrprsMberVO userEntVO = new XitEntrprsMberVO(); + userEntVO.setCmpny_nm(name); + userEntVO.setApplcnt_email_adres(email); + List listEntrprsMber = xitFrameCrudService.findXitEntrprsMbers(userEntVO); + id = XitCmmnUtil.isEmpty(listEntrprsMber) ? null : listEntrprsMber.get(0).getEntrprs_mber_id(); + break; + case USR: // 업무사용자 + XitUserInfoVO userUsrVO = new XitUserInfoVO(); + userUsrVO.setUser_nm(name); + userUsrVO.setEmail_adres(email); + List listUserInfo = xitFrameCrudService.findXitUserInfos(userUsrVO); + id = XitCmmnUtil.isEmpty(listUserInfo) ? null : listUserInfo.get(0).getUser_id(); + break; + default: + break; + } + if (XitCmmnUtil.isEmpty(id)) + throw new RuntimeException("일치하는 회원 정보가 없습니다."); + XitLoginVO loginVO = this.findUserInUseByUserSe(user_se, id); + + /** + * 결과 반환 + */ + if (loginVO == null) + return loginVO; + if (name.equals(loginVO.getName()) && email.equals(loginVO.getEmail())) + return loginVO; + else + return null; + } + + @Override + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String id, String name, String email) { + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(name)) + throw new RuntimeException("이름(은)는 필수조건 입니다."); + if (XitCmmnUtil.isEmpty(email)) + throw new RuntimeException("이메일주소(은)는 필수조건 입니다."); + + /** + * 사용자정보 조회 + */ + XitLoginVO loginVO = this.findUserInUseByUserSe(user_se, id); + + /** + * 결과 반환 + */ + if (loginVO == null) + return loginVO; + if (name.equals(loginVO.getName()) && email.equals(loginVO.getEmail())) + return loginVO; + else + return null; + } + + @Override + public XitLoginVO findUserInUseByUserSe(USER_SE user_se, String id, String name, String email, String passwordHint, + String passwordCnsr) { + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(name)) + throw new RuntimeException("이름(은)는 필수조건 입니다."); + if (XitCmmnUtil.isEmpty(email)) + throw new RuntimeException("이메일주소(은)는 필수조건 입니다."); + if (XitCmmnUtil.isEmpty(passwordHint)) + throw new RuntimeException("비밀번호힌트(은)는 필수조건 입니다."); + if (XitCmmnUtil.isEmpty(passwordCnsr)) + throw new RuntimeException("비밀번호정답(은)는 필수조건 입니다."); + + /** + * 사용자정보 조회 + */ + XitLoginVO loginVO = this.findUserInUseByUserSe(user_se, id); + + /** + * 결과 반환 + */ + if (loginVO == null) + return loginVO; + if (name.equals(loginVO.getName()) && email.equals(loginVO.getEmail()) + && passwordHint.equals(loginVO.getPasswordHint()) && passwordCnsr.equals(loginVO.getPasswordHint())) + return loginVO; + else + return null; + + } + + @Override + public void modifyUserPasswordByUserSe(USER_SE user_se, String id, String password) { + + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(id)) + throw new RuntimeException("아이디(은)는 필수조건 입니다."); + if (XitCmmnUtil.isEmpty(password)) + throw new RuntimeException("비밀번호(은)는 필수조건 입니다."); + + /** + * 처리 + */ + switch (user_se) { + case GNR: // 일반회원 + XitGnrlMberVO userGnrVO = new XitGnrlMberVO(); + userGnrVO.setMber_id(id); + userGnrVO.setPassword(password); + xitFrameCrudService.modifyXitGnrlMber(userGnrVO); + break; + case ENT: // 기업회원 + XitEntrprsMberVO userEntVO = new XitEntrprsMberVO(); + userEntVO.setEntrprs_mber_id(id); + userEntVO.setEntrprs_mber_password(password); + xitFrameCrudService.modifyXitEntrprsMber(userEntVO); + break; + case USR: // 업무사용자 + XitUserInfoVO userUsrVO = new XitUserInfoVO(); + userUsrVO.setUser_id(id); + userUsrVO.setPassword(password); + xitFrameCrudService.modifyXitUserInfo(userUsrVO); + break; + default: + break; + } + + } + + @Override + public List> findMenuListByUser(String uniqId) { + List> result = null; + try { + result = xitFrameUnitMapper.findMenuListByUser(uniqId); + } catch (SQLException e) { + throw new RuntimeException("사용자별 메뉴목록 조회 실패", e); + } + return result; + } + + @Override + public List> findMenuListByAuthorCode(String authorCode){ + List> result = null; + try { + result = xitFrameUnitMapper.findMenuListByAuthorCode(authorCode); + } catch (SQLException e) { + throw new RuntimeException("권한별 메뉴목록 조회 실패", e); + } + return result; + + } + + + @Override + public int findUserIdDuplCheck(String id) { + /** + * 처리 + */ + // 일반회원 + XitGnrlMberVO userGnrVO = new XitGnrlMberVO(); + userGnrVO.setMber_id(id); + userGnrVO = xitFrameCrudService.findXitGnrlMber(userGnrVO); + if (XitCmmnUtil.notEmpty(userGnrVO)) + return 1; + // 기업회원 + XitEntrprsMberVO userEntVO = new XitEntrprsMberVO(); + userEntVO.setEntrprs_mber_id(id); + userEntVO = xitFrameCrudService.findXitEntrprsMber(userEntVO); + if (XitCmmnUtil.notEmpty(userEntVO)) + return 1; + // 업무사용자 + XitUserInfoVO userUsrVO = new XitUserInfoVO(); + userUsrVO.setUser_id(id); + userUsrVO = xitFrameCrudService.findXitUserInfo(userUsrVO); + if (XitCmmnUtil.notEmpty(userUsrVO)) + return 1; + + return 0; + } + + @Override + public void addAuthRoleRelation(String authorCode, String roleCode, boolean isAdd) { + /** + * 필수값 설정 + */ + XitAuthorRoleRelateVO vo = new XitAuthorRoleRelateVO(); + vo.setAuthor_code(authorCode); + vo.setRole_code(roleCode); + boolean isExists = XitCmmnUtil.notEmpty(xitFrameCrudService.findXitAuthorRoleRelate(vo)); + + /** + * 처리 -권한롤 등록(or삭제) 처리 후 실시간으로 meta 데이터를 반영 -metadata를 reload 하지 않을 경우 WAS를 + * 재기동해야 meta 데이터가 갱신되어 반영 됨. + */ + // 권한롤 등록(or 삭제) + if (isAdd) { + if (!isExists) + xitFrameCrudService.addXitAuthorRoleRelate(vo); + } else { + if (isExists) + xitFrameCrudService.removeXitAuthorRoleRelate(vo); + } + // Spring Security metadata 실시간 갱신 + try { + databaseSecurityMetadataSource.reload(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override + public void modifyBbsRdcnt(String bbsId, String nttId, String uniqId) { + /** + * 필수 조회 + */ + XitBbsVO bbsVO = new XitBbsVO(); + bbsVO.setBbs_id(bbsId); + bbsVO.setNtt_id(nttId); + bbsVO = xitFrameCrudService.findXitBbs(bbsVO); + + /** + * 필수값 설정 + */ + int rdcnt = 0; + if (XitCmmnUtil.isEmpty(bbsVO)) + rdcnt = 1; + else { + rdcnt = XitCmmnUtil.isEmpty(bbsVO.getRdcnt()) ? 1 : Integer.parseInt(bbsVO.getRdcnt()) + 1; + } + XitBbsVO vo = new XitBbsVO(); + vo.setBbs_id(bbsId); + vo.setNtt_id(nttId); + vo.setRdcnt(rdcnt + ""); + vo.setLast_updusr_id(uniqId); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitBbs(vo); + + } + + @Override + public XitAttachFileRespVO addAttachFileInfo(List listAttachFileVO) throws FdlException { + return this.addAttachFileInfo(listAttachFileVO, null); + } + + @Override + public XitAttachFileRespVO addAttachFileInfo(List listAttachFileVO, String atchFileId) + throws FdlException { + + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(listAttachFileVO)) + throw new RuntimeException("(첨부파일_등록)첨부파일목록(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + // 첨부파일 최초등록 여부 + boolean isFirstAdd = XitCmmnUtil.isEmpty(atchFileId) ? true : false; + // 파일상세정보 + XitAttachFileRespVO vo = new XitAttachFileRespVO(); + vo.setAtch_file_id(isFirstAdd ? atchFileIdgenService.getNextStringId() : atchFileId); + List listDetailVO = new ArrayList(); + int fileSn = isFirstAdd ? 1 : xitFrameUnitMapper.findMaxFileSn(atchFileId); + for (XitAttachFileVO fileVO : listAttachFileVO) { + XitAttachFileRespVO detailVO = new XitAttachFileRespVO(); + detailVO.setAtch_file_id(vo.getAtch_file_id()); // 첨부 파일 ID + detailVO.setFile_sn("" + fileSn); // 파일 순번 + detailVO.setFile_stre_cours(fileVO.getFilePath()); // 파일 저장 경로 + detailVO.setStre_file_nm(fileVO.getFileMask()); // 저장 파일명 + detailVO.setOrignl_file_nm(fileVO.getFileName()); // 본래 파일명 + String[] fileName = fileVO.getFileName().split("\\."); + detailVO.setFile_extsn(fileName[fileName.length - 1]); // 파일 확장자 + detailVO.setFile_cn(null); // 파일 내용 + detailVO.setFile_size("" + fileVO.getFileSize()); // 파일 사이즈 + + listDetailVO.add(detailVO); + fileSn++; + } + vo.setListAttachFileVO(listDetailVO); + // 파일속성 + XitFileAttrbVO fileAttrbVO = new XitFileAttrbVO(); + fileAttrbVO.setAtch_file_id(vo.getAtch_file_id()); + fileAttrbVO.setUse_at("Y"); + + /** + * 처리 -파일속성(XIT_FILE_ATTRB) Insert //최초등록인 경우만 insert + * -파일상세정보(XIT_FILE_DETAIL_INFO) Insert + */ + if (isFirstAdd) + xitFrameCrudService.addXitFileAttrb(fileAttrbVO); + for (XitAttachFileRespVO detailVO : vo.getListAttachFileVO()) + xitFrameCrudService.addXitFileDetailInfo(detailVO); + + return vo; + } + + @Override + public List> findLongTermDisconectUser(int term) { + /** + * 필수값 설정 + */ + Map param = new HashMap(); + param.put("term", term); + + /** + * 처리 + */ + List> result = xitFrameUnitMapper.findLongTermDisconectUser(param); + + return result; + } + + @Override + public boolean findLongTermDisconectUser(int term, String uniqId) { + /** + * 필수값 확인 + */ + if (XitCmmnUtil.isEmpty(uniqId)) + throw new RuntimeException("(장기미접속여부)사용자고유ID(은)는 필수조건 입니다."); + + /** + * 필수값 설정 + */ + Map param = new HashMap(); + param.put("term", term); + param.put("esntl_id", uniqId); + + /** + * 처리 + */ + List> result = xitFrameUnitMapper.findLongTermDisconectUser(param); + + return XitCmmnUtil.notEmpty(result); + } + + @Override + public List findLatestBbsList(boolean isRequired) { + List result = xitRollingNotiVO.getList(); + + if (isRequired) { + // 무조건 조회 + result = xitFrameUnitMapper.findLatestBbsList(xitRollingNotiVO); + } else { + // 목록 데이터가 없을 경우만 조회 + if (XitCmmnUtil.isEmpty(result)) + result = xitFrameUnitMapper.findLatestBbsList(xitRollingNotiVO); + } + + return result; + } + + /** + *
+	 * 메소드 설명: 그룹의 기본 권한을 반환 한다.
+	 * 	-그룹 아이디가 빈(Empty) 값이면 "일반사용자(ROLE_USER)" 권한 반환
+	 * 	-그룹 아이디에 대한 그룹정보가 없으면 "일반사용자(ROLE_USER)" 권한 반환
+	 * 	-그룹의 권한코드 설정 값이 빈(Empty) 값이면 "일반사용자(ROLE_USER)" 권한 반환
+	 * 	-그룹의 권한코드 설정 값이 있으면 해당 권한코드 반환
+	 * 
+ * + * @param groupId 그룹 ID + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 30. + */ + @Override + public String getDefaultAuthorCode(String groupId) { + if (XitCmmnUtil.isEmpty(groupId)) + return "ROLE_USER"; + + // 그룹의 권한 조회 + XitAuthorGroupInfoVO groupInfo = new XitAuthorGroupInfoVO(); + groupInfo.setGroup_id(groupId); + groupInfo = xitFrameCrudService.findXitAuthorGroupInfo(groupInfo); + // 권한 설정 + if (XitCmmnUtil.isEmpty(groupInfo)) + return "ROLE_USER"; + else { + if (XitCmmnUtil.isEmpty(groupInfo.getAuthor_code())) + return "ROLE_USER"; + else + return groupInfo.getAuthor_code(); + } + + } + + @Override + public boolean isCheckUserForCanChange(String uniqId, String trgetAuthorCode) { + /** + * 사용자 권한 정보 확인 + */ + //사용자보안설정 조회 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(uniqId); + List listUserScrtySetupVO = xitFrameCrudService.findXitUserScrtySetups(userScrtySetupVO); + String userAuthorCode = XitCmmnUtil.isEmpty(listUserScrtySetupVO)?null:listUserScrtySetupVO.get(0).getAuthor_code(); + + return this.isCheckUserAuthorCodeForCanChange(userAuthorCode, trgetAuthorCode); + } + + @Override + public boolean isCheckUserAuthorCodeForCanChange(String userAuthorCode, String trgetAuthorCode) { + /** + * 유효성 확인 + */ + //역할(권한)계층구조 데이터 목록 조회 + List listRoleSclsrtRescueVO = xitFrameCrudService.findXitRoleSclsrtRescues(new XitRoleSclsrtRescueVO()); + //역할(권한)계층구조를 사용하지 않고 있는 경우 true 반환 + if(XitCmmnUtil.isEmpty(listRoleSclsrtRescueVO)) { + log.debug("Do not use a RoleSclsrtRescue Data !!"); + return true; + }else { + //사용자의 권한 정보가 없을 때(비정상적인 루트로 등록한 사용자 계정으로 판단) + if(XitCmmnUtil.isEmpty(userAuthorCode)) { + log.debug("This user is have not UserScrtySetup Data !!"); + return false; + } + } + boolean isExists = false; + //사용자 권한과 매칭되는 역할(권한)계층정보 유무 확인 + for(XitRoleSclsrtRescueVO item : listRoleSclsrtRescueVO) { + if(item.getParnts_role().equals(userAuthorCode)) { + isExists = true; + break; + } + } + //사용자 권한이 최상위 권한이면 true 반환 + if(!isExists) + for(XitRoleSclsrtRescueVO item : listRoleSclsrtRescueVO) { + if(item.getChldrn_role().equals(userAuthorCode)) { + log.debug("This user is Top-Level Author !!"); + return true; + } + } + //사용자의 역할(권한)정보가 없으면 false 반환 + if(!isExists) { + log.debug("This user is have not RoleSclsrtRescue Data !!"); + return false; + } + + + /** + * 상위권한 여부 확인 + * + */ + return this.isHighAuthor(listRoleSclsrtRescueVO, userAuthorCode, trgetAuthorCode)?false:true; + } + + + /** + *
+	 * 메소드 설명: 역할계층상 상위 권한인지 확인하여 여부를 반환 한다.
+	 * 	-권한코드보다 상위권한이면 true를 반환
+	 * 	-권한코드보다 하위or동급권한이면 false를 반환 한다.
+	 * 
+ * + * @param list 역할계층구조 목록 데이터 + * @param authorCode 권한코드 + * @param highAuthorCode 상위권한코드 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 1. + */ + private boolean isHighAuthor(List list, String authorCode, String highAuthorCode) { + boolean result = false; + + for (XitRoleSclsrtRescueVO item : list) { + // 상위 권한으로 확인 되었으면 stop + if (result) + break; + // 권한코드가 일치하지 않으면 skip + if (!item.getParnts_role().equals(authorCode)) + continue; + + if (item.getChldrn_role().equals(highAuthorCode)) { // 상위 권한과 일치하면 + result = true; + } else { // 상위 권한과 일치하지 않으면 재호출 + result = this.isHighAuthor(list, item.getChldrn_role(), highAuthorCode); + } + } + + return result; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitTest2ServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitTest2ServiceImpl.java new file mode 100644 index 00000000..41043f1e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitTest2ServiceImpl.java @@ -0,0 +1,36 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.sql.SQLException; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitTestMapper; +import kr.xit.framework.biz.cmm.service.XitTest2Service; + +@Service +public class XitTest2ServiceImpl implements XitTest2Service{ + + @Resource + private XitTestMapper xitTestMapper; + + @Override + public void transactionOfServiceChainTest() { + /** + * DB 등록 + */ + try { + xitTestMapper.addTest("22"); + } catch (SQLException e) { + throw new RuntimeException("DB Insert FAIL", e); + } + + + /** + * error 발생 + */ + Integer.parseInt(null); + + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitTestServiceImpl.java b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitTestServiceImpl.java new file mode 100644 index 00000000..6b07af6e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/service/impl/XitTestServiceImpl.java @@ -0,0 +1,215 @@ +package kr.xit.framework.biz.cmm.service.impl; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.dao.XitTestMapper; +import kr.xit.framework.biz.cmm.service.XitTest2Service; +import kr.xit.framework.biz.cmm.service.XitTestService; +import kr.xit.framework.core.utils.XitMap; + +@Service +public class XitTestServiceImpl implements XitTestService{ + + @Resource + private XitTestMapper xitTestMapper; + @Resource + private XitTest2Service xitTest2Service; + @Autowired + private SqlSessionFactory sqlSessionFactory; + + @Override + public XitMap findTest() { + XitMap result = new XitMap(); + try { + result = xitTestMapper.findTest(); + result = xitTestMapper.findTest("1"); + } catch (SQLException e) { + throw new RuntimeException("DB 조회 테스트 FAIL"); + } + + return result; + } + + @Override + public void transactionTest() { + /** + * DB 등록 + */ + try { + xitTestMapper.addTest("00"); + xitTestMapper.addTest("11"); + } catch (SQLException e) { + throw new RuntimeException("DB Insert FAIL", e); + } + + + /** + * error 발생 + */ + String str = null; + str.toString(); + + + } + + @Override + public void transactionOfServiceChainTest() { + /** + * DB 등록 + */ + try { + xitTestMapper.addTest("00"); + } catch (SQLException e) { + throw new RuntimeException("DB Insert FAIL", e); + } + + + /** + * 서비스 모듈 호출 + */ + xitTest2Service.transactionOfServiceChainTest(); + + } + + @Override + public int insertBatchTestBySingle(int dataSize) { + final int BATCH_SIZE = 1000; //SQL 실행 단위 + final boolean AUTO_COMMIT = true; //Auto Commit 여부. 2021.01.17 박민규- Spring Transaction 설정된 환경에서 true/false 차이 없음. Service 호출 시 Transaction Open... 동일하게 동작 함. + List> list = this.creatTestDataList(dataSize); //테스트 데이터 생성 + + //테스트 데이터 삭제 + xitTestMapper.removesXitConectLogForTestData(null); + + //open + //SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, AUTO_COMMIT); + // + //long startTime = System.currentTimeMillis(); + //for(int i=0; i param = list.get(i); + // + // //load + // sqlSession.insert("framework.xit.category.common.dao.XitTestMapper.addTest", param); + // if((i+1)%BATCH_SIZE == 0) { + // //execute + // sqlSession.flushStatements(); + // } + //} + //long endTime = System.currentTimeMillis(); + ////execute + //sqlSession.flushStatements(); + ////close + //sqlSession.close(); + //System.out.println("==============================================="); + //System.out.println(String.format("일괄등록 테스트[총 %d건 처리소요 %d초]", list.size(), (endTime-startTime)/1000 )); + //System.out.println("==============================================="); + + try(SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, AUTO_COMMIT)){ + + long startTime = System.currentTimeMillis(); + for(int i=0; i param = list.get(i); + + //load + sqlSession.insert("kr.xit.framework.biz.cmm.dao.XitTestMapper.addTest", param); + if((i+1)%BATCH_SIZE == 0) { + //execute + sqlSession.flushStatements(); + } + } + long endTime = System.currentTimeMillis(); + //execute + sqlSession.flushStatements(); + System.out.println("==============================================="); + System.out.println(String.format("일괄등록 테스트[총 %d건 처리소요 %d초]", list.size(), (endTime-startTime)/1000 )); + System.out.println("==============================================="); + } + + return list.size(); + } + + @Override + public int insertBatchTestByBulk(int dataSize) { + final int BATCH_SIZE = 1000; //SQL 실행 단위 + final boolean AUTO_COMMIT = true; //Auto Commit 여부. 2021.01.17 박민규- Spring Transaction 설정된 환경에서 true/false 차이 없음. Service 호출 시 Transaction Open... 동일하게 동작 함. + List> list = this.creatTestDataList(dataSize); //테스트 데이터 생성 + + //테스트 데이터 삭제 + xitTestMapper.removesXitConectLogForTestData(null); + + //open + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, AUTO_COMMIT); + + long startTime = System.currentTimeMillis(); + List> listParam = new ArrayList>(); + for(int i=0; i param = list.get(i); + listParam.add(param); + + if(listParam.size()%BATCH_SIZE == 0) { + //load + sqlSession.insert("kr.xit.framework.biz.cmm.dao.XitTestMapper.addListTest", listParam); + + listParam.clear(); + } + } + if(listParam.size()>0) { //미처리 건수가 있다면.. + //load + sqlSession.insert("kr.xit.framework.biz.cmm.dao.XitTestMapper.addListTest", listParam); + } + + long endTime = System.currentTimeMillis(); + //execute + sqlSession.flushStatements(); + //close + sqlSession.close(); + System.out.println("==============================================="); + System.out.println(String.format("일괄등록 테스트[총 %d건 처리소요 %d초]", list.size(), (endTime-startTime)/1000 )); + System.out.println("==============================================="); + + + return list.size(); + } + + /** + *
메소드 설명: 대용량 데이터 생성
+ * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 17. + */ + private List> creatTestDataList(int dataSize) { + List> listParam = new ArrayList>(); + + if(dataSize<1) + dataSize = 100999; + for(int i=0; i param = new HashMap(); + param.put("log_id", "BATCH_"+lpad(i+"", 10, '0')); + param.put("error_code", "00"); + listParam.add(param); + } + + return listParam; + } + + private String lpad(String val, int size, char charcter) { + + StringBuffer sb = new StringBuffer(); + for(int i=0; i메소드 설명: 아이디 중복 확인 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + @RequestMapping(value="login/IdDuplCnfirm.do", method={RequestMethod.GET, RequestMethod.POST}) + public String IdDuplCnfirm(@RequestParam(value="checkId", required=false, defaultValue="") String checkId, ModelMap modelMap) { + if(XitCmmnUtil.isEmpty(checkId)) { + modelMap.addAttribute("checkId", ""); + modelMap.addAttribute("usedCnt", "-1"); + }else { + modelMap.addAttribute("usedCnt", xitFrameUnitService.findUserIdDuplCheck(checkId)); + modelMap.addAttribute("checkId", checkId); + } + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/anonymous/XitIdDuplCnfirm"+TILES_TYPE.POPUP.getVal(); + } + + + + + /** + *
메소드 설명: Validation rule dynamic java script
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 6. 2. + */ + @RequestMapping(value="login/validator.do", method={RequestMethod.GET, RequestMethod.POST}) + public String validate() { + return "framework/cmmn/util/validator"+TILES_TYPE.NONE.getVal(); + } + + + + + + /** + *
메소드 설명: 회원가입 페이지
+ * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 6. 11. + */ + @RequestMapping(value = "login/UserReg_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserReg_page(@PathVariable String cmd + , @ModelAttribute("userSearchVO") XitUserRegMngSearchVO searchVO + , @ModelAttribute("mberManageVO") XitGnrUserRegMngVO mberManageVO + , @ModelAttribute("entrprsManageVO") XitEntUserRegMngVO entrprsManageVO + , @ModelAttribute("userManageVO") XitUserRegMngVO userManageVO + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + , ModelMap model) { + + switch (cmd) { + case "input": //업무사용자 회원가입 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("insttCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT025")); //소속기관코드 목록 + model.addAttribute("orgnztId_result" , xitFrameCodeService.findOrgnztCodes("XIT_ORGNZT_INFO")); //조직정보코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + break; + + case "inputEvr": //(일반/기업/업무사용자) 회원가입 페이지 +// /*================ +// * 코드목록 조회 +// ================*/ +// //모든 사용자 공통 +// model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 +// model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 +// model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 +// List userSttus_result = xitFrameCodeService.findCmmnDetailCodes("XIT013"); +// +// //일반회원 +// model.addAttribute("mberSttus_result" , userSttus_result); //사용자상태코드 목록 +// //기업회원 +// model.addAttribute("entrprsMberSttus_result" , userSttus_result); //사용자상태코드 목록 +// model.addAttribute("entrprsSeCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT026")); //기업구분코드 목록 +// model.addAttribute("indutyCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT027")); //업종코드 목록 +// //업무사용자 +// model.addAttribute("emplyrSttusCode_result" , userSttus_result); //사용자상태코드 목록 +// model.addAttribute("insttCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT025")); //소속기관코드 목록 +// model.addAttribute("orgnztId_result" , xitFrameCodeService.findOrgnztCodes("XIT_ORGNZT_INFO")); //조직정보코드 목록 + break; + + default: + throw new RuntimeException("유효하지 않은 요청 페이지 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/anonymous/XitUserReg_"+cmd+TILES_TYPE.POPUP.getVal(); + } + @RequestMapping(value = "login/UserReg_Forms_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserReg_Forms_page(@PathVariable String cmd + , @ModelAttribute("userSearchVO") XitUserRegMngSearchVO searchVO + , @ModelAttribute("mberManageVO") XitGnrUserRegMngVO mberManageVO + , @ModelAttribute("entrprsManageVO") XitEntUserRegMngVO entrprsManageVO + , @ModelAttribute("userManageVO") XitUserRegMngVO userManageVO + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + , ModelMap model) { + + String page= ""; + switch (cmd) { + + case "GNR": //일반회원가입 페이지 + page = "GnrUserForm"; + + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + model.addAttribute("mberSttus_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + break; + + case "ENT": //기업회원가입 페이지 + page = "EntUserForm"; + + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + model.addAttribute("entrprsMberSttus_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("entrprsSeCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT026")); //기업구분코드 목록 + model.addAttribute("indutyCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT027")); //업종코드 목록 + break; + + case "USR": //업무사용자 회원가입 페이지 + page = "UserForm"; + + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + model.addAttribute("emplyrSttusCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("insttCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT025")); //소속기관코드 목록 + model.addAttribute("orgnztId_result" , xitFrameCodeService.findOrgnztCodes("XIT_ORGNZT_INFO")); //조직정보코드 목록 + break; + + default: + throw new RuntimeException("유효하지 않은 요청 페이지 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/anonymous/forms/"+page+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 사용자등록관리 C 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 6. 11. + */ + @RequestMapping(value = "login/UserReg_insert_proc.do", method=RequestMethod.POST) + public void UserReg_insert_proc(@RequestParam(value="userSe", required=true) String userSe + ,@ModelAttribute("mberManageVO") XitGnrUserRegMngVO mberManageVO + ,@ModelAttribute("entrprsManageVO") XitEntUserRegMngVO entrprsManageVO + ,@ModelAttribute("userManageVO") XitUserRegMngVO userManageVO + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + + + USER_SE constUserSe = USER_SE.valueOf(userSe); + if(XitCmmnUtil.isEmpty(constUserSe)) + throw new RuntimeException("유효하지 않은 요청 입니다."); + + + String sLocationUrl = null; + String referer = request.getHeader("referer"); +// if(referer.contains("UserReg_input.do")) +// sLocationUrl = "forward:/_anonymous_/login/UserReg_input.do"; +// else + sLocationUrl = "forward:/_anonymous_/login/UserReg_inputEvr.do"; + + + String resultMsg = null; + + /** + * 처리 분기 + */ + ValidateBreakPoint: + switch (constUserSe) { + case GNR: //일반회원 + sLocationUrl = "forward:/_anonymous_/login/UserReg_Forms_GNR.do"; + + /** + * 유효성 확인 + */ + //2020.11.24. 주석처리 + beanValidator.validate(mberManageVO, bindingResult); +// beanValidator.validate("mberManageVO", mberManageVO, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + break ValidateBreakPoint; + } + + /** + * 필수값 설정 + */ + mberManageVO.setMberSttus(this.getUserSttusCode(constUserSe)); //사용자상태코드(A: 신청, D: 삭제, P:승인) + + /** + * 처리 + */ + try { + xitGnrUserRegMngService.addProc(mberManageVO); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + break; + + case ENT: //기업회원 + sLocationUrl = "forward:/_anonymous_/login/UserReg_Forms_ENT.do"; + + /** + * 유효성 확인 + */ + //2020.11.24. 주석처리 + beanValidator.validate(mberManageVO, bindingResult); +// beanValidator.validate("entrprsManageVO", entrprsManageVO, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + + /** + * 필수값 설정 + */ + entrprsManageVO.setEntrprsMberSttus(this.getUserSttusCode(constUserSe)); //사용자상태코드(A: 신청, D: 삭제, P:승인) + + /** + * 처리 + */ + try { + xitEntUserRegMngService.addProc(entrprsManageVO); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + break; + + case USR: //업무사용자 + sLocationUrl = "forward:/_anonymous_/login/UserReg_Forms_USR.do"; + + /** + * 유효성 확인 + */ + //2020.11.24. 주석처리 + beanValidator.validate(mberManageVO, bindingResult); +// beanValidator.validate("userManageVO", userManageVO, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + + /** + * 필수값 설정 + */ + userManageVO.setEmplyrSttusCode(this.getUserSttusCode(constUserSe)); //사용자상태코드(A: 신청, D: 삭제, P:승인) + + /** + * 처리 + */ + try { + xitUserRegMngService.addProc(userManageVO); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + break; + + default: + break; + } + + + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + + + /** + *
메소드 설명: (일반/기업/업무)사용자 유형별 회원가입 상태코드를 반환 한다.
+	 * 	-사용자 유형별 지정한 상태코드 설정값이 없을 경우 default값(Globals.Xit.JoinMembership.Sttus)를 반환 한다.
+	 * 	[사용자 유형별 회원가입 상태코드 설정]
+	 * 	 Globals.Xit.JoinMembership.Sttus.Gnr //일반회원
+	 * 	 Globals.Xit.JoinMembership.Sttus.Ent //기업회원
+	 * 	 Globals.Xit.JoinMembership.Sttus.Usr //업무사용자
+	 * 
+ * @param userSe 사용자 유형 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 26. + */ + private String getUserSttusCode(USER_SE userSe) { + String sttusCode = MEMBER_STATUS; + if(!XitCmmnUtil.isEmpty(userSe)) { + switch (userSe) { + case GNR: //일반회원 + if(XitCmmnUtil.notEmpty(MEMBER_STATUS_GNR)) + sttusCode = MEMBER_STATUS_GNR; + break; + case ENT: //기업회원 + if(XitCmmnUtil.notEmpty(MEMBER_STATUS_ENT)) + sttusCode = MEMBER_STATUS_ENT; + break; + case USR: //업무사용자 + if(XitCmmnUtil.notEmpty(MEMBER_STATUS_USR)) + sttusCode = MEMBER_STATUS_USR; + break; + default: + break; + } + } + + return sttusCode; + } + + + /** + *
메소드 설명: 캡차인증 이미지 생성
+ * @param request + * @param response void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 22. + */ + @RequestMapping(value = "captcha.do", method={RequestMethod.GET, RequestMethod.POST}) + public void captcha(HttpServletRequest request, HttpServletResponse response) { + XitCaptchaUtil.getImage(request, response); + } + + + + + + + + + + + /** + *
메소드 설명: 행자부 주소검색 API
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 5. + */ + @RequestMapping(value = "api/AdresSearch.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdresSearch() { + /* ====================== + * 2021.06.22. 박민규 + * 주소검색 API 변경 + * -.사유: popup Api 사용 시 세션이 끊어지는 이슈 + * -.작업내용: popup api -> 검색 api 호출 방식으로 변경 + ====================== */ + //2021.06.22. 주석처리 +// return XitConst.JSP_BASE_PATH+"common/anonymous/api/XitAdresSearch"+XitConst.TILES_TYPE.POPUP.getVal(); + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/anonymous/api/XitAdresSearchApi"+ FrameworkConstants.TILES_TYPE.NONE.getVal(); + } + + + + + /* ========================== + * 비회원 인증서비스를 위한 테스트 샘플 + ========================== */ + @GetMapping(value = "step1.do") + public String step1(HttpServletRequest req) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/anonymous/step1"+ FrameworkConstants.TILES_TYPE.NONE.getVal(); + } + @GetMapping(value = "step2.do") + public String step2() { + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/anonymous/step2"+ FrameworkConstants.TILES_TYPE.NONE.getVal(); + } + @GetMapping(value = "login.do") + public String login(HttpServletRequest req) { + HttpSession session = req.getSession(); + session.setAttribute("ids", "dummyvalue"); + + return "redirect: /_anonymous_/step1.do"; + } + @GetMapping(value = "logout.do") + public String logout(HttpServletRequest req) { + HttpSession session = req.getSession(); + session.setAttribute("ids", null); + + return "redirect: /_anonymous_/step1.do"; + } + /* ========================== + * //비회원 인증서비스를 위한 테스트 샘플 + ========================== */ + +} + + diff --git a/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameFileController.java b/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameFileController.java new file mode 100644 index 00000000..e3ad15bb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameFileController.java @@ -0,0 +1,475 @@ +package kr.xit.framework.biz.cmm.web; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.util.FileCopyUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.support.SessionStatus; + +import kr.xit.framework.biz.cmm.service.XitFrameFileService; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.XitBaseSearchVO; +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: XIT 프레임워크 첨부파일 Controller + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_cmmn_/file/") +public class XitFrameFileController { + + private static final Logger logger = LoggerFactory.getLogger(XitFrameFileController.class); + + @Resource + private XitFrameFileService xitFrameFileService; + @Resource + private kr.xit.framework.biz.cmm.service.XitFrameUnitService XitFrameUnitService; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + /** + *
메소드 설명: 첨부파일 목록
+ * @param searchVO + * @param modelMap + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + @RequestMapping(value="AttachFile_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AttachFile_list(@ModelAttribute("searchVO") XitBaseSearchVO searchVO , ModelMap modelMap + ,@RequestParam(value="atchFileId", required=false, defaultValue="") String atchFileId + ) { + + List> result = xitFrameFileService.findList(atchFileId); + + modelMap.addAttribute("fileList", result); + modelMap.addAttribute("updateFlag", "N"); + modelMap.addAttribute("fileListCnt", result.size()); + modelMap.addAttribute("atchFileId", atchFileId); + return "framework/biz/common/file/XitAttachFile_list"+TILES_TYPE.NONE.getVal(); + } + + /** + *
메소드 설명: 첨부파일 이미지 목록
+ * @param searchVO + * @param modelMap + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + @RequestMapping(value="AttachFile_image_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AttachFile_image_list(@ModelAttribute("searchVO") XitBaseSearchVO searchVO , ModelMap modelMap + ,@RequestParam(value="atchFileId", required=false, defaultValue="") String atchFileId + ) { + + List> result = xitFrameFileService.findList(atchFileId, true); + + modelMap.addAttribute("fileList", result); + modelMap.addAttribute("updateFlag", "N"); + modelMap.addAttribute("fileListCnt", result.size()); + modelMap.addAttribute("atchFileId", atchFileId); + return "framework/biz/common/file/XitAttachFile_imgage_list"+TILES_TYPE.NONE.getVal(); + } + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + @RequestMapping(value = "AttachFile_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AttachFile_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") BaseVO vo + , @ModelAttribute("searchVO") XitBaseSearchVO searchVO + , ModelMap model + ,@RequestParam(value="atchFileId", required=false, defaultValue="") String atchFileId + ) { + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + String returnUrl = "kr/xit/framework/biz/cmm/file/XitAttachFile_" +cmd+tilesDef; + + List> result = null; + switch (cmd) { +// case "input": //등록 페이지 +// break; + + case "edit": //수정 페이지 + result = xitFrameFileService.findList(atchFileId); + + model.addAttribute("fileList", result); + model.addAttribute("updateFlag", "Y"); + model.addAttribute("fileListCnt", result.size()); + model.addAttribute("atchFileId", atchFileId); + + returnUrl = "kr/xit/framework/biz/cmm/file/XitAttachFile_list" +TILES_TYPE.NONE.getVal(); + break; + +// case "view": //상세 페이지 +// break; + + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return returnUrl; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + @RequestMapping(value = "AttachFile_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AttachFile_page_popup(@PathVariable String cmd + , @ModelAttribute XitBaseSearchVO searchVO + , @ModelAttribute BaseVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return "framework/biz/common/file/XitAttachFile_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 첨부파일 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 13. + */ + @RequestMapping(value = "AttachFile_{cmd}_proc.do", method=RequestMethod.POST) + public String AttachFile_cmd_proc(HttpServletRequest req + ,@PathVariable String cmd + ,@ModelAttribute("vo") BaseVO vo + ,@ModelAttribute("searchVO") XitBaseSearchVO searchVO + ,@RequestParam(value="atchFileId", required=false, defaultValue="") String atchFileId + ,@RequestParam(value="fileSn", required=false, defaultValue="") String fileSn + ,@RequestParam(value="fileIds", required=false, defaultValue="") String fileIds + ,@RequestParam("returnUrl") String returnUrl + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ) { + + /** + * 처리 분기 + */ + String resultMsg = null; + Map m = new HashMap(); + switch (cmd) { +// case "insert": //등록 +// break; +// +// case "inserts": //다건 등록 +// break; +// +// case "update": //수정 +// break; + + case "delete": //삭제 + m.put("atchFileId", atchFileId); + m.put("fileSn", fileSn); + xitFrameFileService.removeProc(m); + break; + +// case "deletes": //다건 삭제 +// break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + model.addAttribute("resultMsg", resultMsg); + if ("".equals(req.getContextPath()) || "/".equals(req.getContextPath())) { + return "forward:" + returnUrl; + } + if (returnUrl.startsWith(req.getContextPath())) { + return "forward:" + returnUrl.substring(returnUrl.indexOf("/", 1)); + } else { + return "forward:" + returnUrl; + } + } + + + + @RequestMapping(value = "Download.do", method={RequestMethod.GET, RequestMethod.POST}) + public void cvplFileDownload(@RequestParam Map commandMap, HttpServletRequest request, HttpServletResponse response) throws Exception { + + /** + * 조회 + */ + String atchFileId = (String) commandMap.get("atchFileId"); + String fileSn = (String) commandMap.get("fileSn"); + Map result = xitFrameFileService.findView(atchFileId, fileSn); + + + /** + * 파일 다운로드 + */ + //파일 Read + File uFile = new File(result.get("fileStreCours"), result.get("streFileNm")); + long fSize = uFile.length(); + //파일사이즈에 따라 처리 분기 + if (fSize > 0) { + String mimetype = "application/x-msdownload"; + + response.setContentType(mimetype); + setDisposition(result.get("orignlFileNm"), request, response); + //response.setContentLength(fSize); + + BufferedInputStream in = null; + BufferedOutputStream out = null; + + try { + in = new BufferedInputStream(new FileInputStream(uFile)); + out = new BufferedOutputStream(response.getOutputStream()); + + FileCopyUtils.copy(in, out); + out.flush(); + } catch (Exception ex) { + logger.debug("IGNORED: {}", ex.getMessage()); + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception ignore) { + logger.debug("IGNORED: {}", ignore.getMessage()); + } + } + if (out != null) { + try { + out.close(); + } catch (Exception ignore) { + logger.debug("IGNORED: {}", ignore.getMessage()); + } + } + } + + } else { + response.setContentType("application/x-msdownload"); + + PrintWriter printwriter = response.getWriter(); + printwriter.println(""); + printwriter.println("


Could not get file name:
" + result.get("orignlFileNm") + "

"); + printwriter.println("


Back

"); + printwriter.println("


© webAccess"); + printwriter.println(""); + printwriter.flush(); + printwriter.close(); + } + } + + + + + /** + * 브라우저 구분 얻기. + * + * @param request + * @return + */ + private String getBrowser(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1) { + return "MSIE"; + } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 + return "Trident"; + } else if (header.indexOf("Chrome") > -1) { + return "Chrome"; + } else if (header.indexOf("Opera") > -1) { + return "Opera"; + } + return "Firefox"; + } + + /** + * Disposition 지정하기. + * + * @param filename + * @param request + * @param response + * @throws Exception + */ + private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception { + String browser = getBrowser(request); + + String dispositionPrefix = "attachment; filename="; + String encodedFilename = null; + + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < filename.length(); i++) { + char c = filename.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } else { + //throw new RuntimeException("Not supported browser"); + throw new IOException("Not supported browser"); + } + + response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); + + if ("Opera".equals(browser)) { + response.setContentType("application/octet-stream;charset=UTF-8"); + } + } + + + + + + + + + /** + *
메소드 설명: 이미지 첨부파일 미리보기 기능
+ * @param model + * @param commandMap + * @param response + * @throws Exception void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 15. + */ + @SuppressWarnings("resource") + @RequestMapping(value="getImage.do", method={RequestMethod.GET, RequestMethod.POST}) + public void getImage(ModelMap model, @RequestParam Map commandMap, HttpServletResponse response) throws Exception { + + String atchFileId = (String) commandMap.get("atchFileId"); + String fileSn = (String) commandMap.get("fileSn"); + + + Map fvo = xitFrameFileService.findView(atchFileId, fileSn); + + File file = new File(fvo.get("fileStreCours"), fvo.get("streFileNm")); + FileInputStream fis = null; + new FileInputStream(file); + + BufferedInputStream in = null; + ByteArrayOutputStream bStream = null; + try { + fis = new FileInputStream(file); + in = new BufferedInputStream(fis); + bStream = new ByteArrayOutputStream(); + int imgByte; + while ((imgByte = in.read()) != -1) { + bStream.write(imgByte); + } + + String type = ""; + + if (fvo.get("fileExtsn") != null && !"".equals(fvo.get("fileExtsn"))) { + if ("jpg".equals(fvo.get("fileExtsn").toLowerCase())) { + type = "image/jpeg"; + } else { + type = "image/" + fvo.get("fileExtsn").toLowerCase(); + } + type = "image/" + fvo.get("fileExtsn").toLowerCase(); + + } else { + logger.debug("Image fileType is null."); + } + + response.setHeader("Content-Type", type); + response.setContentLength(bStream.size()); + + bStream.writeTo(response.getOutputStream()); + + response.getOutputStream().flush(); + response.getOutputStream().close(); + + } catch (Exception e) { + logger.debug("{}", e); + } finally { + if (bStream != null) { + try { + bStream.close(); + } catch (Exception est) { + logger.debug("IGNORED: {}", est.getMessage()); + } + } + if (in != null) { + try { + in.close(); + } catch (Exception ei) { + logger.debug("IGNORED: {}", ei.getMessage()); + } + } + if (fis != null) { + try { + fis.close(); + } catch (Exception efis) { + logger.debug("IGNORED: {}", efis.getMessage()); + } + } + } + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/web/XitFramePopupController.java b/src/main/java/kr/xit/framework/biz/cmm/web/XitFramePopupController.java new file mode 100644 index 00000000..79e6ef69 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/web/XitFramePopupController.java @@ -0,0 +1,89 @@ +package kr.xit.framework.biz.cmm.web; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFramePopupService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: XIT 프레임워크 팝업 Controller + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_cmmn_/popup/") +public class XitFramePopupController { + + @Resource + private XitFramePopupService xitFramePopupService; + @Resource + private kr.xit.framework.biz.cmm.service.XitFrameUnitService XitFrameUnitService; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + + /** + *
메소드 설명: 우편번호 검색 페이지
+ * @param modelMap + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + @RequestMapping(value="ZipSearch.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ZipSearch(ModelMap modelMap) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/popup/XitZipSearch"+TILES_TYPE.POPUP.getVal(); + } + /** + *
메소드 설명: 우편번호 검색
+ * @param modelMap + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + @RequestMapping(value="ZipSearchList.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ZipSearchList(@ModelAttribute("searchVO") XitBaseSearchVO searchVO , ModelMap modelMap) { + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + modelMap.addAttribute("resultList", xitFramePopupService.findListZip(searchVO)); + + int totCnt = xitFramePopupService.findListZipTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + modelMap.addAttribute("paginationInfo", paginationInfo); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"common/popup/XitZipSearchList"+TILES_TYPE.POPUP.getVal(); + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameSchedulerController.java b/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameSchedulerController.java new file mode 100644 index 00000000..06215744 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameSchedulerController.java @@ -0,0 +1,69 @@ +package kr.xit.framework.biz.cmm.web; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; + +import kr.xit.framework.biz.cmm.service.XitFrameSchedulerService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.core.message.XitMessageSource; + +/** + * + * @업무그룹명: XIT 프레임워크 스케줄러 Controller + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +public class XitFrameSchedulerController { + + private static final Logger logger = LoggerFactory.getLogger(XitFrameSchedulerController.class); + + @Resource + private XitFrameSchedulerService xitFrameSchedulerService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 장기 미접속 사용자 부재 처리
+	 * 	-장기간 미접속한 사용자 계정을 부재상태로 전환 한다.
+	 * 	-부재상태의 계정은 로그인이 불가 하도록 처리 할 수 있다.
+	 * 
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 21. + */ + public void longTermDisconectUserProc() { + /** + * 조회 + * -장기미접속 사용자를 조회 한다. + */ + List> result = xitFrameUnitService.findLongTermDisconectUser(-1); + + /** + * 처리 + * -장기미접속 사용자 계정을 부재상태(휴먼계정)로 전환 한다. + */ + for(Map map : result) { + String userId = map.get("USER_ID"); + try { + xitFrameSchedulerService.addLongTermDisconectUser(userId); + } catch (Exception e) { + logger.debug(String.format("사용자 부재상태(휴먼계정) 전환 처리 실패 --> %s", userId)); + } + } + } + + + +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameUtilController.java b/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameUtilController.java new file mode 100644 index 00000000..a32bbef5 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/web/XitFrameUtilController.java @@ -0,0 +1,87 @@ +package kr.xit.framework.biz.cmm.web; + +import java.util.Enumeration; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: XIT 프레임워크 공통도구 Controller + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_cmmn_/util/") +public class XitFrameUtilController { + + /** + *
메소드 설명: Validation rule dynamic java script
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 6. 2. + */ + @RequestMapping(value="validator.do", method={RequestMethod.GET, RequestMethod.POST}) + public String validate() { + return "framework/cmmn/util/validator"+TILES_TYPE.NONE.getVal(); + } + + /** + *
메소드 설명: json 타입으로 반환 한다.
+	 *  -요청 parameter 및 attribute의 값을 json으로 반환 한다.
+	 *  -반환데이터는 문자열 또는 Collection 객체 모두 가능하다.
+	 *  -반환데이터는 요청 시 request.setAttribute에 설정하도록 하며 key는 반드시 "resp"로 작성 하도록 한다.
+	 * 	ex)
+	 * 		request.setAttribute("resp", "정상처리 되었습니다.");
+	 *  
+	 * 		또는
+	 * 
+	 * 	    Map resultMap = new HashMap();
+	 * 		.
+	 * 		.(생략)
+	 * 		request.setAttribute("resp", resultMap);
+	 * 
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 10. + */ + @RequestMapping(value="responseJson.do", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map responseJson(HttpServletRequest request + ,@RequestParam Map paramMap + ) { + + /** + * 반환 + */ + if((boolean) request.getAttribute("isNoParentKey")) { //부모키 생성 X + Enumeration enumer = request.getAttributeNames(); + while(enumer.hasMoreElements()) { + String name = enumer.nextElement(); + Object value = request.getAttribute(name); + + if(name.contains(".") || name.startsWith("__spring_security") ) + continue; + + paramMap.put(name, value); + } + }else { //부모키 "resp" 생성 + Object respData = request.getAttribute("resp"); + if(XitCmmnUtil.notEmpty(respData)) + paramMap.put("resp", respData); + } + + return paramMap; + } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/web/XitTestController.java b/src/main/java/kr/xit/framework/biz/cmm/web/XitTestController.java new file mode 100644 index 00000000..52ef13a8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/web/XitTestController.java @@ -0,0 +1,480 @@ +package kr.xit.framework.biz.cmm.web; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitTestService; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitMap; +import kr.xit.framework.core.utils.XitScrtyUtil; + +/** + * + * @업무그룹명: Xit 프레임워크 테스트 Controller + * @설명: 각종 테스트를 위한 Controller + * @최초작성일: 2020. 3. 20. 오후 6:32:38 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping(value="/xitframe/test/") +public class XitTestController { + private static final Logger logger = LoggerFactory.getLogger(XitTestController.class); + + @Resource + private XitTestService xitTestService; + @Resource + private XitFrameCrudService xitFrameCrudService; + + private final String TEST_JSP_PATH = "framework/test/"; + + /** + *
메소드 설명: 조회 테스트
+	 * 	-DB가 정상적으로 호출 되는지 확인 한다.
+	 * 
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @date: 2020. 3. 18. + */ + @RequestMapping(value="case1.do") + public void case1(HttpServletResponse resp) throws IOException { + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (!isAuthenticated) { +// model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); +// return "framework/egov/uat/uia/EgovLoginUsr"; + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
권한이 없습니다.
")); + writer.write("================================================================"); + writer.close(); + return; + } + + /** + * 처리 + */ + //DB 조회 + XitMap xitMap = xitTestService.findTest(); + + + /** + * 요청결과 반화 + */ + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
조회 테스트 결과:::::::%s
", xitMap.toString())); + writer.write("================================================================"); + writer.close(); + + } + + + /** + *
메소드 설명: 트랜잭션 테스트
+ * @param resp + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + @RequestMapping(value="case2.do") + public void case2(HttpServletResponse resp) throws IOException { + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (!isAuthenticated) { + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
권한이 없습니다.
")); + writer.write("================================================================"); + writer.close(); + return; + } + + +// try { + xitTestService.transactionTest(); +// } catch (Exception e) { +// resp.setCharacterEncoding("UTF-8"); +// resp.setContentType("text/html charset=UTF-8"); +// Writer writer = resp.getWriter(); +// writer.write("================================================================"); +// writer.write(String.format("
처리 도중 error 발생.
")); +// writer.write(String.format("
error details...-> %s
", e.getMessage())); +// writer.write("================================================================"); +// writer.close(); +// } + } + + + /** + *
메소드 설명: 연쇄적인 서비스 호출 시 트랜잭션 테스트
+ * @param resp + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + @RequestMapping(value="case3.do") + public void case3(HttpServletResponse resp) throws IOException { + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (!isAuthenticated) { + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
권한이 없습니다.
")); + writer.write("================================================================"); + writer.close(); + return; + } + + + try { + xitTestService.transactionOfServiceChainTest(); + } catch (Exception e) { + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
처리 도중 error 발생.
")); + writer.write(String.format("
error details...-> %s
", e.getMessage())); + writer.write("================================================================"); + writer.close(); + + throw new RuntimeException(e); + } + } + + /** + *
메소드 설명: tiles 적용 테스트
+ * @param resp + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 20. + */ + @RequestMapping(value="case4.do") + public String case4(@RequestParam(name="tiles", required=false, defaultValue="") String tiles) throws IOException { + switch (tiles.toUpperCase()) { + case "N": + return TEST_JSP_PATH+"test"+TILES_TYPE.NONE.getVal(); + default: + return TEST_JSP_PATH+"test"; + } + + } + + /** + *
메소드 설명: 사용자 비밀번호 초기화
+	 * 	-신규시스템으로 이전된 사용자의 비밀번호를 새로운 비밀번호로 변경 한다.
+	 * 
+ * @param resp + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 29. + */ + @RequestMapping(value="case5.do") + public void case5(HttpServletResponse resp + , @RequestParam(name="trget", required=false, defaultValue="one") String trget + , @RequestParam(name="trgetId", required=false, defaultValue="") String trgetId + ) throws IOException { + + + List listUserInfo = null; + try { + XitUserInfoVO vo = new XitUserInfoVO(); + if("all".equalsIgnoreCase(trget)) + listUserInfo = xitFrameCrudService.findXitUserInfos(vo); + else { + if(XitCmmnUtil.isEmpty(trgetId)) + throw new RuntimeException("사용자ID는 필수조건 입니다."); + vo.setUser_id(trgetId); + listUserInfo = xitFrameCrudService.findXitUserInfos(vo); + } + + + for(XitUserInfoVO userInfoVO : listUserInfo) { + String newPassword = XitScrtyUtil.encryptPassword("1", userInfoVO.getUser_id()); + vo = new XitUserInfoVO(); + vo.setUser_id(userInfoVO.getUser_id()); + vo.setPassword(newPassword); + xitFrameCrudService.modifyXitUserInfo(vo); + } + + } catch (Exception e) { + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
처리 도중 error 발생.
")); + writer.write(String.format("
error details...-> %s
", e.getMessage())); + writer.write("================================================================"); + writer.close(); + return; + } + + resp.setCharacterEncoding("UTF-8"); + resp.setContentType("text/html charset=UTF-8"); + Writer writer = resp.getWriter(); + writer.write("================================================================"); + writer.write(String.format("
처리 결과:::::::%s건의 사용자 비밀번호 초기화 완료
", listUserInfo.size())); + writer.write("================================================================"); + writer.close(); + + + + } + + /** + *
메소드 설명: tui grid 테스트 
+ * @param resp + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 17. + */ + @RequestMapping(value="case6.do") + public String case6(HttpServletResponse resp, @RequestParam(name="tiles", required=false, defaultValue="") String tiles) throws IOException { + switch (tiles.toUpperCase()) { + case "N": + return TEST_JSP_PATH+"TuiGrid"+TILES_TYPE.NONE.getVal(); + default: + return TEST_JSP_PATH+"TuiGrid"; + } + + } + /** + *
메소드 설명: tui grid 데이터 조회
+ * @return + * @throws IOException Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 17. + */ + @RequestMapping(value="case7.do") + @ResponseBody + public Map case7(@RequestParam Map m) throws IOException { + /** + * 조회 + */ + List list = xitFrameCrudService.findXitUserInfos(new XitUserInfoVO()); + + /**AA + * 응답결과 설정 + */ + Map resultMap = new HashMap(); + resultMap.put("data", list); + resultMap.putAll(m); + return resultMap; + } + + + /** + *
메소드 설명: 대용량 insert 테스트
+ * @param m + * @return + * @throws IOException Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 17. + */ + @RequestMapping(value="case8.do") + @ResponseBody + public Map case8(@RequestParam Map m) throws IOException { + /** + * 처리 + */ + int dataSize = XitCmmnUtil.isEmpty(m.get("dataSize"))?0:Integer.parseInt(m.get("dataSize")); + String type = "unknown"; + int result = 0; + long startTime = System.currentTimeMillis(); + switch (m.get("type")) { + case "single": + case "1": + //single insert SQL 사용 + type = "Single"; + result = xitTestService.insertBatchTestBySingle(dataSize); + break; + case "bulk": + case "2": + //foreach insert SQL 사용 + type = "Bulk"; + result = xitTestService.insertBatchTestByBulk(dataSize); + break; + default: + //single insert SQL 사용 + type = "Single"; + result = xitTestService.insertBatchTestBySingle(dataSize); + break; + } + long endTime = System.currentTimeMillis(); + + /** + * 응답결과 설정 + */ + Map resultMap = new HashMap(); + resultMap.put("message", String.format("%s 타입으로 총 %d건 등록 %d초 소요", type, result, (endTime-startTime)/1000 )); + return resultMap; + } + + @RequestMapping(value="case9.do") + public void case9(@RequestParam Map m, HttpServletResponse response) throws IOException { + final String PATH = "C:/xit/test/"; + final String FILE_NAME = "api.log"; + + printLog(PATH, FILE_NAME, "hahaha"); + printLog(PATH, FILE_NAME, "kkkkkk"); + printLog(PATH, FILE_NAME, "hohoho"); + + downloadLog(response, PATH+FILE_NAME); + } + + + /** + *
메소드 설명: 엑셀 저장
+ * @param m + * @param response + * @author: 박민규 + * @throws Exception + * @date: 2021. 9. 24. + */ + @RequestMapping(value="case10.do") + public String case10(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { + response.setHeader("Content-disposition", "attachment; filename=" + XitCmmnUtil.getFileNameForDownload(request, "엑셀파일 저장 테스트.xlsx")); + + + StringBuffer columns = new StringBuffer(); //jsonArray 포맷 String으로 작성 + columns.append("[") + .append("{\"title\" : \"컬럼1\", \"name\" : \"col1\"}") + .append(",{\"title\" : \"컬럼2\", \"name\" : \"col2\"}") + .append(",{\"title\" : \"컬럼3\", \"name\" : \"col3\"}") + .append(",{\"title\" : \"컬럼4\", \"name\" : \"col4\"}") + .append("]"); + List> list = new ArrayList>(); //contents + Map row = new HashMap(); + row.put("col1", 123); row.put("col2", "2021-09-21"); row.put("col3", "123,456,789" ); row.put("col4", "abc"); + list.add(row); + row = new HashMap(); + row.put("col1", 456); row.put("col2", "2021-09-22"); row.put("col3", "123,456,789.22"); row.put("col4", "가나다"); + list.add(row); + row = new HashMap(); + row.put("col1", 789); row.put("col2", "2021-09-23"); row.put("col3", 123456789L ); row.put("col4", "0123456789"); + list.add(row); + row = new HashMap(); + row.put("col1", 012); row.put("col2", "2021-09-24"); row.put("col3", 123456789.44 ); row.put("col4", "010-1111-222"); + list.add(row); + + + + logger.debug("EXCEL LIST : " + list); + + model.put("header", columns.toString()); + model.put("contents", list); + + return "excelView"; + } + + /** + *
메소드 설명: 로그 출력
+	 * 	- API 호출 시 로그정보를 파일에 저장 한다.
+	 * 
+ * @param PATH 파일경로(ex> 윈도우 C:/logs/ 리눅스계열: /logs/) + * @param FILE_NAME 파일명(ex> api.log) + * @param MESSAGE 메세지 + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 1. 28. + */ + private void printLog(final String PATH, final String FILE_NAME, final String MESSAGE) throws IOException { + //디렉토리가 없으면.. 생성 + File dir = new File(PATH); + if(!dir.isDirectory()) + dir.mkdirs(); + + //로그 출력 + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + FileOutputStream fos = new FileOutputStream(PATH+FILE_NAME, true); + OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); + BufferedWriter writer = null; + try { + writer = new BufferedWriter(osw); + writer.write(String.format("%s LOG [%s]", date.format(new Date()), MESSAGE )); + writer.write("\r\n"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + //BufferedWriter close.. + if(writer != null) { + writer.close(); + } + //OutputStreamWriter close.. + if(osw != null) { + osw.close(); + } + //FileOutputSteam close.. + if(fos != null) { + fos.close(); + } + } + } + + + private void downloadLog(HttpServletResponse response, String pathname) throws IOException { + File file = new File(pathname); + + if (!file.exists()) { + throw new FileNotFoundException(pathname); + } + if (!file.isFile()) { + throw new FileNotFoundException(pathname); + } + + response.setContentLength((int) file.length()); + response.addHeader("Content-Disposition", "attachment;filename=" + file.getName() + ";"); + + FileInputStream fis = new FileInputStream(file); + OutputStream os = response.getOutputStream(); + byte[] bytes = new byte[256]; + int readBytes = 0; + while ((readBytes = fis.read(bytes, 0, bytes.length)) != -1) { + os.write(bytes, 0, readBytes); + } + os.flush(); + + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/login/dao/XitLoginMapper.java b/src/main/java/kr/xit/framework/biz/login/dao/XitLoginMapper.java new file mode 100644 index 00000000..a6569559 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/login/dao/XitLoginMapper.java @@ -0,0 +1,10 @@ +package kr.xit.framework.biz.login.dao; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper +public interface XitLoginMapper { + + + +} diff --git a/src/main/java/kr/xit/framework/biz/login/model/XitLoginVO.java b/src/main/java/kr/xit/framework/biz/login/model/XitLoginVO.java new file mode 100644 index 00000000..2d6dd8be --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/login/model/XitLoginVO.java @@ -0,0 +1,354 @@ +package kr.xit.framework.biz.login.model; + +import java.io.Serializable; + +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.core.constants.FrameworkConstants.USER_SE; + +public class XitLoginVO implements Serializable{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 4351132649093520622L; + + + /** 아이디 */ + private String id; + /** 이름 */ + private String name; + /** 주민등록번호 */ + private String ihidNum; + /** 이메일주소 */ + private String email; + /** 비밀번호 */ + private String password; + /** 비밀번호 힌트 */ + private String passwordHint; + /** 비밀번호 정답 */ + private String passwordCnsr; + /** 사용자구분 */ + private String userSe; + /** 조직ID */ + private String orgnztId; + /** 조직명 */ + private String orgnztNm; + /** 고유아이디 */ + private String uniqId; + /** 로그인 후 이동할 페이지 */ + private String url; + /** 사용자 IP정보 */ + private String ip; + /** GPKI인증 DN */ + private String dn; + /** 그룹 ID */ + private String groupId; + /** 업무 데이터 권한 */ + private String jobDataAuthor; + /** 사용자 관리 권한 */ + private String userManageAuthor; + /** 전자결재 사용 여부 */ + private String elctrnsanctnUseAt; + /** 업무 승인 권한 여부 */ + private String jobConfmAuthorAt; + /** + * id attribute 를 리턴한다. + * @return String + */ + public String getId() { + return id; + } + /** + * id attribute 값을 설정한다. + * @param id String + */ + public void setId(String id) { + this.id = id; + } + /** + * name attribute 를 리턴한다. + * @return String + */ + public String getName() { + return name; + } + /** + * name attribute 값을 설정한다. + * @param name String + */ + public void setName(String name) { + this.name = name; + } + /** + * ihidNum attribute 를 리턴한다. + * @return String + */ + public String getIhidNum() { + return ihidNum; + } + /** + * ihidNum attribute 값을 설정한다. + * @param ihidNum String + */ + public void setIhidNum(String ihidNum) { + this.ihidNum = ihidNum; + } + /** + * email attribute 를 리턴한다. + * @return String + */ + public String getEmail() { + return email; + } + /** + * email attribute 값을 설정한다. + * @param email String + */ + public void setEmail(String email) { + this.email = email; + } + /** + * password attribute 를 리턴한다. + * @return String + */ + public String getPassword() { + return password; + } + /** + * password attribute 값을 설정한다. + * @param password String + */ + public void setPassword(String password) { + this.password = password; + } + /** + * passwordHint attribute 를 리턴한다. + * @return String + */ + public String getPasswordHint() { + return passwordHint; + } + /** + * passwordHint attribute 값을 설정한다. + * @param passwordHint String + */ + public void setPasswordHint(String passwordHint) { + this.passwordHint = passwordHint; + } + /** + * passwordCnsr attribute 를 리턴한다. + * @return String + */ + public String getPasswordCnsr() { + return passwordCnsr; + } + /** + * passwordCnsr attribute 값을 설정한다. + * @param passwordCnsr String + */ + public void setPasswordCnsr(String passwordCnsr) { + this.passwordCnsr = passwordCnsr; + } + /** + * userSe attribute 를 리턴한다. + * @return String + */ + public String getUserSe() { + return userSe; + } + /** + * userSe attribute 값을 설정한다. + * @param userSe String + */ + public void setUserSe(String userSe) { + this.userSe = userSe; + } + /** + * orgnztId attribute 를 리턴한다. + * @return String + */ + public String getOrgnztId() { + return orgnztId; + } + /** + * orgnztId attribute 값을 설정한다. + * @param orgnztId String + */ + public void setOrgnztId(String orgnztId) { + this.orgnztId = orgnztId; + } + /** + * uniqId attribute 를 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + /** + * url attribute 를 리턴한다. + * @return String + */ + public String getUrl() { + return url; + } + /** + * url attribute 값을 설정한다. + * @param url String + */ + public void setUrl(String url) { + this.url = url; + } + /** + * ip attribute 를 리턴한다. + * @return String + */ + public String getIp() { + return ip; + } + /** + * ip attribute 값을 설정한다. + * @param ip String + */ + public void setIp(String ip) { + this.ip = ip; + } + /** + * dn attribute 를 리턴한다. + * @return String + */ + public String getDn() { + return dn; + } + /** + * dn attribute 값을 설정한다. + * @param dn String + */ + public void setDn(String dn) { + this.dn = dn; + } + public String getGroupId() { + return groupId; + } + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * @return the orgnztNm + */ + public String getOrgnztNm() { + return orgnztNm; + } + /** + * @param orgnztNm the orgnztNm to set + */ + public void setOrgnztNm(String orgnztNm) { + this.orgnztNm = orgnztNm; + } + public String getJobDataAuthor() { + return jobDataAuthor; + } + public void setJobDataAuthor(String jobDataAuthor) { + this.jobDataAuthor = jobDataAuthor; + } + public String getUserManageAuthor() { + return userManageAuthor; + } + public void setUserManageAuthor(String userManageAuthor) { + this.userManageAuthor = userManageAuthor; + } + public String getElctrnsanctnUseAt() { + return elctrnsanctnUseAt; + } + public void setElctrnsanctnUseAt(String elctrnsanctnUseAt) { + this.elctrnsanctnUseAt = elctrnsanctnUseAt; + } + public String getJobConfmAuthorAt() { + return jobConfmAuthorAt; + } + public void setJobConfmAuthorAt(String jobConfmAuthorAt) { + this.jobConfmAuthorAt = jobConfmAuthorAt; + } + + + /** + *
메소드 설명: 일반/기업/업무사용자 VO의 데이터를 XitUserVO에 매핑 한다.
+ * @param obj void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + public void convertToLoginVO(Object obj) { + + /** + * 사용자정보 매핑 + */ + if( obj == null) { + + } else if(obj instanceof XitGnrlMberVO) { + //일반회원 + XitGnrlMberVO vo = (XitGnrlMberVO)obj; + this.id = vo.getMber_id(); + this.name = vo.getMber_nm(); + this.password = vo.getPassword(); + this.ihidNum = vo.getIhidnum(); + this.email = vo.getMber_email_adres(); + this.userSe = USER_SE.GNR.name(); + this.orgnztId = "-"; + this.orgnztNm = "-"; + this.groupId = vo.getGroup_id(); + this.uniqId = vo.getEsntl_id(); + this.jobDataAuthor = "-"; + this.userManageAuthor = "-"; + this.elctrnsanctnUseAt = "-"; + this.jobConfmAuthorAt = "-"; + + }else if(obj instanceof XitEntrprsMberVO) { + //기업회원 + XitEntrprsMberVO vo = (XitEntrprsMberVO)obj; + this.id = vo.getEntrprs_mber_id(); + this.name = vo.getCmpny_nm(); + this.password = vo.getEntrprs_mber_password(); + this.ihidNum = vo.getBizrno(); + this.email = vo.getApplcnt_email_adres(); + this.userSe = USER_SE.ENT.name(); + this.orgnztId = "-"; + this.orgnztNm = "-"; + this.groupId = vo.getGroup_id(); + this.uniqId = vo.getEsntl_id(); + this.jobDataAuthor = "-"; + this.userManageAuthor = "-"; + this.elctrnsanctnUseAt = "-"; + this.jobConfmAuthorAt = "-"; + + }else if(obj instanceof XitUserInfoVO) { + //업무사용자 + XitUserInfoVO vo = (XitUserInfoVO)obj; + this.id = vo.getUser_id(); + this.name = vo.getUser_nm(); + this.password = vo.getPassword(); + this.ihidNum = vo.getIhidnum(); + this.email = vo.getEmail_adres(); + this.userSe = USER_SE.USR.name(); + this.orgnztId = vo.getOrgnzt_id(); + this.orgnztNm = vo.getOrgnzt_nm(); + this.groupId = vo.getGroup_id(); + this.uniqId = vo.getEsntl_id(); + this.jobDataAuthor = vo.getJob_data_author(); + this.userManageAuthor = vo.getUser_manage_author(); + this.elctrnsanctnUseAt = vo.getElctrnsanctn_use_at(); + this.jobConfmAuthorAt = vo.getJob_confm_author_at(); + } + } + + +} + + diff --git a/src/main/java/kr/xit/framework/biz/login/service/XitLoginService.java b/src/main/java/kr/xit/framework/biz/login/service/XitLoginService.java new file mode 100644 index 00000000..a395a8ab --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/login/service/XitLoginService.java @@ -0,0 +1,55 @@ +package kr.xit.framework.biz.login.service; + +import kr.xit.framework.biz.login.model.XitLoginVO; + +public interface XitLoginService { + + + /** + *
메소드 설명: 일반(스프링 시큐리티) 로그인을 처리 한다.
+ * @param vo XitLoginVO + * @return + * @throws Exception XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + XitLoginVO actionLogin(XitLoginVO vo) throws Exception; + /** + *
메소드 설명: 로그인 성공
+ * @throws Exception void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + void actionLoginSuccess() throws Exception; + + /** + *
메소드 설명: 아이디를 찾는다
+ * @param vo XitLoginVO + * @return + * @throws Exception XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + XitLoginVO findId(XitLoginVO vo) throws Exception; + + /** + *
메소드 설명: 비밀번호를 찾는다
+ * @param vo XitLoginVO + * @return + * @throws Exception XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + XitLoginVO findPassword(XitLoginVO vo) throws Exception; + + /** + *
메소드 설명: 비밀번호를 변경한다.
+     * 
+ * @param vo + * @throws Exception void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + void modifyPassword(XitLoginVO vo) throws Exception; + +} diff --git a/src/main/java/kr/xit/framework/biz/login/service/impl/XitLoginServiceImpl.java b/src/main/java/kr/xit/framework/biz/login/service/impl/XitLoginServiceImpl.java new file mode 100644 index 00000000..f6afb101 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/login/service/impl/XitLoginServiceImpl.java @@ -0,0 +1,262 @@ +package kr.xit.framework.biz.login.service.impl; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import nl.captcha.Captcha; +import kr.xit.framework.biz.cmm.model.XitLoginPolicyVO; +import kr.xit.framework.biz.cmm.model.XitUserAbsnceVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.dao.XitLoginMapper; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.login.service.XitLoginService; +import kr.xit.framework.core.constants.FrameworkConstants.USER_SE; +import kr.xit.framework.core.utils.egov.EgovNumberUtil; +import kr.xit.framework.core.utils.egov.EgovStringUtil; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitHttpRequestHelper; +import kr.xit.framework.core.utils.XitScrtyUtil; + +@Service +public class XitLoginServiceImpl implements XitLoginService{ + private static final Logger logger = LoggerFactory.getLogger(XitLoginServiceImpl.class); + + @Resource + private XitLoginMapper xitLoginMapper; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitFrameCrudService xitFrameCrudService; + + @Override + public XitLoginVO actionLogin(XitLoginVO vo) throws Exception { + /** + * 사용자정보 조회 + */ + XitLoginVO loginVO = null; + switch (vo.getUserSe()) { + case "GNR": //일반회원 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.GNR, vo.getId()); + break; + case "ENT": //기업회원 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.ENT, vo.getId()); + break; + case "USR": //업무사용자 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.USR, vo.getId()); + break; + default: + throw new RuntimeException("유효하지 않은 사용자구분 입니다."); + } + + + + /** + * 유효성 확인 + */ + //사용자 유무 확인 + if(loginVO == null) + throw new RuntimeException("회원의 상태가 승인대기(or삭제) 이거나 등록되지 않은 회원 입니다."); + //비밀번호 확인 + String enpassword = XitScrtyUtil.encryptPassword(vo.getPassword(), vo.getId()); + if(!loginVO.getPassword().equals(enpassword)) + return new XitLoginVO(); + //ID 또는 Password 공백 여부 확인 + if(XitCmmnUtil.isEmpty(loginVO.getId()) || XitCmmnUtil.isEmpty(loginVO.getPassword())) + return new XitLoginVO(); + //로그인정책 확인 + XitLoginPolicyVO loginPolicyVO = new XitLoginPolicyVO(); + loginPolicyVO.setUser_id(loginVO.getId()); + loginPolicyVO = xitFrameCrudService.findXitLoginPolicy(loginPolicyVO); + if (XitCmmnUtil.notEmpty(loginPolicyVO)) { + if ("Y".equals(loginPolicyVO.getLmtt_at())) { + String userIp = XitCmmnUtil.getClientIpAddr(XitHttpRequestHelper.getCurrentRequest()); // 사용자의 접속IP + if (!userIp.equals(loginPolicyVO.getIp_info())) { + throw new RuntimeException(String.format("접속하신 아이피(%s)가 등록된 아이피와 일치하지 않습니다.", userIp)); + } + } + } + //사용자부재 확인(일정기간 미접속 사용자) + XitUserAbsnceVO userAbsnceVO = new XitUserAbsnceVO(); + userAbsnceVO.setUser_id(loginVO.getId()); + userAbsnceVO = xitFrameCrudService.findXitUserAbsnce(userAbsnceVO); + if (XitCmmnUtil.notEmpty(userAbsnceVO)) { + if ("Y".equals(userAbsnceVO.getUser_absnce_at())) { + throw new RuntimeException(String.format("접속하신 아이디(%s)는 장기 미접속으로 휴먼계정으로 전환 되었습니다.", loginVO.getId())); + } + } + //캡차인증 확인 + HttpServletRequest req = XitHttpRequestHelper.getCurrentRequest(); + boolean isUseCaptcha = XitCmmnUtil.notEmpty(req.getSession().getAttribute("captcha")); + if(isUseCaptcha) { + Captcha captcha = (Captcha) req.getSession().getAttribute("captcha"); + String captchStr = captcha.getAnswer(); + String userInputStr = (String) req.getParameter("captcha"); + if(!captchStr.equals(userInputStr)) + throw new RuntimeException(String.format("자동로그인 방지 문구와 입력하신 값이 일치하지 않습니다.(생성:%s/입력:%s)", captchStr, userInputStr)); + } + + + + /** + * 결과 반환 + */ + return loginVO; + } + + @Override + public void actionLoginSuccess() throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public XitLoginVO findId(XitLoginVO vo) throws Exception { + + /** + * 사용자정보 조회 + */ + XitLoginVO loginVO = null; + switch (vo.getUserSe()) { + case "GNR": //일반회원 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.GNR, vo.getName(), vo.getEmail()); + break; + case "ENT": //기업회원 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.ENT, vo.getName(), vo.getEmail()); + break; + case "USR": //업무사용자 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.USR, vo.getName(), vo.getEmail()); + break; + default: + throw new RuntimeException("유효하지 않은 사용자구분 입니다."); + } + + + /** + * 유효성 확인 + */ + //사용자 유무 확인 + if(loginVO == null) + return new XitLoginVO(); + //ID 또는 Password 공백 여부 확인 + if(XitCmmnUtil.isEmpty(loginVO.getId())) + return new XitLoginVO(); + + + /** + * 결과 반환 + */ + return loginVO; + } + + @Override + public XitLoginVO findPassword(XitLoginVO vo) throws Exception { + + /** + * 사용자정보 조회 + */ + XitLoginVO loginVO = null; + switch (vo.getUserSe()) { + case "GNR": //일반회원 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.GNR, vo.getId(), vo.getName(), vo.getEmail()); + break; + case "ENT": //기업회원 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.ENT, vo.getId(), vo.getName(), vo.getEmail()); + break; + case "USR": //업무사용자 + loginVO = xitFrameUnitService.findUserInUseByUserSe(USER_SE.USR, vo.getId(), vo.getName(), vo.getEmail()); + break; + default: + throw new RuntimeException("유효하지 않은 사용자구분 입니다."); + } + + + /** + * 유효성 확인 + */ + //사용자 유무 확인 + if(loginVO == null) + return new XitLoginVO(); + //ID 또는 Password 공백 여부 확인 + if(XitCmmnUtil.isEmpty(loginVO.getId())) + return new XitLoginVO(); + + + /** + * 결과 반환 + */ + return loginVO; + } + + + @Override + public void modifyPassword(XitLoginVO vo) throws Exception { + + + + /** + * 사용자정보 조회 + * -변경 전 다시 한번 조회하여 파라미터 조작으로부터 보안성을 강화 한다. + */ + XitLoginVO loginVO = this.findPassword(vo); + + + /** + * 유효성 확인 + */ + if(XitCmmnUtil.isEmpty(loginVO)) + throw new RuntimeException("일치하는 회원 정보가 없습니다."); + + + /** + * 필수값 설정 + */ + //임시 비밀번호 생성(영+영+숫+영+영+숫=6자리) + String newpassword = ""; + for (int i = 1; i <= 6; i++) { + if (i % 3 != 0) { + // 영자 + newpassword += EgovStringUtil.getRandomStr('a', 'z'); + } else { + // 숫자 + newpassword += EgovNumberUtil.getRandomNum(0, 9); + } + } + String encNewPassword = XitScrtyUtil.encryptPassword(newpassword, vo.getId()); + + /** + * 처리 + */ + //사용자구분별 비밀번호 update + switch (vo.getUserSe()) { + case "GNR": //일반회원 + xitFrameUnitService.modifyUserPasswordByUserSe(USER_SE.GNR, vo.getId(), encNewPassword); + break; + case "ENT": //기업회원 + xitFrameUnitService.modifyUserPasswordByUserSe(USER_SE.ENT, vo.getId(), encNewPassword); + break; + case "USR": //업무사용자 + xitFrameUnitService.modifyUserPasswordByUserSe(USER_SE.USR, vo.getId(), encNewPassword); + break; + } + //신규 비밀번호 Set + vo.setPassword(newpassword); + + // 임시 비밀번호를 이메일 발송한다.(메일연동솔루션 활용 시) + //SndngMailVO sndngMailVO = new SndngMailVO(); + //sndngMailVO.setDsptchPerson("webmaster"); + //sndngMailVO.setRecptnPerson(vo.getEmail()); + //sndngMailVO.setSj("[MOPAS] 임시 비밀번호를 발송했습니다."); + //sndngMailVO.setEmailCn("고객님의 임시 비밀번호는 " + newpassword + " 입니다."); + //sndngMailVO.setAtchFileId(""); + + //result = sndngMailRegistService.insertSndngMail(sndngMailVO); + + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/login/service/impl/XitSessionMapping.java b/src/main/java/kr/xit/framework/biz/login/service/impl/XitSessionMapping.java new file mode 100644 index 00000000..2a06a3d4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/login/service/impl/XitSessionMapping.java @@ -0,0 +1,83 @@ +package kr.xit.framework.biz.login.service.impl; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import javax.sql.DataSource; + +import egovframework.rte.fdl.security.userdetails.EgovUserDetails; +import egovframework.rte.fdl.security.userdetails.jdbc.EgovUsersByUsernameMapping; +import kr.xit.framework.biz.login.model.XitLoginVO; + +/** + * + * @업무그룹명: mapRow 결과를 사용자 EgovUserDetails Object 에 정의한다. + * @설명: 로그인 처리 후 Session 정보를 설정 한다. + * @최초작성일: 2020. 3. 23. 오후 6:22:21 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitSessionMapping extends EgovUsersByUsernameMapping { + + /** + * 사용자정보를 테이블에서 조회하여 EgovUsersByUsernameMapping 에 매핑한다. + * @param ds DataSource + * @param usersByUsernameQuery String + */ + public XitSessionMapping(DataSource ds, String usersByUsernameQuery) { + super(ds, usersByUsernameQuery); + } + + /** + * mapRow Override + * @param rs ResultSet 결과 + * @param rownum row num + * @return Object EgovUserDetails + * @exception SQLException + */ + @Override + protected EgovUserDetails mapRow(ResultSet rs, int rownum) throws SQLException { + logger.debug("## XitUsersByUsernameMapping mapRow ##"); + + /** + * Map Row 취득 + * -"인증에 사용되는 사용자정보 조회 질의문" 조회 결과 + */ + String strUserId = rs.getString("user_id"); + String strPassWord = rs.getString("password"); + boolean strEnabled = rs.getBoolean("enabled"); + String strUserNm = rs.getString("user_nm"); + String strUserSe = rs.getString("user_se"); + String strUserEmail = rs.getString("user_email"); + String strOrgnztId = rs.getString("orgnzt_id"); + String strOrgnztNm = rs.getString("orgnzt_nm"); + String strUniqId = rs.getString("esntl_id"); + String strJobDataAuthor = rs.getString("job_data_author"); + String strUserManageAuthor = rs.getString("user_manage_author"); + String strElctrnsanctnUseAt = rs.getString("elctrnsanctn_use_at"); + String strJobConfmAuthorAt = rs.getString("job_confm_author_at"); + + + + /** + * Session 설정 + */ + XitLoginVO loginVO = new XitLoginVO(); + loginVO.setId(strUserId); //아이디 + loginVO.setPassword(strPassWord); //비밀번호 + loginVO.setName(strUserNm); //이름 + loginVO.setUserSe(strUserSe); //사용자구분 + loginVO.setEmail(strUserEmail); //이메일주소 + loginVO.setOrgnztId(strOrgnztId); //조직(부서)ID + loginVO.setOrgnztNm(strOrgnztNm); //조직(부서)ID 명 + loginVO.setUniqId(strUniqId); //고유아이디 + loginVO.setJobDataAuthor(strJobDataAuthor); //업무 데이터 권한 + loginVO.setUserManageAuthor(strUserManageAuthor); //사용자 관리 권한 + loginVO.setElctrnsanctnUseAt(strElctrnsanctnUseAt); //전자결재 사용 여부 + loginVO.setJobConfmAuthorAt(strJobConfmAuthorAt); //업무 승인 권한 여부 + + return new EgovUserDetails(strUserId, strPassWord, strEnabled, loginVO); + } +} diff --git a/src/main/java/kr/xit/framework/biz/login/web/XitLoginController.java b/src/main/java/kr/xit/framework/biz/login/web/XitLoginController.java new file mode 100644 index 00000000..20f76a8e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/login/web/XitLoginController.java @@ -0,0 +1,502 @@ +package kr.xit.framework.biz.login.web; + +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.support.WebApplicationContextUtils; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.login.service.XitLoginService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.constants.FrameworkConstants.USER_SE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Controller +@RequestMapping(value = "/login/") +public class XitLoginController { + + @Autowired + private XitLoginService xitLoginService; + @Autowired + private XitFrameCrudService xitFrameCrudService; + @Autowired + private XitMessageSource xitMessageSource; + + @Value("#{prop['Globals.Xit.LoginPage']}") + private String LOGIN_PAGE; + @Value("#{prop['Globals.Xit.AccessDeniedPage']}") + private String ACCESS_DENIED_PAGE; + @Value("#{prop['Globals.Xit.MainPage']}") + private String MAIN_PAGE; + @Value("#{prop['Globals.Xit.MainPage.Gnr']}") + private String MAIN_PAGE_GNR; + @Value("#{prop['Globals.Xit.MainPage.Ent']}") + private String MAIN_PAGE_ENT; + @Value("#{prop['Globals.Xit.MainPage.Usr']}") + private String MAIN_PAGE_USR; + + /** + * 로그인 후 메인화면으로 들어간다 + * + * @param + * @return 로그인 페이지 + * @exception Exception + */ + @RequestMapping(value = "actionMain.do", method={RequestMethod.GET, RequestMethod.POST}) + public String actionMain(HttpServletResponse response, HttpServletRequest request, ModelMap model) + throws Exception { + + // 1. Spring Security 사용자권한 처리 + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if (!isAuthenticated) { + return LOGIN_PAGE+TILES_TYPE.NONE.getVal(); + } + + // 2. 메인 페이지 이동 + /* =============================== + * 2020.11.20 박민규 + * 사용자 유형별 메인페이지 설정 추가 + * -사유: 사용자유형별 메인페이지를 설정하였을 경우 해당 경로로 이동시키도록 하기 위함. + =============================== */ + //2020.11.20. 주석처리 +// String url = XitProperties.getProperty("Globals.Xit.MainPage"); + String url = this.getMainPageUrlByUserSe(); + + + return "forward:"+url; + } + + /** + *
+	 * 메소드 설명: 일반(스프링 시큐리티) 로그인을 처리 한다.
+	 * 
+ * + * @param loginVO 아이디, 비밀번호가 담긴 LoginVO + * @param response 로그인결과(세션정보) + * @param request 세션처리를 위한 HttpServletRequest + * @param model + * @return + * @throws Exception String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + @RequestMapping(value = "actionSecurityLogin.do", method={RequestMethod.GET, RequestMethod.POST}) + public String actionSecurityLogin(@ModelAttribute("loginVO") XitLoginVO loginVO, HttpServletResponse response, + HttpServletRequest request, ModelMap model, @RequestParam Map paramMap) throws Exception { + + String resultMsg = null; + + + /** + * 유효성 확인 + * -비인증 상태에서 인가되지 않은 URL 호출에 대한 처리 + * :Security에서 비인가 URL 직접 호출 시 "loginUrl"(으)로 redirect를 하므로 + * :해당 요청에 대해 메세지 출력을 하도록 처리 + */ + //비인증 상태에서 인가되지 않은 URL 호출에 대한 처리 + if(XitCmmnUtil.isEmpty(paramMap)) { + return "forward:/login/accessDenied.do"; + } + + + /** + * 처리 + */ + XitLoginVO xitLoginVO = null; + try { + // 로그인 처리 + xitLoginVO = xitLoginService.actionLogin(loginVO); + } catch (Exception e) { + log.debug(String.format("로그인 처리 실패 : %s", e.getMessage())); + resultMsg = e.getMessage(); + } + + + /** + * 결과 반환 + */ + // 로그인 정보/정책에 따라 응답페이지 분기 + if (xitLoginVO != null && xitLoginVO.getId() != null && !"".equals(xitLoginVO.getId())) { + // session Set + request.getSession().setAttribute("XitLoginSession", xitLoginVO); + + // spring security 연동 + UsernamePasswordAuthenticationFilter springSecurity = null; + ApplicationContext act = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); + Map beans = act.getBeansOfType(UsernamePasswordAuthenticationFilter.class); + if (beans.size() > 0) { + springSecurity = (UsernamePasswordAuthenticationFilter) beans.values().toArray()[0]; + springSecurity.setUsernameParameter("xit_security_username"); + springSecurity.setPasswordParameter("xit_security_password"); + springSecurity.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher( + request.getServletContext().getContextPath() + "/xit_security_login", "POST")); + + } else { + throw new IllegalStateException("No AuthenticationProcessingFilter"); + } + + springSecurity.doFilter(new RequestWrapperForSecurity(request, xitLoginVO.getUserSe() + xitLoginVO.getId(), + xitLoginVO.getUniqId()), response, null); + + + xitLoginService.actionLoginSuccess();//로그인 Log 생성 + // 2. 메인 페이지 이동 + /* =============================== + * 2020.11.20 박민규 + * 사용자 유형별 메인페이지 설정 추가 + * -사유: 사용자유형별 메인페이지를 설정하였을 경우 해당 경로로 이동시키도록 하기 위함. + =============================== */ + //2020.11.20. 주석처리 +// String url = XitProperties.getProperty("Globals.Xit.MainPage"); + String url = this.getMainPageUrlByUserSe(); + return "forward:"+url; // 성공 시 페이지.. (redirect 불가) + + } else { + model.addAttribute("message", resultMsg==null?xitMessageSource.getMessage("fail.common.login"):resultMsg); + //return XitProperties.getProperty("Globals.Xit.LoginPage")+TILES_TYPE.NONE.getVal(); + return LOGIN_PAGE+TILES_TYPE.NONE.getVal(); + } + } + + /** + * 로그아웃한다. + * + * @return String + * @exception Exception + */ + @RequestMapping(value = "actionLogout.do", method={RequestMethod.GET, RequestMethod.POST}) + public String actionLogout(HttpServletRequest request, ModelMap model) throws Exception { + request.getSession().setAttribute("XitLoginSession", null); + + return "redirect:/egov_security_logout"; + } + + /** + * 권한제한 화면 이동 + * @return String + * @exception Exception + */ + @RequestMapping(value="accessDenied.do", method={RequestMethod.GET, RequestMethod.POST}) + public void accessDenied(HttpServletRequest request, HttpServletResponse response) throws Exception { + /* ====================================================== + * 2020.11.24. 박민규 + * 응답방식 수정 + * -사유: 미인증 사용자의 경우 로그인페이지로 이동 + ====================================================== */ + //2020.11.24. 주석처리 +// return XitConst.JSP_BASE_PATH+XitProperties.getProperty("Globals.Xit.AccessDeniedPage")+TILES_TYPE.NONE.getVal(); + /** + * 호출 유형에 따른 분기 + */ + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax + //Response & Message Set + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + PrintWriter writer=response.getWriter(); + String msg = xitMessageSource.getMessage("custom.fail.accessDenied"); + + //응답 + writer.println(msg); + + }else { //submit + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + //인증사용자 + if(isAuthenticated) { + //응답 + response.sendRedirect(FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +ACCESS_DENIED_PAGE+TILES_TYPE.NONE.getVal()); + + //미인증사용자 + }else { + //Response & Message Set + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + PrintWriter writer=response.getWriter(); + String msg = xitMessageSource.getMessage("custom.fail.accessDenied"); + + //응답 + String contextPath = request.getContextPath(); + boolean isExistsContextPath = "/".equals(contextPath)?false:true; + if(isExistsContextPath) + writer.println(""); + else + writer.println(""); + } + } + + } + + /** + *
메소드 설명: 아이디 찾기 페이지 요청별  팝업
+ * @param model + * @param session + * @return + * @author: 김동규 + * @throws Exception + * @date: 2020. 10. 21. + */ + @RequestMapping(value = "FindId_{page}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String FindId_page_popup(Model model + , HttpSession session + , @PathVariable String page + , @ModelAttribute("xitLoginVO") XitLoginVO vo + ) throws Exception{ + switch (page) { + case "input": //아이디 찾기 -정보입력 페이지 + case "inputEvr": //(모든사용자)아이디 찾기 -정보입력 페이지 + break; + + case "result": //아이디 찾기 -결과 + XitLoginVO loginVO = xitLoginService.findId(vo); + model.addAttribute("userId",loginVO.getId()); + break; + + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"login/XitFindId_"+page+"_popup"+ FrameworkConstants.TILES_TYPE.POPUP.getVal(); + } + + + /** + *
메소드 설명: 비밀번호 찾기 페이지 요청별 팝업
+ * @param model + * @param session + * @param xitUserInfoVO + * @return + * @throws IOException + * @throws SQLException + * @throws RuntimeException String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 10. 21. + */ + @RequestMapping(value = "FindPwd_{page}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String FindPwd_page_popup(ModelMap model + , HttpSession session + , @ModelAttribute("xitUserInfoVO") XitUserInfoVO xitUserInfoVO + , @PathVariable String page + ) throws IOException, SQLException, RuntimeException { + + switch (page) { + case "input": //비밀번호 찾기 -정보입력 페이지 + case "inputEvr": //(모든사용자)비밀번호 찾기 -정보입력 페이지 + break; + + case "result": //비밀번호 찾기 -결과 + break; + + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"login/XitFindPwd_"+page+"_popup"+ FrameworkConstants.TILES_TYPE.POPUP.getVal(); + } + + /** + *
메소드 설명: 비밀번호 찾기 CRUD 처리
+ * @param res + * @param model + * @param session + * @param vo xitUserInfoVO + * @return + * @author: 김동규 + * @throws Exception + * @date: 2020. 10. 21. + */ + @RequestMapping(value = "FindPwd_{cmd}_proc.do", method=RequestMethod.POST) + public void FindPwd_cmd_proc(HttpServletResponse res, Model model + , HttpSession session + , @ModelAttribute("xitLoginVO") XitLoginVO vo + , @PathVariable String cmd + , HttpServletRequest request + , HttpServletResponse response + ) throws Exception { + + + String sLocationUrl = null; + Map resultMap = new HashMap(); + switch (cmd) { + case "select": //조회 + XitLoginVO loginVO = xitLoginService.findPassword(vo); + + resultMap.put("result", XitCmmnUtil.isEmpty(loginVO.getId())?"N":"Y"); + break; + +// case "insert": //등록 +// break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + + boolean result = false; + String resultMsg = null; + String failDetail = null; + try { + xitLoginService.modifyPassword(vo); + result = true; + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (Exception e) { + result = false; + resultMsg = xitMessageSource.getMessage("fail.common.update"); + failDetail = e.getMessage(); + } + model.addAttribute("result", result?"Y":"N"); + model.addAttribute("resultMsg", resultMsg); + model.addAttribute("failDetail", failDetail); + model.addAttribute("temp_pwd", vo.getPassword()); + + sLocationUrl = "forward:/login/FindPwd_result_popup.do"; + break; + +// case "delete": //삭제 +// break; + +// case "deletes": //다건 삭제 +// break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + /** + * 응답 설정 + */ + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Iterator keys = resultMap.keySet().iterator(); + while(keys.hasNext()) { + String key = keys.next(); + Object value = resultMap.get(key); + request.setAttribute(key, value); + } + request.getRequestDispatcher("/login/responseJson.do").forward(request, response); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + @RequestMapping(value="responseJson.do", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map responseJson(HttpServletRequest request + ) { + /** + * 반환 + */ + Map resultMap = new HashMap(); + Object respData = request.getAttribute("result"); + if(XitCmmnUtil.notEmpty(respData)) + resultMap.put("result", respData); + + return resultMap; + } + + + + /** + *
메소드 설명: (일반/기업/업무)사용자 유형별 메인페이지 경로를 반환 한다.
+	 * 	-사용자 유형별 지정한 메인페이지 설정값이 없을 경우 default경로(Globals.Xit.MainPage)를 반환 한다.
+	 * 	[사용자 유형별 메인페이지 설정]
+	 * 	 Globals.Xit.MainPage.Gnr //일반회원
+	 * 	 Globals.Xit.MainPage.Ent //기업회원
+	 * 	 Globals.Xit.MainPage.Usr //업무사용자
+	 * 
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 20. + */ + private String getMainPageUrlByUserSe() { + String url = MAIN_PAGE; + XitLoginVO loginVO = XitCmmnUtil.getUserInfo(); + USER_SE userSe = USER_SE.valueOf(loginVO.getUserSe()); + if(!XitCmmnUtil.isEmpty(userSe)) { + switch (userSe) { + case GNR: //일반회원 + if(XitCmmnUtil.notEmpty(MAIN_PAGE_GNR)) + url = MAIN_PAGE_GNR; + break; + case ENT: //기업회원 + if(XitCmmnUtil.notEmpty(MAIN_PAGE_ENT)) + url = MAIN_PAGE_ENT; + break; + case USR: //업무사용자 + if(XitCmmnUtil.notEmpty(MAIN_PAGE_USR)) + url = MAIN_PAGE_USR; + break; + default: + break; + } + } + + return url; + } + + +} + +class RequestWrapperForSecurity extends HttpServletRequestWrapper { + private String username = null; + private String password = null; + + public RequestWrapperForSecurity(HttpServletRequest request, String username, String password) { + super(request); + + this.username = username; + this.password = password; + } + + @Override + public String getServletPath() { + return ((HttpServletRequest) super.getRequest()).getContextPath() + "/xit_security_login"; + } + + @Override + public String getRequestURI() { + return ((HttpServletRequest) super.getRequest()).getContextPath() + "/xit_security_login"; + } + + @Override + public String getParameter(String name) { + if (name.equals("xit_security_username")) { + return username; + } + + if (name.equals("xit_security_password")) { + return password; + } + + return super.getParameter(name); + } +} diff --git a/src/main/java/kr/xit/framework/biz/main/dao/XitMainMapper.java b/src/main/java/kr/xit/framework/biz/main/dao/XitMainMapper.java new file mode 100644 index 00000000..ccf7e37d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/main/dao/XitMainMapper.java @@ -0,0 +1,39 @@ +package kr.xit.framework.biz.main.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.core.model.XitMenuManageVO; + +/** + * + * @업무그룹명: XIT프레임워크 메인화면 Mapper + * @설명: + * @최초작성일: 2020. 3. 23. 오후 3:23:12 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitMainMapper { + + /** + *
메소드 설명: 화면의 상단 메뉴목록을 조회 한다.
+ * @param vo + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public List findMainMenuHeads(XitMenuManageVO vo) throws SQLException; + + /** + *
메소드 설명: 화면의 좌측 메뉴목록을 조회 한다.
+ * @param vo + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public List findtMainMenuLefts(XitMenuManageVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/main/service/XitMainService.java b/src/main/java/kr/xit/framework/biz/main/service/XitMainService.java new file mode 100644 index 00000000..bef92e15 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/main/service/XitMainService.java @@ -0,0 +1,37 @@ +package kr.xit.framework.biz.main.service; + +import java.util.List; + +import kr.xit.framework.core.model.XitMenuManageVO; + +/** + * + * @업무그룹명: XIT프레임워크 메인화면 Service + * @설명: + * @최초작성일: 2020. 3. 23. 오후 3:23:12 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitMainService { + + + /** + *
메소드 설명: 화면의 상단 메뉴목록을 조회 한다.
+ * @param uniqId 사용자 고유아이디 + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public List findMainMenuHeads(String uniqId); + + /** + *
메소드 설명: 화면의 좌측 메뉴목록을 조회 한다.
+ * @param uniqId 사용자 고유아이디 + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 24. + */ + public List findtMainMenuLefts(String uniqId); +} diff --git a/src/main/java/kr/xit/framework/biz/main/service/impl/XitMainServiceImpl.java b/src/main/java/kr/xit/framework/biz/main/service/impl/XitMainServiceImpl.java new file mode 100644 index 00000000..6e82d101 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/main/service/impl/XitMainServiceImpl.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.main.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.main.dao.XitMainMapper; +import kr.xit.framework.biz.main.service.XitMainService; +import kr.xit.framework.core.model.XitMenuManageVO; +import lombok.AllArgsConstructor; + +@AllArgsConstructor +@Service +public class XitMainServiceImpl implements XitMainService { + + private final XitMainMapper xitMainMapper; + + @Override + public List findMainMenuHeads(String uniqId) { + XitMenuManageVO vo = new XitMenuManageVO(); + vo.setTmp_UniqId(uniqId); + + + List result = null; + try { + result = xitMainMapper.findMainMenuHeads(vo); + } catch (SQLException e) { + throw new RuntimeException("상단 메뉴목록 조회 실패", e); + } + + return result; + } + + @Override + public List findtMainMenuLefts(String uniqId) { + XitMenuManageVO vo = new XitMenuManageVO(); + vo.setTmp_UniqId(uniqId); + + List result = null; + try { + result = xitMainMapper.findtMainMenuLefts(vo); + } catch (SQLException e) { + throw new RuntimeException("좌측 메뉴목록 조회 실패", e); + } + + return result; + } +} diff --git a/src/main/java/kr/xit/framework/biz/main/web/XitMainController.java b/src/main/java/kr/xit/framework/biz/main/web/XitMainController.java new file mode 100644 index 00000000..a7bb9a28 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/main/web/XitMainController.java @@ -0,0 +1,163 @@ +package kr.xit.framework.biz.main.web; + +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.main.service.XitMainService; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngSearchVO; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngVO; +import kr.xit.framework.biz.mng.bbs.basic.service.XitBasicBbsMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.model.XitMenuManageVO; +import lombok.AllArgsConstructor; + +/** + * + * @업무그룹명: XIT프레임워크 메인화면 Controller + * @설명: + * @최초작성일: 2020. 3. 23. 오후 3:23:12 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@AllArgsConstructor +@Controller +@RequestMapping(value="/main/") +public class XitMainController { + + private final XitMainService xitMainService; + private final XitBasicBbsMngService xitBasicBbsMngService; + + /** + *
메소드 설명: 메인 페이지
+	 * 	[사용자 커스텀 방법]
+	 *   -사업별 메인화면 커스텀 필요 시 ~/project의 하위 패키지에 클래스 생성
+	 *   -생성한 클래스의 requstMappging URL은 "/[임의지정]/main/mainPage.do" 로 작성    
+	 *   -globals.properties 파일의 Globals.Xit.MainPage에 requestMappging URL로 변경
+	 * 	
+	 * 
+ * @param request + * @param model + * @return + * @throws Exception String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 23. + */ + @RequestMapping(value = "/mainPage.do", method={RequestMethod.GET, RequestMethod.POST}) + public String mainPage(@ModelAttribute("searchVO") XitBasicBbsMngSearchVO searchVO, HttpServletRequest request, ModelMap model, @RequestParam Map param) throws Exception{ + + searchVO.setBbsId("BBSMSTR_00001"); + searchVO.setFirstIndex(0); + List resultList1 = xitBasicBbsMngService.findList(searchVO); //공지사항 + + searchVO.setBbsId("BBSMSTR_00003"); + List resultList2 = xitBasicBbsMngService.findList(searchVO); //업무게시판 + + model.addAttribute("resultList1", resultList1); + model.addAttribute("resultList2", resultList2); + +// // 공지사항 메인 컨텐츠 조회 시작 --------------------------------- +// BoardVO boardVO = new BoardVO(); +// boardVO.setPageUnit(10); +// boardVO.setPageSize(10); +// boardVO.setBbsId("BBSMSTR_AAAAAAAAAAAA"); +// +// PaginationInfo paginationInfo = new PaginationInfo(); +// +// paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); +// paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); +// paginationInfo.setPageSize(boardVO.getPageSize()); +// +// boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); +// boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); +// boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); +// +// Map map = bbsMngService.selectBoardArticles(boardVO, "BBSA02"); +// model.addAttribute("notiList", map.get("resultList")); +// +// +// // 공지사항 메인컨텐츠 조회 끝 ----------------------------------- +// +// // 업무게시판 메인 컨텐츠 조회 시작 ------------------------------- +// boardVO.setPageUnit(5); +// boardVO.setPageSize(10); +// boardVO.setBbsId("BBSMSTR_CCCCCCCCCCCC"); +// +// paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); +// paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); +// paginationInfo.setPageSize(boardVO.getPageSize()); +// +// boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); +// boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); +// boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); +// +// model.addAttribute("bbsList", bbsMngService.selectBoardArticles(boardVO, "BBSA02").get("resultList")); + + // 업무게시판 메인컨텐츠 조회 끝 ----------------------------------- + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"main/XitMain.main"; + } + + + /** + * Head메뉴를 조회한다. + * @param menuManageVO MenuManageVO + * @return 출력페이지정보 "main_headG", "main_head" + * @exception Exception + */ + @RequestMapping(value="/XitMainMenuHead.do", method={RequestMethod.GET, RequestMethod.POST}) + public String mainMenuHead(@ModelAttribute("menuManageVO") XitMenuManageVO menuManageVO, ModelMap model) throws Exception { + + XitLoginVO user = EgovUserDetailsHelper.isAuthenticated()? (XitLoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + + if(EgovUserDetailsHelper.isAuthenticated() && user!=null){ +// menuManageVO.setTmp_Id(user.getId()); +// menuManageVO.setTmp_Password(user.getPassword()); +// menuManageVO.setTmp_UserSe(user.getUserSe()); +// menuManageVO.setTmp_Name(user.getName()); +// menuManageVO.setTmp_Email(user.getEmail()); +// menuManageVO.setTmp_OrgnztId(user.getOrgnztId()); +// menuManageVO.setTmp_UniqId(user.getUniqId()); + model.addAttribute("list_headmenu", xitMainService.findMainMenuHeads(user.getUniqId())); + model.addAttribute("list_menulist", xitMainService.findtMainMenuLefts(user.getUniqId())); + }else{ + //model.addAttribute("list_headmenu", menuManageService.selectMainMenuHeadAnonymous(menuManageVO)); + //model.addAttribute("list_menulist", menuManageService.selectMainMenuLeftAnonymous(menuManageVO)); + } + return "framework/egov/main/inc/EgovIncTopnav"; // 내부업무의 상단메뉴 화면 + } + + + /** + * 좌측메뉴를 조회한다. + * @param menuManageVO MenuManageVO + * @param vStartP String + * @return 출력페이지정보 "main_left" + * @exception Exception + */ + @RequestMapping(value="/XitMainMenuLeft.do", method={RequestMethod.GET, RequestMethod.POST}) + public String mainMenuLeft(ModelMap model) throws Exception { + + //LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + //LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + if(EgovUserDetailsHelper.isAuthenticated()){ + //인증된 경우 처리할 사항 추가 ... + model.addAttribute("lastLogoutDateTime", "로그아웃 타임: 2011-11-10 11:30"); + //최근 로그아웃 시간 등에 대한 확보 후 메인 컨텐츠로 활용 + } + + return "framework/egov/main/inc/EgovIncLeftmenu"; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/db/dao/XitAdminDbMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/admin/db/dao/XitAdminDbMngMapper.java new file mode 100644 index 00000000..4e8d40cb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/db/dao/XitAdminDbMngMapper.java @@ -0,0 +1,59 @@ +package kr.xit.framework.biz.mng.admin.db.dao; + +import java.sql.SQLException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +/** + * + * @업무그룹명: 관리자DB관리 Mapper + * @설명: + * @최초작성일: 2020. 9. 28. 오전 9:03:28 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitAdminDbMngMapper { + + /** + *
메소드 설명: 관리자DB관리 동적질의문 조회
+ * @param dynamicSql + * @return + * @throws SQLException List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public List> findDynamicSql(Map param) throws SQLException; + /** + *
메소드 설명: 관리자DB관리 동적질의문 등록
+ * @param dynamicSql + * @return + * @throws SQLException List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public int addDynamicSql(Map param) throws SQLException; + /** + *
메소드 설명: 관리자DB관리 동적질의문 수정
+ * @param dynamicSql + * @return + * @throws SQLException List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public int modifyDynamicSql(Map param) throws SQLException; + /** + *
메소드 설명: 관리자DB관리 동적질의문 삭제
+ * @param dynamicSql + * @return + * @throws SQLException List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public int removeDynamicSql(Map param) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/db/model/XitAdminDbMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/db/model/XitAdminDbMngSearchVO.java new file mode 100644 index 00000000..02c2eefa --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/db/model/XitAdminDbMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.admin.db.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 관리자DB관리 SearchVO + * @설명: + * @최초작성일: 2020. 9. 28. 오전 9:03:41 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminDbMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -6846231080841076534L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/db/model/XitAdminDbMngVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/db/model/XitAdminDbMngVO.java new file mode 100644 index 00000000..3218f778 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/db/model/XitAdminDbMngVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.admin.db.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 관리자DB관리 VO + * @설명: + * @최초작성일: 2020. 9. 28. 오전 9:05:16 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminDbMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1580904213010710064L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/db/service/XitAdminDbMngService.java b/src/main/java/kr/xit/framework/biz/mng/admin/db/service/XitAdminDbMngService.java new file mode 100644 index 00000000..645a7cd4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/db/service/XitAdminDbMngService.java @@ -0,0 +1,54 @@ +package kr.xit.framework.biz.mng.admin.db.service; + +import java.util.LinkedHashMap; +import java.util.List; + +/** + * + * @업무그룹명: 관리자DB관리 Service + * @설명: + * @최초작성일: 2020. 9. 28. 오전 9:03:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAdminDbMngService { + + /** + *
메소드 설명: 관리자DB관리 동적질의문 목록 조회
+ * @param dynamicSql + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public List> findList(String dynamicSql); + /** + *
메소드 설명: 관리자DB관리 동적질의문 등록
+ * @param dynamicSql + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public int addProc(String dynamicSql); + /** + *
메소드 설명: 관리자DB관리 동적질의문 수정
+ * @param dynamicSql + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public int modifyProc(String dynamicSql); + + /** + *
+	 * 메소드 설명: 관리자DB관리 동적질의문 삭제
+	 * 
+ * + * @param dynamicSql + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + public int removeProc(String dynamicSql); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/db/service/impl/XitAdminDbMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/admin/db/service/impl/XitAdminDbMngServiceImpl.java new file mode 100644 index 00000000..dadee421 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/db/service/impl/XitAdminDbMngServiceImpl.java @@ -0,0 +1,69 @@ +package kr.xit.framework.biz.mng.admin.db.service.impl; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.admin.db.dao.XitAdminDbMngMapper; +import kr.xit.framework.biz.mng.admin.db.service.XitAdminDbMngService; + +@Service +public class XitAdminDbMngServiceImpl implements XitAdminDbMngService { + + @Resource + private XitAdminDbMngMapper xitAdminDbMngMapper; + + @Resource + private XitFrameCrudService xitFrameCrudService; + + @Override + public List> findList(String dynamicSql) { + Map param = new HashMap(); + param.put("dynamicSql", dynamicSql); + try { + return xitAdminDbMngMapper.findDynamicSql(param); + } catch (SQLException e) { + throw new RuntimeException(String.format("관리자DB관리 동적질의문 목록 조회 FAIL::%s", e)); + } + } + + @Override + public int addProc(String dynamicSql) { + Map param = new HashMap(); + param.put("dynamicSql", dynamicSql); + try { + return xitAdminDbMngMapper.addDynamicSql(param); + } catch (SQLException e) { + throw new RuntimeException(String.format("관리자DB관리 동적질의문 등록 FAIL::%s", e)); + } + } + + @Override + public int modifyProc(String dynamicSql) { + Map param = new HashMap(); + param.put("dynamicSql", dynamicSql); + try { + return xitAdminDbMngMapper.modifyDynamicSql(param); + } catch (SQLException e) { + throw new RuntimeException(String.format("관리자DB관리 동적질의문 수정 FAIL::%s", e)); + } + } + + @Override + public int removeProc(String dynamicSql) { + Map param = new HashMap(); + param.put("dynamicSql", dynamicSql); + try { + return xitAdminDbMngMapper.removeDynamicSql(param); + } catch (SQLException e) { + throw new RuntimeException(String.format("관리자DB관리 동적질의문 삭제 FAIL::%s", e)); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/db/web/XitAdminDbMngController.java b/src/main/java/kr/xit/framework/biz/mng/admin/db/web/XitAdminDbMngController.java new file mode 100644 index 00000000..1c1d04d6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/db/web/XitAdminDbMngController.java @@ -0,0 +1,495 @@ +package kr.xit.framework.biz.mng.admin.db.web; + +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.codec.binary.Base64; +import org.json.simple.JSONArray; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.mng.admin.db.service.XitAdminDbMngService; +import kr.xit.framework.biz.mng.admin.db.model.XitAdminDbMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 관리자DB관리 Controller + * @설명: 폐쇄망 환경의 유지관리 편의를 위해 시스템을 통해 DB DML 질의어 처리 서비스를 제공 한다. + * @최초작성일: 2020. 9. 28. 오전 9:02:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/admin/db/") +public class XitAdminDbMngController { + + @Resource + private XitAdminDbMngService xitAdminDbMngService; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + private final String SALTKEY = "U2FsdGVkX19FBBXlVS6d0Ga56ELuRsy"; + + + + + /** + *
메소드 설명: 관리자DB관리 목록 페이지
+ * @param searchVO + * @param model + * @param dynamicSql + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + @RequestMapping(value = "AdminDbMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminDbMng_list(@ModelAttribute("searchVO") XitAdminDbMngSearchVO searchVO + , ModelMap model + , @RequestParam(value="dynamicSql", required=false, defaultValue="") String dynamicSql + ) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/db/XitAdminDbMng_list"; + } + + + /** + *
메소드 설명: 관리자DB관리 목록 페이지 조회
+ * @param searchVO + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 28. + */ + @RequestMapping(value = "AdminDbMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AdminDbMng_listAjax(@ModelAttribute("searchVO") XitAdminDbMngSearchVO searchVO + , ModelMap model + , @RequestParam(value="jsonArr", required=false) JSONArray jsonArr + ) { + + + + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + String dynamicSql = jsonArr.get(0).toString(); + dynamicSql = this.decrypt(dynamicSql, SALTKEY); + String cmd = this.getCmd(dynamicSql); + if(!cmd.equals("select")) + throw new RuntimeException("유효하지 않은 요청 입니다."); + + + /** + * 조회 + */ + List> list = xitAdminDbMngService.findList(dynamicSql); + int totCnt = list.size(); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", list); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + + + /** + *
메소드 설명: 사용자별권한관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AdminDbMng_proc.do", method=RequestMethod.POST) + public String AdminDbMng_proc( +// @ModelAttribute("vo") XitAdminDbMngVO vo + @ModelAttribute("searchVO") XitAdminDbMngSearchVO searchVO + ,BindingResult bindingResult + ,SessionStatus status + , @RequestParam(value="jsonArr", required=false) JSONArray jsonArr + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/admin/db/AdminDbMng_list.do"; + String resultMsg = null; + int resultCnt = 0; + String cmd = null; //질의문 명령어 구분 + String dynamicSql = ""; //질의문 + StringBuffer arrResultMsg = new StringBuffer(); //질의문 처리결과 메시지 + List>> arrDataset = new ArrayList>>(); + //질의문 갯수만큼 loop + for(int i=0; i 0) + arrResultMsg.append("\\n"); + try { + //질의문 Get + dynamicSql = jsonArr.get(i).toString(); + dynamicSql = this.decrypt(dynamicSql, SALTKEY); + //cmd Set + cmd = this.getCmd(dynamicSql); + + //cmd별 질의문 실행 + switch (cmd) { + + case "select": //조회 + //처리 + try { + List> list = xitAdminDbMngService.findList(dynamicSql); + resultMsg = xitMessageSource.getMessage("success.common.select"); + resultMsg = String.format("%s건의 데이터가 %s", list.size(), resultMsg); + arrResultMsg.append(resultMsg); //질의문실행결과 + arrDataset.add(list); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.select"); + arrResultMsg.append(String.format("%s :: %s", resultMsg, e.getMessage())); //질의문실행결과 + } + break; + + case "insert": //등록 + //처리 + try { + resultCnt = xitAdminDbMngService.addProc(dynamicSql); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + resultMsg = String.format("%s건의 데이터가 %s", resultCnt, resultMsg); + arrResultMsg.append(resultMsg); //질의문실행결과 + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/admin/db/AdminDbMng_list.do"; + arrResultMsg.append(resultMsg); //질의문실행결과 + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/admin/db/AdminDbMng_list.do"; + arrResultMsg.append(String.format("%s :: %s", resultMsg, e.getMessage())); //질의문실행결과 + } + break; + + case "update": //수정 + //처리 + try { + resultCnt = xitAdminDbMngService.modifyProc(dynamicSql); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + resultMsg = String.format("%s건의 데이터가 %s", resultCnt, resultMsg); + arrResultMsg.append(resultMsg); //질의문실행결과 + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/admin/db/AdminDbMng_list.do"; + arrResultMsg.append(resultMsg); //질의문실행결과 + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/admin/db/AdminDbMng_list.do"; + arrResultMsg.append(String.format("%s :: %s", resultMsg, e.getMessage())); //질의문실행결과 + } + break; + + case "delete": //삭제 + //처리 + try { + resultCnt = xitAdminDbMngService.removeProc(dynamicSql); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + resultMsg = String.format("%s건의 데이터가 %s", resultCnt, resultMsg); + arrResultMsg.append(resultMsg); //질의문실행결과 + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + arrResultMsg.append(resultMsg); //질의문실행결과 + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + arrResultMsg.append(String.format("%s :: %s", resultMsg, e.getMessage())); //질의문실행결과 + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + } catch (RuntimeException e) { + arrResultMsg.append(String.format("%s번째 질의문 Getting Fail", i)); + } catch (Exception e) { + arrResultMsg.append(e.getMessage()); + } + } + + + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + * 2021.05.03 박민규 + * json 응답방식 변경 + * -.사유: 소스코드 간소화 + * -.작업내용 + * AsIs: 간소화 + * ToBe: + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + //2021.05.03 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 +// //반환 데이터 설정 +// Map resultMap = new HashMap(); +// resultMap.put("resultMsg", resultMsg); +// resultMap.put("arrResultMsg", arrResultMsg.toString()); //질의문실행결과 +// XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap, true); +// }else { //submit 요청 시 +// XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); +// } + model.addAttribute("resultMsg", resultMsg); + model.addAttribute("arrResultMsg", arrResultMsg.toString()); + model.addAttribute("arrDataset", arrDataset); //select문 실행결과 + if(XitCmmnUtil.isAjaxRequest(request)) //ajax 요청시 + return FrameworkConstants.JSON_VIEW; + else //submit 요청 시 + return sLocationUrl; + } + + /** + *
메소드 설명: 질의문 커맨드 반환
+ * @param sql + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 26. + */ + private String getCmd(String sql) { + String result = null; + sql = sql.toLowerCase(); + + + //주석구문 제거 + sql = this.removeAnnotation(sql); + + + /* ======================================== + * 2020.10.27. 박민규 + * 웹취약점 보안이슈 대응 + * -원칙적으로 parameter로 질의문을 삽입하여 DB 조작이 가능해선 안되지만 + * -부득이한 경우 적절한 검증 또는 예외 처리 과정이 필요 함.(KISA 홈페이지 취약점 진단/제거 가이드의 "SQL 인젝션" 대응방안 中) + * -폐쇄망 환경에서의 시스템 유지보수 시 데이터 검증 및 처리를 위해 필요한 + * -select/insert/update/delete 구문만 사용 가능하도록 변경 + * [작업내용] + * else 구문 수정 + * as-is: else result = "update"; + * to-be: else result = ""; + ======================================== */ + //커맨드 분기 + if(sql.startsWith("select")) + result = "select"; + else if(sql.startsWith("insert")) + result = "insert"; + else if(sql.startsWith("update")) + result = "update"; + else if(sql.startsWith("delete")) + result = "delete"; + //2020.10.27. 주석처리 + else + result = "update"; +// else +// result = ""; + + + return result; + + } + /** + *
메소드 설명: 주석구문 제거
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 26. + */ + private String removeAnnotation(String sql) { + + //주석구문 제거 + if(sql.contains("/*")) { //주석구문 /* */ 제거 + String strAnnotation = sql.substring(sql.indexOf("/*"),sql.indexOf("*/")+2); + sql = sql.replace(strAnnotation, "").trim(); + return this.removeAnnotation(sql); + }else { + return sql; + } + + + } + + + + + /** + *
메소드 설명: 복호화
+ * @param ciphertext 암호화된 문자열 + * @param passphrase 암호화 시 사용한 salt + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 27. + */ + public String decrypt(String ciphertext, String passphrase) { + /* ============================================================ + * + * 2020.10.27. 박민규 + * 암/복호화 오류 발생 시 해결 방법 ( ※참조사이트: https://mirotic91.tistory.com/21 ) + * + * -오류메시지: java.security.InvalidKeyException: Illegal key size + * + * -발생원인: JAVA의 기본 정책으로 AES128 암호화 방식까지만 사용 가능하다. (미 통상법에 의해 자국내에서만 AES256 방식 허용) + * 이에 AES256 방식으로암호화 할 경우 위와 같은 오류 발생. + * JDK8 이하 버전에서 이와 같은 오류가 발생하며, 상위버전에서는 발생하지 않는다고 한다. + * + * -JDK버전: OracleJDK8 이하, OpenJDK8 이전 버전에서 오류 발생. jar 파일 교체 필요 + * 단,JDK1.8u151버전부터는 jar파일 교체 방법 상이 함. + * + * -해결방법: WAS가 참조하는 JDK설치경로에 다음 두개의 jar파일 덮어 쓰기 + * -> local_policy.jar + * -> US_export_policy.jar + * + * -jar파일경로: ${JAVA_HOME}/jre/lib/security + * + * -JDK버전별 파일 다운로드 + * ->JDK7: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html + * ->JDK8: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html + * + ============================================================ */ + + try { + final int keySize = 256; + final int ivSize = 128; + String charSet= "UTF-8"; + + // 텍스트를 BASE64 형식으로 디코드 한다. + byte[] ctBytes = Base64.decodeBase64(ciphertext.getBytes(charSet)); + + // 솔트를 구한다. (생략된 8비트는 Salted__ 시작되는 문자열이다.) + byte[] saltBytes = Arrays.copyOfRange(ctBytes, 8, 16); +// System.out.println( Hex.encodeHexString(saltBytes) ); + + // 암호화된 테스트를 구한다.( 솔트값 이후가 암호화된 텍스트 값이다.) + byte[] ciphertextBytes = Arrays.copyOfRange(ctBytes, 16, ctBytes.length); + + // 비밀번호와 솔트에서 키와 IV값을 가져온다. + byte[] key = new byte[keySize / 8]; + byte[] iv = new byte[ivSize / 8]; + EvpKDF(passphrase.getBytes(charSet), keySize, ivSize, saltBytes, key, iv); + + // 복호화 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(iv)); + byte[] recoveredPlaintextBytes = cipher.doFinal(ciphertextBytes); + + return new String(recoveredPlaintextBytes); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + private byte[] EvpKDF(byte[] password, int keySize, int ivSize, byte[] salt, byte[] resultKey, byte[] resultIv) throws NoSuchAlgorithmException { + return EvpKDF(password, keySize, ivSize, salt, 1, "MD5", resultKey, resultIv); + } + + private byte[] EvpKDF(byte[] password, int keySize, int ivSize, byte[] salt, int iterations, String hashAlgorithm, byte[] resultKey, byte[] resultIv) throws NoSuchAlgorithmException { + keySize = keySize / 32; + ivSize = ivSize / 32; + int targetKeySize = keySize + ivSize; + byte[] derivedBytes = new byte[targetKeySize * 4]; + int numberOfDerivedWords = 0; + byte[] block = null; + MessageDigest hasher = MessageDigest.getInstance(hashAlgorithm); + while (numberOfDerivedWords < targetKeySize) { + if (block != null) { + hasher.update(block); + } + hasher.update(password); + // Salting + block = hasher.digest(salt); + hasher.reset(); + // Iterations : 키 스트레칭(key stretching) + for (int i = 1; i < iterations; i++) { + block = hasher.digest(block); + hasher.reset(); + } + System.arraycopy(block, 0, derivedBytes, numberOfDerivedWords * 4, Math.min(block.length, (targetKeySize - numberOfDerivedWords) * 4)); + numberOfDerivedWords += block.length / 4; + } + System.arraycopy(derivedBytes, 0, resultKey, 0, keySize * 4); + System.arraycopy(derivedBytes, keySize * 4, resultIv, 0, ivSize * 4); + return derivedBytes; // key + iv + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerCmdMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerCmdMngSearchVO.java new file mode 100644 index 00000000..cebc686d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerCmdMngSearchVO.java @@ -0,0 +1,41 @@ +package kr.xit.framework.biz.mng.admin.server.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 관리자서버Command관리 SearchVO + * @설명: + * @최초작성일: 2020. 10. 16. 오후 5:09:02 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminServerCmdMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -4664094074868329057L; + + + /** 커맨드 */ + private String schCmd; + + + public String getSchCmd() { + return schCmd; + } + public void setSchCmd(String schCmd) { + this.schCmd = schCmd; + } + + + + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerCmdMngVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerCmdMngVO.java new file mode 100644 index 00000000..1b89ed1c --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerCmdMngVO.java @@ -0,0 +1,24 @@ +package kr.xit.framework.biz.mng.admin.server.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 관리자서버Command관리 VO + * @설명: + * @최초작성일: 2020. 10. 16. 오후 5:10:42 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminServerCmdMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -8452382180861286012L; + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerFileMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerFileMngSearchVO.java new file mode 100644 index 00000000..c699605d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerFileMngSearchVO.java @@ -0,0 +1,39 @@ +package kr.xit.framework.biz.mng.admin.server.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 관리자서버파일관리 SearchVO + * @설명: + * @최초작성일: 2020. 10. 16. 오후 5:09:02 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminServerFileMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 5354619555526336770L; + + + /** 파일 경로 */ + private String schFilePath; + + + public String getSchFilePath() { + return schFilePath; + } + public void setSchFilePath(String schFilePath) { + this.schFilePath = schFilePath; + } + + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerFileMngVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerFileMngVO.java new file mode 100644 index 00000000..cd6588d4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerFileMngVO.java @@ -0,0 +1,24 @@ +package kr.xit.framework.biz.mng.admin.server.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 관리자서버파일관리 VO + * @설명: + * @최초작성일: 2020. 10. 16. 오후 5:10:42 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminServerFileMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -2652485639141459940L; + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerLogMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerLogMngSearchVO.java new file mode 100644 index 00000000..83a514a5 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerLogMngSearchVO.java @@ -0,0 +1,62 @@ +package kr.xit.framework.biz.mng.admin.server.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 관리자서버로그관리 SearchVO + * @설명: + * @최초작성일: 2020. 10. 16. 오후 5:09:02 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminServerLogMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 4713842602178298585L; + + + /** 로그 파일 경로 */ + private String schFilePath; + /** 로그 파일 명 */ + private String schFileNm; + /** 읽어들일 행(row) 갯수 */ + private int schReadLine = 100; + /** 읽어들일 로그 버퍼 크기(characters) */ + private int schBufferSize = 9999; + + + public String getSchFilePath() { + return schFilePath; + } + public void setSchFilePath(String schFilePath) { + this.schFilePath = schFilePath; + } + public String getSchFileNm() { + return schFileNm; + } + public void setSchFileNm(String schFileNm) { + this.schFileNm = schFileNm; + } + public int getSchReadLine() { + return schReadLine; + } + public void setSchReadLine(int schReadLine) { + this.schReadLine = schReadLine; + } + public int getSchBufferSize() { + return schBufferSize; + } + public void setSchBufferSize(int schBufferSize) { + this.schBufferSize = schBufferSize; + } + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerLogMngVO.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerLogMngVO.java new file mode 100644 index 00000000..569c54ef --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/model/XitAdminServerLogMngVO.java @@ -0,0 +1,33 @@ +package kr.xit.framework.biz.mng.admin.server.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 관리자서버로그관리 VO + * @설명: + * @최초작성일: 2020. 10. 7. 오후 5:10:42 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAdminServerLogMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -5333688961600315966L; + /** 로그 */ + private String log; + + + public String getLog() { + return log; + } + public void setLog(String log) { + this.log = log; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerCmdMngService.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerCmdMngService.java new file mode 100644 index 00000000..b218f592 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerCmdMngService.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.mng.admin.server.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerFileMngSearchVO; +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerFileMngVO; + +/** + * + * @업무그룹명: 관리자서버Command Service + * @설명: + * @최초작성일: 2020. 10. 16. 오후 4:27:04 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAdminServerCmdMngService { + + + + /** + *
메소드 설명: 관리자서버Command 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public List findList(XitAdminServerFileMngSearchVO searchVO); + + /** + *
메소드 설명: 관리자서버Command 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public int findListTotCnt(XitAdminServerFileMngSearchVO searchVO); + + /** + *
메소드 설명: 관리자서버Command 상세정보 조회
+ * @param vo + * @return XitAdminServerFileMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public XitAdminServerFileMngVO findView(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버Command 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void addProc(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버Command 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void modifyProc(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버Command 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void removeProc(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버Command 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerFileMngService.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerFileMngService.java new file mode 100644 index 00000000..b75d7c88 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerFileMngService.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.mng.admin.server.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerFileMngSearchVO; +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerFileMngVO; + +/** + * + * @업무그룹명: 관리자서버파일관리 Service + * @설명: + * @최초작성일: 2020. 10. 16. 오후 4:27:04 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAdminServerFileMngService { + + + + /** + *
메소드 설명: 관리자서버파일관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public List findList(XitAdminServerFileMngSearchVO searchVO); + + /** + *
메소드 설명: 관리자서버파일관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public int findListTotCnt(XitAdminServerFileMngSearchVO searchVO); + + /** + *
메소드 설명: 관리자서버파일관리 상세정보 조회
+ * @param vo + * @return XitAdminServerFileMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public XitAdminServerFileMngVO findView(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버파일관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void addProc(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버파일관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void modifyProc(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버파일관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void removeProc(XitAdminServerFileMngVO vo); + + /** + *
메소드 설명: 관리자서버파일관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerLogMngService.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerLogMngService.java new file mode 100644 index 00000000..1590e3c4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/service/XitAdminServerLogMngService.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.mng.admin.server.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerLogMngSearchVO; +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerLogMngVO; + +/** + * + * @업무그룹명: 관리자서버로그관리 Service + * @설명: + * @최초작성일: 2020. 10. 7. 오후 4:27:04 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAdminServerLogMngService { + + + + /** + *
메소드 설명: 관리자서버로그관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public List findList(XitAdminServerLogMngSearchVO searchVO); + + /** + *
메소드 설명: 관리자서버로그관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public int findListTotCnt(XitAdminServerLogMngSearchVO searchVO); + + /** + *
메소드 설명: 관리자서버로그관리 상세정보 조회
+ * @param vo + * @return XitAdminServerLogMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public XitAdminServerLogMngVO findView(XitAdminServerLogMngVO vo); + + /** + *
메소드 설명: 관리자서버로그관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public void addProc(XitAdminServerLogMngVO vo); + + /** + *
메소드 설명: 관리자서버로그관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public void modifyProc(XitAdminServerLogMngVO vo); + + /** + *
메소드 설명: 관리자서버로그관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public void removeProc(XitAdminServerLogMngVO vo); + + /** + *
메소드 설명: 관리자서버로그관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerCmdMngController.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerCmdMngController.java new file mode 100644 index 00000000..89150a59 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerCmdMngController.java @@ -0,0 +1,305 @@ +package kr.xit.framework.biz.mng.admin.server.web; + +import java.io.IOException; +import java.io.Writer; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerCmdMngSearchVO; +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerCmdMngVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCommandExecutor; + +/** + * + * @업무그룹명: 관리자서버Command관리 Controller + * @설명: 폐쇄망 환경의 유지관리 편의를 위해 시스템을 통해 사용자PC와 서버(WAS)간 파일 업/다운로드 서비스를 제공 한다. + * @최초작성일: 2020. 10. 16. 오후 4:24:53 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/admin/server/") +public class XitAdminServerCmdMngController { + +// @Resource +// private XitAdminServerCmdMngService xitAdminServerCmdMngService; +// @Autowired +// private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + + + + /** + *
메소드 설명: 관리자서버Command관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerCmdMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerCmdMng_list(@ModelAttribute("searchVO") XitAdminServerCmdMngSearchVO searchVO, ModelMap model + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + ) { + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerCmdMng_list"+tilesDef; + } + + + /** + *
메소드 설명: 관리자서버Command관리 목록 조회
+ * @param searchVO + * @param vo + * @param model + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerCmdMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + public void AdminServerCmdMng_listAjax( + @ModelAttribute XitAdminServerCmdMngSearchVO searchVO + , @ModelAttribute XitAdminServerCmdMngVO vo, ModelMap model + , HttpServletRequest request + , HttpServletResponse response + ) throws IOException { + + String result = XitCommandExecutor.execute(searchVO.getSchCmd()); +// String result = ""; +// XitCommandExecutor2.execute(searchVO.getSchCmd()); + + + /** + * 출력 + */ + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html charset=UTF-8"); + Writer writer = response.getWriter(); + writer.append(result); + writer.close(); + + } + + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerCmdMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerCmdMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitAdminServerCmdMngVO vo + , @ModelAttribute("searchVO") XitAdminServerCmdMngSearchVO searchVO + , ModelMap model + , HttpServletRequest request + , HttpServletResponse response + ) throws IOException, ServletException { + + switch (cmd) { +// case "input": //등록 페이지 +// break; +// case "edit": //수정 페이지 +// break; +// case "view": //상세 페이지 +// break; + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerCmdMng_"+cmd+tilesDef; + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerCmdMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerCmdMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitAdminServerCmdMngSearchVO searchVO + , @ModelAttribute XitAdminServerCmdMngVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerCmdMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + + +// /** +// *
메소드 설명: 관리자서버Command관리 CUD 처리
+// * @return String 요청처리 후 응답객체 +// * @author: 박민규 +// * @throws IOException +// * @throws ServletException +// * @date: 2020. 10. 16. +// */ +// @RequestMapping(value = "AdminServerCmdMng_{cmd}_proc.do", method=RequestMethod.POST) +// public void AdminServerCmdMng_cmd_proc(HttpServletRequest req +// ,@PathVariable String cmd +// ,@ModelAttribute("vo") XitAdminServerCmdMngVO vo +// ,@ModelAttribute("searchVO") XitAdminServerCmdMngSearchVO searchVO +// ,BindingResult bindingResult +// ,SessionStatus status +// ,Model model +// ,HttpServletRequest request +// ,HttpServletResponse response +// ) throws ServletException, IOException { +// +// /** +// * 처리 분기 +// */ +// XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); +// String sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_list.do"; +// String resultMsg = null; +// switch (cmd) { +// case "insert": //등록 +// //유효성 확인 +// beanValidator.validate(vo, bindingResult); +// if (bindingResult.hasErrors()) { +// resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_input.do"; +// break; +// } +// +// //처리 +// try { +// xitAdminServerCmdMngService.addProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.insert"); +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_input.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_input.do"; +// } +// break; +// +//// case "inserts": //다건 등록 +//// break; +// +// case "update": //수정 +// //유효성 확인 +// beanValidator.validate(vo, bindingResult); +// if (bindingResult.hasErrors()) { +// resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_edit.do"; +// break; +// } +// +// +// //처리 +// try { +// xitAdminServerCmdMngService.modifyProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_view.do"; +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_edit.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_edit.do"; +// } +// break; +// +// case "delete": //삭제 +// //처리 +// try { +// xitAdminServerCmdMngService.removeProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.delete"); +// break; +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_edit.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.delete"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerCmdMng_edit.do"; +// } +// break; +// +//// case "deletes": //다건 삭제 +//// break; +// +// default: +// new RuntimeException("유효하지 않은 요청 입니다."); +// } +// +// +// +// /** +// * 응답 설정 +// */ +// /* ============================ +// * 2020.09.10 박민규 +// * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 +// * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 +// * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 +// * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward +// ============================ */ +// //2020.09.10 주석처리 +//// model.addAttribute("resultMsg", resultMsg); +//// return sLocationUrl; +// model.addAttribute("resultMsg", resultMsg); +// if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 +// //반환 데이터 설정 +// Map resultMap = new HashMap(); +// resultMap.put("resultMsg", resultMsg); +// XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); +// }else { //submit 요청 시 +// XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); +// } +// } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerFileMngController.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerFileMngController.java new file mode 100644 index 00000000..eb5713f4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerFileMngController.java @@ -0,0 +1,426 @@ +package kr.xit.framework.biz.mng.admin.server.web; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerFileMngSearchVO; +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerFileMngVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitHttpRequestHelper; +import kr.xit.framework.core.utils.attachfile.XitAttachFileOptionVO; +import kr.xit.framework.core.utils.attachfile.XitAttachFileUtil; +import kr.xit.framework.core.utils.fileExplorer.XitFileExplorerUtil; +import kr.xit.framework.core.utils.fileExplorer.function.DirectorySearch; + +/** + * + * @업무그룹명: 관리자서버파일관리 Controller + * @설명: 폐쇄망 환경의 유지관리 편의를 위해 시스템을 통해 사용자PC와 서버(WAS)간 파일 업/다운로드 서비스를 제공 한다. + * @최초작성일: 2020. 10. 16. 오후 4:24:53 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/admin/server/") +public class XitAdminServerFileMngController { + +// @Resource +// private XitAdminServerFileMngService xitAdminServerFileMngService; +// @Autowired +// private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + + + + /** + *
메소드 설명: 관리자서버파일관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerFileMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerFileMng_list(@ModelAttribute("searchVO") XitAdminServerFileMngSearchVO searchVO, ModelMap model + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + ) { + + /** + * 필수값 설정 + * -was에 vender별 home디렉토리 및 로그파일명 + */ + //was 경로 및 로그파일명 + try { + HttpServletRequest req = XitHttpRequestHelper.getCurrentRequest(); + ServletContext application = req.getServletContext(); + String server = application.getServerInfo().toLowerCase(); + if(server.contains("apache tomcat")) { //아파치 톰캣 + searchVO.setSchFilePath(System.getProperty("catalina.home")); + + }else if(server.contains("jeus")) { //티맥스 제우스 + searchVO.setSchFilePath(System.getProperty("jeus.home")); + + }else if(server.contains("weblogic")) { //오라클 웹로직 + searchVO.setSchFilePath(System.getProperty("bea.home")); + + }else if(server.contains("websphere")) { //웹스피어 + searchVO.setSchFilePath(System.getProperty("was.install.root")); + + }else { + searchVO.setSchFilePath(System.getProperty("user.dir")); + } + } catch (Exception e) { + searchVO.setSchFilePath(System.getProperty("user.dir")); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerFileMng_list"+tilesDef; + } + + + /** + *
메소드 설명: 관리자서버파일관리 목록 조회
+ * @param searchVO + * @param vo + * @param model + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerFileMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AdminServerFileMng_listAjax( + @ModelAttribute XitAdminServerFileMngSearchVO searchVO + , @ModelAttribute XitAdminServerFileMngVO vo, ModelMap model) { + + Map resultMap = new HashMap(); + + try { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(searchVO.getSchFilePath())) + throw new RuntimeException("파일경로(은)는 필수조건 입니다."); + + /** + * 처리 + * -경로에 있는 파일목록을 반환 한다. + */ + XitFileExplorerUtil explorer = new XitFileExplorerUtil(new DirectorySearch(searchVO.getSchFilePath())); + List> list = explorer.getList(); + + + /** + * 조회 + */ + int totCnt = list.size(); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", list); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + + return resultMap; + } + + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerFileMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public void AdminServerFileMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitAdminServerFileMngVO vo + , @ModelAttribute("searchVO") XitAdminServerFileMngSearchVO searchVO + , ModelMap model + , HttpServletRequest request + , HttpServletResponse response + ) throws IOException, ServletException { + + Map resultMap = new HashMap(); + String resultCode = "00"; //처리결과 코드(00:정상, E+[2자리 숫자]: Error) + String resultMsg = null; + switch (cmd) { +// case "input": //등록 페이지 +// break; +// case "edit": //수정 페이지 +// break; +// case "view": //상세 페이지 +// break; + + case "upload": //파일 업로드 + XitAttachFileOptionVO optionVO = new XitAttachFileOptionVO(); + optionVO.setLimitFileExt(false); //파일 확장자 제한 여부 + optionVO.setFileNmMask(false); //파일명 마스킹 처리 여부 + optionVO.setLimitFileSize(false); //파일 사이즈 제한 여부 + optionVO.setMakeDirByDate(false); //날짜별 디렉토리 생성 여부 + XitAttachFileUtil.fileUpload(request, searchVO.getSchFilePath(), optionVO); + break; + + case "download": //파일 다운로드 + XitAttachFileUtil.fileDownload(request, response, searchVO.getSchFilePath()); + break; + + case "del": //파일 삭제 + resultMsg = xitMessageSource.getMessage("success.common.delete"); + + try { + if(!XitAttachFileUtil.fileDelete(searchVO.getSchFilePath(), true)) + resultCode = "E99"; + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } catch (Exception e) { + resultCode = "E99"; + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + + //응답 설정 + resultMap.put("resultCode", resultCode); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + break; + + case "mkdir": //디렉토리 생성 + + try { + File file = new File(searchVO.getSchFilePath()); + if(!file.exists()) + file.mkdirs(); + + resultMsg = xitMessageSource.getMessage("success.request.msg"); + } catch (Exception e) { + resultCode = "E99"; + resultMsg = xitMessageSource.getMessage("fail.request.msg"); + } finally { + //응답 설정 + resultMap.put("resultCode", resultCode); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + } + break; + + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + @RequestMapping(value = "AdminServerFileMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerFileMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitAdminServerFileMngSearchVO searchVO + , @ModelAttribute XitAdminServerFileMngVO vo, ModelMap model) { + switch (cmd) { + case "filelist": //파일 목록 + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerFileMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + + +// /** +// *
메소드 설명: 관리자서버파일관리 CUD 처리
+// * @return String 요청처리 후 응답객체 +// * @author: 박민규 +// * @throws IOException +// * @throws ServletException +// * @date: 2020. 10. 16. +// */ +// @RequestMapping(value = "AdminServerFileMng_{cmd}_proc.do", method=RequestMethod.POST) +// public void AdminServerFileMng_cmd_proc(HttpServletRequest req +// ,@PathVariable String cmd +// ,@ModelAttribute("vo") XitAdminServerFileMngVO vo +// ,@ModelAttribute("searchVO") XitAdminServerFileMngSearchVO searchVO +// ,BindingResult bindingResult +// ,SessionStatus status +// ,Model model +// ,HttpServletRequest request +// ,HttpServletResponse response +// ) throws ServletException, IOException { +// +// /** +// * 처리 분기 +// */ +// XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); +// String sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_list.do"; +// String resultMsg = null; +// switch (cmd) { +// case "insert": //등록 +// //유효성 확인 +// beanValidator.validate(vo, bindingResult); +// if (bindingResult.hasErrors()) { +// resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_input.do"; +// break; +// } +// +// //처리 +// try { +// xitAdminServerFileMngService.addProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.insert"); +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_input.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_input.do"; +// } +// break; +// +//// case "inserts": //다건 등록 +//// break; +// +// case "update": //수정 +// //유효성 확인 +// beanValidator.validate(vo, bindingResult); +// if (bindingResult.hasErrors()) { +// resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_edit.do"; +// break; +// } +// +// +// //처리 +// try { +// xitAdminServerFileMngService.modifyProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_view.do"; +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_edit.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_edit.do"; +// } +// break; +// +// case "delete": //삭제 +// //처리 +// try { +// xitAdminServerFileMngService.removeProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.delete"); +// break; +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_edit.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.delete"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerFileMng_edit.do"; +// } +// break; +// +//// case "deletes": //다건 삭제 +//// break; +// +// default: +// new RuntimeException("유효하지 않은 요청 입니다."); +// } +// +// +// +// /** +// * 응답 설정 +// */ +// /* ============================ +// * 2020.09.10 박민규 +// * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 +// * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 +// * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 +// * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward +// ============================ */ +// //2020.09.10 주석처리 +//// model.addAttribute("resultMsg", resultMsg); +//// return sLocationUrl; +// model.addAttribute("resultMsg", resultMsg); +// if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 +// //반환 데이터 설정 +// Map resultMap = new HashMap(); +// resultMap.put("resultMsg", resultMsg); +// XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); +// }else { //submit 요청 시 +// XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); +// } +// } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerLogMngController.java b/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerLogMngController.java new file mode 100644 index 00000000..f8dc4dfe --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/admin/server/web/XitAdminServerLogMngController.java @@ -0,0 +1,643 @@ +package kr.xit.framework.biz.mng.admin.server.web; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.io.Writer; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerLogMngSearchVO; +import kr.xit.framework.biz.mng.admin.server.model.XitAdminServerLogMngVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitHttpRequestHelper; +import kr.xit.framework.core.utils.attachfile.XitAttachFileUtil; +import kr.xit.framework.core.utils.fileExplorer.XitFileExplorerUtil; +import kr.xit.framework.core.utils.fileExplorer.function.DirectorySearch; + +/** + * + * @업무그룹명: 관리자서버로그관리 Controller + * @설명: 폐쇄망 환경의 유지관리 편의를 위해 시스템을 통해 서버(WAS)로그 확인 서비스를 제공 한다. + * @최초작성일: 2020. 10. 7. 오후 4:24:53 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/admin/server/") +public class XitAdminServerLogMngController { + +// @Resource +// private XitAdminServerLogMngService xitAdminServerLogMngService; +// @Autowired +// private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + + + + /** + *
메소드 설명: 관리자서버로그관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + @RequestMapping(value = "AdminServerLogMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerLogMng_list(@ModelAttribute("searchVO") XitAdminServerLogMngSearchVO searchVO, ModelMap model + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + ) { + + + /** + * 필수값 설정 + * -was에 vender별 home디렉토리 및 로그파일명 + */ + //was 경로 및 로그파일명 + try { + HttpServletRequest req = XitHttpRequestHelper.getCurrentRequest(); + ServletContext application = req.getServletContext(); + String server = application.getServerInfo().toLowerCase(); + if(server.contains("apache tomcat")) { //아파치 톰캣 + searchVO.setSchFilePath(System.getProperty("catalina.home")); + searchVO.setSchFileNm("catalina.log"); + + }else if(server.contains("jeus")) { //티맥스 제우스 + searchVO.setSchFilePath(System.getProperty("jeus.home")); + searchVO.setSchFileNm("JeusServer.log"); + + }else if(server.contains("weblogic")) { //오라클 웹로직 + searchVO.setSchFilePath(System.getProperty("bea.home")); + searchVO.setSchFileNm("myservername.log"); + + }else if(server.contains("websphere")) { //웹스피어 + searchVO.setSchFilePath(System.getProperty("was.install.root")); + searchVO.setSchFileNm("unknown.log"); + + }else { + searchVO.setSchFilePath(System.getProperty("user.dir")); + searchVO.setSchFileNm(""); + } + } catch (Exception e) { + searchVO.setSchFilePath(System.getProperty("user.dir")); + searchVO.setSchFileNm(""); + } + + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerLogMng_list"+tilesDef; + } + + + + /** + *
메소드 설명: 관리자서버로그관리 목록 조회
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @date: 2020. 10. 7. + */ + @SuppressWarnings("resource") + @RequestMapping(value = "AdminServerLogMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + public void AdminServerLogMng_listAjax(@ModelAttribute("searchVO") XitAdminServerLogMngSearchVO searchVO, ModelMap model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws IOException { + + + /** + * 파일 Read + */ + //파일명 설정 + String pathname = String.format("%s%s%s", searchVO.getSchFilePath() + , System.getProperty("file.separator") + , searchVO.getSchFileNm() + ); + RandomAccessFile raf; + Writer writer = null; + try { + + /* ================================== + * 2020.10.12. 박민규 + * 라인단위 출력 + * -파일 전체내용 중 끝에서부터 시작점(입력값)까지 출력을 하고자 했으나 + * -개행 체크가 되지 않아 해당 방법은 보류하고, 바이트 단위 입력으로 변경 + ================================== */ + //2020.10.12. 주석처리 +// /** +// * 필수값 설정 +// */ +// int loop = searchVO.getSchReadLine(); +// List listLine = new ArrayList(); +// for(int i=0; i메소드 설명: 요청 페이지로 이동 한다. + * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 10. 7. + */ + @RequestMapping(value = "AdminServerLogMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public void AdminServerLogMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitAdminServerLogMngVO vo + , @ModelAttribute("searchVO") XitAdminServerLogMngSearchVO searchVO + , ModelMap model + , HttpServletRequest request + , HttpServletResponse response + ) throws IOException, ServletException { + switch (cmd) { +// case "input": //등록 페이지 +// break; +// case "edit": //수정 페이지 +// break; +// case "view": //상세 페이지 +// break; + + + case "download": //파일 다운로드 + XitAttachFileUtil.fileDownload(request, response, searchVO.getSchFilePath(), searchVO.getSchFileNm(), searchVO.getSchFileNm()); + break; + + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 7. + */ + @RequestMapping(value = "AdminServerLogMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AdminServerLogMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitAdminServerLogMngSearchVO searchVO + , @ModelAttribute XitAdminServerLogMngVO vo, ModelMap model) { + switch (cmd) { + case "filelist": //파일 목록 + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/admin/server/XitAdminServerLogMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 요청 팝업 페이지의 ajax 요청을 처리 한다.
+ * @param cmd + * @param searchVO + * @param vo + * @param model + * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 12. + */ + @RequestMapping(value = "AdminServerLogMng_{cmd}_popup.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AdminServerLogMng_page_popupAjax(@PathVariable String cmd + , @ModelAttribute XitAdminServerLogMngSearchVO searchVO + , @ModelAttribute XitAdminServerLogMngVO vo, ModelMap model) { + + Map resultMap = new HashMap(); + switch (cmd) { + case "filelist": //파일 목록 + + + try { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(searchVO.getSchFilePath())) + throw new RuntimeException("파일경로(은)는 필수조건 입니다."); + + /** + * 처리 + * -경로에 있는 파일목록을 반환 한다. + */ + XitFileExplorerUtil explorer = new XitFileExplorerUtil(new DirectorySearch(searchVO.getSchFilePath())); + List> list = explorer.getList(); + + + /** + * 조회 + */ + int totCnt = list.size(); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", list); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return resultMap; + } + + + +// /** +// *
메소드 설명: 관리자서버로그관리 CUD 처리
+// * @return String 요청처리 후 응답객체 +// * @author: 박민규 +// * @throws IOException +// * @throws ServletException +// * @date: 2020. 10. 7. +// */ +// @RequestMapping(value = "AdminServerLogMng_{cmd}_proc.do", method=RequestMethod.POST) +// public void AdminServerLogMng_cmd_proc(HttpServletRequest req +// ,@PathVariable String cmd +// ,@ModelAttribute("vo") XitAdminServerLogMngVO vo +// ,@ModelAttribute("searchVO") XitAdminServerLogMngSearchVO searchVO +// ,BindingResult bindingResult +// ,SessionStatus status +// ,Model model +// ,HttpServletRequest request +// ,HttpServletResponse response +// ) throws ServletException, IOException { +// +// /** +// * 처리 분기 +// */ +// XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); +// String sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_list.do"; +// String resultMsg = null; +// switch (cmd) { +// case "insert": //등록 +// //유효성 확인 +// beanValidator.validate(vo, bindingResult); +// if (bindingResult.hasErrors()) { +// resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_input.do"; +// break; +// } +// +// //처리 +// try { +// xitAdminServerLogMngService.addProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.insert"); +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_input.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_input.do"; +// } +// break; +// +//// case "inserts": //다건 등록 +//// break; +// +// case "update": //수정 +// //유효성 확인 +// beanValidator.validate(vo, bindingResult); +// if (bindingResult.hasErrors()) { +// resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_edit.do"; +// break; +// } +// +// +// //처리 +// try { +// xitAdminServerLogMngService.modifyProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_view.do"; +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_edit.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_edit.do"; +// } +// break; +// +// case "delete": //삭제 +// //처리 +// try { +// xitAdminServerLogMngService.removeProc(vo); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.delete"); +// break; +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_edit.do"; +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.delete"); +// sLocationUrl = "forward:/_mng_/admin/server/AdminServerLogMng_edit.do"; +// } +// break; +// +//// case "deletes": //다건 삭제 +//// break; +// +// default: +// new RuntimeException("유효하지 않은 요청 입니다."); +// } +// +// +// +// /** +// * 응답 설정 +// */ +// /* ============================ +// * 2020.09.10 박민규 +// * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 +// * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 +// * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 +// * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward +// ============================ */ +// //2020.09.10 주석처리 +//// model.addAttribute("resultMsg", resultMsg); +//// return sLocationUrl; +// model.addAttribute("resultMsg", resultMsg); +// if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 +// //반환 데이터 설정 +// Map resultMap = new HashMap(); +// resultMap.put("resultMsg", resultMsg); +// XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); +// }else { //submit 요청 시 +// XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); +// } +// } + + + +// /** +// * +// * @업무그룹명: WAS 종류 +// * @설명: WAS 종류를 정의 한다. +// * @최초작성일: 2020. 10. 8. 오전 9:33:01 +// * @최초작성자: 박민규 +// * @author (주)엑스아이티 개발팀 +// * @since 2002. 2. 2. +// * @version 1.0 Copyright(c) XIT All rights reserved. +// */ +// private enum WAS{ +// JEUS("jeus") +// ,TOMCAT("tomcat") +// ; +// +// String val; +// private WAS(String val) { +// this.val = val; +// } +// /** +// *
메소드 설명: 상수의 value 값을 반환 한다.
+// * @return String 요청처리 후 응답객체 +// * @author: 박민규 +// * @date: 2020. 10. 8. +// */ +// public String getVal() { +// return this.val; +// } +// /** +// *
메소드 설명: value와 일치하는 상수를 반환 한다.
+// * @param val +// * @return WAS 요청처리 후 응답객체 +// * @author: 박민규 +// * @date: 2020. 10. 8. +// */ +// @SuppressWarnings("unused") +// public WAS getWAS(String val) { +// for(WAS was : WAS.values()){ +// if(was.getVal().equals(val)) +// return was; +// } +// +// return null; +// } +// /** +// *
메소드 설명: WAS종류를 code 목록으로 반환 한다.
+// * @return List> 요청처리 후 응답객체 +// * @author: 박민규 +// * @date: 2020. 10. 8. +// */ +// @SuppressWarnings("unused") +// public List> getCodeList(){ +// List> listCode = new ArrayList>(); +// for(WAS was : WAS.values()) { +// Map mCode = new HashMap(); +// mCode.put("code", was.name()); +// mCode.put("codeNm", was.getVal()); +// +// listCode.add(mCode); +// } +// +// +// return listCode; +// } +// +// +// } +// +// +// /** +// * +// * @업무그룹명: WAS별 로그파일 종류 +// * @설명: +// * @최초작성일: 2020. 10. 8. 오전 9:40:35 +// * @최초작성자: 박민규 +// * @author (주)엑스아이티 개발팀 +// * @since 2002. 2. 2. +// * @version 1.0 Copyright(c) XIT All rights reserved. +// */ +// private enum LOG_FILE_KIND{ +// JEUS +// ,TOMCAT +// ; +// private Map mLogKndByWas; +// private LOG_FILE_KIND() { +// String[] JEUS = ["JeusServer.log", ""}; +// +// +// } +// +// public List> getCodeList(WAS was){ +// List> listCode = new ArrayList>(); +// +// for(LOG_FILE_KIND item : LOG_FILE_KIND.values()) { +// if(item.name().equals(was.name())) { +// listCode = getLogList(item); +// break; +// } +// } +// +// +// return listCode; +// } +// +// +// private List> getLogList(LOG_FILE_KIND log){ +// List> listLog = new ArrayList>(); +// switch (log) { +// case JEUS: +// String[] arrJeusLog = ["java"]; +// Map mCode = new HashMap(); +// mCode.put("code", was.name()); +// mCode.put("codeNm", was.getVal()); +// +// listLog.add(mCode); +// break; +// case TOMCAT: +// +// break; +// default: +// break; +// } +// +// +// } +// +// +// } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/grp/dao/XitAuthGrpMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/auth/grp/dao/XitAuthGrpMngMapper.java new file mode 100644 index 00000000..ee3fa579 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/grp/dao/XitAuthGrpMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.auth.grp.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngSearchVO; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngVO; + +/** + * + * @업무그룹명: 사용자그룹관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitAuthGrpMngMapper { + + /** + *
메소드 설명: 사용자그룹관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthGrpMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자그룹관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthGrpMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자그룹관리 상세정보 조회
+ * @param vo + * @return XitAuthGrpMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthGrpMngVO findView(XitAuthGrpMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/grp/model/XitAuthGrpMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/grp/model/XitAuthGrpMngSearchVO.java new file mode 100644 index 00000000..f8f87f62 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/grp/model/XitAuthGrpMngSearchVO.java @@ -0,0 +1,64 @@ +package kr.xit.framework.biz.mng.auth.grp.model; + +import java.util.List; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자그룹관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthGrpMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 그룹 목록 + */ + List groupManageList; + /** + * 삭제대상 목록 + */ + String[] delYn; + + /** + * groupManageList attribute 를 리턴한다. + * @return List + */ + public List getGroupManageList() { + return groupManageList; + } + + /** + * groupManageList attribute 값을 설정한다. + * @param groupManageList List + */ + public void setGroupManageList(List groupManageList) { + this.groupManageList = groupManageList; + } + + /** + * delYn attribute 를 리턴한다. + * @return String[] + */ + public String[] getDelYn() { + return delYn; + } + + /** + * delYn attribute 값을 설정한다. + * @param delYn String[] + */ + public void setDelYn(String[] delYn) { + this.delYn = delYn; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/grp/model/XitAuthGrpMngVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/grp/model/XitAuthGrpMngVO.java new file mode 100644 index 00000000..37f0cf17 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/grp/model/XitAuthGrpMngVO.java @@ -0,0 +1,133 @@ +package kr.xit.framework.biz.mng.auth.grp.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자그룹관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthGrpMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 그룹 관리 + */ + private XitAuthGrpMngVO groupManage; + /** + * 그룹 ID + */ + private String groupId; + /** + * 그룹명 + */ + private String groupNm; + /** + * 그룹등록일시 + */ + private String groupCreatDe; + /** + * 그룹설명 + */ + private String groupDc; + /** + * 권한 코드 + */ + private String authorCode; + /** + * 권한명 + */ + private String authorNm; + + /** + * groupManage attribute 를 리턴한다. + * @return GroupManage + */ + public XitAuthGrpMngVO getGroupManage() { + return groupManage; + } + /** + * groupManage attribute 값을 설정한다. + * @param groupManage GroupManage + */ + public void setGroupManage(XitAuthGrpMngVO groupManage) { + this.groupManage = groupManage; + } + /** + * groupId attribute 를 리턴한다. + * @return String + */ + public String getGroupId() { + return groupId; + } + /** + * groupId attribute 값을 설정한다. + * @param groupId String + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * groupNm attribute 를 리턴한다. + * @return String + */ + public String getGroupNm() { + return groupNm; + } + /** + * groupNm attribute 값을 설정한다. + * @param groupNm String + */ + public void setGroupNm(String groupNm) { + this.groupNm = groupNm; + } + /** + * groupCreatDe attribute 를 리턴한다. + * @return String + */ + public String getGroupCreatDe() { + return groupCreatDe; + } + /** + * groupCreatDe attribute 값을 설정한다. + * @param groupCreatDe String + */ + public void setGroupCreatDe(String groupCreatDe) { + this.groupCreatDe = groupCreatDe; + } + /** + * groupDc attribute 를 리턴한다. + * @return String + */ + public String getGroupDc() { + return groupDc; + } + /** + * groupDc attribute 값을 설정한다. + * @param groupDc String + */ + public void setGroupDc(String groupDc) { + this.groupDc = groupDc; + } + public String getAuthorCode() { + return authorCode; + } + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + public String getAuthorNm() { + return authorNm; + } + public void setAuthorNm(String authorNm) { + this.authorNm = authorNm; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/grp/service/XitAuthGrpMngService.java b/src/main/java/kr/xit/framework/biz/mng/auth/grp/service/XitAuthGrpMngService.java new file mode 100644 index 00000000..3f7ddd3e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/grp/service/XitAuthGrpMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.auth.grp.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngSearchVO; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngVO; + +/** + * + * @업무그룹명: 사용자그룹관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAuthGrpMngService { + + + /** + *
메소드 설명: 사용자그룹관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthGrpMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자그룹관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthGrpMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자그룹관리 상세정보 조회
+ * @param vo + * @return XitAuthGrpMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthGrpMngVO findView(XitAuthGrpMngVO vo); + + /** + *
메소드 설명: 사용자그룹관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitAuthGrpMngVO vo); + + /** + *
메소드 설명: 사용자그룹관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitAuthGrpMngVO vo); + + /** + *
메소드 설명: 사용자그룹관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitAuthGrpMngVO vo); + + /** + *
메소드 설명: 사용자그룹관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/grp/service/impl/XitAuthGrpMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/auth/grp/service/impl/XitAuthGrpMngServiceImpl.java new file mode 100644 index 00000000..5cd80af1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/grp/service/impl/XitAuthGrpMngServiceImpl.java @@ -0,0 +1,166 @@ +package kr.xit.framework.biz.mng.auth.grp.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitAuthorGroupInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.mng.auth.grp.dao.XitAuthGrpMngMapper; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngSearchVO; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngVO; +import kr.xit.framework.biz.mng.auth.grp.service.XitAuthGrpMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitAuthGrpMngServiceImpl implements XitAuthGrpMngService{ + + @Resource + private XitAuthGrpMngMapper xitAuthGrpMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource(name="xitGroupIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitAuthGrpMngSearchVO searchVO) { + List result = null; + try { + result = xitAuthGrpMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자그룹관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitAuthGrpMngSearchVO searchVO) { + int result = 0; + try { + result = xitAuthGrpMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자그룹관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitAuthGrpMngVO findView(XitAuthGrpMngVO vo) { + XitAuthGrpMngVO result = null; + try { + result = xitAuthGrpMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("사용자그룹관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitAuthGrpMngVO vo) { + /** + * 유효성 확인 + */ + boolean isChangePermission = xitFrameUnitService.isCheckUserForCanChange(XitCmmnUtil.getUserInfo().getUniqId(), vo.getAuthorCode()); + if(!isChangePermission) + throw new RuntimeException("자신의 권한보다 상위 권한을 설정 할 수 없습니다."); + + + /** + * 필수값 설정 + */ + try { + vo.setGroupId(idgenService.getNextStringId()); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + XitAuthorGroupInfoVO authorGroupInfoVO = convertToCrudVO(vo); + + + + /** + * 처리 + */ + xitFrameCrudService.addXitAuthorGroupInfo(authorGroupInfoVO); + + } + + @Override + public void modifyProc(XitAuthGrpMngVO vo) { + /** + * 유효성 확인 + */ + boolean isChangePermission = xitFrameUnitService.isCheckUserForCanChange(XitCmmnUtil.getUserInfo().getUniqId(), vo.getAuthorCode()); + if(!isChangePermission) + throw new RuntimeException("자신의 권한보다 상위 권한을 설정 할 수 없습니다."); + + + /** + * 필수값 설정 + */ + XitAuthorGroupInfoVO authorGroupInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitAuthorGroupInfo(authorGroupInfoVO); + } + + @Override + public void removeProc(XitAuthGrpMngVO vo) { + /** + * 필수값 설정 + */ + XitAuthorGroupInfoVO authorGroupInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.removeXitAuthorGroupInfo(authorGroupInfoVO); + } + + @Override + public void removesProc(String ids) { + /** + * 처리 + */ + String [] groupIds = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitAuthorGroupInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitAuthorGroupInfoVO convertToCrudVO(XitAuthGrpMngVO vo) { + XitAuthorGroupInfoVO authorGroupInfoVO = new XitAuthorGroupInfoVO(); + authorGroupInfoVO.setGroup_id (vo.getGroupId()); //그룹 id + authorGroupInfoVO.setGroup_nm (vo.getGroupNm()); //그룹 명 +// authorGroupInfoVO.setGroup_creat_de(); //그룹 생성 일 + authorGroupInfoVO.setGroup_dc (vo.getGroupDc()); //그룹 설명 + authorGroupInfoVO.setAuthor_code (vo.getAuthorCode()); //권한 코드 + + return authorGroupInfoVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/grp/web/XitAuthGrpMngController.java b/src/main/java/kr/xit/framework/biz/mng/auth/grp/web/XitAuthGrpMngController.java new file mode 100644 index 00000000..2cb28bcc --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/grp/web/XitAuthGrpMngController.java @@ -0,0 +1,362 @@ +package kr.xit.framework.biz.mng.auth.grp.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngVO; +import kr.xit.framework.biz.mng.auth.grp.service.XitAuthGrpMngService; +import kr.xit.framework.biz.mng.auth.grp.model.XitAuthGrpMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 사용자그룹관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/auth/grp/") +public class XitAuthGrpMngController { + + @Resource + private XitAuthGrpMngService xitAuthGrpMngService; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 사용자그룹관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthGrpMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthGrpMng_list(@ModelAttribute("groupManageVO") XitAuthGrpMngSearchVO searchVO, ModelMap model) { + + /** paging */ +// PaginationInfo paginationInfo = new PaginationInfo(); +// paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); +// paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); +// paginationInfo.setPageSize(searchVO.getPageSize()); +// +// searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); +// searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); +// searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); +// +// searchVO.setGroupManageList(xitAuthGrpMngService.findList(searchVO)); +// model.addAttribute("groupList", searchVO.getGroupManageList()); +// +// int totCnt = xitAuthGrpMngService.findListTotCnt(searchVO); +// paginationInfo.setTotalRecordCount(totCnt); +// model.addAttribute("paginationInfo", paginationInfo); +// model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + /** + * 코드 조회 + */ + //권한 목록 조회 + XitAuthorInfoVO authorInfoVO = new XitAuthorInfoVO(); + List listAuthorInfoVO = xitFrameCrudService.findXitAuthorInfos(authorInfoVO); + model.addAttribute("listAuthorInfoVO", listAuthorInfoVO); + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/grp/XitAuthGrpMng_list"; + } + /** + *
메소드 설명: 사용자 그룹관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "AuthGrpMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AuthGrpMng_listAjax(@ModelAttribute("groupManageVO") XitAuthGrpMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitAuthGrpMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitAuthGrpMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthGrpMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthGrpMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("groupManageVO") XitAuthGrpMngVO vo + , @ModelAttribute("groupManageSearchVO") XitAuthGrpMngSearchVO searchVO + , ModelMap model) { + + /** + * 코드 조회 + */ + //권한 목록 조회 + XitAuthorInfoVO authorInfoVO = new XitAuthorInfoVO(); + List listAuthorInfoVO = xitFrameCrudService.findXitAuthorInfos(authorInfoVO); + model.addAttribute("listAuthorInfoVO", listAuthorInfoVO); + + switch (cmd) { + case "input": //등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("groupManage", xitAuthGrpMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/grp/XitAuthGrpMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthGrpMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthGrpMng_page_popup( + @PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("groupManageVO") XitAuthGrpMngVO vo + , @ModelAttribute("groupManageSearchVO") XitAuthGrpMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/grp/XitAuthGrpMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 사용자그룹관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthGrpMng_{cmd}_proc.do", method=RequestMethod.POST) + public void AuthGrpMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("groupManageVO") XitAuthGrpMngVO vo + ,@ModelAttribute("groupManageSearchVO") XitAuthGrpMngSearchVO searchVO + ,@RequestParam(value="groupIds", required=false, defaultValue="") String groupIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_input.do"; + break; + } + //처리 + try { + xitAuthGrpMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + model.addAttribute("groupId", vo.getGroupId()); + sLocationUrl = "redirect:/_mng_/auth/grp/AuthGrpMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_edit.do"; + break; + } + //처리 + try { + xitAuthGrpMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitAuthGrpMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/auth/grp/AuthGrpMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitAuthGrpMngService.removesProc(groupIds); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/dao/XitAuthHierarchyMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/dao/XitAuthHierarchyMngMapper.java new file mode 100644 index 00000000..2ede2342 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/dao/XitAuthHierarchyMngMapper.java @@ -0,0 +1,52 @@ +package kr.xit.framework.biz.mng.auth.hierarchy.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.auth.hierarchy.model.XitAuthHierarchyMngSearchVO; +import kr.xit.framework.biz.mng.auth.hierarchy.model.XitAuthHierarchyMngVO; + +/** + * + * @업무그룹명: 권한계층관리 Mapper + * @설명: + * @최초작성일: 2020. 11. 2. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitAuthHierarchyMngMapper { + + + /** + *
메소드 설명: 권한계층관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public List findList(XitAuthHierarchyMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 권한계층관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public int findListTotCnt(XitAuthHierarchyMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 권한계층관리 상세정보 조회
+ * @param vo + * @return XitAuthHierarchyMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public XitAuthHierarchyMngVO findView(XitAuthHierarchyMngVO vo) throws SQLException; + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/model/XitAuthHierarchyMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/model/XitAuthHierarchyMngSearchVO.java new file mode 100644 index 00000000..8fc78df3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/model/XitAuthHierarchyMngSearchVO.java @@ -0,0 +1,24 @@ +package kr.xit.framework.biz.mng.auth.hierarchy.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 권한계층관리 SearchVO + * @설명: + * @최초작성일: 2020. 11. 2. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthHierarchyMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/model/XitAuthHierarchyMngVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/model/XitAuthHierarchyMngVO.java new file mode 100644 index 00000000..4a6eb55f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/model/XitAuthHierarchyMngVO.java @@ -0,0 +1,134 @@ +package kr.xit.framework.biz.mng.auth.hierarchy.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 권한계층관리 VO + * @설명: + * @최초작성일: 2020. 11. 2. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthHierarchyMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** + * 권한계층관리 + */ + private XitAuthHierarchyMngVO authorManage; + /** + * 권한코드 + */ + private String authorCode; + /** + * 권한등록일자 + */ + private String authorCreatDe; + /** + * 권한코드설명 + */ + private String authorDc; + /** + * 권한 명 + */ + private String authorNm; + /** + * 권한구조 코드 + */ + private String authorRescueCode; + /** + * 권한구조 코드명 + */ + private String authorRescueCodeNm; + + /** + * authorManage attribute 를 리턴한다. + * @return AuthorManage + */ + public XitAuthHierarchyMngVO getAuthorManage() { + return authorManage; + } + /** + * authorManage attribute 값을 설정한다. + * @param authorManage AuthorManage + */ + public void setAuthorManage(XitAuthHierarchyMngVO authorManage) { + this.authorManage = authorManage; + } + /** + * authorCode attribute 를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + /** + * authorCreatDe attribute 를 리턴한다. + * @return String + */ + public String getAuthorCreatDe() { + return authorCreatDe; + } + /** + * authorCreatDe attribute 값을 설정한다. + * @param authorCreatDe String + */ + public void setAuthorCreatDe(String authorCreatDe) { + this.authorCreatDe = authorCreatDe; + } + /** + * authorDc attribute 를 리턴한다. + * @return String + */ + public String getAuthorDc() { + return authorDc; + } + /** + * authorDc attribute 값을 설정한다. + * @param authorDc String + */ + public void setAuthorDc(String authorDc) { + this.authorDc = authorDc; + } + /** + * authorNm attribute 를 리턴한다. + * @return String + */ + public String getAuthorNm() { + return authorNm; + } + /** + * authorNm attribute 값을 설정한다. + * @param authorNm String + */ + public void setAuthorNm(String authorNm) { + this.authorNm = authorNm; + } + public String getAuthorRescueCode() { + return authorRescueCode; + } + public void setAuthorRescueCode(String authorRescueCode) { + this.authorRescueCode = authorRescueCode; + } + public String getAuthorRescueCodeNm() { + return authorRescueCodeNm; + } + public void setAuthorRescueCodeNm(String authorRescueCodeNm) { + this.authorRescueCodeNm = authorRescueCodeNm; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/service/XitAuthHierarchyMngService.java b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/service/XitAuthHierarchyMngService.java new file mode 100644 index 00000000..e6b0536d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/service/XitAuthHierarchyMngService.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.mng.auth.hierarchy.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.auth.hierarchy.model.XitAuthHierarchyMngSearchVO; +import kr.xit.framework.biz.mng.auth.hierarchy.model.XitAuthHierarchyMngVO; + +/** + * + * @업무그룹명: 권한계층관리 Service + * @설명: + * @최초작성일: 2020. 11. 2. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAuthHierarchyMngService { + + + /** + *
메소드 설명: 권한계층관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public List findList(XitAuthHierarchyMngSearchVO searchVO); + + /** + *
메소드 설명: 권한계층관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public int findListTotCnt(XitAuthHierarchyMngSearchVO searchVO); + + /** + *
메소드 설명: 권한계층관리 상세정보 조회
+ * @param vo + * @return XitAuthHierarchyMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public XitAuthHierarchyMngVO findView(XitAuthHierarchyMngVO vo); + + /** + *
메소드 설명: 권한계층관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public void addProc(XitAuthHierarchyMngVO vo); + + /** + *
메소드 설명: 권한계층관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public void modifyProc(XitAuthHierarchyMngVO vo); + + /** + *
메소드 설명: 권한계층관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public void removeProc(XitAuthHierarchyMngVO vo); + + /** + *
메소드 설명: 권한계층관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + public void removesProc(String ids); + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/service/impl/XitAuthHierarchyMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/service/impl/XitAuthHierarchyMngServiceImpl.java new file mode 100644 index 00000000..7a3f26b0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/hierarchy/service/impl/XitAuthHierarchyMngServiceImpl.java @@ -0,0 +1,463 @@ +package kr.xit.framework.biz.mng.auth.hierarchy.service.impl; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.security.intercept.EgovReloadableFilterInvocationSecurityMetadataSource; +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.model.XitRoleSclsrtRescueVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.mng.auth.hierarchy.dao.XitAuthHierarchyMngMapper; +import kr.xit.framework.biz.mng.auth.hierarchy.model.XitAuthHierarchyMngSearchVO; +import kr.xit.framework.biz.mng.auth.hierarchy.model.XitAuthHierarchyMngVO; +import kr.xit.framework.biz.mng.auth.hierarchy.service.XitAuthHierarchyMngService; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitAuthHierarchyMngServiceImpl implements XitAuthHierarchyMngService { + private static final Logger logger = LoggerFactory.getLogger(XitAuthHierarchyMngServiceImpl.class); + + @Resource + private XitAuthHierarchyMngMapper xitAuthHierarchyMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource(name = "databaseSecurityMetadataSource") + private EgovReloadableFilterInvocationSecurityMetadataSource databaseSecurityMetadataSource; + + + + @Override + public List findList(XitAuthHierarchyMngSearchVO searchVO) { + List result = null; + try { + result = xitAuthHierarchyMngMapper.findList(searchVO); + + //권한구조 설정 + if(XitCmmnUtil.notEmpty(result)) { + for(XitAuthHierarchyMngVO item : result) { + String strAuthorRescueCode = this.getStrAuthHierarchy(item.getAuthorCode()); + item.setAuthorRescueCode(strAuthorRescueCode); + item.setAuthorRescueCodeNm(this.convertKorNm(strAuthorRescueCode)); + } + } + + } catch (SQLException e) { + throw new RuntimeException("권한계층관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitAuthHierarchyMngSearchVO searchVO) { + int result = 0; + try { + result = xitAuthHierarchyMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("권한계층관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitAuthHierarchyMngVO findView(XitAuthHierarchyMngVO vo) { + XitAuthHierarchyMngVO result = new XitAuthHierarchyMngVO(); + + List listRoleSclsrtRescueVO = xitFrameCrudService.findXitRoleSclsrtRescues(new XitRoleSclsrtRescueVO()); + if(XitCmmnUtil.isEmpty(listRoleSclsrtRescueVO)) + return result; + + + String topButtonAuthorCode = this.getStrAuthHierarchy(listRoleSclsrtRescueVO.get(0).getChldrn_role()); + topButtonAuthorCode = topButtonAuthorCode.split(">")[0].trim(); + String strAuthorRescueCode = this.getStrAuthHierarchy(topButtonAuthorCode); + result.setAuthorRescueCode(strAuthorRescueCode); + + return result; + } + + @Override + public void addProc(XitAuthHierarchyMngVO vo) { + this.modifyProc(vo); + } + + @Override + public void modifyProc(XitAuthHierarchyMngVO vo) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(vo.getAuthorCode())) + throw new RuntimeException("권한코드는 필수조건 입니다."); + + /** + * 필수값 설정 + */ +// XitRoleSclsrtRescueVO roleSclsrtRescueVO = convertToCrudVO(vo); + String[] arrAuthorCodeGrp = vo.getAuthorCode().split(","); //권한코드 묶음 목록 + + + /** + * 유효성 확인 + * -최상위 부모는 반드시 한개 이어야 한다. + * -최하위 자녀(최고관리자)는 반드시 한개 이어야 한다. + */ + // 최상위 부모 갯수 확인 + if(arrAuthorCodeGrp[0].split(";").length>1) + throw new RuntimeException("최상위 부모는 한개만 설정 가능 합니다."); + // 최하위 자녀 갯수 확인 + if(arrAuthorCodeGrp[arrAuthorCodeGrp.length-1].split(";").length>1) + throw new RuntimeException("최하위 자녀는 한개만 설정 가능 합니다."); + // 다중상속 구간 갯수 확인 + int cnt = 0; + for(String authorCodeGrp : arrAuthorCodeGrp) { + if(authorCodeGrp.split(";").length > 1) + cnt++; + } + if(cnt > 1) + throw new RuntimeException("다중상속은 하나의 구간만 설정 가능 합니다."); + // 권한계층관리 데이터 유무 +// boolean isExistRoleHierarchy = XitCmmnUtil.isEmpty(xitFrameCrudService.findXitRoleSclsrtRescues(new XitRoleSclsrtRescueVO()))?false:true; +// if(isExistRoleHierarchy) +// this.isValidate(arrAuthorCodeGrp); + + + + + + /** + * 처리 + */ + //권한계층구조 일괄 제거 + xitFrameCrudService.removesXitRoleSclsrtRescue(new XitRoleSclsrtRescueVO()); + //권한계층 데이터 등록 + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitRoleSclsrtRescueVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ +// private XitRoleSclsrtRescueVO convertToCrudVO(XitAuthHierarchyMngVO vo) { +// XitRoleSclsrtRescueVO roleSclsrtRescueVO = new XitRoleSclsrtRescueVO(); +// roleSclsrtRescueVO.setParnts_role(vo.getParntsRole()); +// roleSclsrtRescueVO.setChldrn_role(vo.getChldrnRole()); +// +// return roleSclsrtRescueVO; +// } + + + /** + *
메소드 설명: 권한의 권한계층 구조를 문자열로 반환 한다.
+ * @param authorCode + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + private String getStrAuthHierarchy(String authorCode) { + LinkedHashMap mParnts = new LinkedHashMap(); + LinkedHashMap mChldrn = new LinkedHashMap(); + + + List list = xitFrameCrudService.findXitRoleSclsrtRescues(new XitRoleSclsrtRescueVO()); + this.getAuthHierarchy(list, authorCode, false, mParnts); + this.getAuthHierarchy(list, authorCode, true, mChldrn); + + StringBuffer sb = new StringBuffer(); + Iterator it = mParnts.keySet().iterator(); + while(it.hasNext()) { + sb.append(mParnts.get(it.next())).append(" > "); + } + sb.append(authorCode).append(" > "); + it = mChldrn.keySet().iterator(); + while(it.hasNext()) { + sb.append(mChldrn.get(it.next())).append(" > "); + } + + String result = sb.toString().trim(); + return result.substring(0, result.length()-2); + } + + /** + *
메소드 설명: 권한코드의 권한구조상의 상/하위 권한을 resultMap(LinkedHashMap)에 담아 반환 한다.
+ * @param list 역할계층구조 목록 데이터 + * @param authorCode 권한코드 + * @param isChldrnSearch 상위권한 탐색 여부(true: 상위권한 탐색, false: 하위권한 탐색) + * @param resultMap 응답객체 + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + private void getAuthHierarchy(List list, String authorCode, boolean isChldrnSearch, LinkedHashMap resultMap) { + + for (XitRoleSclsrtRescueVO item : list) { + + if(isChldrnSearch) { + // 권한코드가 일치하지 않으면 skip + if (!item.getParnts_role().equals(authorCode)) + continue; + + //권한코드 Set + if(resultMap.containsKey(authorCode)) { + //동일한 값이면 담지 않음 + if(resultMap.get(authorCode).equals(item.getChldrn_role())) + continue; + + resultMap.put(authorCode, resultMap.get(authorCode)+", "+item.getChldrn_role()); + }else { + //동일한 값이 있으면 담지 않음 +// if(!resultMap.containsValue(item.getChldrn_role())) +// resultMap.put(authorCode, item.getChldrn_role()); + Iterator it = resultMap.values().iterator(); + boolean isExists = false; + LOOP: + while(it.hasNext()) { + String[] values = it.next().split(","); + for(int j=0; j it = resultMap.values().iterator(); +// boolean isExists = false; +// LOOP: +// while(it.hasNext()) { +// String[] values = it.next().split(","); +// for(int j=0; j listAuthorInfoVO = xitFrameCrudService.findXitAuthorInfos(new XitAuthorInfoVO()); + Map mAuthorInfo = new HashMap(); + for(XitAuthorInfoVO item : listAuthorInfoVO) { + mAuthorInfo.put(item.getAuthor_code(), item.getAuthor_nm()); + } + + + StringBuffer sb = new StringBuffer(); + String[] items = strAuthorRescueCode.split(">"); + for(int i=0; i0) + sb.append(" > "); + + String[] arrAuthorCode = item.split(","); + for(int j=0; j메소드 설명: 상위권한을 취득 할 수 없도록 다음을 검증 한다. +// * -자신의 형제를 부모로 설정 할 수 없어야 한다. (ex: 형제 권한의 role 취득 가능) +// * -자신의 권한보다 상위권한을 부모(or형제)로 설정 할 수 없어야 한다. (ex: 상위 권한의 role 취득 가능) +// * -자신의 부모,형제를 자신의 상위권한의 자녀로 설정 할 수 없어야 한다. (ex: n개의 계정 중 본 계정 외 권한을 자녀로 설정하여 상위 권한의 role 취득 가능) +// * +// * @param arrAuthorCodeGrp void 요청처리 후 응답객체 +// * @author: 박민규 +// * @date: 2020. 11. 3. +// */ +// private void isValidate(String[] arrAuthorCodeGrp) { +// //사용자보안설정 조회 +// XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); +// userScrtySetupVO.setScrty_setup_trget_id(XitCmmnUtil.getUserInfo().getUniqId()); +// List listUserScrtySetupVO = xitFrameCrudService.findXitUserScrtySetups(userScrtySetupVO); +// String userAuthorCode = XitCmmnUtil.isEmpty(listUserScrtySetupVO)?null:listUserScrtySetupVO.get(0).getAuthor_code(); +// if(XitCmmnUtil.notEmpty(userAuthorCode)) { +// //변경 전 형제권한 Map 생성 +// Map mSiblingsRole = new HashMap(); +// XitRoleSclsrtRescueVO xitRoleSclsrtRescueVO = new XitRoleSclsrtRescueVO(); +// xitRoleSclsrtRescueVO.setChldrn_role(userAuthorCode); +// List listRoleSclsrtRescueVO = xitFrameCrudService.findXitRoleSclsrtRescues(xitRoleSclsrtRescueVO); +// if(XitCmmnUtil.notEmpty(listRoleSclsrtRescueVO)) { +// String parntsRole = listRoleSclsrtRescueVO.get(0).getParnts_role(); +// xitRoleSclsrtRescueVO = new XitRoleSclsrtRescueVO(); +// xitRoleSclsrtRescueVO.setParnts_role(parntsRole); +// List listSiblingsRole = xitFrameCrudService.findXitRoleSclsrtRescues(xitRoleSclsrtRescueVO); +// for(XitRoleSclsrtRescueVO siblingsRole : listSiblingsRole) { +// //형제 중 자신의 권한은 제외 +// if(siblingsRole.equals(userAuthorCode)) +// continue; +// +// mSiblingsRole.put(siblingsRole.getChldrn_role(), ""); +// } +// } +// +// //부모 및 형제 권한 추출 +// List listParntsRole = new ArrayList(); //추출한 부모권한 목록 +// List listParntsAndSiblingsRole = new ArrayList(); //추출한 부모&형제 권한 목록 +// boolean isCheckingParnts = true; +// CheckComplete: +// for(int i=0; i메소드 설명: 권한계층관리 목록 페이지 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + @RequestMapping(value = "AuthHierarchyMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthHierarchyMng_list(@ModelAttribute("searchVO") XitAuthHierarchyMngSearchVO searchVO, ModelMap model) { + + /** paging */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //searchVO.setAuthorManageList(xitAuthHierarchyMngService.findList(searchVO)); + //model.addAttribute("authorList", searchVO.getAuthorManageList()); + + //int totCnt = xitAuthHierarchyMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); +// model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/hierarchy/XitAuthHierarchyMng_list"; + } + /** + *
메소드 설명: 권한계층관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 30. + */ + @RequestMapping(value = "AuthHierarchyMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AuthHierarchyMng_listAjax(@ModelAttribute("searchVO") XitAuthHierarchyMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitAuthHierarchyMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitAuthHierarchyMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + @RequestMapping(value = "AuthHierarchyMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthHierarchyMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("searchVO") XitAuthHierarchyMngSearchVO searchVO + , @ModelAttribute("vo") XitAuthHierarchyMngVO vo + , ModelMap model) { + switch (cmd) { +// case "input": //등록 페이지 +// break; + case "edit": //수정 페이지 +// case "view": //상세 페이지 + //최하위 권한의 권한계층 조회 + XitAuthHierarchyMngVO result = xitAuthHierarchyMngService.findView(vo); + //권한코드 Map 생성 + List listAuthorInfoVO = xitFrameCrudService.findXitAuthorInfos(new XitAuthorInfoVO()); + Map mAuthorInfo = new HashMap(); + for(XitAuthorInfoVO item : listAuthorInfoVO) { + mAuthorInfo.put(item.getAuthor_code(), item.getAuthor_nm()); + } + //권한코드 목록에서 비중복 권한만 추출 + Map mNoDuplAuthorInfo = new HashMap(); + mNoDuplAuthorInfo.putAll(mAuthorInfo); + String[] arrAuthorRescue = result.getAuthorRescueCode().split(">"); + for(int i=0; i listAuthorInfo = new ArrayList(); + Iterator it = mNoDuplAuthorInfo.keySet().iterator(); + while(it.hasNext()) { + String authorCode = it.next(); + XitAuthorInfoVO authorInfo = new XitAuthorInfoVO(); + authorInfo.setAuthor_code(authorCode); + authorInfo.setAuthor_nm(mNoDuplAuthorInfo.get(authorCode)); + listAuthorInfo.add(authorInfo); + } + + + model.addAttribute("authorList", listAuthorInfo); + model.addAttribute("mAuthorInfo", mAuthorInfo); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + model.addAttribute("vo", result); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/hierarchy/XitAuthHierarchyMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 2. + */ + @RequestMapping(value = "AuthHierarchyMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthHierarchyMng_page_popup(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("searchVO") XitAuthHierarchyMngSearchVO searchVO + , @ModelAttribute("vo") XitAuthHierarchyMngVO vo + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/hierarchy/XitAuthHierarchyMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + + /** + *
+	 * 메소드 설명: 권한계층관리 CUD 처리
+	 * 
+ * + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 11. 2. + */ + @RequestMapping(value = "AuthHierarchyMng_{cmd}_proc.do", method=RequestMethod.POST) + public void AuthHierarchyMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitAuthHierarchyMngVO vo + ,@RequestParam(value="authorCodes", required=false, defaultValue="") String authorCodes + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_list.do"; + String resultMsg = null; + switch (cmd) { +// case "insert": //등록 +// break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_edit.do"; + break; + } + //처리 + try { + xitAuthHierarchyMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitAuthHierarchyMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_edit.do"; + } + break; + + case "reload": //롤계층정보 재적용 + //처리 + /** + * 롤계층정보 reload + * -재접속 후 변경된 롤계층정보가 적용 됨. + */ + String hierachicaRoles = null; + try { + hierachicaRoles = egovSecuredObjectService.getHierarchicalRoles(); + roleHierarchyImpl.setHierarchy(hierachicaRoles); + RoleHierarchy roleHierarchy = roleHierarchyImpl; + egovJdbcUserDetailsManager.setRoleHierarchy(roleHierarchy); + +// List listUserInfo = xitFrameCrudService.findXitUserInfos(new XitUserInfoVO()); +// for(XitUserInfoVO userInfo : listUserInfo) { +// egovJdbcUserDetailsManager.loadUserByUsername(userInfo.getUser_id()); +// } + resultMsg = xitMessageSource.getMessage("success.request.msg"); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.request.msg"); + sLocationUrl = "forward:/_mng_/auth/hierarchy/AuthHierarchyMng_edit.do"; + } + break; + + + + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/reg/dao/XitAuthRegMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/auth/reg/dao/XitAuthRegMngMapper.java new file mode 100644 index 00000000..09dd896c --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/reg/dao/XitAuthRegMngMapper.java @@ -0,0 +1,72 @@ +package kr.xit.framework.biz.mng.auth.reg.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngVO; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngSearchVO; +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 권한관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitAuthRegMngMapper { + + + /** + *
메소드 설명: 권한관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 권한관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 권한관리 상세정보 조회
+ * @param vo + * @return XitAuthRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthRegMngVO findView(XitAuthRegMngVO vo) throws SQLException; + + + + /** + *
메소드 설명: 권한롤관리 목록 조회
+ * @param searchVO + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List> findListAuthorRole(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 권한롤관리 목록 조회 총 건수
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListAuthorRoleTotCnt(XitBaseSearchVO searchVO); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/reg/model/XitAuthRegMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/reg/model/XitAuthRegMngSearchVO.java new file mode 100644 index 00000000..d73bfac7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/reg/model/XitAuthRegMngSearchVO.java @@ -0,0 +1,38 @@ +package kr.xit.framework.biz.mng.auth.reg.model; + +import java.util.List; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 권한관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthRegMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + + List authorManageList; + + + + public List getAuthorManageList() { + return authorManageList; + } + public void setAuthorManageList(List authorManageList) { + this.authorManageList = authorManageList; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/reg/model/XitAuthRegMngVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/reg/model/XitAuthRegMngVO.java new file mode 100644 index 00000000..cc9b4202 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/reg/model/XitAuthRegMngVO.java @@ -0,0 +1,114 @@ +package kr.xit.framework.biz.mng.auth.reg.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 권한관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthRegMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** + * 권한관리 + */ + private XitAuthRegMngVO authorManage; + /** + * 권한코드 + */ + private String authorCode; + /** + * 권한등록일자 + */ + private String authorCreatDe; + /** + * 권한코드설명 + */ + private String authorDc; + /** + * 권한 명 + */ + private String authorNm; + + /** + * authorManage attribute 를 리턴한다. + * @return AuthorManage + */ + public XitAuthRegMngVO getAuthorManage() { + return authorManage; + } + /** + * authorManage attribute 값을 설정한다. + * @param authorManage AuthorManage + */ + public void setAuthorManage(XitAuthRegMngVO authorManage) { + this.authorManage = authorManage; + } + /** + * authorCode attribute 를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + /** + * authorCreatDe attribute 를 리턴한다. + * @return String + */ + public String getAuthorCreatDe() { + return authorCreatDe; + } + /** + * authorCreatDe attribute 값을 설정한다. + * @param authorCreatDe String + */ + public void setAuthorCreatDe(String authorCreatDe) { + this.authorCreatDe = authorCreatDe; + } + /** + * authorDc attribute 를 리턴한다. + * @return String + */ + public String getAuthorDc() { + return authorDc; + } + /** + * authorDc attribute 값을 설정한다. + * @param authorDc String + */ + public void setAuthorDc(String authorDc) { + this.authorDc = authorDc; + } + /** + * authorNm attribute 를 리턴한다. + * @return String + */ + public String getAuthorNm() { + return authorNm; + } + /** + * authorNm attribute 값을 설정한다. + * @param authorNm String + */ + public void setAuthorNm(String authorNm) { + this.authorNm = authorNm; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/reg/service/XitAuthRegMngService.java b/src/main/java/kr/xit/framework/biz/mng/auth/reg/service/XitAuthRegMngService.java new file mode 100644 index 00000000..f33a7154 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/reg/service/XitAuthRegMngService.java @@ -0,0 +1,111 @@ +package kr.xit.framework.biz.mng.auth.reg.service; + +import java.util.List; +import java.util.Map; + +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngSearchVO; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngVO; +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 권한관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAuthRegMngService { + + + /** + *
메소드 설명: 권한관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthRegMngSearchVO searchVO); + + /** + *
메소드 설명: 권한관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthRegMngSearchVO searchVO); + + /** + *
메소드 설명: 권한관리 상세정보 조회
+ * @param vo + * @return XitAuthRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthRegMngVO findView(XitAuthRegMngVO vo); + + /** + *
메소드 설명: 권한관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitAuthRegMngVO vo); + + /** + *
메소드 설명: 권한관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitAuthRegMngVO vo); + + /** + *
메소드 설명: 권한관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitAuthRegMngVO vo); + + /** + *
메소드 설명: 권한관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids); + + + + + /** + *
메소드 설명: 권한롤관리 목록 조회
+ * @param searchVO + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List> findListAuthorRole(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 권한롤관리 목록 조회 총 건수
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListAuthorRoleTotCnt(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 권한롤관리 등록
+ * @param authCode + * @param trgetRoleCodes + * @param trgetRegYns void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addAuthorRole(String authCode, String[] trgetRoleCodes, String[] trgetRegYns); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/reg/service/impl/XitAuthRegMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/auth/reg/service/impl/XitAuthRegMngServiceImpl.java new file mode 100644 index 00000000..3245032d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/reg/service/impl/XitAuthRegMngServiceImpl.java @@ -0,0 +1,273 @@ +package kr.xit.framework.biz.mng.auth.reg.service.impl; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.model.XitAuthorRoleRelateVO; +import kr.xit.framework.biz.cmm.model.XitRoleSclsrtRescueVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.mng.auth.reg.dao.XitAuthRegMngMapper; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngVO; +import kr.xit.framework.biz.mng.auth.reg.service.XitAuthRegMngService; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngSearchVO; +import kr.xit.framework.core.model.XitBaseSearchVO; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitAuthRegMngServiceImpl implements XitAuthRegMngService { + private static final Logger logger = LoggerFactory.getLogger(XitAuthRegMngServiceImpl.class); + + @Resource + private XitAuthRegMngMapper xitAuthRegMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + + /** 부모 권한코드 */ + final String PARNTS_AUTHOR = "ROLE_USER"; + /** 자녀 권한코드 */ + final String CHLDRN_AUTHOR = "ROLE_ADMIN"; + + + @Override + public List findList(XitAuthRegMngSearchVO searchVO) { + List result = null; + try { + result = xitAuthRegMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("권한관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitAuthRegMngSearchVO searchVO) { + int result = 0; + try { + result = xitAuthRegMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("권한관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitAuthRegMngVO findView(XitAuthRegMngVO vo) { + XitAuthRegMngVO result = null; + try { + result = xitAuthRegMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("권한관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitAuthRegMngVO vo) { + /* ===================================================== + * 2020.05.21 박민규 + * 신규권한 등록프로세스 주석 및 수정 + * -사유: egovFrame의 권한계층은 부모~자녀 순으로 "익명사용자->사용자->관리자"로 기본제공 되며 + * 부모권한에 부여된 ROLE을 자녀가 상속받는 개념이다. + * 다만 기본제공되는 권한계층을 사용 시 카페의 "관리자>매니저>정회원>준회원>비회원"과 같은 권한계층 관리에 적합하기에 + * 업체별(또는 부서별)로 권한그룹을 별도 관리 해야하는 경우에 적합하지 않다. + * -작업내용: 기본제공되는 "익명사용자->사용자->관리자" 관리구조에서 사용자와 관리자 그룹 사이에 신규권한그룹을 삽입하여 + * "익명사용자->사용자->신규권한1/신규권한2/...->관리자"로 권한계층을 구성하여 + * n개의 신규그룹은 "사용자"에게서 기본적인 ROLE을 상속받고 + * n개의 신규그룹의 ROLE을 "관리자"가 상속받도록 한다. + * AS-IS: "익명사용자->사용자->관리자"의 권한계층에 삽입되지 않아 상위권한(PARENT)의 ROLE을 승계받지 못 함. + * TO-BE: "익명사용자->사용자->신규권한1/신규권한2/...->관리자"순의 상하관계를 가지게 되므로 신규권한그룹도 상위권한(PARENT)의 ROLE을 승계 받음. + ===================================================== */ + /* ----------------------- + * 2020.05.21 주석처리 + -----------------------*/ +// /** +// * 필수값 설정 +// */ +// XitAuthorInfoVO authorInfoVO = convertToCrudVO(vo); +// /** +// * 처리 +// */ +// xitFrameCrudService.addXitAuthorInfo(authorInfoVO); + /** + * 필수값 설정 + */ + XitAuthorInfoVO authorInfoVO = convertToCrudVO(vo); + + /** + * 처리 + */ + //권한정보 Insert + xitFrameCrudService.addXitAuthorInfo(authorInfoVO); + //권한계층 Insert + try { + XitRoleSclsrtRescueVO roleSclsrtRescueVO = new XitRoleSclsrtRescueVO(); + //부모관계 생성 + roleSclsrtRescueVO.setParnts_role(PARNTS_AUTHOR); + roleSclsrtRescueVO.setChldrn_role(authorInfoVO.getAuthor_code()); + xitFrameCrudService.addXitRoleSclsrtRescue(roleSclsrtRescueVO); + //자녀관계 생성 + roleSclsrtRescueVO.setParnts_role(authorInfoVO.getAuthor_code()); + roleSclsrtRescueVO.setChldrn_role(CHLDRN_AUTHOR); + xitFrameCrudService.addXitRoleSclsrtRescue(roleSclsrtRescueVO); + } catch (Exception e) { + logger.debug(String.format("권한계층 Insert Fail : %s", e.getMessage())); + } + } + + @Override + public void modifyProc(XitAuthRegMngVO vo) { + /** + * 필수값 설정 + */ + XitAuthorInfoVO authorInfoVO = convertToCrudVO(vo); + /** + * 처리 + */ + xitFrameCrudService.modifyXitAuthorInfo(authorInfoVO); + + } + + @Override + public void removeProc(XitAuthRegMngVO vo) { + + /* ===================================================== + * 2020.05.21 박민규 + * 신규권한 등록프로세스 주석 및 수정 + * -사유: egovFrame의 권한계층은 부모~자녀 순으로 "익명사용자->사용자->관리자"로 기본제공 되며 + * 부모권한에 부여된 ROLE을 자녀가 상속받는 개념이다. + * 다만 기본제공되는 권한계층을 사용 시 카페의 "관리자>매니저>정회원>준회원>비회원"과 같은 권한계층 관리에 적합하기에 + * 업체별(또는 부서별)로 권한그룹을 별도 관리 해야하는 경우에 적합하지 않다. + * -작업내용: 기본제공되는 "익명사용자->사용자->관리자" 관리구조에서 사용자와 관리자 그룹 사이에 신규권한그룹을 삽입하여 + * "익명사용자->사용자->신규권한1/신규권한2/...->관리자"로 권한계층을 구성하여 + * n개의 신규그룹은 "사용자"에게서 기본적인 ROLE을 상속받고 + * n개의 신규그룹의 ROLE을 "관리자"가 상속받도록 한다. + * AS-IS: "익명사용자->사용자->관리자"의 권한계층에 삽입되지 않아 상위권한(PARENT)의 ROLE을 승계받지 못 함. + * TO-BE: "익명사용자->사용자->신규권한1/신규권한2/...->관리자"순의 상하관계를 가지게 되므로 신규권한그룹도 상위권한(PARENT)의 ROLE을 승계 받음. + ===================================================== */ + /* ----------------------- + * 2020.05.21 주석처리 + -----------------------*/ +// /** +// * 필수값 설정 +// */ +// XitAuthorInfoVO authorInfoVO = convertToCrudVO(vo); +// /** +// * 처리 +// */ +// xitFrameCrudService.removeXitAuthorInfo(authorInfoVO); + /** + * 필수값 설정 + */ + XitAuthorInfoVO authorInfoVO = convertToCrudVO(vo); + /** + * 처리 + */ + //권한계층 Delete + try { + XitRoleSclsrtRescueVO roleSclsrtRescueVO = new XitRoleSclsrtRescueVO(); + //부모관계 제거 + roleSclsrtRescueVO.setParnts_role(PARNTS_AUTHOR); + roleSclsrtRescueVO.setChldrn_role(authorInfoVO.getAuthor_code()); + xitFrameCrudService.removeXitRoleSclsrtRescue(roleSclsrtRescueVO); + //자녀관계 제거 + roleSclsrtRescueVO.setParnts_role(authorInfoVO.getAuthor_code()); + roleSclsrtRescueVO.setChldrn_role(CHLDRN_AUTHOR); + xitFrameCrudService.removeXitRoleSclsrtRescue(roleSclsrtRescueVO); + } catch (Exception e) { + logger.debug(String.format("권한계층 Delete Fail : %s", e.getMessage())); + } + //권한정보 Delete + xitFrameCrudService.removeXitAuthorInfo(authorInfoVO); + + } + + @Override + public void removesProc(String ids) { + /** + * 처리 + */ + String[] authorCodes = ids.split(";"); + for (int i = 0; i < authorCodes.length; i++) { + XitAuthRegMngVO vo = new XitAuthRegMngVO(); + vo.setAuthorCode(authorCodes[i]); + this.removeProc(vo); + } + + } + + + + + @Override + public List> findListAuthorRole(XitBaseSearchVO searchVO) { + return xitAuthRegMngMapper.findListAuthorRole(searchVO); + } + + @Override + public int findListAuthorRoleTotCnt(XitBaseSearchVO searchVO) { + return xitAuthRegMngMapper.findListAuthorRoleTotCnt(searchVO); + } + + @Override + public void addAuthorRole(String authorCode, String[] trgetRoleCodes, String[] trgetRegYns) { + /** + * 필수값 확인 + */ + if(XitCmmnUtil.isEmpty(authorCode)) + throw new RuntimeException("권한코드(은)는 필수조건 입니다."); + if(XitCmmnUtil.isEmpty(trgetRoleCodes)) + throw new RuntimeException("역할코드(은)는 필수조건 입니다."); + if(XitCmmnUtil.isEmpty(trgetRegYns)) + throw new RuntimeException("등록여부(은)는 필수조건 입니다."); + + /** + * 유효성 확인 + */ + if(trgetRoleCodes.length != trgetRegYns.length) + throw new RuntimeException("권한코드와 등록여부 건수가 일치하지 않습니다."); + + + /** + * 처리 + */ + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitAuthorInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitAuthorInfoVO convertToCrudVO(XitAuthRegMngVO vo) { + XitAuthorInfoVO authorInfoVO = new XitAuthorInfoVO(); + authorInfoVO.setAuthor_code (vo.getAuthorCode()); //권한 코드 + authorInfoVO.setAuthor_nm (vo.getAuthorNm()); //권한 명 + authorInfoVO.setAuthor_dc (vo.getAuthorDc()); //권한 설명 +// authorInfoVO.setAuthor_creat_de(vo.getAuthorCreatDe()); //권한 생성 일 + + return authorInfoVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/reg/web/XitAuthRegMngController.java b/src/main/java/kr/xit/framework/biz/mng/auth/reg/web/XitAuthRegMngController.java new file mode 100644 index 00000000..8410c403 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/reg/web/XitAuthRegMngController.java @@ -0,0 +1,435 @@ +package kr.xit.framework.biz.mng.auth.reg.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngVO; +import kr.xit.framework.biz.mng.auth.reg.service.XitAuthRegMngService; +import kr.xit.framework.biz.mng.auth.reg.model.XitAuthRegMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 권한관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/auth/reg/") +public class XitAuthRegMngController { + + @Resource + private XitAuthRegMngService xitAuthRegMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + /** + *
메소드 설명: 권한관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRegMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthRegMng_list(@ModelAttribute("authorManageVO") XitAuthRegMngSearchVO searchVO, ModelMap model) { + + /** paging */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //searchVO.setAuthorManageList(xitAuthRegMngService.findList(searchVO)); + //model.addAttribute("authorList", searchVO.getAuthorManageList()); + + //int totCnt = xitAuthRegMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/reg/XitAuthRegMng_list"; + } + /** + *
메소드 설명: 권한관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 30. + */ + @RequestMapping(value = "AuthRegMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AuthRegMng_listAjax(@ModelAttribute("authorManageVO") XitAuthRegMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitAuthRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitAuthRegMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRegMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthRegMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("authorManageSearchVO") XitAuthRegMngSearchVO searchVO + , @ModelAttribute("authorManageVO") XitAuthRegMngVO vo + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("authorManage", xitAuthRegMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/reg/XitAuthRegMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRegMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthRegMng_page_popup(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("authorManageSearchVO") XitAuthRegMngSearchVO searchVO + , @ModelAttribute("authorManageVO") XitAuthRegMngVO vo + , ModelMap model) { + switch (cmd) { + case "rolegrant": //권한롤부여 + model.addAttribute("authorRoleManageVO", searchVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/reg/XitAuthRegMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + /** + *
메소드 설명: 요청 팝업 페이지의 ajax 요청을 처리 한다.
+ * @param searchVO + * @param modelMap + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value="AuthRegMng_{cmd}_popup.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AuthRegMng_page_popupAjax(@PathVariable String cmd + , @ModelAttribute XitAuthRegMngSearchVO searchVO + , @ModelAttribute XitAuthRegMngVO vo, ModelMap model) { + + Map resultMap = new HashMap(); + switch (cmd) { + case "rolegrant": //권한롤부여 + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + try { + /** + * 조회 + */ + List> authorRoleList = xitAuthRegMngService.findListAuthorRole(searchVO); + int totCnt = xitAuthRegMngService.findListAuthorRoleTotCnt(searchVO); + + + + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", authorRoleList); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + break; + } + + + + return resultMap; + } + + + + /** + *
메소드 설명: 권한관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRegMng_{cmd}_proc.do", method=RequestMethod.POST) + public void AuthRegMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("authorManage") XitAuthRegMngVO vo + ,@RequestParam(value="authorCodes", required=false, defaultValue="") String authorCodes + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ,@RequestParam(value="authorCode", required=false, defaultValue="") String authorCode + ,@RequestParam(value="roleCodes", required=false, defaultValue="") String roleCodes + ,@RequestParam(value="regYns", required=false, defaultValue="") String regYns + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("authorManage", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_input.do"; + break; + } + //처리 + try { + xitAuthRegMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("authorManage", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_edit.do"; + break; + } + //처리 + try { + xitAuthRegMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitAuthRegMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitAuthRegMngService.removesProc(authorCodes); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + + case "insertRoleGrant": //등록 권한롤부여 + //처리 + sLocationUrl = "forward:/_mng_/auth/reg/AuthRegMng_rolegrant_popup.do"; + try { + xitAuthRegMngService.addAuthorRole(authorCode, roleCodes.split(";"), regYns.split(";")); + status.setComplete(); + model.addAttribute("message", xitMessageSource.getMessage("success.common.insert")); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/rule/dao/XitAuthRuleMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/auth/rule/dao/XitAuthRuleMngMapper.java new file mode 100644 index 00000000..125ed218 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/rule/dao/XitAuthRuleMngMapper.java @@ -0,0 +1,51 @@ +package kr.xit.framework.biz.mng.auth.rule.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngVO; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngSearchVO; + +/** + * + * @업무그룹명: 롤관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitAuthRuleMngMapper { + + + /** + *
메소드 설명: 롤관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthRuleMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 롤관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthRuleMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 롤관리 상세정보 조회
+ * @param vo + * @return XitAuthRuleMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthRuleMngVO findView(XitAuthRuleMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/rule/model/XitAuthRuleMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/rule/model/XitAuthRuleMngSearchVO.java new file mode 100644 index 00000000..cadefedb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/rule/model/XitAuthRuleMngSearchVO.java @@ -0,0 +1,61 @@ +package kr.xit.framework.biz.mng.auth.rule.model; + +import java.util.List; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 롤관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthRuleMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 롤 목록 + */ + List roleManageList; + /** + * 삭제대상 목록 + */ + String[] delYn; + + /** + * roleManageList attribute 를 리턴한다. + * @return List + */ + public List getRoleManageList() { + return roleManageList; + } + /** + * roleManageList attribute 값을 설정한다. + * @param roleManageList List + */ + public void setRoleManageList(List roleManageList) { + this.roleManageList = roleManageList; + } + /** + * delYn attribute 를 리턴한다. + * @return String[] + */ + public String[] getDelYn() { + return delYn; + } + /** + * delYn attribute 값을 설정한다. + * @param delYn String[] + */ + public void setDelYn(String[] delYn) { + this.delYn = delYn; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/rule/model/XitAuthRuleMngVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/rule/model/XitAuthRuleMngVO.java new file mode 100644 index 00000000..26f5bff7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/rule/model/XitAuthRuleMngVO.java @@ -0,0 +1,184 @@ +package kr.xit.framework.biz.mng.auth.rule.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 롤관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthRuleMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 롤 관리 + */ + private XitAuthRuleMngVO roleManage; + /** + * 롤코드 + */ + private String roleCode; + /** + * 롤명 + */ + private String roleNm; + /** + * 롤패턴 + */ + private String rolePtn; + /** + * 롤 설명 + */ + private String roleDc; + /** + * 롤 타입 + */ + private String roleTyp; + /** + * 롤 Sort + */ + private String roleSort; + /** + * 롤 등록일시 + */ + private String roleCreatDe; + /** + * 권한 코드 + */ + private String authorCode; + + /** + * roleManage attribute 를 리턴한다. + * @return RoleManage + */ + public XitAuthRuleMngVO getRoleManage() { + return roleManage; + } + /** + * roleManage attribute 값을 설정한다. + * @param roleManage RoleManage + */ + public void setRoleManage(XitAuthRuleMngVO roleManage) { + this.roleManage = roleManage; + } + /** + * roleCode attribute 를 리턴한다. + * @return String + */ + public String getRoleCode() { + return roleCode; + } + /** + * roleCode attribute 값을 설정한다. + * @param roleCode String + */ + public void setRoleCode(String roleCode) { + this.roleCode = roleCode; + } + /** + * roleNm attribute 를 리턴한다. + * @return String + */ + public String getRoleNm() { + return roleNm; + } + /** + * roleNm attribute 값을 설정한다. + * @param roleNm String + */ + public void setRoleNm(String roleNm) { + this.roleNm = roleNm; + } + /** + * rolePtn attribute 를 리턴한다. + * @return String + */ + public String getRolePtn() { + return rolePtn; + } + /** + * rolePtn attribute 값을 설정한다. + * @param rolePtn String + */ + public void setRolePtn(String rolePtn) { + this.rolePtn = rolePtn; + } + /** + * roleDc attribute 를 리턴한다. + * @return String + */ + public String getRoleDc() { + return roleDc; + } + /** + * roleDc attribute 값을 설정한다. + * @param roleDc String + */ + public void setRoleDc(String roleDc) { + this.roleDc = roleDc; + } + /** + * roleTyp attribute 를 리턴한다. + * @return String + */ + public String getRoleTyp() { + return roleTyp; + } + /** + * roleTyp attribute 값을 설정한다. + * @param roleTyp String + */ + public void setRoleTyp(String roleTyp) { + this.roleTyp = roleTyp; + } + /** + * roleSort attribute 를 리턴한다. + * @return String + */ + public String getRoleSort() { + return roleSort; + } + /** + * roleSort attribute 값을 설정한다. + * @param roleSort String + */ + public void setRoleSort(String roleSort) { + this.roleSort = roleSort; + } + /** + * roleCreatDe attribute 를 리턴한다. + * @return String + */ + public String getRoleCreatDe() { + return roleCreatDe; + } + /** + * roleCreatDe attribute 값을 설정한다. + * @param roleCreatDe String + */ + public void setRoleCreatDe(String roleCreatDe) { + this.roleCreatDe = roleCreatDe; + } + /** + * authorCode attribute 를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/rule/service/XitAuthRuleMngService.java b/src/main/java/kr/xit/framework/biz/mng/auth/rule/service/XitAuthRuleMngService.java new file mode 100644 index 00000000..6890d0bb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/rule/service/XitAuthRuleMngService.java @@ -0,0 +1,80 @@ +package kr.xit.framework.biz.mng.auth.rule.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngSearchVO; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngVO; + +/** + * + * @업무그룹명: 롤관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAuthRuleMngService { + + + /** + *
메소드 설명: 롤관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthRuleMngSearchVO searchVO); + + /** + *
메소드 설명: 롤관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthRuleMngSearchVO searchVO); + + /** + *
메소드 설명: 롤관리 상세정보 조회
+ * @param vo + * @return XitAuthRuleMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthRuleMngVO findView(XitAuthRuleMngVO vo); + + /** + *
메소드 설명: 롤관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitAuthRuleMngVO vo); + + /** + *
메소드 설명: 롤관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitAuthRuleMngVO vo); + + /** + *
메소드 설명: 롤관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitAuthRuleMngVO vo); + + /** + *
메소드 설명: 롤관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/rule/service/impl/XitAuthRuleMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/auth/rule/service/impl/XitAuthRuleMngServiceImpl.java new file mode 100644 index 00000000..f27b9016 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/rule/service/impl/XitAuthRuleMngServiceImpl.java @@ -0,0 +1,153 @@ +package kr.xit.framework.biz.mng.auth.rule.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitRoleInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.auth.rule.dao.XitAuthRuleMngMapper; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngSearchVO; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngVO; +import kr.xit.framework.biz.mng.auth.rule.service.XitAuthRuleMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitAuthRuleMngServiceImpl implements XitAuthRuleMngService { + + @Resource + private XitAuthRuleMngMapper xitAuthRuleMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name="xitRoleIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitAuthRuleMngSearchVO searchVO) { + List result = null; + try { + result = xitAuthRuleMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("롤관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitAuthRuleMngSearchVO searchVO) { + int result = 0; + try { + result = xitAuthRuleMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("롤관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitAuthRuleMngVO findView(XitAuthRuleMngVO vo) { + XitAuthRuleMngVO result = null; + try { + result = xitAuthRuleMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("롤관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitAuthRuleMngVO vo) { + /** + * 필수값 설정 + */ + String roleTyp = vo.getRoleTyp(); + if("method".equals(roleTyp)) + roleTyp = "mtd"; + else if("pointcut".equals(roleTyp)) + roleTyp = "pct"; + else roleTyp = "web"; + try { + vo.setRoleCode(roleTyp.concat("-").concat(idgenService.getNextStringId())); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + XitRoleInfoVO roleInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.addXitRoleInfo(roleInfoVO); + } + + @Override + public void modifyProc(XitAuthRuleMngVO vo) { + /** + * 필수값 설정 + */ + XitRoleInfoVO roleInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitRoleInfo(roleInfoVO); + + } + + @Override + public void removeProc(XitAuthRuleMngVO vo) { + /** + * 필수값 설정 + */ + XitRoleInfoVO roleInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.removeXitRoleInfo(roleInfoVO); + } + + @Override + public void removesProc(String ids) { + /** + * 처리 + */ + String [] roleCodes = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitRoleInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitRoleInfoVO convertToCrudVO(XitAuthRuleMngVO vo) { + XitRoleInfoVO roleInfoVO = new XitRoleInfoVO(); + roleInfoVO.setRole_code (vo.getRoleCode()); //역할 코드 + roleInfoVO.setRole_nm (vo.getRoleNm()); //역할 명 + roleInfoVO.setRole_pttrn (vo.getRolePtn()); //역할 패턴 + roleInfoVO.setRole_dc (vo.getRoleDc()); //역할 설명 + roleInfoVO.setRole_ty (vo.getRoleTyp()); //역할 유형 + roleInfoVO.setRole_sort (vo.getRoleSort()); //역할 정렬 +// roleInfoVO.setRole_creat_de(vo.getRoleCreatDe()); //역할 생성 일 + + return roleInfoVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/rule/web/XitAuthRuleMngController.java b/src/main/java/kr/xit/framework/biz/mng/auth/rule/web/XitAuthRuleMngController.java new file mode 100644 index 00000000..655199ed --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/rule/web/XitAuthRuleMngController.java @@ -0,0 +1,352 @@ +package kr.xit.framework.biz.mng.auth.rule.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngSearchVO; +import kr.xit.framework.biz.mng.auth.rule.model.XitAuthRuleMngVO; +import kr.xit.framework.biz.mng.auth.rule.service.XitAuthRuleMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 롤관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/auth/rule/") +public class XitAuthRuleMngController { + + @Resource + private XitAuthRuleMngService xitAuthRuleMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + /** + *
메소드 설명: 롤관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRuleMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthRuleMng_list(@ModelAttribute("roleManageVO") XitAuthRuleMngSearchVO searchVO, ModelMap model) { + + /** paging */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //searchVO.setRoleManageList(xitAuthRuleMngService.findList(searchVO)); + //model.addAttribute("roleList", searchVO.getRoleManageList()); + + //int totCnt = xitAuthRuleMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/rule/XitAuthRuleMng_list"; + } + + /** + *
메소드 설명: 롤 관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "AuthRuleMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AuthRuleMng_listAjax(@ModelAttribute("roleManageVO") XitAuthRuleMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitAuthRuleMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitAuthRuleMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRuleMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthRuleMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("roleManageVO") XitAuthRuleMngVO vo + , @ModelAttribute("roleManageSearchVO") XitAuthRuleMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("cmmCodeDetailList" , xitFrameCodeService.findCmmnDetailCodes("XIT029")); //롤유형코드 목록 + break; + + case "edit": //수정 페이지 + case "view": //상세 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("cmmCodeDetailList" , xitFrameCodeService.findCmmnDetailCodes("XIT029")); //롤유형코드 목록 + + model.addAttribute("roleManage", xitAuthRuleMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/rule/XitAuthRuleMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRuleMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthRuleMng_page_popup(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("roleManageVO") XitAuthRuleMngVO vo + , @ModelAttribute("roleManageSearchVO") XitAuthRuleMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/rule/XitAuthRuleMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 롤관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthRuleMng_{cmd}_proc.do", method=RequestMethod.POST) + public void AuthRuleMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("roleManageVO") XitAuthRuleMngVO vo + ,@ModelAttribute("roleManageSearchVO") XitAuthRuleMngSearchVO searchVO + ,@RequestParam(value="roleCodes", required=false, defaultValue="") String roleCodes + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_input.do"; + break; + } + //처리 + try { + xitAuthRuleMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + model.addAttribute("roleCode", vo.getRoleCode()); + sLocationUrl = "redirect:/_mng_/auth/rule/AuthRuleMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_edit.do"; + break; + } + //처리 + try { + xitAuthRuleMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitAuthRuleMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/auth/rule/AuthRuleMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitAuthRuleMngService.removesProc(roleCodes); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/usr/dao/XitAuthUsrMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/auth/usr/dao/XitAuthUsrMngMapper.java new file mode 100644 index 00000000..93ecb7a4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/usr/dao/XitAuthUsrMngMapper.java @@ -0,0 +1,72 @@ +package kr.xit.framework.biz.mng.auth.usr.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngSearchVO; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngVO; +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자별권한관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitAuthUsrMngMapper { + + + /** + *
메소드 설명: 사용자별권한관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthUsrMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자별권한관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthUsrMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자별권한관리 상세정보 조회
+ * @param vo + * @return XitAuthUsrMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthUsrMngVO findView(XitAuthUsrMngVO vo) throws SQLException; + + + + /** + *
메소드 설명: 그룹 목록 조회
+ * @param searchVO + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List> findListGroup(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 그룹 목록 조회 총 건수
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListGroupTotCnt(XitBaseSearchVO searchVO); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/usr/model/XitAuthUsrMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/usr/model/XitAuthUsrMngSearchVO.java new file mode 100644 index 00000000..f6ea8bb6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/usr/model/XitAuthUsrMngSearchVO.java @@ -0,0 +1,41 @@ +package kr.xit.framework.biz.mng.auth.usr.model; + +import java.util.List; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자별권한관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthUsrMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + List authorGroupList; + + /** + * authorGroupList attribute 를 리턴한다. + * @return List + */ + public List getAuthorGroupList() { + return authorGroupList; + } + /** + * authorGroupList attribute 값을 설정한다. + * @param authorGroupList List + */ + public void setAuthorGroupList(List authorGroupList) { + this.authorGroupList = authorGroupList; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/usr/model/XitAuthUsrMngVO.java b/src/main/java/kr/xit/framework/biz/mng/auth/usr/model/XitAuthUsrMngVO.java new file mode 100644 index 00000000..3f2e6e4f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/usr/model/XitAuthUsrMngVO.java @@ -0,0 +1,185 @@ +package kr.xit.framework.biz.mng.auth.usr.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자별권한관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAuthUsrMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 권한그룹관리 + */ + private XitAuthUsrMngVO authorGroup; + /** + * 설정대상 사용자 ID + */ + private String userId; + /** + * 설정대상 사용자 명 + */ + private String userNm; + /** + * 설정대상 그룹 ID + */ + private String groupId; + /** + * 설정대상 사용자 유형 코드 + */ + private String mberTyCode; + /** + * 설정대상 사용자 유형 명 + */ + private String mberTyNm; + /** + * 권한코드 + */ + private String authorCode; + /** + * 등록 여부 + */ + private String regYn; + /** + * Uniq ID + */ + private String uniqId; + + /** + * authorGroup attribute 를 리턴한다. + * @return AuthorGroup + */ + public XitAuthUsrMngVO getAuthorGroup() { + return authorGroup; + } + /** + * authorGroup attribute 값을 설정한다. + * @param authorGroup AuthorGroup + */ + public void setAuthorGroup(XitAuthUsrMngVO authorGroup) { + this.authorGroup = authorGroup; + } + /** + * userId attribute 를 리턴한다. + * @return String + */ + public String getUserId() { + return userId; + } + /** + * userId attribute 값을 설정한다. + * @param userId String + */ + public void setUserId(String userId) { + this.userId = userId; + } + /** + * userNm attribute 를 리턴한다. + * @return String + */ + public String getUserNm() { + return userNm; + } + /** + * userNm attribute 값을 설정한다. + * @param userNm String + */ + public void setUserNm(String userNm) { + this.userNm = userNm; + } + /** + * groupId attribute 를 리턴한다. + * @return String + */ + public String getGroupId() { + return groupId; + } + /** + * groupId attribute 값을 설정한다. + * @param groupId String + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * mberTyCode attribute 를 리턴한다. + * @return String + */ + public String getMberTyCode() { + return mberTyCode; + } + /** + * mberTyCode attribute 값을 설정한다. + * @param mberTyCode String + */ + public void setMberTyCode(String mberTyCode) { + this.mberTyCode = mberTyCode; + } + /** + * mberTyNm attribute 를 리턴한다. + * @return String + */ + public String getMberTyNm() { + return mberTyNm; + } + /** + * mberTyNm attribute 값을 설정한다. + * @param mberTyNm String + */ + public void setMberTyNm(String mberTyNm) { + this.mberTyNm = mberTyNm; + } + /** + * authorCode attribute 를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + /** + * regYn attribute 를 리턴한다. + * @return String + */ + public String getRegYn() { + return regYn; + } + /** + * regYn attribute 값을 설정한다. + * @param regYn String + */ + public void setRegYn(String regYn) { + this.regYn = regYn; + } + /** + * uniqId attribute 를 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/usr/service/XitAuthUsrMngService.java b/src/main/java/kr/xit/framework/biz/mng/auth/usr/service/XitAuthUsrMngService.java new file mode 100644 index 00000000..9c47aa74 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/usr/service/XitAuthUsrMngService.java @@ -0,0 +1,102 @@ +package kr.xit.framework.biz.mng.auth.usr.service; + +import java.util.List; +import java.util.Map; + +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngSearchVO; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngVO; +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자별권한관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitAuthUsrMngService { + + + /** + *
메소드 설명: 사용자별권한관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitAuthUsrMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자별권한관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitAuthUsrMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자별권한관리 상세정보 조회
+ * @param vo + * @return XitAuthUsrMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitAuthUsrMngVO findView(XitAuthUsrMngVO vo); + + /** + *
메소드 설명: 사용자별권한관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitAuthUsrMngVO vo); + + /** + *
메소드 설명: 사용자별권한관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitAuthUsrMngVO vo); + + /** + *
메소드 설명: 사용자별권한관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitAuthUsrMngVO vo); + + /** + *
메소드 설명: 사용자별권한관리 다건 삭제
+ * @param ids + * @param groupIds void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String groupIds); + + + + /** + *
메소드 설명: 그룹 목록 조회
+ * @param searchVO + * @return List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List> findListGroup(XitBaseSearchVO searchVO); + /** + *
메소드 설명: 그룹 목록 조회 총 건수
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListGroupTotCnt(XitBaseSearchVO searchVO); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/usr/service/impl/XitAuthUsrMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/auth/usr/service/impl/XitAuthUsrMngServiceImpl.java new file mode 100644 index 00000000..7b9313d6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/usr/service/impl/XitAuthUsrMngServiceImpl.java @@ -0,0 +1,180 @@ +package kr.xit.framework.biz.mng.auth.usr.service.impl; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.mng.auth.usr.service.XitAuthUsrMngService; +import kr.xit.framework.biz.mng.auth.usr.dao.XitAuthUsrMngMapper; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngSearchVO; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngVO; +import kr.xit.framework.core.model.XitBaseSearchVO; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitAuthUsrMngServiceImpl implements XitAuthUsrMngService { + + @Resource + private XitAuthUsrMngMapper xitAuthUsrMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + + @Override + public List findList(XitAuthUsrMngSearchVO searchVO) { + List result = null; + try { + result = xitAuthUsrMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자별권한관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitAuthUsrMngSearchVO searchVO) { + int result = 0; + try { + result = xitAuthUsrMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자별권한관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitAuthUsrMngVO findView(XitAuthUsrMngVO vo) { + XitAuthUsrMngVO result = null; + try { + result = xitAuthUsrMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("사용자별권한관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitAuthUsrMngVO vo) { + /** + * 유효성 확인 + */ + boolean isChangePermission = xitFrameUnitService.isCheckUserForCanChange(XitCmmnUtil.getUserInfo().getUniqId(), vo.getAuthorCode()); + if(!isChangePermission) + throw new RuntimeException("자신의 권한보다 상위 권한을 설정 할 수 없습니다."); + + /** + * 필수값 설정 + */ + XitUserScrtySetupVO userScrtySetupVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + } + + @Override + public void modifyProc(XitAuthUsrMngVO vo) { + /** + * 유효성 확인 + */ + boolean isChangePermission = xitFrameUnitService.isCheckUserForCanChange(XitCmmnUtil.getUserInfo().getUniqId(), vo.getAuthorCode()); + if(!isChangePermission) + throw new RuntimeException("자신의 권한보다 상위 권한을 설정 할 수 없습니다."); + + /** + * 필수값 설정 + */ + XitUserScrtySetupVO userScrtySetupVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitUserScrtySetup(userScrtySetupVO); + } + + @Override + public void removeProc(XitAuthUsrMngVO vo) { + /** + * 필수값 설정 + */ + XitUserScrtySetupVO userScrtySetupVO = convertToCrudVO(vo); + userScrtySetupVO.setMber_ty_code(null); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(vo.getGroupId()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + /** + * 처리 + */ + /* ============================ + * 2020.10.30. 박민규 + * 권한취소(삭제) 처리 서비스 처리 방식 + * -사유: 삭제 시 사용자의 권한을 소속 그룹의 권한 또는 Defualt 권한으로 설정 + * -작업내용: + * as-is: delete로 사용자보안설정 데이터 영구 삭제 + * to-be: update로 사용자 권한코드 변경 + ============================ */ +// xitFrameCrudService.removeXitUserScrtySetup(userScrtySetupVO); + xitFrameCrudService.modifyXitUserScrtySetup(userScrtySetupVO); + } + + @Override + public void removesProc(String ids, String groupIds) { + /** + * 처리 + */ + String [] userIds = ids.split(";"); + String [] grpIds = groupIds.split(";"); + for(int i=0; i> findListGroup(XitBaseSearchVO searchVO) { + + return xitAuthUsrMngMapper.findListGroup(searchVO); + } + + @Override + public int findListGroupTotCnt(XitBaseSearchVO searchVO) { + + return xitAuthUsrMngMapper.findListGroupTotCnt(searchVO); + } + + + + /** + *
+	 * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다.
+	 * 
+ * + * @return XitUserScrtySetupVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitUserScrtySetupVO convertToCrudVO(XitAuthUsrMngVO vo) { + XitUserScrtySetupVO crudVO = new XitUserScrtySetupVO(); + crudVO.setScrty_setup_trget_id(vo.getUniqId()); //보안 설정 대상 id + crudVO.setMber_ty_code (vo.getMberTyCode()); //회원 유형 코드 + crudVO.setAuthor_code (vo.getAuthorCode()); //권한 코드 + + return crudVO; + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/auth/usr/web/XitAuthUsrMngController.java b/src/main/java/kr/xit/framework/biz/mng/auth/usr/web/XitAuthUsrMngController.java new file mode 100644 index 00000000..2981e7e4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/auth/usr/web/XitAuthUsrMngController.java @@ -0,0 +1,330 @@ +package kr.xit.framework.biz.mng.auth.usr.web; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.model.XitAuthorInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngSearchVO; +import kr.xit.framework.biz.mng.auth.usr.model.XitAuthUsrMngVO; +import kr.xit.framework.biz.mng.auth.usr.service.XitAuthUsrMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 사용자별권한관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/auth/usr/") +public class XitAuthUsrMngController { + + @Resource + private XitAuthUsrMngService xitAuthUsrMngService; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 사용자별권한관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthUsrMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthUsrMng_list(@ModelAttribute("authorGroupVO") XitAuthUsrMngSearchVO searchVO, ModelMap model) { + model.addAttribute("authorManageList", xitFrameCrudService.findXitAuthorInfos(new XitAuthorInfoVO())); + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/usr/XitAuthUsrMng_list"; + } + + /** + *
메소드 설명: 사용자별 권한관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8.04. + */ + @RequestMapping(value = "AuthUsrMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map AuthUsrMng_listAjax(@ModelAttribute("authorGroupVO") XitAuthUsrMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitAuthUsrMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitAuthUsrMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthUsrMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthUsrMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("authorGroupVO") XitAuthUsrMngVO vo + , @ModelAttribute("authorGroupSearchVO") XitAuthUsrMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": + break; +// case "input": //등록 페이지 +// case "edit": //수정 페이지 +// case "view": //상세 페이지 +// break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/usr/XitAuthUsrMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthUsrMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String AuthUsrMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitAuthUsrMngSearchVO searchVO + , @ModelAttribute XitAuthUsrMngVO vo, ModelMap model) { + switch (cmd) { + case "groupsearch": //그룹조회 팝업 + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + List> list = new ArrayList>(); + int totCnt = 0; + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + list = xitAuthUsrMngService.findListGroup(searchVO); + + totCnt = xitAuthUsrMngService.findListGroupTotCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("groupList", list); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/auth/usr/XitAuthUsrMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + + /** + *
메소드 설명: 사용자별권한관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "AuthUsrMng_{cmd}_proc.do", method=RequestMethod.POST) + public void AuthUsrMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("authorGroupVO") XitAuthUsrMngVO vo + ,@ModelAttribute("authorGroupSearchVO") XitAuthUsrMngSearchVO searchVO + ,@RequestParam(value="userIds", required=false, defaultValue="") String userIds + ,@RequestParam(value="authorCodes", required=false, defaultValue="") String authorCodes + ,@RequestParam(value="regYns", required=false, defaultValue="") String regYns + ,@RequestParam(value="mberTyCodes", required=false, defaultValue="") String mberTyCodes + ,@RequestParam(value="groupIds", required=false, defaultValue="") String groupIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/auth/usr/AuthUsrMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); +// sLocationUrl = "forward:/_mng_/auth/usr/AuthUsrMng_input.do"; + break; + } + //처리 + try { + String [] strUserIds = userIds.split(";"); + String [] strAuthorCodes = authorCodes.split(";"); + String [] strRegYns = regYns.split(";"); + String [] strMberTyCode = mberTyCodes.split(";"); + + for(int i=0; i resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchJobListener.java b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchJobListener.java new file mode 100644 index 00000000..ed1fef87 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchJobListener.java @@ -0,0 +1,230 @@ +package kr.xit.framework.biz.mng.batch.cmmn.service; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.quartz.JobListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; +import kr.xit.framework.biz.mng.batch.schedule.service.XitBatchScheduleMngService; + +/** + * 배치작업의 실행시작, 완료를 저장하는 Quartz JobListener 클래스를 정의한다. + * + * @author 김진만 + * @see + *
+ * == 개정이력(Modification Information) ==
+ *
+ *   수정일       수정자           수정내용
+ *  -------     --------    ---------------------------
+ *  2010-08-30   김진만     최초 생성
+ *  2017-02-06   이정은     시큐어코딩(ES) - 시큐어코딩  부적절한 예외 처리[CWE-253, CWE-440, CWE-756]
+ * 
+ */ + +public class BatchJobListener implements JobListener { + + /** egovBatchSchdulService */ + private XitBatchScheduleMngService xitBatchScheduleMngService; + + /** ID Generation */ + private EgovIdGnrService idgenService; + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(BatchJobListener.class); + + /** + * 배치스케줄 서비스를 설정한다. + * + * @param egovBatchSchdulService the egovBatchSchdulService to set + */ + public void setXitBatchScheduleMngService(XitBatchScheduleMngService egovBatchSchdulService) { + this.xitBatchScheduleMngService = egovBatchSchdulService; + } + + /** + * 배치결과ID 생성서비스 + * @param idgenService the idgenService to set + */ + public void setIdgenService(EgovIdGnrService idgenService) { + this.idgenService = idgenService; + } + + /** + * Job Listener 이름을 리턴한다. + * @see org.quartz.JobListener#getName() + */ + @Override + public String getName() { + return this.getClass().getName(); + } + + /** + * Batch 작업을 실행하기전에 Batch결과 '수행중'상태로 저장한다. + * + * @param jobContext JobExecutionContext + * @see org.quartz.JobListener#jobToBeExecuted(JobExecutionContext jobContext) + */ + @Override + public void jobToBeExecuted(JobExecutionContext jobContext) { + LOGGER.debug("job[{}] jobToBeExecuted ", jobContext.getJobDetail().getKey().getName()); + XitBatchResultMngVO batchResult = new XitBatchResultMngVO(); + JobDataMap dataMap = jobContext.getJobDetail().getJobDataMap(); + try { + // 결과 값 세팅. + batchResult.setBatchResultId(idgenService.getNextStringId()); + batchResult.setBatchSchdulId(dataMap.getString("batchSchdulId")); + batchResult.setBatchOpertId(dataMap.getString("batchOpertId")); + batchResult.setParamtr(dataMap.getString("paramtr")); + batchResult.setSttus("03"); // 상태는 수행중 + batchResult.setErrorInfo(""); + + String executBeginTimeStr = null; + Date executBeginTime = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()); + executBeginTimeStr = formatter.format(executBeginTime); + batchResult.setExecutBeginTime(executBeginTimeStr); + + batchResult.setLastUpdusrId("SYSTEM"); + batchResult.setFrstRegisterId("SYSTEM"); + + xitBatchScheduleMngService.addBatchResult(batchResult); + + // 저장이 이상없이 완료되면 datamap에 배치결과ID를 저장한다. + dataMap.put("batchResultId", batchResult.getBatchResultId()); + //2017.02.06 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + } catch (FdlException e) { + LOGGER.error("[FdlException] 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(insert) 에러 : {}", batchResult.getBatchSchdulId(), batchResult.getBatchOpertId(), e.getMessage()); + } catch (Exception e) { + LOGGER.error("(Ko) 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(insert) 에러 : {}", batchResult.getBatchSchdulId(), batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.error("(En) [" + e.getClass() + "] BatchScheduleID : {}, BatchJobID : {}, BatchResult(insert) Error : {}", batchResult.getBatchSchdulId(), batchResult.getBatchOpertId(), e.getMessage()); + } + + } + + /** + * Batch 작업을 완료한후 Batch결과 '완료'상태로 저장한다. + * + * @param jobContext JobExecutionContext + * @see org.quartz.JobListener#jobWasExecuted(JobExecutionContext jobContext) + */ + @Override + public void jobWasExecuted(JobExecutionContext jobContext, JobExecutionException jee) { + LOGGER.debug("job[{}] jobWasExecuted", jobContext.getJobDetail().getKey().getName()); + LOGGER.debug("job[{}] 수행시간 : {}, {}", jobContext.getJobDetail().getKey().getName(), jobContext.getFireTime(), jobContext.getJobRunTime()); + + int jobResult = 99; + XitBatchResultMngVO batchResult = new XitBatchResultMngVO(); + JobDataMap dataMap = jobContext.getJobDetail().getJobDataMap(); + try { + // 결과 값 세팅. + batchResult.setBatchResultId(dataMap.getString("batchResultId")); + batchResult.setBatchSchdulId(dataMap.getString("batchSchdulId")); + batchResult.setBatchOpertId(dataMap.getString("batchOpertId")); + batchResult.setParamtr(dataMap.getString("paramtr")); + if (jobContext.getResult() != null) { + jobResult = (Integer) jobContext.getResult(); + } + if (jobResult == 0) { + // 배치작업 성공. + batchResult.setSttus("01"); + batchResult.setErrorInfo(""); + } else { + // 배치작업이 0이 아닌값을 리턴하면 에러 상황임. + batchResult.setSttus("02"); + batchResult.setErrorInfo("배치작업이 결과값 [" + jobResult + "]를 리턴했습니다. \n" + "배치프로그램 [" + dataMap.getString("batchProgrm") + "]의 로그를 확인하세요"); + } + // 수행중 exception이 발생한 경우 + if (jee != null) { + LOGGER.error("JobExecutionException 발생 : {}", jee); + batchResult.setSttus("02"); + String errorInfo = batchResult.getErrorInfo(); + batchResult.setErrorInfo(errorInfo + "\n" + "JobExecutionException 발생 : " + jee); + } + + String executEndTimeStr = null; + Date executEndTime = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()); + executEndTimeStr = formatter.format(executEndTime); + batchResult.setExecutEndTime(executEndTimeStr); + + batchResult.setLastUpdusrId("SYSTEM"); + + xitBatchScheduleMngService.modifyBatchResult(batchResult); + + // 저장이 이상없이 완료되면 datamap에 배치결과ID를 저장한다. + dataMap.put("batchResultId", batchResult.getBatchResultId()); + } catch (ClassCastException e) {//KISA 보안약점 조치 (2018-10-29, 윤창원) + LOGGER.error("[ClassCastException] 배치결과ID : {}, 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.error("[ClassCastException] ["+ e.getClass() + "] BatchResultID : {}, BatchScheduleID : {}, BatchJobID : {}, BatchResult(update) Error : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + } catch (Exception e) { + //2017.02.06 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + LOGGER.error("(Ko) 배치결과ID : {}, 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.error("(En) ["+ e.getClass() + "] BatchResultID : {}, BatchScheduleID : {}, BatchJobID : {}, BatchResult(update) Error : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + } + } + + /** + * Batch 작업을 실행한 후에 Batch결과 '에러'상태로 저장한다. + * + * @param jobContext JobExecutionContext + * + * @see org.quartz.JobListener#jobExecutionVetoed(JobExecutionContext jobContext) + */ + @Override + public void jobExecutionVetoed(JobExecutionContext jobContext) { + LOGGER.debug("job[{}] jobExecutionVetoed", jobContext.getJobDetail().getKey().getName()); + + XitBatchResultMngVO batchResult = new XitBatchResultMngVO(); + JobDataMap dataMap = jobContext.getJobDetail().getJobDataMap(); + try { + // 결과 값 세팅. + batchResult.setBatchResultId(dataMap.getString("batchResultId")); + batchResult.setBatchSchdulId(dataMap.getString("batchSchdulId")); + batchResult.setBatchOpertId(dataMap.getString("batchOpertId")); + batchResult.setParamtr(dataMap.getString("paramtr")); + // 스케줄러가 배치작업을 실행하지 않음. + batchResult.setSttus("02"); + batchResult.setErrorInfo("스케줄러가 배치작업을 실행하지 않았습니다(jobExecutionVetoed 이벤트). 스케줄러 로그를 확인하세요"); + + String executEndTimeStr = null; + Date executEndTime = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()); + executEndTimeStr = formatter.format(executEndTime); + batchResult.setExecutEndTime(executEndTimeStr); + + batchResult.setLastUpdusrId("SYSTEM"); + + xitBatchScheduleMngService.modifyBatchResult(batchResult); + + // 저장이 이상없이 완료되면 datamap에 배치결과ID를 저장한다. + dataMap.put("batchResultId", batchResult.getBatchResultId()); + } catch (ClassCastException e) {//KISA 보안약점 조치 (2018-10-29, 윤창원) + LOGGER.error("[ClassCastException] 배치결과ID : {}, 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.error("[ClassCastException] ["+ e.getClass() + "] BatchResultID : {}, BatchScheduleID : {}, BatchJobID : {}, BatchResult(update) Error : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + } catch (Exception e) { + //2017.02.06 이정은 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] + LOGGER.error("(Ko) 배치결과ID : {}, 배치스케줄ID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + LOGGER.error("(En) ["+ e.getClass() +"] BachResultID : {}, BatchScheduleID : {}, 배치작업ID : {}, 배치결과저장(update) 에러 : {}", batchResult.getBatchResultId(), batchResult.getBatchSchdulId(), + batchResult.getBatchOpertId(), e.getMessage()); + } + + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchMethodExecuteJob.java b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchMethodExecuteJob.java new file mode 100644 index 00000000..8bd6eac4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchMethodExecuteJob.java @@ -0,0 +1,110 @@ +package kr.xit.framework.biz.mng.batch.cmmn.service; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 배치서비스메소드를 실행하는 Quartz Job 클래스를 정의한다. + * + * @author 박민규 + * @see + *
+ * == 개정이력(Modification Information) ==
+ *
+ *   수정일       수정자           수정내용
+ *  -------     --------    ---------------------------
+ *  2021.10.07   박민규     최초 생성
+ * 
+ */ + +public class BatchMethodExecuteJob implements Job { + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(BatchMethodExecuteJob.class); + + /** + * (non-Javadoc) + * @see org.quartz.Job#execute(org.quartz.JobExecutionContext) + */ + public void execute(JobExecutionContext jobContext) throws JobExecutionException { + + JobDataMap dataMap = jobContext.getJobDetail().getJobDataMap(); + + LOGGER.debug("job[{}] Trigger이름 : ", jobContext.getJobDetail().getKey().getName(), jobContext.getTrigger().getKey().getName()); + LOGGER.debug("job[{}] BatchOpert이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("batchOpertId")); + LOGGER.debug("job[{}] BatchProgram이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("batchProgrm")); + LOGGER.debug("job[{}] Parameter이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("paramtr")); + + int result = executeProgram(dataMap.getString("batchProgrm"), dataMap.getString("paramtr")); + + // jobContext에 결과값을 저장한다. + jobContext.setResult(result); + } + + /** + * 시스템에서 특정 배치서비스메소드를 실행한다. + * @param batchProgrm 배치서비스메소드 경로(ex. [패키지].[클래스].[메소드] ) + * @param paramtr 배치실행화일에 전달될 파라미터 + * @return 배치실행화일리턴값(integer) + * @exception Exception + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + private int executeProgram(String batchProgrm, String paramtr) { + + int result = 0; + + String clzName = null; + String mthName = null; + try { + String cmdStr = batchProgrm + " " + paramtr; + + int lastIdx = batchProgrm.lastIndexOf("."); + clzName = batchProgrm.substring(0, lastIdx); + mthName = batchProgrm.substring(lastIdx+1); + + Class cls = Class.forName(clzName); + Object obj = cls.newInstance(); + Method method = null; + if(paramtr == null || "".equals(paramtr)) { + method = cls.getDeclaredMethod(mthName, null); + method.invoke(obj); + } else { + method = cls.getDeclaredMethod(mthName, String.class); + method.invoke(obj, paramtr); + } + + LOGGER.debug("배치서비스메소드 - {} 실행완료, 결과값: {}", cmdStr, result); + + } catch (ClassNotFoundException e) { + result = 1; + LOGGER.error("배치서비스클래스 notfound 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (InstantiationException | IllegalAccessException e) { + result = 1; + LOGGER.error("배치서비스클래스 인스턴스 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (NoSuchMethodException e) { + result = 1; + LOGGER.error("배치서비스메소드 notfound 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (IllegalArgumentException e) { + result = 1; + LOGGER.error("배치서비스메소드 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (InvocationTargetException e) { + result = 1; + LOGGER.error("배치서비스메소드 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } + + return result; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchScheduler.java b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchScheduler.java new file mode 100644 index 00000000..1b008d18 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchScheduler.java @@ -0,0 +1,277 @@ +package kr.xit.framework.biz.mng.batch.cmmn.service; + +import static org.quartz.CronScheduleBuilder.cronSchedule; +import static org.quartz.JobBuilder.newJob; +import static org.quartz.TriggerBuilder.newTrigger; + +import java.util.List; + +import org.quartz.CronTrigger; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.SchedulerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.mng.batch.cmmn.validator.BatchOpertSe; +import kr.xit.framework.biz.mng.batch.reg.service.XitBatchRegMngService; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngSearchVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngVO; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngVO; +import kr.xit.framework.biz.mng.batch.schedule.service.XitBatchScheduleMngService; + +/** + * Quartz Scheduler를 실행하는 스케줄러 클래스를 정의한다. + * + * @author 김진만 + * @see + *
+ * == 개정이력(Modification Information) ==
+ *
+ *   수정일       수정자           수정내용
+ *  -------     --------    ---------------------------
+ *  2010.08.30   김진만     최초 생성
+ * 
+ */ + +public class BatchScheduler { + + private XitBatchScheduleMngService xitBatchScheduleMngService; + private XitBatchRegMngService xitBatchRegMngService; + + /** ID Generation */ + private EgovIdGnrService idgenService; + + /** Quartz 스케줄러 */ + private Scheduler sched; + + private static final Logger LOGGER = LoggerFactory.getLogger(BatchScheduler.class); + + // 실행 대상을 읽기위한 페이지 크기 + private static final int RECORD_COUNT_PER_PAGE = 10000; + + /** + * 배치스케줄러에 batchSchdul 파라미터를 이용하여 Job , Trigger를 Add 한다. + * + * @param batchSchdul 배치스케줄러에 등록할 스케줄정보 + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + public void insertBatchSchdul(XitBatchScheduleMngVO batchSchdul) throws Exception { + // Job 만들기 +// JobDetail jobDetail = newJob(BatchShellScriptJob.class).withIdentity(batchSchdul.getBatchSchdulId()).build(); + JobDetail jobDetail = newJob(getJobClass(batchSchdul.getBatchOpertId())).withIdentity(batchSchdul.getBatchSchdulId()).build(); + + // Trigger 만들기 + CronTrigger trigger = newTrigger().withIdentity(batchSchdul.getBatchSchdulId()).withSchedule(cronSchedule(batchSchdul.toCronExpression())).forJob(jobDetail.getKey().getName()).build(); + + LOGGER.debug("배치스케줄을 등록합니다. 배치스케줄ID : {}", batchSchdul.getBatchSchdulId()); + LOGGER.debug("{} - cronexpression : {}", batchSchdul.getBatchSchdulId(), trigger.getCronExpression()); + BatchJobListener listener = new BatchJobListener(); + + listener.setXitBatchScheduleMngService(xitBatchScheduleMngService); + listener.setIdgenService(idgenService); + + sched.getListenerManager().addJobListener(listener); + + // 데이터 전달 + jobDetail.getJobDataMap().put("batchOpertId", batchSchdul.getBatchOpertId()); + jobDetail.getJobDataMap().put("batchSchdulId", batchSchdul.getBatchSchdulId()); + jobDetail.getJobDataMap().put("batchProgrm", batchSchdul.getBatchProgrm()); + jobDetail.getJobDataMap().put("paramtr", batchSchdul.getParamtr()); + + try { + // 스케줄러에 추가하기 + sched.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + // SchedulerException 이 발생하면 로그를 출력하고 다음 배치작업으로 넘어간다. + // 트리거의 실행시각이 현재 시각보다 이전이면 SchedulerException이 발생한다. + LOGGER.error("스케줄러에 배치작업추가할때 에러가 발생했습니다. 배치스케줄ID : {}, 배치작업ID : {}", batchSchdul.getBatchSchdulId(), batchSchdul.getBatchOpertId()); + LOGGER.error("에러내용 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } + } + + /** + * 배치스케줄러에 batchSchdul 파라미터를 이용하여 Job , Trigger를 갱신 한다. + * + * @param batchSchdul 배치스케줄러에 갱신할 스케줄정보 + * @exception Exception Exception + */ + @SuppressWarnings("unchecked") + public void updateBatchSchdul(XitBatchScheduleMngVO batchSchdul) throws Exception { + // Job 만들기 +// JobDetail jobDetail = newJob(BatchShellScriptJob.class) + JobDetail jobDetail = newJob(getJobClass(batchSchdul.getBatchOpertId())) + .withIdentity(batchSchdul.getBatchSchdulId()) + .build(); + // Trigger 만들기 + CronTrigger trigger = newTrigger() + .withIdentity(batchSchdul.getBatchSchdulId()) + .withSchedule(cronSchedule(batchSchdul.toCronExpression())) + .forJob(jobDetail.getKey().getName()) + .build(); + + LOGGER.debug("배치스케줄을 갱신합니다. 배치스케줄ID : {}", batchSchdul.getBatchSchdulId()); + LOGGER.debug("{} - cronexpression : {}", batchSchdul.getBatchSchdulId(), trigger.getCronExpression()); + + BatchJobListener listener = new BatchJobListener(); + + listener.setXitBatchScheduleMngService(xitBatchScheduleMngService); + listener.setIdgenService(idgenService); + + sched.getListenerManager().addJobListener(listener); + + // 데이터 전달 + jobDetail.getJobDataMap().put("batchOpertId", batchSchdul.getBatchOpertId()); + jobDetail.getJobDataMap().put("batchSchdulId", batchSchdul.getBatchSchdulId()); + jobDetail.getJobDataMap().put("batchProgrm", batchSchdul.getBatchProgrm()); + jobDetail.getJobDataMap().put("paramtr", batchSchdul.getParamtr()); + + try { + // 스케줄러에서 기존Job, Trigger 삭제하기 + sched.deleteJob(JobKey.jobKey(batchSchdul.getBatchSchdulId())); + // 스케줄러에 추가하기 + sched.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + // SchedulerException 이 발생하면 로그를 출력하고 다음 배치작업으로 넘어간다. + // 트리거의 실행시각이 현재 시각보다 이전이면 SchedulerException이 발생한다. + LOGGER.error("스케줄러에 배치작업갱신할때 에러가 발생했습니다. 배치스케줄ID : {}, 배치작업ID : {}", batchSchdul.getBatchSchdulId(), batchSchdul.getBatchOpertId()); + LOGGER.error("에러내용 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } + } + + /** + * 배치스케줄러에 batchSchdul 파라미터를 이용하여 Job , Trigger를 삭제한다. + * + * @param batchSchdul 배치스케줄러에 삭제할 스케줄정보 + * @exception Exception Exception + */ + public void deleteBatchSchdul(XitBatchScheduleMngVO batchSchdul) throws Exception { + + try { + // 스케줄러에서 기존Job, Trigger 삭제하기 + LOGGER.debug("배치스케줄을 삭제합니다. 배치스케줄ID : {}", batchSchdul.getBatchSchdulId()); + sched.deleteJob(JobKey.jobKey(batchSchdul.getBatchSchdulId())); + } catch (SchedulerException e) { + // SchedulerException 이 발생하면 로그를 출력하고 다음 배치작업으로 넘어간다. + // 트리거의 실행시각이 현재 시각보다 이전이면 SchedulerException이 발생한다. + LOGGER.error("스케줄러에 배치작업을 삭제할때 에러가 발생했습니다. 배치스케줄ID : {}, 배치작업ID : ", batchSchdul.getBatchSchdulId(), batchSchdul.getBatchOpertId()); + LOGGER.error("에러내용 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } + } + + /** + * 클래스 초기화메소드. + * 배치스케줄테이블을 읽어서 Quartz 스케줄러를 초기화한다. + * + */ + @SuppressWarnings("unchecked") + public void init() throws Exception { + // 모니터링 대상 정보 읽어들이기~~~ + List targetList = null; + XitBatchScheduleMngSearchVO searchVO = new XitBatchScheduleMngSearchVO(); + // 모니터링 대상 검색 조건 초기화 + searchVO.setPageIndex(1); + searchVO.setFirstIndex(0); + searchVO.setRecordCountPerPage(RECORD_COUNT_PER_PAGE); + targetList = (List) xitBatchScheduleMngService.findList(searchVO); + LOGGER.debug("조회조건 {}", searchVO); + LOGGER.debug("Result 건수 : {}", targetList.size()); + + // 스케줄러 생성하기 + SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); + sched = schedFact.getScheduler(); + + // Set up the listener + BatchJobListener listener = new BatchJobListener(); + + listener.setXitBatchScheduleMngService(xitBatchScheduleMngService); + listener.setIdgenService(idgenService); + + //sched.addGlobalJobListener(listener); + sched.getListenerManager().addJobListener(listener); + + // 스케줄러에 Job, Trigger 등록하기 + XitBatchScheduleMngVO target = null; + for (int i = 0; i < targetList.size(); i++) { + target = targetList.get(i); + LOGGER.debug("Data : {}", target); + + insertBatchSchdul(target); + } + + sched.start(); + } + + /** + * 클래스 destroy메소드. + * Quartz 스케줄러를 shutdown한다. + * + */ + public void destroy() throws Exception { + sched.shutdown(); + } + + /** + * 배치스케줄 서비스 리턴 + * @return the egovBatchSchdulService + */ + public XitBatchScheduleMngService getXitBatchScheduleMngService() { + return xitBatchScheduleMngService; + } + + /** + * 배치스케줄 서비스 저장. + * @param egovBatchSchdulService the egovBatchSchdulService to set + */ + public void setXitBatchScheduleMngService(XitBatchScheduleMngService egovBatchSchdulService) { + this.xitBatchScheduleMngService = egovBatchSchdulService; + } + + public XitBatchRegMngService getXitBatchRegMngService() { + return xitBatchRegMngService; + } + + public void setXitBatchRegMngService(XitBatchRegMngService xitBatchRegMngService) { + this.xitBatchRegMngService = xitBatchRegMngService; + } + + /** + * 배치결과ID 생성서비스 리턴 + * @return the idgenService + */ + public EgovIdGnrService getIdgenService() { + return idgenService; + } + + /** + * 배치결과ID 생성서비스 저장. + * @param idgenService the idgenService to set + */ + public void setIdgenService(EgovIdGnrService idgenService) { + this.idgenService = idgenService; + } + + @SuppressWarnings("rawtypes") + private Class getJobClass(String batchOpertId) { + XitBatchRegMngVO vo = new XitBatchRegMngVO(); + vo.setBatchOpertId(batchOpertId); + vo = xitBatchRegMngService.findView(vo); + + switch (BatchOpertSe.valueOf(vo.getBatchOpertSe())) { + case prm: + return BatchMethodExecuteJob.class; + case mtd: + return BatchMethodExecuteJob.class; + default: + throw new RuntimeException(String.format("유효하지 않은 코드구분(%s) 입니다.", vo.getBatchOpertSe())); + } + + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchShellScriptJob.java b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchShellScriptJob.java new file mode 100644 index 00000000..d6c738a3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/service/BatchShellScriptJob.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.batch.cmmn.service; + +import java.io.IOException; + +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 배치쉘스크립트를 실행하는 Quartz Job 클래스를 정의한다. + * + * @author 김진만 + * @see + *
+ * == 개정이력(Modification Information) ==
+ *
+ *   수정일       수정자           수정내용
+ *  -------     --------    ---------------------------
+ *  2010.08.30   김진만     최초 생성
+ * 
+ */ + +public class BatchShellScriptJob implements Job { + + /** logger */ + private static final Logger LOGGER = LoggerFactory.getLogger(BatchShellScriptJob.class); + + /** + * (non-Javadoc) + * @see org.quartz.Job#execute(org.quartz.JobExecutionContext) + */ + public void execute(JobExecutionContext jobContext) throws JobExecutionException { + + JobDataMap dataMap = jobContext.getJobDetail().getJobDataMap(); + + LOGGER.debug("job[{}] Trigger이름 : ", jobContext.getJobDetail().getKey().getName(), jobContext.getTrigger().getKey().getName()); + LOGGER.debug("job[{}] BatchOpert이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("batchOpertId")); + LOGGER.debug("job[{}] BatchProgram이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("batchProgrm")); + LOGGER.debug("job[{}] Parameter이름 : ", jobContext.getJobDetail().getKey().getName(), dataMap.getString("paramtr")); + + int result = executeProgram(dataMap.getString("batchProgrm"), dataMap.getString("paramtr")); + + // jobContext에 결과값을 저장한다. + jobContext.setResult(result); + } + + /** + * 시스템에서 특정 쉘프로그램을 실행한다. + * @param batchProgrm 배치실행화일 + * @param paramtr 배치실행화일에 전달될 파라미터 + * @return 배치실행화일리턴값(integer) + * @exception Exception + */ + private int executeProgram(String batchProgrm, String paramtr) { + + int result = 0; + try { + Process p = null; + String cmdStr = batchProgrm + " " + paramtr; + p = Runtime.getRuntime().exec(cmdStr); + p.waitFor(); + result = p.exitValue(); + LOGGER.debug("배치실행화일 - {} 실행완료, 결과값: {}", cmdStr, result); + + } catch (IOException e) { + LOGGER.error("배치스크립트 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } catch (InterruptedException e) { + LOGGER.error("배치스크립트 실행 에러 : {}", e.getMessage()); + LOGGER.debug(e.getMessage(), e); + } + + return result; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/validator/BatchOpertSe.java b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/validator/BatchOpertSe.java new file mode 100644 index 00000000..341a21ea --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/validator/BatchOpertSe.java @@ -0,0 +1,48 @@ +package kr.xit.framework.biz.mng.batch.cmmn.validator; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * + *
    + *
  • 업무 그룹명: 배치운영구분
  • + *
  • 설 명: 배치프로그램 종류를 기술 한다.
  • + *
  • 작성일: 2021. 10. 7. 오후 5:16:43 + *
+ * + * @author 박민규 + * + */ +public enum BatchOpertSe { + + prm("프로그램") + ,mtd("메소드") + ; + private String code; + private String codeNm; + BatchOpertSe(String codeNm){ + this.code = this.name(); + this.codeNm = codeNm; + } + public String getCode() { + return this.code; + } + public String getCodeNm() { + return this.codeNm; + } + public static List> getCodeList(){ + List> list = new ArrayList>(); + for(BatchOpertSe value : BatchOpertSe.values()) { + Map mCode = new HashMap(); + mCode.put("code", value.getCode()); + mCode.put("codeNm", value.getCodeNm()); + list.add(mCode); + } + + return list; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/validator/BatchOpertValidator.java b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/validator/BatchOpertValidator.java new file mode 100644 index 00000000..e143756e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/cmmn/validator/BatchOpertValidator.java @@ -0,0 +1,86 @@ +package kr.xit.framework.biz.mng.batch.cmmn.validator; + +import java.io.File; + +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngVO; + +/** + * BatchOpert클래스에대한 validator 클래스. + * common validator가 처리하지 못하는 부분 검사. + * + * @author 김진만 + * @version 1.0 + * @see + *
+ * == 개정이력(Modification Information) ==
+ *
+ *   수정일       수정자           수정내용
+ *  -------     --------    ---------------------------
+ *  2010.08.20   김진만     최초 생성
+ * 
+ */ +@Component +public class BatchOpertValidator implements Validator { + + /* + * (non-Javadoc) + * @see org.springframework.validation.Validator#supports(java.lang.Class) + */ + @Override + public boolean supports(Class clazz) { + return XitBatchRegMngVO.class.isAssignableFrom(clazz); + } + + /* + * (non-Javadoc) + * @see org.springframework.validation.Validator#validate(java.lang.Object, org.springframework.validation.Errors) + */ + @Override + public void validate(Object obj, Errors errors) { + // 배치프로그램으로 지정된 값이 파일로 존재하는지 검사한다. + XitBatchRegMngVO batchOpert = (XitBatchRegMngVO) obj; + switch (BatchOpertSe.valueOf(batchOpert.getBatchOpertSe())) { + case prm: + //KISA 보안약점 조치 (2018-10-29, 윤창원) + File file = new File(this.filePathBlackList(batchOpert.getBatchProgrm())); + try { + if (!file.exists()) { + errors.rejectValue("batchProgrm", "errors.batchProgrm", new Object[] { batchOpert.getBatchProgrm() }, "배치프로그램 {0}이 존재하지 않습니다."); + return; + } + if (!file.isFile()) { + errors.rejectValue("batchProgrm", "errors.batchProgrm", new Object[] { batchOpert.getBatchProgrm() }, "배치프로그램 {0}이 파일이 아닙니다."); + return; + } + } catch (SecurityException se) { + errors.rejectValue("batchProgrm", "errors.batchProgrm", new Object[] { batchOpert.getBatchProgrm() }, " 배치프로그램 {0}에 접근할 수 없습니다. 파일접근권한을 확인하세요."); + } + break; + case mtd: + break; + + default: + errors.rejectValue("batchProgrm", "errors.batchProgrm", new Object[] { batchOpert.getBatchProgrm() }, "유효하지 않은 배치작업유형{0} 입니다. 배치작업유형을 확인하세요."); + break; + } + + + } + + + private String filePathBlackList(String value) { + String returnValue = value; + if (returnValue == null || returnValue.trim().equals("")) { + return ""; + } + + returnValue = returnValue.replaceAll("\\.\\.", ""); + + return returnValue; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/reg/dao/XitBatchRegMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/batch/reg/dao/XitBatchRegMngMapper.java new file mode 100644 index 00000000..a3a42edb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/reg/dao/XitBatchRegMngMapper.java @@ -0,0 +1,51 @@ +package kr.xit.framework.biz.mng.batch.reg.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngSearchVO; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngVO; + +/** + * + * @업무그룹명: 배치작업관리 Mapper + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:03:39 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitBatchRegMngMapper { + + + /** + *
메소드 설명: 배치작업관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBatchRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 배치작업관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBatchRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 배치작업관리 상세정보 조회
+ * @param vo + * @return XitBatchRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBatchRegMngVO findView(XitBatchRegMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/reg/model/XitBatchRegMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/reg/model/XitBatchRegMngSearchVO.java new file mode 100644 index 00000000..9f0639f8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/reg/model/XitBatchRegMngSearchVO.java @@ -0,0 +1,23 @@ +package kr.xit.framework.biz.mng.batch.reg.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 배치작업관리 SearchVO + * @설명: + * @최초작성일: 2020. 7. 13. 오후 4:49:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchRegMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/reg/model/XitBatchRegMngVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/reg/model/XitBatchRegMngVO.java new file mode 100644 index 00000000..aaa0e432 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/reg/model/XitBatchRegMngVO.java @@ -0,0 +1,219 @@ +package kr.xit.framework.biz.mng.batch.reg.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치작업관리 VO + * @설명: + * @최초작성일: 2020. 7. 13. 오후 4:50:55 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchRegMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** + * 배치작업ID + */ + private String batchOpertId; + /** + * 배치작업명 + */ + private String batchOpertNm; + /** + * 배치작업구분 //2021.10.07 박민규 - 추가 + */ + private String batchOpertSe; + /** + * 배치프로그램 + */ + private String batchProgrm; + /** + * 최종수정자 아이디 + */ + private String lastUpdusrId; + /** + * 최종수정일 + */ + private String lastUpdusrPnttm; + /** + * 파라미터 + */ + private String paramtr; + /** + * 사용여부 + */ + private String useAt; + /** + * 최초등록자 아이디 + */ + private String frstRegisterId; + /** + * 최초등록시점 + */ + private String frstRegisterPnttm; + + /** + * 배치작업ID를 리턴한다. + * @return the batchOpertId + */ + public String getBatchOpertId() { + return batchOpertId; + } + + /** + * 배치작업ID를 설정한다. + * @param batchOpertId 설정할 배치작업ID + */ + public void setBatchOpertId(String batchOpertId) { + this.batchOpertId = batchOpertId; + } + + /** + * 배치작업명을 리턴한다. + * @return the batchOpertNm + */ + public String getBatchOpertNm() { + return batchOpertNm; + } + + /** + * 배치작업명을 설정한다. + * @param batchOpertNm 설정할 배치작업명 + */ + public void setBatchOpertNm(String batchOpertNm) { + this.batchOpertNm = batchOpertNm; + } + + /** + * 배치작업구분을 리턴한다. + * @return the batchOpertSe + */ + public String getBatchOpertSe() { + return batchOpertSe; + } + + /** + * 배치작업구분을 설정한다. + * @param batchOpertSe 설정할 배치작업구분 + */ + public void setBatchOpertSe(String batchOpertSe) { + this.batchOpertSe = batchOpertSe; + } + + /** + * 배치프로그램을 리턴한다. + * @return the batchProgrm + */ + public String getBatchProgrm() { + return batchProgrm; + } + + /** + * 배치프로그램을 설정한다. + * @param batchProgrm 설정할 배치프로그램 + */ + public void setBatchProgrm(String batchProgrm) { + this.batchProgrm = batchProgrm; + } + + /** + * 최종수정자ID를 리턴한다. + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * 최종수정자ID를 설정한다. + * @param lastUpdusrId 설정할 최종수정자ID + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * 최종수정시점을 리턴한다. + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * 최종수정시점을 설정한다. + * @param lastUpdusrPnttm 설정할 최종수정시점 + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * 파라미터를 리턴한다. + * @return the paramtr + */ + public String getParamtr() { + return paramtr; + } + + /** + * 파라미터를 설정한다. + * @param paramtr 설정할 파라미터 + */ + public void setParamtr(String paramtr) { + this.paramtr = paramtr; + } + + /** + * 사용여부를 리턴한다. + * @return the useAt + */ + public String getUseAt() { + return useAt; + } + + /** + * 사용여부를 설정한다. + * @param useAt 설정할 사용여부 + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * @param frstRegisterId the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * @param frstRegisterPnttm the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/reg/service/XitBatchRegMngService.java b/src/main/java/kr/xit/framework/biz/mng/batch/reg/service/XitBatchRegMngService.java new file mode 100644 index 00000000..37554f98 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/reg/service/XitBatchRegMngService.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.mng.batch.reg.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngSearchVO; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngVO; + +/** + * + * @업무그룹명: 배치작업관리 Service + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:03:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBatchRegMngService { + + + /** + *
메소드 설명: 배치작업관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public List findList(XitBatchRegMngSearchVO searchVO); + + /** + *
메소드 설명: 배치작업관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public int findListTotCnt(XitBatchRegMngSearchVO searchVO); + + /** + *
메소드 설명: 배치작업관리 상세정보 조회
+ * @param vo + * @return XitBatchRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public XitBatchRegMngVO findView(XitBatchRegMngVO vo); + + /** + *
메소드 설명: 배치작업관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void addProc(XitBatchRegMngVO vo); + + /** + *
메소드 설명: 배치작업관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void modifyProc(XitBatchRegMngVO vo); + + /** + *
메소드 설명: 배치작업관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void removeProc(XitBatchRegMngVO vo); + + /** + *
메소드 설명: 배치작업관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void removesProc(String ids); + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/reg/service/impl/XitBatchRegMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/batch/reg/service/impl/XitBatchRegMngServiceImpl.java new file mode 100644 index 00000000..a249e87f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/reg/service/impl/XitBatchRegMngServiceImpl.java @@ -0,0 +1,155 @@ +package kr.xit.framework.biz.mng.batch.reg.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitComtnbatchopertVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.batch.reg.dao.XitBatchRegMngMapper; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngSearchVO; +import kr.xit.framework.biz.mng.batch.reg.service.XitBatchRegMngService; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngVO; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitBatchRegMngServiceImpl implements XitBatchRegMngService { + + @Resource + private XitBatchRegMngMapper xitBatchRegMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name="xitBatchOpertIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitBatchRegMngSearchVO searchVO) { + List result = null; + try { + result = xitBatchRegMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("배치작업관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitBatchRegMngSearchVO searchVO) { + int result = 0; + try { + result = xitBatchRegMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("배치작업관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBatchRegMngVO findView(XitBatchRegMngVO vo) { + XitBatchRegMngVO result = null; + try { + result = xitBatchRegMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("배치작업관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBatchRegMngVO vo) { + /** + * 필수값 설정 + */ + try { + vo.setBatchOpertId(idgenService.getNextStringId()); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + XitComtnbatchopertVO crudVO = convertToCrudVO(vo); + crudVO.setUse_at("Y"); + crudVO.setFrst_register_id (vo.getFrstRegisterId()); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.addComtnbatchopert(crudVO); + } + + @Override + public void modifyProc(XitBatchRegMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchopertVO crudVO = convertToCrudVO(vo); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyComtnbatchopert(crudVO); + + } + + @Override + public void removeProc(XitBatchRegMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchopertVO crudVO = convertToCrudVO(vo); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + crudVO.setUse_at("N"); + + /** + * 처리 + */ + xitFrameCrudService.modifyComtnbatchopert(crudVO); + } + + @Override + public void removesProc(String ids) { + /** + * 처리 + */ + String [] primaryKey = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitComtnbatchopertVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + private XitComtnbatchopertVO convertToCrudVO(XitBatchRegMngVO vo) { + XitComtnbatchopertVO crudVO = new XitComtnbatchopertVO(); + crudVO.setBatch_opert_id (vo.getBatchOpertId()); //배치작업ID + crudVO.setBatch_opert_nm (vo.getBatchOpertNm()); //배치작업명 + crudVO.setBatch_opert_se (vo.getBatchOpertSe()); //배치작업유형 + crudVO.setBatch_progrm (vo.getBatchProgrm()); //배치프로그램 + crudVO.setParamtr (vo.getParamtr()); //파라미터 +// crudVO.setUse_at (vo.getUseAt()); //사용여부 +// crudVO.setFrst_register_id (vo.getFrstRegisterId());//최초등록자ID +// crudVO.setFrst_regist_pnttm(); //최초등록시점 +// crudVO.setLast_updusr_id (vo.getLastUpdusrId()); //최종수정자ID +// crudVO.setLast_updt_pnttm (); //최종수정시점 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/reg/web/XitBatchRegMngController.java b/src/main/java/kr/xit/framework/biz/mng/batch/reg/web/XitBatchRegMngController.java new file mode 100644 index 00000000..50228c1d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/reg/web/XitBatchRegMngController.java @@ -0,0 +1,390 @@ +package kr.xit.framework.biz.mng.batch.reg.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.batch.cmmn.validator.BatchOpertSe; +import kr.xit.framework.biz.mng.batch.cmmn.validator.BatchOpertValidator; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngSearchVO; +import kr.xit.framework.biz.mng.batch.reg.service.XitBatchRegMngService; +import kr.xit.framework.biz.mng.batch.reg.model.XitBatchRegMngVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 배치작업관리 Controller + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:02:43 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/batch/reg/") +public class XitBatchRegMngController { + + @Resource + private XitBatchRegMngService xitBatchRegMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource//(name = "xitMessageSource") + XitMessageSource xitMessageSource; + /* batchOpert bean validator */ + @Resource//(name = "batchOpertValidator") + private BatchOpertValidator batchOpertValidator; + + + + /** + *
메소드 설명: 배치작업관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchRegMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchRegMng_list(@ModelAttribute("searchVO") XitBatchRegMngSearchVO searchVO, ModelMap model) { + + /** paging */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //List resultList = (List) xitBatchRegMngService.findList(searchVO); + //int totCnt = xitBatchRegMngService.findListTotCnt(searchVO); + + //paginationInfo.setTotalRecordCount(totCnt); + + //model.addAttribute("resultList", resultList); + //model.addAttribute("resultCnt", totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + //model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/reg/XitBatchRegMng_list"; + } + + /** + *
메소드 설명: 배치작업 관리 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "BatchRegMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BatchRegMng_listAjax(@ModelAttribute("searchVO") XitBatchRegMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + List resultList = xitBatchRegMngService.findList(searchVO); + int totCnt = xitBatchRegMngService.findListTotCnt(searchVO); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", resultList); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchRegMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchRegMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBatchRegMngVO vo + , @ModelAttribute("searchVO") XitBatchRegMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + model.addAttribute("batchOpert", vo); + model.addAttribute("batchOpertSeCodeList", BatchOpertSe.getCodeList()); + break; + + case "edit": //수정 페이지 + model.addAttribute("batchOpert", xitBatchRegMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + model.addAttribute("batchOpertSeCodeList", BatchOpertSe.getCodeList()); + break; + + case "view": //상세 페이지 + model.addAttribute("resultInfo", xitBatchRegMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + model.addAttribute("batchOpertSeCodeList", BatchOpertSe.getCodeList()); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/reg/XitBatchRegMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchRegMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchRegMng_page_popup(@PathVariable String cmd + , @ModelAttribute("vo") XitBatchRegMngVO vo + , @ModelAttribute("searchVO") XitBatchRegMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "choice": // + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = (List) xitBatchRegMngService.findList(searchVO); + int totCnt = xitBatchRegMngService.findListTotCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/reg/XitBatchRegMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 배치작업관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchRegMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BatchRegMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitBatchRegMngVO vo + ,@RequestParam(value="batchOpertIds", required=false, defaultValue="") String batchOpertIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("batchOpert", vo, bindingResult); + batchOpertValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchRegMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + sLocationUrl = "redirect:/_mng_/batch/reg/BatchRegMng_list.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("batchOpert", vo, bindingResult); + batchOpertValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("batchOpert", vo); + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchRegMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchRegMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/batch/reg/BatchRegMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchRegMngService.removesProc(batchOpertIds); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/result/dao/XitBatchResultMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/batch/result/dao/XitBatchResultMngMapper.java new file mode 100644 index 00000000..504fefd4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/result/dao/XitBatchResultMngMapper.java @@ -0,0 +1,51 @@ +package kr.xit.framework.biz.mng.batch.result.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngSearchVO; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; + +/** + * + * @업무그룹명: 배치결과관리 Mapper + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:04:40 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitBatchResultMngMapper { + + + /** + *
메소드 설명: 배치결과관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBatchResultMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 배치결과관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBatchResultMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 배치결과관리 상세정보 조회
+ * @param vo + * @return XitBatchResultMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBatchResultMngVO findView(XitBatchResultMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/result/model/XitBatchResultMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/result/model/XitBatchResultMngSearchVO.java new file mode 100644 index 00000000..81676bb7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/result/model/XitBatchResultMngSearchVO.java @@ -0,0 +1,38 @@ +package kr.xit.framework.biz.mng.batch.result.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 배치결과관리 SearchVO + * @설명: + * @최초작성일: 2020. 7. 13. 오후 4:52:09 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchResultMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + + /** + * 상태 + */ + private String sttus; + + + + public String getSttus() { + return sttus; + } + public void setSttus(String sttus) { + this.sttus = sttus; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/result/model/XitBatchResultMngVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/result/model/XitBatchResultMngVO.java new file mode 100644 index 00000000..37d2190e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/result/model/XitBatchResultMngVO.java @@ -0,0 +1,294 @@ +package kr.xit.framework.biz.mng.batch.result.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치결과관리 VO + * @설명: + * @최초작성일: 2020. 7. 13. 오후 4:51:36 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchResultMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 배치결과ID + */ + private String batchResultId; + /** + * 배치스케줄ID + */ + private String batchSchdulId; + + /** + * 배치작업ID + */ + private String batchOpertId; + /** + * 파라미터 + */ + private String paramtr; + /** + * 상태 + */ + private String sttus; + /** + * 실행시작시각 + */ + private String executBeginTime; + /** + * 실행종료시각 + */ + private String executEndTime; + /** + * 최종수정자 아이디 + */ + private String lastUpdusrId; + /** + * 최종수정시점 + */ + private String lastUpdusrPnttm; + /** + * 최초등록자 아이디 + */ + private String frstRegisterId; + /** + * 최초등록시점 + */ + private String frstRegisterPnttm; + /** + * 에러정보 + */ + private String errorInfo; + + /** + * 배치작업명 + */ + private String batchOpertNm; + /** + * 배치프로그램 + */ + private String batchProgrm; + /** + * 상태명 + */ + private String sttusNm; + + /** + * @return the batchResultId + */ + public String getBatchResultId() { + return batchResultId; + } + + /** + * @return the batchOpertId + */ + public String getBatchOpertId() { + return batchOpertId; + } + + /** + * @return the paramtr + */ + public String getParamtr() { + return paramtr; + } + + /** + * @return the sttus + */ + public String getSttus() { + return sttus; + } + + /** + * @return the executBeginTime + */ + public String getExecutBeginTime() { + return executBeginTime; + } + + /** + * @return the executEndTime + */ + public String getExecutEndTime() { + return executEndTime; + } + + /** + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * @return the errorInfo + */ + public String getErrorInfo() { + return errorInfo; + } + + /** + * @return the batchOpertNm + */ + public String getBatchOpertNm() { + return batchOpertNm; + } + + /** + * @return the batchProgrm + */ + public String getBatchProgrm() { + return batchProgrm; + } + + /** + * @return the sttusNm + */ + public String getSttusNm() { + return sttusNm; + } + + /** + * @param batchResultId the batchResultId to set + */ + public void setBatchResultId(String batchResultId) { + this.batchResultId = batchResultId; + } + + /** + * @param batchOpertId the batchOpertId to set + */ + public void setBatchOpertId(String batchOpertId) { + this.batchOpertId = batchOpertId; + } + + /** + * @param paramtr the paramtr to set + */ + public void setParamtr(String paramtr) { + this.paramtr = paramtr; + } + + /** + * @param sttus the sttus to set + */ + public void setSttus(String sttus) { + this.sttus = sttus; + } + + /** + * @param executBeginTime the executBeginTime to set + */ + public void setExecutBeginTime(String executBeginTime) { + this.executBeginTime = executBeginTime; + } + + /** + * @param executEndTime the executEndTime to set + */ + public void setExecutEndTime(String executEndTime) { + this.executEndTime = executEndTime; + } + + /** + * @param lastUpdusrId the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * @param lastUpdusrPnttm the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * @param frstRegisterId the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * @param frstRegisterPnttm the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * @param errorInfo the errorInfo to set + */ + public void setErrorInfo(String errorInfo) { + this.errorInfo = errorInfo; + } + + /** + * @param batchOpertNm the batchOpertNm to set + */ + public void setBatchOpertNm(String batchOpertNm) { + this.batchOpertNm = batchOpertNm; + } + + /** + * @param batchProgrm the batchProgrm to set + */ + public void setBatchProgrm(String batchProgrm) { + this.batchProgrm = batchProgrm; + } + + /** + * @param sttusNm the sttusNm to set + */ + public void setSttusNm(String sttusNm) { + this.sttusNm = sttusNm; + } + + /** + * @return the batchSchdulId + */ + public String getBatchSchdulId() { + return batchSchdulId; + } + + /** + * @param batchSchdulId the batchSchdulId to set + */ + public void setBatchSchdulId(String batchSchdulId) { + this.batchSchdulId = batchSchdulId; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/result/service/XitBatchResultMngService.java b/src/main/java/kr/xit/framework/biz/mng/batch/result/service/XitBatchResultMngService.java new file mode 100644 index 00000000..46c2c1b1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/result/service/XitBatchResultMngService.java @@ -0,0 +1,80 @@ +package kr.xit.framework.biz.mng.batch.result.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngSearchVO; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; + +/** + * + * @업무그룹명: 배치결과관리 Service + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:04:26 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBatchResultMngService { + + + /** + *
메소드 설명: 배치결과관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public List findList(XitBatchResultMngSearchVO searchVO); + + /** + *
메소드 설명: 배치결과관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public int findListTotCnt(XitBatchResultMngSearchVO searchVO); + + /** + *
메소드 설명: 배치결과관리 상세정보 조회
+ * @param vo + * @return XitBatchResultMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public XitBatchResultMngVO findView(XitBatchResultMngVO vo); + + /** + *
메소드 설명: 배치결과관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void addProc(XitBatchResultMngVO vo); + + /** + *
메소드 설명: 배치결과관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void modifyProc(XitBatchResultMngVO vo); + + /** + *
메소드 설명: 배치결과관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void removeProc(XitBatchResultMngVO vo); + + /** + *
메소드 설명: 배치결과관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/result/service/impl/XitBatchResultMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/batch/result/service/impl/XitBatchResultMngServiceImpl.java new file mode 100644 index 00000000..a7a8afdc --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/result/service/impl/XitBatchResultMngServiceImpl.java @@ -0,0 +1,145 @@ +package kr.xit.framework.biz.mng.batch.result.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitComtnbatchresultVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.batch.result.dao.XitBatchResultMngMapper; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngSearchVO; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; +import kr.xit.framework.biz.mng.batch.result.service.XitBatchResultMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitBatchResultMngServiceImpl implements XitBatchResultMngService{ + + @Resource + private XitBatchResultMngMapper xitBatchResultMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitBatchResultMngSearchVO searchVO) { + List result = null; + try { + result = xitBatchResultMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("배치결과관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitBatchResultMngSearchVO searchVO) { + int result = 0; + try { + result = xitBatchResultMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("배치결과관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBatchResultMngVO findView(XitBatchResultMngVO vo) { + XitBatchResultMngVO result = null; + try { + result = xitBatchResultMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("배치결과관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBatchResultMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchresultVO crudVO = convertToCrudVO(vo); + crudVO.setFrst_register_id (vo.getFrstRegisterId()); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.addComtnbatchresult(crudVO); + } + + @Override + public void modifyProc(XitBatchResultMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchresultVO crudVO = convertToCrudVO(vo); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyComtnbatchresult(crudVO); + + } + + @Override + public void removeProc(XitBatchResultMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchresultVO crudVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.removeComtnbatchresult(crudVO); + } + + @Override + public void removesProc(String ids) { + /** + * 처리 + */ + String [] primaryKey = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitComtnbatchresultVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + private XitComtnbatchresultVO convertToCrudVO(XitBatchResultMngVO vo) { + XitComtnbatchresultVO crudVO = new XitComtnbatchresultVO(); + crudVO.setBatch_result_id (vo.getBatchResultId()); //배치결과ID + crudVO.setBatch_schdul_id (vo.getBatchSchdulId()); //배치일정ID + crudVO.setBatch_opert_id (vo.getBatchOpertId()); //배치작업ID + crudVO.setParamtr (vo.getParamtr()); //파라미터 + crudVO.setSttus (vo.getSttus()); //상태 + crudVO.setError_info (vo.getErrorInfo()); //오류정보 + crudVO.setExecut_begin_tm (vo.getExecutBeginTime()); //실행시작시각 + crudVO.setExecut_end_tm (vo.getExecutEndTime()); //실행종료시각 +// crudVO.setLast_updt_pnttm (vo.get); //최종수정시점 +// crudVO.setLast_updusr_id (vo.get); //최종수정자ID +// crudVO.setFrst_regist_pnttm(vo.get); //최초등록시점 +// crudVO.setFrst_register_id (vo.get); //최초등록ID + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/result/web/XitBatchResultMngController.java b/src/main/java/kr/xit/framework/biz/mng/batch/result/web/XitBatchResultMngController.java new file mode 100644 index 00000000..97436cee --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/result/web/XitBatchResultMngController.java @@ -0,0 +1,334 @@ +package kr.xit.framework.biz.mng.batch.result.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngSearchVO; +import kr.xit.framework.biz.mng.batch.result.service.XitBatchResultMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 배치결과관리 Controller + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:04:03 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/batch/result/") +public class XitBatchResultMngController { + + + @Resource + private XitBatchResultMngService xitBatchResultMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + + /** + *
메소드 설명: 배치작업관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchResultMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchResultMng_list(@ModelAttribute("searchVO") XitBatchResultMngSearchVO searchVO, ModelMap model) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/result/XitBatchResultMng_list"; + } + + /** + *
메소드 설명: 배치작업관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8. 04. + */ + @RequestMapping(value = "BatchResultMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BatchResultMng_listAjax(@ModelAttribute("searchVO") XitBatchResultMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitBatchResultMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitBatchResultMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchResultMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchResultMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBatchResultMngVO vo + , @ModelAttribute("searchVO") XitBatchResultMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { +// case "input": //등록 페이지 +// break; + + case "edit": //수정 페이지 + model.addAttribute("resultInfo", xitBatchResultMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + case "view": //상세 페이지 + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/result/XitBatchResultMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchResultMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchResultMng_page_popup(@PathVariable String cmd + , @ModelAttribute("vo") XitBatchResultMngVO vo + , @ModelAttribute("searchVO") XitBatchResultMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/result/XitBatchResultMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 배치작업관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchResultMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BatchResultMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitBatchResultMngVO vo + ,@ModelAttribute("searchVO") XitBatchResultMngSearchVO searchVO + ,@RequestParam(value="batchResultIds", required=false, defaultValue="") String batchResultIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchResultMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + sLocationUrl = "redirect:/_mng_/batch/result/BatchResultMng_list.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("batchOpert", vo); + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchResultMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchResultMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/batch/result/BatchResultMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBatchResultMngService.removesProc(batchResultIds); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/dao/XitBatchScheduleMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/dao/XitBatchScheduleMngMapper.java new file mode 100644 index 00000000..909c018e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/dao/XitBatchScheduleMngMapper.java @@ -0,0 +1,61 @@ +package kr.xit.framework.biz.mng.batch.schedule.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngSearchVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleDayOfWeekVO; + +/** + * + * @업무그룹명: 배치스케줄관리 Mapper + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:05:26 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitBatchScheduleMngMapper { + + + /** + *
메소드 설명: 배치스케줄관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBatchScheduleMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 배치스케줄관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBatchScheduleMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 배치스케줄관리 상세정보 조회
+ * @param vo + * @return XitBatchScheduleMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBatchScheduleMngVO findView(XitBatchScheduleMngVO vo) throws SQLException; + + /** + *
메소드 설명: 배치스케줄 요일 목록 조회
+ * @param vo + * @return List<XitBatchScheduleDayOfWeekVO> + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findsBatchSchedule(XitBatchScheduleMngVO vo); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleDayOfWeekVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleDayOfWeekVO.java new file mode 100644 index 00000000..93e75fb1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleDayOfWeekVO.java @@ -0,0 +1,77 @@ +package kr.xit.framework.biz.mng.batch.schedule.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치작업스케줄요일 VO + * @설명: + * @최초작성일: 2020. 7. 14. 오후 4:08:55 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchScheduleDayOfWeekVO extends BaseVO { + + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 393393635146750800L; + + /** + * 배치스케줄ID + */ + private String batchSchdulId; + + /** + * 실행스케줄요일 + */ + private String executSchdulDfkSe; + + /** + * 실행스케줄요일명 + */ + private String executSchdulDfkSeNm; + + + /** + * @return the batchSchdulId + */ + public String getBatchSchdulId() { + return batchSchdulId; + } + /** + * @return the executSchdulDfkSe + */ + public String getExecutSchdulDfkSe() { + return executSchdulDfkSe; + } + /** + * @param batchSchdulId the batchSchdulId to set + */ + public void setBatchSchdulId(String batchSchdulId) { + this.batchSchdulId = batchSchdulId; + } + /** + * @param executSchdulDfkSe the executSchdulDfkSe to set + */ + public void setExecutSchdulDfkSe(String executSchdulDfkSe) { + this.executSchdulDfkSe = executSchdulDfkSe; + } + /** + * @return the executSchdulDfkSeNm + */ + public String getExecutSchdulDfkSeNm() { + return executSchdulDfkSeNm; + } + /** + * @param executSchdulDfkSeNm the executSchdulDfkSeNm to set + */ + public void setExecutSchdulDfkSeNm(String executSchdulDfkSeNm) { + this.executSchdulDfkSeNm = executSchdulDfkSeNm; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleMngSearchVO.java new file mode 100644 index 00000000..72cce42e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.batch.schedule.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 배치스케줄관리 SearchVO + * @설명: + * @최초작성일: 2020. 7. 13. 오후 4:52:45 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchScheduleMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleMngVO.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleMngVO.java new file mode 100644 index 00000000..bd529ceb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/model/XitBatchScheduleMngVO.java @@ -0,0 +1,468 @@ +package kr.xit.framework.biz.mng.batch.schedule.model; + +import java.util.List; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 배치스케줄관리 VO + * @설명: + * @최초작성일: 2020. 7. 13. 오후 4:53:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBatchScheduleMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + + + /** + * 배치스케줄ID + */ + private String batchSchdulId; + + /** + * 배치작업ID + */ + private String batchOpertId; + + /** + * 실행주기 + */ + private String executCycle; + /** + * 실행스케줄일자 + */ + private String executSchdulDe; + /** + * 실행스케줄시 + */ + private String executSchdulHour; + /** + * 실행스케줄분 + */ + private String executSchdulMnt; + /** + * 실행스케줄초 + */ + private String executSchdulSecnd; + /** + * 실행스케줄요일 + */ + private String[] executSchdulDfkSes; + + /** + * 최종수정자 아이디 + */ + private String lastUpdusrId; + /** + * 최종수정시점 + */ + private String lastUpdusrPnttm; + /** + * 최초등록자 아이디 + */ + private String frstRegisterId; + /** + * 최초등록시점 + */ + private String frstRegisterPnttm; + + /** + * 배치작업명 + */ + private String batchOpertNm; + /** + * 배치프로그램 + */ + private String batchProgrm; + /** + * 파라미터 + */ + private String paramtr; + /** + * 실행주기명 + */ + private String executCycleNm; + /** + * 실행스케줄 + */ + private String executSchdul; + + /** + * @return the batchSchdulId + */ + public String getBatchSchdulId() { + return batchSchdulId; + } + + /** + * @return the batchOpertId + */ + public String getBatchOpertId() { + return batchOpertId; + } + + /** + * @return the executCycle + */ + public String getExecutCycle() { + return executCycle; + } + + /** + * @return the executSchdulDe + */ + public String getExecutSchdulDe() { + return executSchdulDe; + } + + /** + * @return the executSchdulHour + */ + public String getExecutSchdulHour() { + return executSchdulHour; + } + + /** + * @return the executSchdulMnt + */ + public String getExecutSchdulMnt() { + return executSchdulMnt; + } + + /** + * @return the executSchdulSecnd + */ + public String getExecutSchdulSecnd() { + return executSchdulSecnd; + } + + /** + * @return the executSchdulDfkSes + */ + public String[] getExecutSchdulDfkSes() { + //return executSchdulDfkSes; + String[] ret = null; + if (this.executSchdulDfkSes != null) { + ret = new String[executSchdulDfkSes.length]; + for (int i = 0; i < executSchdulDfkSes.length; i++) { + ret[i] = this.executSchdulDfkSes[i]; + } + } + + return ret; + } + + /** + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * @return the batchOpertNm + */ + public String getBatchOpertNm() { + return batchOpertNm; + } + + /** + * @return the batchProgrm + */ + public String getBatchProgrm() { + return batchProgrm; + } + + /** + * @return the executCycleNm + */ + public String getExecutCycleNm() { + return executCycleNm; + } + + /** + * @param batchSchdulId the batchSchdulId to set + */ + public void setBatchSchdulId(String batchSchdulId) { + this.batchSchdulId = batchSchdulId; + } + + /** + * @param batchOpertId the batchOpertId to set + */ + public void setBatchOpertId(String batchOpertId) { + this.batchOpertId = batchOpertId; + } + + /** + * @param executCycle the executCycle to set + */ + public void setExecutCycle(String executCycle) { + this.executCycle = executCycle; + } + + /** + * @param executSchdulDe the executSchdulDe to set + */ + public void setExecutSchdulDe(String executSchdulDe) { + this.executSchdulDe = executSchdulDe; + } + + /** + * @param executSchdulHour the executSchdulHour to set + */ + public void setExecutSchdulHour(String executSchdulHour) { + this.executSchdulHour = executSchdulHour; + } + + /** + * @param executSchdulMnt the executSchdulMnt to set + */ + public void setExecutSchdulMnt(String executSchdulMnt) { + this.executSchdulMnt = executSchdulMnt; + } + + /** + * @param executSchdulSecnd the executSchdulSecnd to set + */ + public void setExecutSchdulSecnd(String executSchdulSecnd) { + this.executSchdulSecnd = executSchdulSecnd; + } + + /** + * @param executSchdulDfkSes the executSchdulDfkSes to set + */ + public void setExecutSchdulDfkSes(String[] executSchdulDfkSes) { + //this.executSchdulDfkSes = executSchdulDfkSes; + this.executSchdulDfkSes = new String[executSchdulDfkSes.length]; + for (int i = 0; i < executSchdulDfkSes.length; ++i) { + this.executSchdulDfkSes[i] = executSchdulDfkSes[i]; + } + } + + /** + * @param lastUpdusrId the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * @param lastUpdusrPnttm the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * @param frstRegisterId the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * @param frstRegisterPnttm the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * @param batchOpertNm the batchOpertNm to set + */ + public void setBatchOpertNm(String batchOpertNm) { + this.batchOpertNm = batchOpertNm; + } + + /** + * @param batchProgrm the batchProgrm to set + */ + public void setBatchProgrm(String batchProgrm) { + this.batchProgrm = batchProgrm; + } + + /** + * @param executCycleNm the executCycleNm to set + */ + public void setExecutCycleNm(String executCycleNm) { + this.executCycleNm = executCycleNm; + } + + /** + * @return the executSchdul + */ + public String getExecutSchdul() { + return executSchdul; + } + + /** + * @param executSchdul the executSchdul to set + */ + public void setExecutSchdul(String executSchdul) { + this.executSchdul = executSchdul; + } + + /** + * 리스트, 상세화면 화면표시용 실행스케줄속성을 만들어 executSchdul 필드에 저장한다. + * + * @param dfkSeList List형의 요일구분코드정보리스트 + */ + public void makeExecutSchdul(List dfkSeList) { + String executSchdul = ""; + String executSchdulDeNm = ""; + + // 날짜 출력 + if (this.executCycle.equals("02") || this.executCycle.equals("01")) { + // 매주, 매일인 경우는 스케줄일자를 사용하지 않는다. + executSchdulDeNm = ""; + } else if (this.executCycle.equals("03")) { + // 매월 처리 + if (!"".equals(this.executSchdulDe)) { + executSchdulDeNm = executSchdulDeNm + this.executSchdulDe.substring(6, 8) + "일 "; + } + } else if (this.executCycle.equals("04")) { + // 매년의경우 처리 + if (!"".equals(this.executSchdulDe)) { + executSchdulDeNm = executSchdulDeNm + this.executSchdulDe.substring(4, 6) + "-" + this.executSchdulDe.substring(6, 8) + " "; + } + } else { + // 이외의경우 처리 + if (!"".equals(this.executSchdulDe)) { + executSchdulDeNm = executSchdulDeNm + this.executSchdulDe.substring(0, 4) + "-" + this.executSchdulDe.substring(4, 6) + "-" + this.executSchdulDe.substring(6, 8) + + " "; + } + } + + // 날짜 출력 + executSchdul = executSchdul + executSchdulDeNm; + + // 요일출력 + if (this.executCycle.equals("02")) { + // 실행주기가 매주인 경우에만 출력한다. + if (dfkSeList.size() != 0) { + for (int i = 0; i < dfkSeList.size(); i++) { + if (i != 0) { + executSchdul = executSchdul + ","; + } + executSchdul = executSchdul + dfkSeList.get(i).getExecutSchdulDfkSeNm(); + } + executSchdul = executSchdul + " "; + } + } + + // 시, 분, 초 출력 + // 시분초는 항상출력한다. + executSchdul = executSchdul + this.executSchdulHour + ":" + this.executSchdulMnt + ":" + this.executSchdulSecnd; + + // 값지정. + this.executSchdul = executSchdul; + + } + + /** + * 실행스케줄을 CronExpression으로 바꿔서 리턴한다. + **/ + public String toCronExpression() { + String cronExpression = ""; + + // 초변환 + cronExpression = cronExpression + this.executSchdulSecnd; + + // 분변환 + cronExpression = cronExpression + " " + this.executSchdulMnt; + + // 시변환 + cronExpression = cronExpression + " " + this.executSchdulHour; + + // 일변환 + if (this.executCycle.equals("01")) { + // 매일인경우 "*" 출력 + cronExpression = cronExpression + " " + "*"; + } else if (this.executCycle.equals("02")) { + // 매주인 경우 "?" 출력 + cronExpression = cronExpression + " " + "?"; + } else { + // 이외의 경우 그대로 출력 + cronExpression = cronExpression + " " + this.executSchdulDe.substring(6, 8); + } + + // 월변환 + if (this.executCycle.equals("01") || this.executCycle.equals("02") || this.executCycle.equals("03")) { + // 매일,매월,매주인경우 "*" 출력 + cronExpression = cronExpression + " " + "*"; + } else { + // 이외의 경우 그대로 출력 + cronExpression = cronExpression + " " + this.executSchdulDe.substring(4, 6); + } + + // 주 변환 + if (this.executCycle.equals("02")) { + // 매주인경우 day of week를 출력 + String dayOfWeek = ""; + for (int i = 0; i < this.executSchdulDfkSes.length; i++) { + if (i != 0) { + dayOfWeek = dayOfWeek + ","; + } + dayOfWeek = dayOfWeek + this.executSchdulDfkSes[i]; + } + cronExpression = cronExpression + " " + dayOfWeek; + } else { + // 이외의 경우 "?" 출력 + cronExpression = cronExpression + " " + "?"; + } + + // 년변환 + if (this.executCycle.equals("05")) { + // 한번만인경우 년도 출력 + cronExpression = cronExpression + " " + this.executSchdulDe.substring(0, 4); + } + return cronExpression; + + } + + /** + * @return the paramtr + */ + public String getParamtr() { + return paramtr; + } + + /** + * @param paramtr the paramtr to set + */ + public void setParamtr(String paramtr) { + this.paramtr = paramtr; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/service/XitBatchScheduleMngService.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/service/XitBatchScheduleMngService.java new file mode 100644 index 00000000..eba5ca65 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/service/XitBatchScheduleMngService.java @@ -0,0 +1,100 @@ +package kr.xit.framework.biz.mng.batch.schedule.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngSearchVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngVO; + +/** + * + * @업무그룹명: 배치스케줄관리 Service + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:05:14 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBatchScheduleMngService { + + + /** + *
메소드 설명: 배치스케줄관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public List findList(XitBatchScheduleMngSearchVO searchVO); + + /** + *
메소드 설명: 배치스케줄관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public int findListTotCnt(XitBatchScheduleMngSearchVO searchVO); + + /** + *
메소드 설명: 배치스케줄관리 상세정보 조회
+ * @param vo + * @return XitBatchScheduleMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public XitBatchScheduleMngVO findView(XitBatchScheduleMngVO vo); + + /** + *
메소드 설명: 배치스케줄관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void addProc(XitBatchScheduleMngVO vo); + + /** + *
메소드 설명: 배치스케줄관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void modifyProc(XitBatchScheduleMngVO vo); + + /** + *
메소드 설명: 배치스케줄관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void removeProc(XitBatchScheduleMngVO vo); + + /** + *
메소드 설명: 배치스케줄관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void removesProc(String ids); + + + + + + /** + *
메소드 설명: 배치결과 등록
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void addBatchResult(XitBatchResultMngVO vo); + /** + *
메소드 설명: 배치결과 수정
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + public void modifyBatchResult(XitBatchResultMngVO vo); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/service/impl/XitBatchScheduleMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/service/impl/XitBatchScheduleMngServiceImpl.java new file mode 100644 index 00000000..1b17547f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/service/impl/XitBatchScheduleMngServiceImpl.java @@ -0,0 +1,226 @@ +package kr.xit.framework.biz.mng.batch.schedule.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschdulVO; +import kr.xit.framework.biz.cmm.model.XitComtnbatchschduldfkVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.batch.result.model.XitBatchResultMngVO; +import kr.xit.framework.biz.mng.batch.result.service.XitBatchResultMngService; +import kr.xit.framework.biz.mng.batch.schedule.dao.XitBatchScheduleMngMapper; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleDayOfWeekVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngSearchVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngVO; +import kr.xit.framework.biz.mng.batch.schedule.service.XitBatchScheduleMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitBatchScheduleMngServiceImpl implements XitBatchScheduleMngService { + + @Resource + private XitBatchScheduleMngMapper xitBatchScheduleMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name="xitBatchSchdulIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + @Resource + private XitBatchResultMngService xitBatchResultMngService; + + @Override + public List findList(XitBatchScheduleMngSearchVO searchVO) { + List result = null; + try { + result = xitBatchScheduleMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("배치스케줄관리 목록 조회 FAIL::", e); + } + for (int i = 0; i < result.size(); i++) { + XitBatchScheduleMngVO vo = result.get(i); + // 스케줄요일정보를 가져온다. + List dfkSeList = xitBatchScheduleMngMapper.findsBatchSchedule(vo); + String [] dfkSes = new String [dfkSeList.size()]; + for (int j = 0; j < dfkSeList.size(); j++) { + dfkSes[j] = (String) dfkSeList.get(j).getExecutSchdulDfkSe(); + } + vo.setExecutSchdulDfkSes(dfkSes); + // 화면표시용 실행스케줄 속성을 만든다. + vo.makeExecutSchdul(dfkSeList); + } + + + return result; + } + + @Override + public int findListTotCnt(XitBatchScheduleMngSearchVO searchVO) { + int result = 0; + try { + result = xitBatchScheduleMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("배치스케줄관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBatchScheduleMngVO findView(XitBatchScheduleMngVO vo) { + XitBatchScheduleMngVO result = null; + try { + result = xitBatchScheduleMngMapper.findView(vo); + + // 스케줄요일정보를 가져온다. + List dfkSeList = xitBatchScheduleMngMapper.findsBatchSchedule(result); + String [] dfkSes = new String [dfkSeList.size()]; + for (int j = 0; j < dfkSeList.size(); j++) { + dfkSes[j] = (String) dfkSeList.get(j).getExecutSchdulDfkSe(); + } + result.setExecutSchdulDfkSes(dfkSes); + // 화면표시용 실행스케줄 속성을 만든다. + result.makeExecutSchdul(dfkSeList); + } catch (SQLException e) { + throw new RuntimeException("배치스케줄관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBatchScheduleMngVO vo) { + /** + * 필수값 설정 + */ + try { + vo.setBatchSchdulId(idgenService.getNextStringId()); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + XitComtnbatchschdulVO crudVO = convertToCrudVO(vo); + crudVO.setFrst_register_id (vo.getFrstRegisterId()); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + + + /** + * 처리 + */ + //master 테이블 insert + xitFrameCrudService.addComtnbatchschdul(crudVO); + //slave 테이블 insert + if (vo.getExecutSchdulDfkSes() != null && vo.getExecutSchdulDfkSes().length != 0) { + String batchSchdulId = vo.getBatchSchdulId(); + String [] dfkSes = vo.getExecutSchdulDfkSes(); + for (int i = 0; i < dfkSes.length; i++) { + XitComtnbatchschduldfkVO slaveVO = new XitComtnbatchschduldfkVO(); + slaveVO.setBatch_schdul_id(batchSchdulId); + slaveVO.setExecut_schdul_dfk_se(dfkSes[i]); + xitFrameCrudService.addComtnbatchschduldfk(slaveVO); + } + } + } + + @Override + public void modifyProc(XitBatchScheduleMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchschdulVO crudVO = convertToCrudVO(vo); + crudVO.setLast_updusr_id (vo.getLastUpdusrId()); + + + /** + * 처리 + */ + //master 테이블 update + xitFrameCrudService.modifyComtnbatchschdul(crudVO); + // slave 테이블 삭제 + XitComtnbatchschduldfkVO slaveVO = new XitComtnbatchschduldfkVO(); + slaveVO.setBatch_schdul_id(vo.getBatchSchdulId()); + xitFrameCrudService.removesComtnbatchschduldfk(slaveVO); + // slave 테이블 인서트 + if (vo.getExecutSchdulDfkSes() != null && vo.getExecutSchdulDfkSes().length != 0) { + String batchSchdulId = vo.getBatchSchdulId(); + String [] dfkSes = vo.getExecutSchdulDfkSes(); + for (int i = 0; i < dfkSes.length; i++) { + slaveVO = new XitComtnbatchschduldfkVO(); + slaveVO.setBatch_schdul_id(batchSchdulId); + slaveVO.setExecut_schdul_dfk_se(dfkSes[i]); + xitFrameCrudService.addComtnbatchschduldfk(slaveVO); + } + } + + } + + @Override + public void removeProc(XitBatchScheduleMngVO vo) { + /** + * 필수값 설정 + */ + XitComtnbatchschdulVO crudVO = convertToCrudVO(vo); + + /** + * 처리 + */ + // slave 테이블 삭제 + XitComtnbatchschduldfkVO slaveVO = new XitComtnbatchschduldfkVO(); + slaveVO.setBatch_schdul_id(vo.getBatchSchdulId()); + xitFrameCrudService.removesComtnbatchschduldfk(slaveVO); + // master 테이블 delete + xitFrameCrudService.removesComtnbatchschdul(crudVO); + } + + @Override + public void removesProc(String ids) { + /** + * 처리 + */ + String [] primaryKey = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitComtnbatchschdulVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + private XitComtnbatchschdulVO convertToCrudVO(XitBatchScheduleMngVO vo) { + XitComtnbatchschdulVO crudVO = new XitComtnbatchschdulVO(); + crudVO.setBatch_schdul_id (vo.getBatchSchdulId()); //배치일정ID + crudVO.setBatch_opert_id (vo.getBatchOpertId()); //배치작업ID + crudVO.setExecut_cycle (vo.getExecutCycle()); //실행주기 + crudVO.setExecut_schdul_de (vo.getExecutSchdulDe()); //실행일정 일 + crudVO.setExecut_schdul_hour (vo.getExecutSchdulHour()); //실행일정 시 + crudVO.setExecut_schdul_mnt (vo.getExecutSchdulMnt()); //실행일정 분 + crudVO.setExecut_schdul_secnd(vo.getExecutSchdulSecnd()); //실행일정 초 +// crudVO.setFrst_register_id (vo.getFrstRegisterId()); //최초등록자ID +// crudVO.setFrst_regist_pnttm (vo.get); //최초등록시점 +// crudVO.setLast_updusr_id (vo.getLastUpdusrId()); //최종수정자ID +// crudVO.setLast_updt_pnttm (vo.get); //최종수정시점 + + return crudVO; + } + + @Override + public void addBatchResult(XitBatchResultMngVO vo) { + xitBatchResultMngService.addProc(vo); + } + + @Override + public void modifyBatchResult(XitBatchResultMngVO vo) { + xitBatchResultMngService.modifyProc(vo); + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/batch/schedule/web/XitBatchScheduleMngController.java b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/web/XitBatchScheduleMngController.java new file mode 100644 index 00000000..e2a9e999 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/batch/schedule/web/XitBatchScheduleMngController.java @@ -0,0 +1,422 @@ +package kr.xit.framework.biz.mng.batch.schedule.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngSearchVO; +import kr.xit.framework.biz.mng.batch.schedule.model.XitBatchScheduleMngVO; +import kr.xit.framework.biz.mng.batch.cmmn.service.BatchScheduler; +import kr.xit.framework.biz.mng.batch.schedule.service.XitBatchScheduleMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.XitCodeVO; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 배치스케줄관리 Controller + * @설명: + * @최초작성일: 2020. 7. 13. 오후 5:04:53 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/batch/schedule/") +public class XitBatchScheduleMngController { + + @Resource + private XitBatchScheduleMngService xitBatchScheduleMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; /** 배치스케줄러 서비스 */ + @Resource(name = "batchScheduler") + private BatchScheduler batchScheduler; + + + + /** + *
메소드 설명: 배치스케줄관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchScheduleMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchScheduleMng_list(@ModelAttribute("searchVO") XitBatchScheduleMngSearchVO searchVO, ModelMap model) { + + /** paging */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //List resultList = (List) xitBatchScheduleMngService.findList(searchVO); + //int totCnt = xitBatchScheduleMngService.findListTotCnt(searchVO); + + //paginationInfo.setTotalRecordCount(totCnt); + + //model.addAttribute("resultList", resultList); + //model.addAttribute("resultCnt", totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + //model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/schedule/XitBatchScheduleMng_list"; + } + + /** + *
메소드 설명: 배치스케줄 관리 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "BatchScheduleMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BatchScheduleMng_listAjax(@ModelAttribute("searchVO") XitBatchScheduleMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + List resultList = xitBatchScheduleMngService.findList(searchVO); + int totCnt = xitBatchScheduleMngService.findListTotCnt(searchVO); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", resultList); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchScheduleMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchScheduleMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBatchScheduleMngVO vo + , @ModelAttribute("searchVO") XitBatchScheduleMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + referenceData(model); + model.addAttribute("batchSchdul", vo); + break; + + case "edit": //수정 페이지 + referenceData(model); + model.addAttribute("batchSchdul", xitBatchScheduleMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + + case "view": //상세 페이지 + model.addAttribute("resultInfo", xitBatchScheduleMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/schedule/XitBatchScheduleMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchScheduleMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BatchScheduleMng_page_popup(@PathVariable String cmd + , @ModelAttribute("vo") XitBatchScheduleMngVO vo + , @ModelAttribute("searchVO") XitBatchScheduleMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/batch/schedule/XitBatchScheduleMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 배치스케줄관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 7. 13. + */ + @RequestMapping(value = "BatchScheduleMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BatchScheduleMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitBatchScheduleMngVO vo + ,@ModelAttribute("searchVO") XitBatchScheduleMngSearchVO searchVO + ,@RequestParam(value="batchSchdulIds", required=false, defaultValue="") String batchSchdulIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("batchSchdul", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + vo.setLastUpdusrId(loginVO.getUniqId()); + // 배치스케줄 등록 + xitBatchScheduleMngService.addProc(vo); + // 배치스케줄러에 스케줄정보반영 + XitBatchScheduleMngVO target = xitBatchScheduleMngService.findView(vo); + batchScheduler.insertBatchSchdul(target); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + sLocationUrl = "redirect:/_mng_/batch/schedule/BatchScheduleMng_list.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("batchSchdul", vo, bindingResult); + if (bindingResult.hasErrors()) { + model.addAttribute("batchOpert", vo); + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + // 배치스케줄 수정 + xitBatchScheduleMngService.modifyProc(vo); + // 배치스케줄러에 스케줄정보반영 + XitBatchScheduleMngVO target = xitBatchScheduleMngService.findView(vo); + batchScheduler.updateBatchSchdul(target); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + // 배치스케줄러에 스케줄정보반영 + batchScheduler.deleteBatchSchdul(vo); + // 배치스케줄 삭제 + xitBatchScheduleMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/batch/schedule/BatchScheduleMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitBatchScheduleMngService.removesProc(batchSchdulIds); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + + /** + * Reference Data 를 설정한다. + * @param model 화면용spring Model객체 + * @throws Exception + */ + private void referenceData(ModelMap model) { + //DBMS종류코드목록을 코드정보로부터 조회 + List executCycleList = xitFrameCodeService.findCmmnDetailCodes("XIT047"); + model.addAttribute("executCycleList", executCycleList); + //요일구분코드목록을 코드정보로부터 조회 + List executSchdulDfkSeList = xitFrameCodeService.findCmmnDetailCodes("XIT074"); + model.addAttribute("executSchdulDfkSeList", executSchdulDfkSeList); + + // 실행스케줄 시, 분, 초 값 설정. + Map executSchdulHourList = new LinkedHashMap(); + for (int i = 0; i < 24; i++) { + if (i < 10) { + executSchdulHourList.put("0" + Integer.toString(i), "0" + Integer.toString(i)); + } else { + executSchdulHourList.put(Integer.toString(i), Integer.toString(i)); + } + } + model.addAttribute("executSchdulHourList", executSchdulHourList); + Map executSchdulMntList = new LinkedHashMap(); + for (int i = 0; i < 60; i++) { + if (i < 10) { + executSchdulMntList.put("0" + Integer.toString(i), "0" + Integer.toString(i)); + } else { + executSchdulMntList.put(Integer.toString(i), Integer.toString(i)); + } + } + model.addAttribute("executSchdulMntList", executSchdulMntList); + Map executSchdulSecndList = new LinkedHashMap(); + for (int i = 0; i < 60; i++) { + if (i < 10) { + executSchdulSecndList.put("0" + Integer.toString(i), "0" + Integer.toString(i)); + } else { + executSchdulSecndList.put(Integer.toString(i), Integer.toString(i)); + } + } + model.addAttribute("executSchdulSecndList", executSchdulSecndList); + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/basic/dao/XitBasicBbsMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/dao/XitBasicBbsMngMapper.java new file mode 100644 index 00000000..a8a71288 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/dao/XitBasicBbsMngMapper.java @@ -0,0 +1,67 @@ +package kr.xit.framework.biz.mng.bbs.basic.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngSearchVO; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngVO; + +/** + * + * @업무그룹명: 기본(공용)게시판 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitBasicBbsMngMapper { + + /** + *
메소드 설명: 기본(공용)게시판 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBasicBbsMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 기본(공용)게시판 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBasicBbsMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 기본(공용)게시판 상세정보 조회
+ * @param vo + * @return XitBasicBbsMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBasicBbsMngVO findView(XitBasicBbsMngVO vo) throws SQLException; + + + /** + *
메소드 설명: 게시물ID를 채번 한다.
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 12. + */ + public String findMaxNttId(); + /** + *
메소드 설명: 게시물번호를 채번 한다.
+ * @param m Map + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 12. + */ + public String findMaxNttNo(Map m); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/basic/model/XitBasicBbsMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/model/XitBasicBbsMngSearchVO.java new file mode 100644 index 00000000..1baeb136 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/model/XitBasicBbsMngSearchVO.java @@ -0,0 +1,378 @@ +package kr.xit.framework.biz.mng.bbs.basic.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 기본(공용)게시판 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBasicBbsMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 검색시작일 */ + private String searchBgnDe = ""; + + /** 검색조건 */ + private String searchCnd = ""; + + /** 검색종료일 */ + private String searchEndDe = ""; + + /** 검색단어 */ + private String searchWrd = ""; + + /** 정렬순서(DESC,ASC) */ + private long sortOrdr = 0L; + + /** 검색사용여부 */ + private String searchUseYn = ""; + + /** 현재페이지 */ + private int pageIndex = 1; + + /** 페이지갯수 */ + private int pageUnit = 10; + + /** 페이지사이즈 */ + private int pageSize = 10; + + /** 첫페이지 인덱스 */ + private int firstIndex = 1; + + /** 마지막페이지 인덱스 */ + private int lastIndex = 1; + + /** 페이지당 레코드 개수 */ + private int recordCountPerPage = 10; + + /** 레코드 번호 */ + private int rowNo = 0; + + /** 최초 등록자명 */ + private String frstRegisterNm = ""; + + /** 최종 수정자명 */ + private String lastUpdusrNm = ""; + + /** 게시판 속성 구분 (자료목록 조회(findList) 분기처리용) */ + private String attrbFlag; + + /** 게시판 ID */ + private String bbsId; + + + + + /** + * searchBgnDe attribute를 리턴한다. + * + * @return the searchBgnDe + */ + public String getSearchBgnDe() { + return searchBgnDe; + } + + /** + * searchBgnDe attribute 값을 설정한다. + * + * @param searchBgnDe + * the searchBgnDe to set + */ + public void setSearchBgnDe(String searchBgnDe) { + this.searchBgnDe = searchBgnDe; + } + + /** + * searchCnd attribute를 리턴한다. + * + * @return the searchCnd + */ + public String getSearchCnd() { + return searchCnd; + } + + /** + * searchCnd attribute 값을 설정한다. + * + * @param searchCnd + * the searchCnd to set + */ + public void setSearchCnd(String searchCnd) { + this.searchCnd = searchCnd; + } + + /** + * searchEndDe attribute를 리턴한다. + * + * @return the searchEndDe + */ + public String getSearchEndDe() { + return searchEndDe; + } + + /** + * searchEndDe attribute 값을 설정한다. + * + * @param searchEndDe + * the searchEndDe to set + */ + public void setSearchEndDe(String searchEndDe) { + this.searchEndDe = searchEndDe; + } + + /** + * searchWrd attribute를 리턴한다. + * + * @return the searchWrd + */ + public String getSearchWrd() { + return searchWrd; + } + + /** + * searchWrd attribute 값을 설정한다. + * + * @param searchWrd + * the searchWrd to set + */ + public void setSearchWrd(String searchWrd) { + this.searchWrd = searchWrd; + } + + /** + * sortOrdr attribute를 리턴한다. + * + * @return the sortOrdr + */ + public long getSortOrdr() { + return sortOrdr; + } + + /** + * sortOrdr attribute 값을 설정한다. + * + * @param sortOrdr + * the sortOrdr to set + */ + public void setSortOrdr(long sortOrdr) { + this.sortOrdr = sortOrdr; + } + + /** + * searchUseYn attribute를 리턴한다. + * + * @return the searchUseYn + */ + public String getSearchUseYn() { + return searchUseYn; + } + + /** + * searchUseYn attribute 값을 설정한다. + * + * @param searchUseYn + * the searchUseYn to set + */ + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + /** + * pageIndex attribute를 리턴한다. + * + * @return the pageIndex + */ + public int getPageIndex() { + return pageIndex; + } + + /** + * pageIndex attribute 값을 설정한다. + * + * @param pageIndex + * the pageIndex to set + */ + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + /** + * pageUnit attribute를 리턴한다. + * + * @return the pageUnit + */ + public int getPageUnit() { + return pageUnit; + } + + /** + * pageUnit attribute 값을 설정한다. + * + * @param pageUnit + * the pageUnit to set + */ + public void setPageUnit(int pageUnit) { + this.pageUnit = pageUnit; + } + + /** + * pageSize attribute를 리턴한다. + * + * @return the pageSize + */ + public int getPageSize() { + return pageSize; + } + + /** + * pageSize attribute 값을 설정한다. + * + * @param pageSize + * the pageSize to set + */ + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + /** + * firstIndex attribute를 리턴한다. + * + * @return the firstIndex + */ + public int getFirstIndex() { + return firstIndex; + } + + /** + * firstIndex attribute 값을 설정한다. + * + * @param firstIndex + * the firstIndex to set + */ + public void setFirstIndex(int firstIndex) { + this.firstIndex = firstIndex; + } + + /** + * lastIndex attribute를 리턴한다. + * + * @return the lastIndex + */ + public int getLastIndex() { + return lastIndex; + } + + /** + * lastIndex attribute 값을 설정한다. + * + * @param lastIndex + * the lastIndex to set + */ + public void setLastIndex(int lastIndex) { + this.lastIndex = lastIndex; + } + + /** + * recordCountPerPage attribute를 리턴한다. + * + * @return the recordCountPerPage + */ + public int getRecordCountPerPage() { + return recordCountPerPage; + } + + /** + * recordCountPerPage attribute 값을 설정한다. + * + * @param recordCountPerPage + * the recordCountPerPage to set + */ + public void setRecordCountPerPage(int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + + /** + * rowNo attribute를 리턴한다. + * + * @return the rowNo + */ + public int getRowNo() { + return rowNo; + } + + /** + * rowNo attribute 값을 설정한다. + * + * @param rowNo + * the rowNo to set + */ + public void setRowNo(int rowNo) { + this.rowNo = rowNo; + } + + /** + * frstRegisterNm attribute를 리턴한다. + * + * @return the frstRegisterNm + */ + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + /** + * frstRegisterNm attribute 값을 설정한다. + * + * @param frstRegisterNm + * the frstRegisterNm to set + */ + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + /** + * lastUpdusrNm attribute를 리턴한다. + * + * @return the lastUpdusrNm + */ + public String getLastUpdusrNm() { + return lastUpdusrNm; + } + + /** + * lastUpdusrNm attribute 값을 설정한다. + * + * @param lastUpdusrNm + * the lastUpdusrNm to set + */ + public void setLastUpdusrNm(String lastUpdusrNm) { + this.lastUpdusrNm = lastUpdusrNm; + } + + public String getAttrbFlag() { + return attrbFlag; + } + + public void setAttrbFlag(String attrbFlag) { + this.attrbFlag = attrbFlag; + } + + public String getBbsId() { + return bbsId; + } + + public void setBbsId(String bbsId) { + this.bbsId = bbsId; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/basic/model/XitBasicBbsMngVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/model/XitBasicBbsMngVO.java new file mode 100644 index 00000000..9cad70d6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/model/XitBasicBbsMngVO.java @@ -0,0 +1,750 @@ +package kr.xit.framework.biz.mng.bbs.basic.model; + +import java.util.List; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 기본(공용)게시판 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBasicBbsMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** + * 게시물 첨부파일 아이디 + */ + private String atchFileId; + /** + * 게시판 아이디 + */ + private String bbsId; + /** + * 최초등록자 아이디 + */ + private String frstRegisterId; + /** + * 최초등록자 아이디 명 + */ + private String frstRegisterNm; + /** + * 최초등록시점 + */ + private String frstRegisterPnttm; + /** + * 최종수정자 아이디 + */ + private String lastUpdusrId; + /** + * 최종수정시점 + */ + private String lastUpdusrPnttm; + /** + * 게시시작일 + */ + private String ntceBgnde; + /** + * 게시종료일 + */ + private String ntceEndde; + /** + * 게시자 아이디 + */ + private String ntcrId; + /** + * 게시자명 + */ + private String ntcrNm; + /** + * 게시물 내용 + */ + private String nttCn; + /** + * 게시물 아이디 + */ + private long nttId = 0L; + /** + * 게시물 번호 + */ + private long nttNo = 0L; + /** + * 게시물 제목 + */ + private String nttSj; + /** + * 부모글번호 + */ + private String parnts = "0"; + /** + * 패스워드 + */ + private String password; + /** + * 조회수 + */ + private int inqireCo = 0; + /** + * 답장여부 + */ + private String replyAt; + /** + * 답장위치 + */ + private String replyLc = "0"; + /** + * 정렬순서 + */ + private long sortOrdr = 0L; + /** + * 사용여부 + */ + private String useAt; + /** + * 게시 종료일 + */ + private String ntceEnddeView; + /** + * 게시 시작일 + */ + private String ntceBgndeView; + + /** 유효여부 */ + private String isExpired = "N"; + + /** 상위 정렬 순서 */ + private String parntsSortOrdr; + + /** 상위 답변 위치 */ + private String parntsReplyLc; + + /** 게시판 유형코드 */ + private String bbsTyCode; + + /** 게시판 속성코드 */ + private String bbsAttrbCode; + + /** 게시판 명 */ + private String bbsNm; + + /** 파일첨부가능여부 */ + private String fileAtchPosblAt; + + /** 첨부가능파일숫자 */ + private int posblAtchFileNumber = 0; + + /** 답장가능여부 */ + private String replyPosblAt; + + /** 조회 수 증가 여부 */ + private boolean plusCount = false; + + //--------------------------------- + // 2009.06.29 : 2단계 기능 추가 + //--------------------------------- + /** 하위 페이지 인덱스 (댓글 및 만족도 조사 여부 확인용) */ + private String subPageIndex; + ////------------------------------- + //--------------------------------- + // 2020.09.15 : tui-grid tree구조 변수 + //--------------------------------- + List _children; + + + /** + * atchFileId attribute를 리턴한다. + * @return the atchFileId + */ + public String getAtchFileId() { + return atchFileId; + } + + /** + * atchFileId attribute 값을 설정한다. + * @param atchFileId the atchFileId to set + */ + public void setAtchFileId(String atchFileId) { + this.atchFileId = atchFileId; + } + + /** + * bbsId attribute를 리턴한다. + * @return the bbsId + */ + public String getBbsId() { + return bbsId; + } + + /** + * bbsId attribute 값을 설정한다. + * @param bbsId the bbsId to set + */ + public void setBbsId(String bbsId) { + this.bbsId = bbsId; + } + + /** + * frstRegisterId attribute를 리턴한다. + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @param frstRegisterId the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * frstRegisterPnttm attribute를 리턴한다. + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * @param frstRegisterPnttm the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * lastUpdusrId attribute를 리턴한다. + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @param lastUpdusrId the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * lastUpdusrPnttm attribute를 리턴한다. + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * @param lastUpdusrPnttm the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * ntceBgnde attribute를 리턴한다. + * @return the ntceBgnde + */ + public String getNtceBgnde() { + return ntceBgnde; + } + + /** + * ntceBgnde attribute 값을 설정한다. + * @param ntceBgnde the ntceBgnde to set + */ + public void setNtceBgnde(String ntceBgnde) { + this.ntceBgnde = ntceBgnde; + } + + /** + * ntceEndde attribute를 리턴한다. + * @return the ntceEndde + */ + public String getNtceEndde() { + return ntceEndde; + } + + /** + * ntceEndde attribute 값을 설정한다. + * @param ntceEndde the ntceEndde to set + */ + public void setNtceEndde(String ntceEndde) { + this.ntceEndde = ntceEndde; + } + + /** + * ntcrId attribute를 리턴한다. + * @return the ntcrId + */ + public String getNtcrId() { + return ntcrId; + } + + /** + * ntcrId attribute 값을 설정한다. + * @param ntcrId the ntcrId to set + */ + public void setNtcrId(String ntcrId) { + this.ntcrId = ntcrId; + } + + /** + * ntcrNm attribute를 리턴한다. + * @return the ntcrNm + */ + public String getNtcrNm() { + return ntcrNm; + } + + /** + * ntcrNm attribute 값을 설정한다. + * @param ntcrNm the ntcrNm to set + */ + public void setNtcrNm(String ntcrNm) { + this.ntcrNm = ntcrNm; + } + + /** + * nttCn attribute를 리턴한다. + * @return the nttCn + */ + public String getNttCn() { + return nttCn; + } + + /** + * nttCn attribute 값을 설정한다. + * @param nttCn the nttCn to set + */ + public void setNttCn(String nttCn) { + this.nttCn = nttCn; + } + + /** + * nttId attribute를 리턴한다. + * @return the nttId + */ + public long getNttId() { + return nttId; + } + + /** + * nttId attribute 값을 설정한다. + * @param nttId the nttId to set + */ + public void setNttId(long nttId) { + this.nttId = nttId; + } + + /** + * nttNo attribute를 리턴한다. + * @return the nttNo + */ + public long getNttNo() { + return nttNo; + } + + /** + * nttNo attribute 값을 설정한다. + * @param nttNo the nttNo to set + */ + public void setNttNo(long nttNo) { + this.nttNo = nttNo; + } + + /** + * nttSj attribute를 리턴한다. + * @return the nttSj + */ + public String getNttSj() { + return nttSj; + } + + /** + * nttSj attribute 값을 설정한다. + * @param nttSj the nttSj to set + */ + public void setNttSj(String nttSj) { + this.nttSj = nttSj; + } + + /** + * parnts attribute를 리턴한다. + * @return the parnts + */ + public String getParnts() { + return parnts; + } + + /** + * parnts attribute 값을 설정한다. + * @param parnts the parnts to set + */ + public void setParnts(String parnts) { + this.parnts = parnts; + } + + /** + * password attribute를 리턴한다. + * @return the password + */ + public String getPassword() { + return password; + } + + /** + * password attribute 값을 설정한다. + * @param password the password to set + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * inqireCo attribute를 리턴한다. + * @return the inqireCo + */ + public int getInqireCo() { + return inqireCo; + } + + /** + * inqireCo attribute 값을 설정한다. + * @param inqireCo the inqireCo to set + */ + public void setInqireCo(int inqireCo) { + this.inqireCo = inqireCo; + } + + /** + * replyAt attribute를 리턴한다. + * @return the replyAt + */ + public String getReplyAt() { + return replyAt; + } + + /** + * replyAt attribute 값을 설정한다. + * @param replyAt the replyAt to set + */ + public void setReplyAt(String replyAt) { + this.replyAt = replyAt; + } + + /** + * replyLc attribute를 리턴한다. + * @return the replyLc + */ + public String getReplyLc() { + return replyLc; + } + + /** + * replyLc attribute 값을 설정한다. + * @param replyLc the replyLc to set + */ + public void setReplyLc(String replyLc) { + this.replyLc = replyLc; + } + + /** + * sortOrdr attribute를 리턴한다. + * @return the sortOrdr + */ + public long getSortOrdr() { + return sortOrdr; + } + + /** + * sortOrdr attribute 값을 설정한다. + * @param sortOrdr the sortOrdr to set + */ + public void setSortOrdr(long sortOrdr) { + this.sortOrdr = sortOrdr; + } + + /** + * useAt attribute를 리턴한다. + * @return the useAt + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * @param useAt the useAt to set + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * ntceEnddeView attribute를 리턴한다. + * @return the ntceEnddeView + */ + public String getNtceEnddeView() { + return ntceEnddeView; + } + + /** + * ntceEnddeView attribute 값을 설정한다. + * @param ntceEnddeView the ntceEnddeView to set + */ + public void setNtceEnddeView(String ntceEnddeView) { + this.ntceEnddeView = ntceEnddeView; + } + + /** + * ntceBgndeView attribute를 리턴한다. + * @return the ntceBgndeView + */ + public String getNtceBgndeView() { + return ntceBgndeView; + } + + /** + * ntceBgndeView attribute 값을 설정한다. + * @param ntceBgndeView the ntceBgndeView to set + */ + public void setNtceBgndeView(String ntceBgndeView) { + this.ntceBgndeView = ntceBgndeView; + } + + /** + * isExpired attribute를 리턴한다. + * + * @return the isExpired + */ + public String getIsExpired() { + return isExpired; + } + + /** + * isExpired attribute 값을 설정한다. + * + * @param isExpired + * the isExpired to set + */ + public void setIsExpired(String isExpired) { + this.isExpired = isExpired; + } + + /** + * parntsSortOrdr attribute를 리턴한다. + * + * @return the parntsSortOrdr + */ + public String getParntsSortOrdr() { + return parntsSortOrdr; + } + + /** + * parntsSortOrdr attribute 값을 설정한다. + * + * @param parntsSortOrdr + * the parntsSortOrdr to set + */ + public void setParntsSortOrdr(String parntsSortOrdr) { + this.parntsSortOrdr = parntsSortOrdr; + } + + /** + * parntsReplyLc attribute를 리턴한다. + * + * @return the parntsReplyLc + */ + public String getParntsReplyLc() { + return parntsReplyLc; + } + + /** + * parntsReplyLc attribute 값을 설정한다. + * + * @param parntsReplyLc + * the parntsReplyLc to set + */ + public void setParntsReplyLc(String parntsReplyLc) { + this.parntsReplyLc = parntsReplyLc; + } + + /** + * bbsTyCode attribute를 리턴한다. + * + * @return the bbsTyCode + */ + public String getBbsTyCode() { + return bbsTyCode; + } + + /** + * bbsTyCode attribute 값을 설정한다. + * + * @param bbsTyCode + * the bbsTyCode to set + */ + public void setBbsTyCode(String bbsTyCode) { + this.bbsTyCode = bbsTyCode; + } + + /** + * bbsAttrbCode attribute를 리턴한다. + * + * @return the bbsAttrbCode + */ + public String getBbsAttrbCode() { + return bbsAttrbCode; + } + + /** + * bbsAttrbCode attribute 값을 설정한다. + * + * @param bbsAttrbCode + * the bbsAttrbCode to set + */ + public void setBbsAttrbCode(String bbsAttrbCode) { + this.bbsAttrbCode = bbsAttrbCode; + } + + /** + * bbsNm attribute를 리턴한다. + * + * @return the bbsNm + */ + public String getBbsNm() { + return bbsNm; + } + + /** + * bbsNm attribute 값을 설정한다. + * + * @param bbsNm + * the bbsNm to set + */ + public void setBbsNm(String bbsNm) { + this.bbsNm = bbsNm; + } + + /** + * fileAtchPosblAt attribute를 리턴한다. + * + * @return the fileAtchPosblAt + */ + public String getFileAtchPosblAt() { + return fileAtchPosblAt; + } + + /** + * fileAtchPosblAt attribute 값을 설정한다. + * + * @param fileAtchPosblAt + * the fileAtchPosblAt to set + */ + public void setFileAtchPosblAt(String fileAtchPosblAt) { + this.fileAtchPosblAt = fileAtchPosblAt; + } + + /** + * posblAtchFileNumber attribute를 리턴한다. + * + * @return the posblAtchFileNumber + */ + public int getPosblAtchFileNumber() { + return posblAtchFileNumber; + } + + /** + * posblAtchFileNumber attribute 값을 설정한다. + * + * @param posblAtchFileNumber + * the posblAtchFileNumber to set + */ + public void setPosblAtchFileNumber(int posblAtchFileNumber) { + this.posblAtchFileNumber = posblAtchFileNumber; + } + + /** + * replyPosblAt attribute를 리턴한다. + * + * @return the replyPosblAt + */ + public String getReplyPosblAt() { + return replyPosblAt; + } + + /** + * replyPosblAt attribute 값을 설정한다. + * + * @param replyPosblAt + * the replyPosblAt to set + */ + public void setReplyPosblAt(String replyPosblAt) { + this.replyPosblAt = replyPosblAt; + } + + /** + * plusCount attribute를 리턴한다. + * @return the plusCount + */ + public boolean isPlusCount() { + return plusCount; + } + + /** + * plusCount attribute 값을 설정한다. + * @param plusCount the plusCount to set + */ + public void setPlusCount(boolean plusCount) { + this.plusCount = plusCount; + } + + /** + * subPageIndex attribute를 리턴한다. + * @return the subPageIndex + */ + public String getSubPageIndex() { + return subPageIndex; + } + + /** + * subPageIndex attribute 값을 설정한다. + * @param subPageIndex the subPageIndex to set + */ + public void setSubPageIndex(String subPageIndex) { + this.subPageIndex = subPageIndex; + } + + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + public List get_children() { + return _children; + } + + public void set_children(List _children) { + this._children = _children; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/basic/service/XitBasicBbsMngService.java b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/service/XitBasicBbsMngService.java new file mode 100644 index 00000000..2b2b7d0b --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/service/XitBasicBbsMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.bbs.basic.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngSearchVO; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngVO; + +/** + * + * @업무그룹명: 기본(공용)게시판 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBasicBbsMngService { + + + /** + *
메소드 설명: 기본(공용)게시판 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBasicBbsMngSearchVO searchVO); + + /** + *
메소드 설명: 기본(공용)게시판 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBasicBbsMngSearchVO searchVO); + + /** + *
메소드 설명: 기본(공용)게시판 상세정보 조회
+ * @param vo + * @return XitBasicBbsMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBasicBbsMngVO findView(XitBasicBbsMngVO vo); + + /** + *
메소드 설명: 기본(공용)게시판 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitBasicBbsMngVO vo); + + /** + *
메소드 설명: 기본(공용)게시판 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitBasicBbsMngVO vo); + + /** + *
메소드 설명: 기본(공용)게시판 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitBasicBbsMngVO vo); + + /** + *
메소드 설명: 기본(공용)게시판 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/basic/service/impl/XitBasicBbsMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/service/impl/XitBasicBbsMngServiceImpl.java new file mode 100644 index 00000000..73b0c446 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/service/impl/XitBasicBbsMngServiceImpl.java @@ -0,0 +1,225 @@ +package kr.xit.framework.biz.mng.bbs.basic.service.impl; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitBbsVO; +import kr.xit.framework.biz.cmm.model.XitFileAttrbVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngSearchVO; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngVO; +import kr.xit.framework.biz.mng.bbs.basic.service.XitBasicBbsMngService; +import kr.xit.framework.biz.mng.bbs.basic.dao.XitBasicBbsMngMapper; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.egov.EgovDateUtil; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitBasicBbsMngServiceImpl implements XitBasicBbsMngService { + + @Resource + private XitBasicBbsMngMapper xitBasicBbsMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitBasicBbsMngSearchVO searchVO) { + List result = new ArrayList(); + try { + List list = xitBasicBbsMngMapper.findList(searchVO); + + + if ("BBSA01".equals(searchVO.getAttrbFlag())) { + // 유효게시판 임 + String today = XitCmmnUtil.getToDate("yyyyMMdd"); + + XitBasicBbsMngVO vo = null; + Iterator iter = list.iterator(); + while (iter.hasNext()) { + vo = (XitBasicBbsMngVO)iter.next(); + + if (!"".equals(vo.getNtceBgnde()) || !"".equals(vo.getNtceEndde())) { + if (EgovDateUtil.getDaysDiff(today, vo.getNtceBgnde()) > 0 || EgovDateUtil.getDaysDiff(today, vo.getNtceEndde()) < 0) { + // 시작일이 오늘날짜보다 크거나, 종료일이 오늘 날짜보다 작은 경우 + vo.setIsExpired("Y"); + } + } + result.add(vo); + } + } else { + result = list; + } + + } catch (SQLException e) { + throw new RuntimeException("기본(공용)게시판 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitBasicBbsMngSearchVO searchVO) { + int result = 0; + try { + result = xitBasicBbsMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("기본(공용)게시판 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBasicBbsMngVO findView(XitBasicBbsMngVO vo) { + XitBasicBbsMngVO result = null; + try { + //게시글 조회건수 업데이트 + if(vo.isPlusCount()) + xitFrameUnitService.modifyBbsRdcnt(vo.getBbsId(), String.valueOf(vo.getNttId()), vo.getLastUpdusrId()); + + //조회 + result = xitBasicBbsMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("기본(공용)게시판 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBasicBbsMngVO vo) { + /** + * 필수값 설정 + */ + //댓글여부 + boolean isReply = "Y".equals(vo.getReplyAt()); + //게시판VO + XitBbsVO bbsVO = convertToCrudVO(vo); + bbsVO.setNtt_id(xitBasicBbsMngMapper.findMaxNttId()); + bbsVO.setFrst_register_id(vo.getFrstRegisterId()); + + + /** + * 처리 + * -댓글여부에 따라 분기 + */ + if(isReply) { + //게시물번호 채번 + Map m = new HashMap(); + m.put("bbsId", bbsVO.getBbs_id()); + m.put("parntsSntncNo", bbsVO.getParnts_sntnc_no()); + bbsVO.setNtt_no(xitBasicBbsMngMapper.findMaxNttNo(m)); + //게시물 등록 + xitFrameCrudService.addXitBbs(bbsVO); + }else { + //댓글이 아닌 경우 초기설정 + bbsVO.setParnts_sntnc_no("0"); //부모 게시물번호 + bbsVO.setAnswer_lc("0"); //댓글위치 + bbsVO.setAnswer_at("N"); //댓글여부 + //게시물 등록 + xitFrameCrudService.addXitBbs(bbsVO); + } + + } + + @Override + public void modifyProc(XitBasicBbsMngVO vo) { + /** + * 필수값 설정 + */ + XitBbsVO bbsVO = convertToCrudVO(vo); + bbsVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitBbs(bbsVO); + } + + @Override + public void removeProc(XitBasicBbsMngVO vo) { + /** + * 필수값 설정 + */ + //게시판VO + XitBbsVO bbsVO = new XitBbsVO(); + bbsVO.setBbs_id(vo.getBbsId()); + bbsVO.setNtt_id(vo.getNttId()+""); + bbsVO.setNtt_sj("이 글은 작성자에 의해서 삭제되었습니다."); + bbsVO.setLast_updusr_id(vo.getLastUpdusrId()); + bbsVO.setUse_at("N"); + //파일속성VO + XitFileAttrbVO fileAttrbVO = null; + if(XitCmmnUtil.notEmpty(vo.getAtchFileId())) { + fileAttrbVO = new XitFileAttrbVO(); + fileAttrbVO.setAtch_file_id(vo.getAtchFileId()); + fileAttrbVO.setUse_at("N"); + } + + /** + * 처리 + * -게시물 및 첨부파일 사용여부 상태를 변경 한다. + */ + xitFrameCrudService.modifyXitBbs(bbsVO); + if(fileAttrbVO != null) + xitFrameCrudService.modifyXitFileAttrb(fileAttrbVO); + + } + + @Override + public void removesProc(String ids, String userId) { +// /** +// * 처리 +// */ +// String [] codeIds = ids.split(";"); +// for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitBbsVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitBbsVO convertToCrudVO(XitBasicBbsMngVO vo) { + XitBbsVO crudVO = new XitBbsVO(); + crudVO.setBbs_id(vo.getBbsId()); //게시판 id + crudVO.setNtt_id(vo.getNttId()+""); //게시물 id + crudVO.setNtt_no(vo.getNttNo()+""); //게시물 번호 + crudVO.setNtt_sj(vo.getNttSj()); //게시물 제목 + crudVO.setNtt_cn(vo.getNttCn()); //게시물 내용 + crudVO.setAnswer_at(vo.getReplyAt()); //댓글 여부 + crudVO.setParnts_sntnc_no(vo.getParnts()); //부모 글 번호 + crudVO.setAnswer_lc(vo.getReplyLc()); //댓글 위치 + crudVO.setSort_ordr(vo.getSortOrdr()+""); //정렬 순서 +// crudVO.setRdcnt(vo.getInqireCo()+""); //조회수 + crudVO.setUse_at(vo.getUseAt()); //사용 여부 + crudVO.setNtce_begin_de(vo.getNtceBgnde()); //게시 시작 일 + crudVO.setNtce_end_de(vo.getNtceEndde()); //게시 종료 일 + crudVO.setNtcr_id(vo.getNtcrId()); //게시자 id + crudVO.setNtcr_nm(vo.getNtcrNm()); //게시자 명 + crudVO.setPassword(vo.getPassword()); //비밀번호 + crudVO.setAtch_file_id(vo.getAtchFileId()); //첨부 파일 id + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/basic/web/XitBasicBbsMngController.java b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/web/XitBasicBbsMngController.java new file mode 100644 index 00000000..35bdde19 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/basic/web/XitBasicBbsMngController.java @@ -0,0 +1,711 @@ +package kr.xit.framework.biz.mng.bbs.basic.web; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngSearchVO; +import kr.xit.framework.biz.mng.bbs.basic.model.XitBasicBbsMngVO; +import kr.xit.framework.biz.mng.bbs.basic.service.XitBasicBbsMngService; +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngVO; +import kr.xit.framework.biz.mng.bbs.create.service.XitBbsCreateMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.XitAttachFileRespVO; +import kr.xit.framework.core.model.XitRollingNotiVO; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileOptionVO; +import kr.xit.framework.core.utils.attachfile.XitAttachFileUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileVO; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 기본(공용)게시판 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/bbs/basic/") +public class XitBasicBbsMngController { + + @Resource + private XitBasicBbsMngService xitBasicBbsMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + @Resource + private XitBbsCreateMngService xitBbsCreateMngService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitRollingNotiVO xitRollingNotiVO; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + @Value("#{prop['Globals.Xit.File.UploadPath']}") + private String FILE_UPLOAD_PATH; + + /** + *
메소드 설명: 기본(공용)게시판 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BasicBbsMng_{bbsId}_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BasicBbsMng_list(@ModelAttribute("searchVO") XitBasicBbsMngSearchVO searchVO, ModelMap model + ,@PathVariable String bbsId + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + ) { + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + + XitBbsCreateMngVO bbsCreateMngVO = new XitBbsCreateMngVO(); + bbsCreateMngVO.setBbsId(searchVO.getBbsId()); + bbsCreateMngVO.setUniqId(loginVO.getUniqId()); + XitBbsCreateMngVO master = xitBbsCreateMngService.findView(bbsCreateMngVO); + + //------------------------------- + // 방명록이면 방명록 URL로 forward + //------------------------------- + if (master.getBbsTyCode().equals("BBST04")) { + return "forward:/cop/bbs/selectGuestList.do"; + } + ////----------------------------- + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + PaginationInfo paginationInfo = new PaginationInfo(); + + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + searchVO.setAttrbFlag(bbsCreateMngVO.getBbsAttrbCode()); + List resultList = xitBasicBbsMngService.findList(searchVO); + int totCnt = xitBasicBbsMngService.findListTotCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + //------------------------------- + // 기본 BBS template 지정 + //------------------------------- + if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) { + master.setTmplatCours("/resources/css/egovframework/cop/bbs/egovBaseTemplate.css"); + } + ////----------------------------- + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("boardVO", searchVO); + model.addAttribute("brdMstrVO", master); + model.addAttribute("paginationInfo", paginationInfo); + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/basic/XitBasicBbsMng_list"+tilesDef; + } + + + /** + *
메소드 설명: 기본(공용)게시판 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 11. + */ + @RequestMapping(value = "BasicBbsMng_{bbsId}_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BasicBbsMng_listAjax(@ModelAttribute("searchVO") XitBasicBbsMngSearchVO searchVO, ModelMap model + ,@PathVariable String bbsId + ) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitBasicBbsMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitBasicBbsMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + + } + + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd String + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BasicBbsMng_{bbsId}_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BasicBbsMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBasicBbsMngVO vo + , @ModelAttribute("searchVO") XitBasicBbsMngSearchVO searchVO + , ModelMap model + , @PathVariable String bbsId + ) { + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + XitBasicBbsMngVO result = null; + XitBbsCreateMngVO bbsCreateMngVO = null; + XitBbsCreateMngVO master = null; + switch (cmd) { + case "input": //등록 페이지 + case "inputReply": //답글 등록 페이지 + + /* ********************** + * 게시판생성관리 상세정보 조회 + ********************** */ + bbsCreateMngVO = new XitBbsCreateMngVO(); + bbsCreateMngVO.setBbsId(searchVO.getBbsId()); + bbsCreateMngVO.setUniqId(loginVO.getUniqId()); + master = xitBbsCreateMngService.findView(bbsCreateMngVO); + model.addAttribute("bdMstr", master); + model.addAttribute("result", vo); + //---------------------------- + // 기본 BBS template 지정 + //---------------------------- + if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) { + master.setTmplatCours("/resources/css/egovframework/cop/bbs/egovBaseTemplate.css"); + } + + model.addAttribute("brdMstrVO", master); + ////----------------------------- + break; + case "edit": //수정 페이지 + + /* ********************** + * 게시글 상세정보 조회 + ********************** */ + result = xitBasicBbsMngService.findView(vo); + model.addAttribute("result", result); + + + /* ********************** + * 게시판생성관리 상세정보 조회 + ********************** */ + bbsCreateMngVO = new XitBbsCreateMngVO(); + bbsCreateMngVO.setBbsId(searchVO.getBbsId()); + bbsCreateMngVO.setUniqId(loginVO.getUniqId()); + master = xitBbsCreateMngService.findView(bbsCreateMngVO); + model.addAttribute("bdMstr", master); + //---------------------------- + // 기본 BBS template 지정 + //---------------------------- + if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) { + master.setTmplatCours("/resources/css/egovframework/cop/bbs/egovBaseTemplate.css"); + } + + model.addAttribute("brdMstrVO", master); + + break; + case "view": //상세 페이지 + + /* ********************** + * 게시글 상세정보 조회 + ********************** */ + // 조회수 증가 여부 지정 + vo.setPlusCount(true); + if (XitCmmnUtil.notEmpty(vo.getSubPageIndex())) { + vo.setPlusCount(false); + } + ////------------------------------- + vo.setLastUpdusrId(loginVO.getUniqId()); + result = xitBasicBbsMngService.findView(vo); + + model.addAttribute("result", result); + model.addAttribute("sessionUniqId", loginVO.getUniqId()); + + + /* ********************** + * 게시판생성관리 상세정보 조회 + ********************** */ + bbsCreateMngVO = new XitBbsCreateMngVO(); + bbsCreateMngVO.setBbsId(searchVO.getBbsId()); + bbsCreateMngVO.setUniqId(loginVO.getUniqId()); + master = xitBbsCreateMngService.findView(bbsCreateMngVO); + //---------------------------- + // template 처리 (기본 BBS template 지정 포함) + //---------------------------- + if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) { + master.setTmplatCours("/resources/css/egovframework/cop/bbs/egovBaseTemplate.css"); + } + + model.addAttribute("brdMstrVO", master); + break; + + case "preview": //미리보기 게시판 + String template = searchVO.getSearchWrd(); // 템플릿 URL + + master = new XitBbsCreateMngVO(); + + master.setBbsNm("미리보기 게시판"); + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + PaginationInfo paginationInfo = new PaginationInfo(); + + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + XitBasicBbsMngVO target = null; + List list = new ArrayList(); + + target = new XitBasicBbsMngVO(); + target.setNttSj("게시판 기능 설명"); + target.setFrstRegisterId("ID"); + target.setFrstRegisterNm("관리자"); + target.setFrstRegisterPnttm("2009-01-01"); + target.setInqireCo(7); + target.setParnts("0"); + target.setReplyAt("N"); + target.setReplyLc("0"); + target.setUseAt("Y"); + + list.add(target); + + target = new XitBasicBbsMngVO(); + target.setNttSj("게시판 부가 기능 설명"); + target.setFrstRegisterId("ID"); + target.setFrstRegisterNm("관리자"); + target.setFrstRegisterPnttm("2009-01-01"); + target.setInqireCo(7); + target.setParnts("0"); + target.setReplyAt("N"); + target.setReplyLc("0"); + target.setUseAt("Y"); + + list.add(target); + + searchVO.setSearchWrd(""); + + int totCnt = list.size(); + + paginationInfo.setTotalRecordCount(totCnt); + + master.setTmplatCours(template); + + model.addAttribute("resultList", list); + model.addAttribute("resultCnt", Integer.toString(totCnt)); + model.addAttribute("boardVO", searchVO); + model.addAttribute("brdMstrVO", master); + model.addAttribute("paginationInfo", paginationInfo); + + model.addAttribute("preview", "true"); + + cmd = "list"; + break; + + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/basic/XitBasicBbsMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BasicBbsMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BasicBbsMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitBasicBbsMngSearchVO searchVO + , @ModelAttribute XitBasicBbsMngVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/basic/XitBasicBbsMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 기본(공용)게시판 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BasicBbsMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BasicBbsMng_cmd_proc(HttpServletRequest req + ,@PathVariable String cmd + ,@ModelAttribute("vo") XitBasicBbsMngVO vo + ,@ModelAttribute("searchVO") XitBasicBbsMngSearchVO searchVO + ,@RequestParam(value="codeIds", required=false, defaultValue="") String codeIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_list.do"; + String resultMsg = null; + /* ---------------------- + * 첨부파일 관련 변수 선언 + ---------------------- */ + String uploadPath = XitCmmnUtil.setOsPath(FILE_UPLOAD_PATH); //파일업로드 경로 + XitAttachFileOptionVO optionVO = new XitAttachFileOptionVO(); //파일업로드 옵션 + List listAttachFileVO = null; //파일업로드된 파일목록 + XitAttachFileRespVO attachFileVO = null; //첨부파일 DB 처리 결과목록 + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("board", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_input.do"; + break; + } + + //첨부파일 업로드 + optionVO.setFileNmMask(true); //파일명 마스킹 여부 + optionVO.setFileNmMaskPrefix("BBS_"); //파일명 마스킹 prefix 문자 + try { + listAttachFileVO = XitAttachFileUtil.fileUpload(req, uploadPath, optionVO); + } catch (Exception e) { + throw new RuntimeException(String.format("file upload fail:::%s", e.getMessage())); + } + + //처리 + try { + //첨부파일 DB 등록 + String atchFileId = null; + if(XitCmmnUtil.notEmpty(listAttachFileVO)) { + attachFileVO = xitFrameUnitService.addAttachFileInfo(listAttachFileVO); + atchFileId = attachFileVO.getAtch_file_id(); + } + //게시물 등록 + vo.setAtchFileId(atchFileId); //첨부파일ID + vo.setNttCn(this.unscript(vo.getNttCn())); //XSS 방지 + vo.setFrstRegisterId(loginVO.getUniqId()); + xitBasicBbsMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "insertReply": //답글 등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("board", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_input.do"; + break; + } + + //첨부파일 업로드 + optionVO.setFileNmMask(true); //파일명 마스킹 여부 + optionVO.setFileNmMaskPrefix("BBS_"); //파일명 마스킹 prefix 문자 + try { + listAttachFileVO = XitAttachFileUtil.fileUpload(req, uploadPath, optionVO); + } catch (Exception e) { + throw new RuntimeException(String.format("file upload fail:::%s", e.getMessage())); + } + + //처리 + try { + //첨부파일 DB 등록 + String atchFileId = null; + if(XitCmmnUtil.notEmpty(listAttachFileVO)) { + attachFileVO = xitFrameUnitService.addAttachFileInfo(listAttachFileVO); + atchFileId = attachFileVO.getAtch_file_id(); + } + //게시물 등록 + vo.setReplyAt("Y"); //답글여부 + vo.setParnts(vo.getNttId()+""); //부모 게시물ID + vo.setReplyLc(Integer.toString(Integer.parseInt(vo.getReplyLc()) + 1)); //답장위치 + vo.setAtchFileId(atchFileId); //첨부파일ID + vo.setNttCn(this.unscript(vo.getNttCn())); //XSS 방지 + vo.setFrstRegisterId(loginVO.getUniqId()); + xitBasicBbsMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_input.do"; + } + break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("board", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_edit.do"; + break; + } + + //첨부파일 업로드 + optionVO.setFileNmMask(true); //파일명 마스킹 여부 + optionVO.setFileNmMaskPrefix("BBS_"); //파일명 마스킹 prefix 문자 + try { + listAttachFileVO = XitAttachFileUtil.fileUpload(req, uploadPath, optionVO); + } catch (Exception e) { + throw new RuntimeException(String.format("file upload fail:::%s", e.getMessage())); + } + + //처리 + try { + //첨부파일 DB 등록 + String atchFileId = null; + if(XitCmmnUtil.notEmpty(listAttachFileVO)) { + //기등록 파일유무에 따라 분기 + if(XitCmmnUtil.isEmpty(vo.getAtchFileId())) { + attachFileVO = xitFrameUnitService.addAttachFileInfo(listAttachFileVO); + atchFileId = attachFileVO.getAtch_file_id(); + }else { + attachFileVO = xitFrameUnitService.addAttachFileInfo(listAttachFileVO, vo.getAtchFileId()); + atchFileId = attachFileVO.getAtch_file_id(); + } + } + //게시물 수정 + vo.setAtchFileId(atchFileId); //첨부파일ID + vo.setNttCn(this.unscript(vo.getNttCn())); //XSS 방지 + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBasicBbsMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_view.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBasicBbsMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/bbs/basic/BasicBbsMng_"+vo.getBbsId()+"_edit.do"; + } + break; + +// case "deletes": //다건 삭제 +// //처리 +// try { +// xitBasicBbsMngService.removesProc(codeIds, loginVO.getUniqId()); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.delete"); +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.delete"); +// } +// break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + /** + * Rolling 공지사항 적용 + * -공지사항 게시글의 변경 내용을 Rolling 공지사항 목록에 반영 한다. + */ + XitRollingNotiVO notiVO = xitRollingNotiVO; + if(XitCmmnUtil.notEmpty(notiVO.getBbsId())) { //BBS_ID 값이 없으면 롤링 미사용으로 간주(globals.properties의 Globals.Xit.RollingNotiBbsId 에서 설정 가능) + if(notiVO.getBbsId().equals(vo.getBbsId())) { + notiVO.setList(xitFrameUnitService.findLatestBbsList(true)); + } + } + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + + + + /** + * XSS 방지 처리. + * + * @param data + * @return + */ + protected String unscript(String data) { + if (data == null || data.trim().equals("")) { + return "framework/egov/"; + } + + String ret = data; + + ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); + ret = ret.replaceAll("메소드 설명: 게시판생성관리 목록 조회 + * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBbsCreateMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 게시판생성관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBbsCreateMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 게시판생성관리 상세정보 조회
+ * @param vo + * @return XitBbsCreateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBbsCreateMngVO findView(XitBbsCreateMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/create/model/XitBbsCreateMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/create/model/XitBbsCreateMngSearchVO.java new file mode 100644 index 00000000..a6747f6b --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/create/model/XitBbsCreateMngSearchVO.java @@ -0,0 +1,354 @@ +package kr.xit.framework.biz.mng.bbs.create.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 게시판생성관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsCreateMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 검색시작일 */ + private String searchBgnDe = ""; + + /** 검색조건 */ + private String searchCnd = ""; + + /** 검색종료일 */ + private String searchEndDe = ""; + + /** 검색단어 */ + private String searchWrd = ""; + + /** 정렬순서(DESC,ASC) */ + private String sortOrdr = ""; + + /** 검색사용여부 */ + private String searchUseYn = ""; + + /** rowNo */ + private int rowNo = 0; + + /** 최초 등록자명 */ + private String frstRegisterNm = ""; + + /** 게시판유형 코드명 */ + private String bbsTyCodeNm = ""; + + /** 게시판속성 코드명 */ + private String bbsAttrbCodeNm = ""; + + /** 템플릿 명 */ + private String tmplatNm = ""; + + /** 최종 수정자명 */ + private String lastUpdusrNm = ""; + + /** 권한지정 여부 */ + private String authFlag = ""; + + /** 템플릿경로 */ + private String tmplatCours = ""; + + /** 사용여부 */ + private String useAt = ""; + + /** 유일 아이디 */ + private String uniqId = ""; + + /** + * searchBgnDe attribute를 리턴한다. + * + * @return the searchBgnDe + */ + public String getSearchBgnDe() { + return searchBgnDe; + } + + /** + * searchBgnDe attribute 값을 설정한다. + * + * @param searchBgnDe + * the searchBgnDe to set + */ + public void setSearchBgnDe(String searchBgnDe) { + this.searchBgnDe = searchBgnDe; + } + + /** + * searchCnd attribute를 리턴한다. + * + * @return the searchCnd + */ + public String getSearchCnd() { + return searchCnd; + } + + /** + * searchCnd attribute 값을 설정한다. + * + * @param searchCnd + * the searchCnd to set + */ + public void setSearchCnd(String searchCnd) { + this.searchCnd = searchCnd; + } + + /** + * searchEndDe attribute를 리턴한다. + * + * @return the searchEndDe + */ + public String getSearchEndDe() { + return searchEndDe; + } + + /** + * searchEndDe attribute 값을 설정한다. + * + * @param searchEndDe + * the searchEndDe to set + */ + public void setSearchEndDe(String searchEndDe) { + this.searchEndDe = searchEndDe; + } + + /** + * searchWrd attribute를 리턴한다. + * + * @return the searchWrd + */ + public String getSearchWrd() { + return searchWrd; + } + + /** + * searchWrd attribute 값을 설정한다. + * + * @param searchWrd + * the searchWrd to set + */ + public void setSearchWrd(String searchWrd) { + this.searchWrd = searchWrd; + } + + /** + * sortOrdr attribute를 리턴한다. + * + * @return the sortOrdr + */ + public String getSortOrdr() { + return sortOrdr; + } + + /** + * sortOrdr attribute 값을 설정한다. + * + * @param sortOrdr + * the sortOrdr to set + */ + public void setSortOrdr(String sortOrdr) { + this.sortOrdr = sortOrdr; + } + + /** + * searchUseYn attribute를 리턴한다. + * + * @return the searchUseYn + */ + public String getSearchUseYn() { + return searchUseYn; + } + + /** + * searchUseYn attribute 값을 설정한다. + * + * @param searchUseYn + * the searchUseYn to set + */ + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + + /** + * rowNo attribute를 리턴한다. + * + * @return the rowNo + */ + public int getRowNo() { + return rowNo; + } + + /** + * rowNo attribute 값을 설정한다. + * + * @param rowNo + * the rowNo to set + */ + public void setRowNo(int rowNo) { + this.rowNo = rowNo; + } + + /** + * frstRegisterNm attribute를 리턴한다. + * + * @return the frstRegisterNm + */ + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + /** + * frstRegisterNm attribute 값을 설정한다. + * + * @param frstRegisterNm + * the frstRegisterNm to set + */ + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + /** + * bbsTyCodeNm attribute를 리턴한다. + * + * @return the bbsTyCodeNm + */ + public String getBbsTyCodeNm() { + return bbsTyCodeNm; + } + + /** + * bbsTyCodeNm attribute 값을 설정한다. + * + * @param bbsTyCodeNm + * the bbsTyCodeNm to set + */ + public void setBbsTyCodeNm(String bbsTyCodeNm) { + this.bbsTyCodeNm = bbsTyCodeNm; + } + + /** + * bbsAttrbCodeNm attribute를 리턴한다. + * + * @return the bbsAttrbCodeNm + */ + public String getBbsAttrbCodeNm() { + return bbsAttrbCodeNm; + } + + /** + * bbsAttrbCodeNm attribute 값을 설정한다. + * + * @param bbsAttrbCodeNm + * the bbsAttrbCodeNm to set + */ + public void setBbsAttrbCodeNm(String bbsAttrbCodeNm) { + this.bbsAttrbCodeNm = bbsAttrbCodeNm; + } + + /** + * tmplatNm attribute를 리턴한다. + * + * @return the tmplatNm + */ + public String getTmplatNm() { + return tmplatNm; + } + + /** + * tmplatNm attribute 값을 설정한다. + * + * @param tmplatNm + * the tmplatNm to set + */ + public void setTmplatNm(String tmplatNm) { + this.tmplatNm = tmplatNm; + } + + /** + * lastUpdusrNm attribute를 리턴한다. + * + * @return the lastUpdusrNm + */ + public String getLastUpdusrNm() { + return lastUpdusrNm; + } + + /** + * lastUpdusrNm attribute 값을 설정한다. + * + * @param lastUpdusrNm + * the lastUpdusrNm to set + */ + public void setLastUpdusrNm(String lastUpdusrNm) { + this.lastUpdusrNm = lastUpdusrNm; + } + + /** + * authFlag attribute를 리턴한다. + * + * @return the authFlag + */ + public String getAuthFlag() { + return authFlag; + } + + /** + * authFlag attribute 값을 설정한다. + * + * @param authFlag + * the authFlag to set + */ + public void setAuthFlag(String authFlag) { + this.authFlag = authFlag; + } + + /** + * tmplatCours attribute를 리턴한다. + * + * @return the tmplatCours + */ + public String getTmplatCours() { + return tmplatCours; + } + + /** + * tmplatCours attribute 값을 설정한다. + * + * @param tmplatCours + * the tmplatCours to set + */ + public void setTmplatCours(String tmplatCours) { + this.tmplatCours = tmplatCours; + } + + public String getUseAt() { + return useAt; + } + + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + public String getUniqId() { + return uniqId; + } + + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/create/model/XitBbsCreateMngVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/create/model/XitBbsCreateMngVO.java new file mode 100644 index 00000000..ffe0d5a7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/create/model/XitBbsCreateMngVO.java @@ -0,0 +1,570 @@ +package kr.xit.framework.biz.mng.bbs.create.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판생성관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsCreateMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 게시판 속성코드 */ + private String bbsAttrbCode = ""; + + /** 게시판 아이디 */ + private String bbsId = ""; + + /** 게시판 소개 */ + private String bbsIntrcn = ""; + + /** 게시판 명 */ + private String bbsNm = ""; + + /** 게시판 유형코드 */ + private String bbsTyCode = ""; + + /** 파일첨부가능여부 */ + private String fileAtchPosblAt = ""; + + /** 최초등록자 아이디 */ + private String frstRegisterId = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최종수정자 아이디 */ + public String lastUpdusrId = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 첨부가능파일숫자 */ + private int posblAtchFileNumber = 0; + + /** 첨부가능파일사이즈 */ + private String posblAtchFileSize = ""; + + /** 답장가능여부 */ + private String replyPosblAt = ""; + + /** 템플릿 아이디 */ + private String tmplatId = ""; + + /** 사용여부 */ + private String useAt = ""; + + /** 사용플래그 */ + private String bbsUseFlag = ""; + + /** 대상 아이디 */ + private String trgetId = ""; + + /** 등록구분코드 */ + private String registSeCode = ""; + + /** 유일 아이디 */ + private String uniqId = ""; + + /** 템플릿 명 */ + private String tmplatNm = ""; + + private String bbsTyCodeNm; + private String bbsAttrbCodeNm; + private String tmplatCours; + private String frstRegisterNm; + private String authFlag; + + //--------------------------------- + // 2009.06.26 : 2단계 기능 추가 + //--------------------------------- + /** 추가 option (댓글-comment, 만족도조사-stsfdg) */ + private String option = ""; + + /** 댓글 여부 */ + private String commentAt = ""; + + /** 만족도조사 */ + private String stsfdgAt = ""; + ////------------------------------- + + /** + * bbsAttrbCode attribute를 리턴한다. + * + * @return the bbsAttrbCode + */ + public String getBbsAttrbCode() { + return bbsAttrbCode; + } + + /** + * bbsAttrbCode attribute 값을 설정한다. + * + * @param bbsAttrbCode + * the bbsAttrbCode to set + */ + public void setBbsAttrbCode(String bbsAttrbCode) { + this.bbsAttrbCode = bbsAttrbCode; + } + + /** + * bbsId attribute를 리턴한다. + * + * @return the bbsId + */ + public String getBbsId() { + return bbsId; + } + + /** + * bbsId attribute 값을 설정한다. + * + * @param bbsId + * the bbsId to set + */ + public void setBbsId(String bbsId) { + this.bbsId = bbsId; + } + + /** + * bbsIntrcn attribute를 리턴한다. + * + * @return the bbsIntrcn + */ + public String getBbsIntrcn() { + return bbsIntrcn; + } + + /** + * bbsIntrcn attribute 값을 설정한다. + * + * @param bbsIntrcn + * the bbsIntrcn to set + */ + public void setBbsIntrcn(String bbsIntrcn) { + this.bbsIntrcn = bbsIntrcn; + } + + /** + * bbsNm attribute를 리턴한다. + * + * @return the bbsNm + */ + public String getBbsNm() { + return bbsNm; + } + + /** + * bbsNm attribute 값을 설정한다. + * + * @param bbsNm + * the bbsNm to set + */ + public void setBbsNm(String bbsNm) { + this.bbsNm = bbsNm; + } + + /** + * bbsTyCode attribute를 리턴한다. + * + * @return the bbsTyCode + */ + public String getBbsTyCode() { + return bbsTyCode; + } + + /** + * bbsTyCode attribute 값을 설정한다. + * + * @param bbsTyCode + * the bbsTyCode to set + */ + public void setBbsTyCode(String bbsTyCode) { + this.bbsTyCode = bbsTyCode; + } + + /** + * fileAtchPosblAt attribute를 리턴한다. + * + * @return the fileAtchPosblAt + */ + public String getFileAtchPosblAt() { + return fileAtchPosblAt; + } + + /** + * fileAtchPosblAt attribute 값을 설정한다. + * + * @param fileAtchPosblAt + * the fileAtchPosblAt to set + */ + public void setFileAtchPosblAt(String fileAtchPosblAt) { + this.fileAtchPosblAt = fileAtchPosblAt; + } + + /** + * frstRegisterId attribute를 리턴한다. + * + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * + * @param frstRegisterId + * the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * frstRegisterPnttm attribute를 리턴한다. + * + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * + * @param frstRegisterPnttm + * the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * lastUpdusrId attribute를 리턴한다. + * + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * + * @param lastUpdusrId + * the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * lastUpdusrPnttm attribute를 리턴한다. + * + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * + * @param lastUpdusrPnttm + * the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * posblAtchFileNumber attribute를 리턴한다. + * + * @return the posblAtchFileNumber + */ + public int getPosblAtchFileNumber() { + return posblAtchFileNumber; + } + + /** + * posblAtchFileNumber attribute 값을 설정한다. + * + * @param posblAtchFileNumber + * the posblAtchFileNumber to set + */ + public void setPosblAtchFileNumber(int posblAtchFileNumber) { + this.posblAtchFileNumber = posblAtchFileNumber; + } + + /** + * posblAtchFileSize attribute를 리턴한다. + * + * @return the posblAtchFileSize + */ + public String getPosblAtchFileSize() { + return posblAtchFileSize; + } + + /** + * posblAtchFileSize attribute 값을 설정한다. + * + * @param posblAtchFileSize + * the posblAtchFileSize to set + */ + public void setPosblAtchFileSize(String posblAtchFileSize) { + this.posblAtchFileSize = posblAtchFileSize; + } + + /** + * replyPosblAt attribute를 리턴한다. + * + * @return the replyPosblAt + */ + public String getReplyPosblAt() { + return replyPosblAt; + } + + /** + * replyPosblAt attribute 값을 설정한다. + * + * @param replyPosblAt + * the replyPosblAt to set + */ + public void setReplyPosblAt(String replyPosblAt) { + this.replyPosblAt = replyPosblAt; + } + + /** + * tmplatId attribute를 리턴한다. + * + * @return the tmplatId + */ + public String getTmplatId() { + return tmplatId; + } + + /** + * tmplatId attribute 값을 설정한다. + * + * @param tmplatId + * the tmplatId to set + */ + public void setTmplatId(String tmplatId) { + this.tmplatId = tmplatId; + } + + /** + * useAt attribute를 리턴한다. + * + * @return the useAt + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * + * @param useAt + * the useAt to set + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * bbsUseFlag attribute를 리턴한다. + * + * @return the bbsUseFlag + */ + public String getBbsUseFlag() { + return bbsUseFlag; + } + + /** + * bbsUseFlag attribute 값을 설정한다. + * + * @param bbsUseFlag + * the bbsUseFlag to set + */ + public void setBbsUseFlag(String bbsUseFlag) { + this.bbsUseFlag = bbsUseFlag; + } + + /** + * trgetId attribute를 리턴한다. + * + * @return the trgetId + */ + public String getTrgetId() { + return trgetId; + } + + /** + * trgetId attribute 값을 설정한다. + * + * @param trgetId + * the trgetId to set + */ + public void setTrgetId(String trgetId) { + this.trgetId = trgetId; + } + + /** + * registSeCode attribute를 리턴한다. + * + * @return the registSeCode + */ + public String getRegistSeCode() { + return registSeCode; + } + + /** + * registSeCode attribute 값을 설정한다. + * + * @param registSeCode + * the registSeCode to set + */ + public void setRegistSeCode(String registSeCode) { + this.registSeCode = registSeCode; + } + + /** + * uniqId attribute를 리턴한다. + * + * @return the uniqId + */ + public String getUniqId() { + return uniqId; + } + + /** + * uniqId attribute 값을 설정한다. + * + * @param uniqId + * the uniqId to set + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + + /** + * tmplatNm attribute를 리턴한다. + * + * @return the tmplatNm + */ + public String getTmplatNm() { + return tmplatNm; + } + + /** + * tmplatNm attribute 값을 설정한다. + * + * @param tmplatNm + * the tmplatNm to set + */ + public void setTmplatNm(String tmplatNm) { + this.tmplatNm = tmplatNm; + } + + /** + * option attribute를 리턴한다. + * @return the option + */ + public String getOption() { + return option; + } + + /** + * option attribute 값을 설정한다. + * @param option the option to set + */ + public void setOption(String option) { + this.option = option; + } + + /** + * commentAt attribute를 리턴한다. + * @return the commentAt + */ + public String getCommentAt() { + return commentAt; + } + + /** + * commentAt attribute 값을 설정한다. + * @param commentAt the commentAt to set + */ + public void setCommentAt(String commentAt) { + this.commentAt = commentAt; + } + + /** + * stsfdgAt attribute를 리턴한다. + * @return the stsfdgAt + */ + public String getStsfdgAt() { + return stsfdgAt; + } + + /** + * stsfdg attribute 값을 설정한다. + * @param stsfdgAt the stsfdgAt to set + */ + public void setStsfdgAt(String stsfdgAt) { + this.stsfdgAt = stsfdgAt; + } + + public String getBbsTyCodeNm() { + return bbsTyCodeNm; + } + + public void setBbsTyCodeNm(String bbsTyCodeNm) { + this.bbsTyCodeNm = bbsTyCodeNm; + } + + public String getBbsAttrbCodeNm() { + return bbsAttrbCodeNm; + } + + public void setBbsAttrbCodeNm(String bbsAttrbCodeNm) { + this.bbsAttrbCodeNm = bbsAttrbCodeNm; + } + + public String getTmplatCours() { + return tmplatCours; + } + + public void setTmplatCours(String tmplatCours) { + this.tmplatCours = tmplatCours; + } + + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + public String getAuthFlag() { + return authFlag; + } + + public void setAuthFlag(String authFlag) { + this.authFlag = authFlag; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/create/service/XitBbsCreateMngService.java b/src/main/java/kr/xit/framework/biz/mng/bbs/create/service/XitBbsCreateMngService.java new file mode 100644 index 00000000..b9ab8328 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/create/service/XitBbsCreateMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.bbs.create.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngSearchVO; +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngVO; + +/** + * + * @업무그룹명: 게시판생성관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBbsCreateMngService { + + + /** + *
메소드 설명: 게시판생성관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBbsCreateMngSearchVO searchVO); + + /** + *
메소드 설명: 게시판생성관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBbsCreateMngSearchVO searchVO); + + /** + *
메소드 설명: 게시판생성관리 상세정보 조회
+ * @param vo + * @return XitBbsCreateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBbsCreateMngVO findView(XitBbsCreateMngVO vo); + + /** + *
메소드 설명: 게시판생성관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitBbsCreateMngVO vo); + + /** + *
메소드 설명: 게시판생성관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitBbsCreateMngVO vo); + + /** + *
메소드 설명: 게시판생성관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitBbsCreateMngVO vo); + + /** + *
메소드 설명: 게시판생성관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/create/service/impl/XitBbsCreateMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/bbs/create/service/impl/XitBbsCreateMngServiceImpl.java new file mode 100644 index 00000000..5c8d64c7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/create/service/impl/XitBbsCreateMngServiceImpl.java @@ -0,0 +1,215 @@ +package kr.xit.framework.biz.mng.bbs.create.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitBbsMastrVO; +import kr.xit.framework.biz.cmm.model.XitBbsPrcuseVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.bbs.create.dao.XitBbsCreateMngMapper; +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngSearchVO; +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngVO; +import kr.xit.framework.biz.mng.bbs.create.service.XitBbsCreateMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitBbsCreateMngServiceImpl implements XitBbsCreateMngService{ + + @Resource + private XitBbsCreateMngMapper XitBbsCreateMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name = "xitBBSMstrIdGnrService") + private EgovIdGnrService idgenService; + + @Override + public List findList(XitBbsCreateMngSearchVO searchVO) { + List result = null; + try { + result = XitBbsCreateMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("게시판생성관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitBbsCreateMngSearchVO searchVO) { + int result = 0; + try { + result = XitBbsCreateMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("게시판생성관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBbsCreateMngVO findView(XitBbsCreateMngVO vo) { + XitBbsCreateMngVO result = null; + try { + result = XitBbsCreateMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("게시판생성관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBbsCreateMngVO vo) { + /** + * 필수값 설정 + */ + //게시판마스터 + String bbsId = null; + try { + bbsId = idgenService.getNextStringId(); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setBbsId(bbsId); + vo.setUseAt("Y"); + XitBbsMastrVO bbsMastrVO = convertToCrudVO(vo); + bbsMastrVO.setFrst_register_id(vo.getFrstRegisterId()); + //게시판활용 + XitBbsPrcuseVO bbsPrcuseVO = null; + if ("Y".equals(vo.getBbsUseFlag())) { + bbsPrcuseVO = new XitBbsPrcuseVO(); + + bbsPrcuseVO.setBbs_id(bbsId); + bbsPrcuseVO.setTrget_id(vo.getTrgetId()); + bbsPrcuseVO.setRegist_se_code(vo.getRegistSeCode()); + bbsPrcuseVO.setFrst_register_id(vo.getFrstRegisterId()); + bbsPrcuseVO.setUse_at("Y"); + + /* ******************************************** + * 등록구분(XIT_BBS_PRCUSE.REGIST_SE_CODE)에 따라 처리 분기 + ******************************************** */ +// UserInfVO userVO = new UserInfVO(); +// userVO.setTrgetId(vo.getTrgetId()); +// List tmpList = null; +// Iterator iter = null; +// if ("REGC05".equals(vo.getRegistSeCode())) { +// tmpList = userService.selectAllClubUser(userVO); +// iter = tmpList.iterator(); +// while (iter.hasNext()) { +// bbsPrcuseVO = new BoardUseInf(); +// +// bbsPrcuseVO.setBbsId(bbsId); +// bbsPrcuseVO.setTrgetId(((UserInfVO)iter.next()).getUniqId()); +// bbsPrcuseVO.setRegistSeCode("REGC07"); +// bbsPrcuseVO.setUseAt("Y"); +// bbsPrcuseVO.setFrstRegisterId(vo.getFrstRegisterId()); +// +// bbsUseDAO.insertBBSUseInf(bbsPrcuseVO); +// } +// } else if ("REGC06".equals(vo.getRegistSeCode())) { +// tmpList = userService.selectAllCmmntyUser(userVO); +// iter = tmpList.iterator(); +// while (iter.hasNext()) { +// bbsPrcuseVO = new BoardUseInf(); +// +// bbsPrcuseVO.setBbsId(bbsId); +// bbsPrcuseVO.setTrgetId(((UserInfVO)iter.next()).getUniqId()); +// bbsPrcuseVO.setRegistSeCode("REGC07"); +// bbsPrcuseVO.setUseAt("Y"); +// bbsPrcuseVO.setFrstRegisterId(vo.getFrstRegisterId()); +// +// bbsUseDAO.insertBBSUseInf(bbsPrcuseVO); +// } +// } + } + + + + /** + * 처리 + */ + //게시판마스터 + xitFrameCrudService.addXitBbsMastr(bbsMastrVO); + if(bbsPrcuseVO != null) + xitFrameCrudService.addXitBbsPrcuse(bbsPrcuseVO); + + } + + @Override + public void modifyProc(XitBbsCreateMngVO vo) { + /** + * 필수값 설정 + */ + vo.setUseAt("Y"); + XitBbsMastrVO bbsMastrVO = convertToCrudVO(vo); + bbsMastrVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitBbsMastr(bbsMastrVO); + } + + @Override + public void removeProc(XitBbsCreateMngVO vo) { + /** + * 필수값 설정 + */ + XitBbsMastrVO bbsMastrVO = new XitBbsMastrVO(); + bbsMastrVO.setBbs_id(vo.getBbsId()); + bbsMastrVO.setUse_at("N"); + bbsMastrVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitBbsMastr(bbsMastrVO); + } + + @Override + public void removesProc(String ids, String userId) { + /** + * 처리 + */ + String [] codeIds = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitBbsMastrVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitBbsMastrVO convertToCrudVO(XitBbsCreateMngVO vo) { + XitBbsMastrVO crudVO = new XitBbsMastrVO(); + crudVO.setBbs_id(vo.getBbsId()); //게시판 id + crudVO.setBbs_nm(vo.getBbsNm()); //게시판 명 + crudVO.setBbs_intrcn(vo.getBbsIntrcn()); //게시판 소개 + crudVO.setBbs_ty_code(vo.getBbsTyCode()); //게시판 유형 코드 + crudVO.setBbs_attrb_code(vo.getBbsAttrbCode()); //게시판 속성 코드 + crudVO.setReply_posbl_at(vo.getReplyPosblAt()); //답장 가능 여부 + crudVO.setFile_atch_posbl_at(vo.getFileAtchPosblAt()); //파일 첨부 가능 여부 + crudVO.setAtch_posbl_file_number(""+vo.getPosblAtchFileNumber()); //첨부 가능 파일 숫자 + crudVO.setAtch_posbl_file_size(vo.getPosblAtchFileSize()); //첨부 가능 파일 사이즈 + crudVO.setUse_at(vo.getUseAt()); //사용 여부 + crudVO.setTmplat_id(vo.getTmplatId()); //템플릿 id + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/create/web/XitBbsCreateMngController.java b/src/main/java/kr/xit/framework/biz/mng/bbs/create/web/XitBbsCreateMngController.java new file mode 100644 index 00000000..20a4cf73 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/create/web/XitBbsCreateMngController.java @@ -0,0 +1,391 @@ +package kr.xit.framework.biz.mng.bbs.create.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.bbs.create.service.XitBbsCreateMngService; +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngSearchVO; +import kr.xit.framework.biz.mng.bbs.create.model.XitBbsCreateMngVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 게시판생성관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/bbs/create/") +public class XitBbsCreateMngController { + + @Resource + private XitBbsCreateMngService xitBbsCreateMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + @Value("#{prop['Globals.Xit.File.UploadableSize']}") + private String FILE_UPLOAD_SIZE; + /** + *
메소드 설명: 게시판생성관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsCreateMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsCreateMng_list(@ModelAttribute("searchVO") XitBbsCreateMngSearchVO searchVO, ModelMap model) { + + + /** pageing */ + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + PaginationInfo paginationInfo = new PaginationInfo(); + + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + List resultList = xitBbsCreateMngService.findList(searchVO); + int totCnt = xitBbsCreateMngService.findListTotCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/create/XitBbsCreateMng_list"; + } + + /** + *
메소드 설명: 배치작업관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8. 04. + */ + @RequestMapping(value = "BbsCreateMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BbsCreateMng_listAjax(@ModelAttribute("searchVO") XitBbsCreateMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitBbsCreateMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitBbsCreateMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsCreateMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsCreateMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBbsCreateMngVO vo + , @ModelAttribute("searchVO") XitBbsCreateMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + model.addAttribute("typeList", xitFrameCodeService.findCmmnDetailCodes("XIT004")); + model.addAttribute("attrbList", xitFrameCodeService.findCmmnDetailCodes("XIT009")); + model.addAttribute("boardMaster", new XitBbsCreateMngVO()); + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("result", xitBbsCreateMngService.findView(vo)); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/create/XitBbsCreateMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsCreateMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsCreateMng_page_popup(@PathVariable String cmd + , @ModelAttribute("searchVO") XitBbsCreateMngSearchVO searchVO + , @ModelAttribute("vo") XitBbsCreateMngVO vo, ModelMap model + , @RequestParam Map commandMap + ) { + switch (cmd) { + case "choice": //게시판 선택 팝업 + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + PaginationInfo paginationInfo = new PaginationInfo(); + + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + searchVO.setUseAt("Y"); + + List resultList = xitBbsCreateMngService.findList(searchVO); + int totCnt = xitBbsCreateMngService.findListTotCnt(searchVO); + + paginationInfo.setTotalRecordCount(totCnt); + + model.addAttribute("resultList", resultList); + model.addAttribute("resultCnt", totCnt); + model.addAttribute("paginationInfo", paginationInfo); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/create/XitBbsCreateMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 게시판생성관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsCreateMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BbsCreateMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitBbsCreateMngVO vo + ,@ModelAttribute("searchVO") XitBbsCreateMngSearchVO searchVO + ,@RequestParam(value="codeIds", required=false, defaultValue="") String codeIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("boardMaster", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_input.do"; + break; + } + //처리 + try { + vo.setTrgetId("SYSTEMDEFAULT_REGIST"); + vo.setPosblAtchFileSize(FILE_UPLOAD_SIZE); + vo.setFrstRegisterId(loginVO.getUniqId()); + xitBbsCreateMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("boardMaster", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_edit.do"; + break; + } + //처리 + try { + vo.setPosblAtchFileSize(FILE_UPLOAD_SIZE); + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBbsCreateMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBbsCreateMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/bbs/create/BbsCreateMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitBbsCreateMngService.removesProc(codeIds, loginVO.getUniqId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/dao/XitBbsTmplateMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/dao/XitBbsTmplateMngMapper.java new file mode 100644 index 00000000..daffa8aa --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/dao/XitBbsTmplateMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.bbs.tmplate.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngVO; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngSearchVO; + +/** + * + * @업무그룹명: 게시판템플릿관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitBbsTmplateMngMapper { + + /** + *
메소드 설명: 게시판템플릿관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBbsTmplateMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 게시판템플릿관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBbsTmplateMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 게시판템플릿관리 상세정보 조회
+ * @param vo + * @return XitBbsTmplateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBbsTmplateMngVO findView(XitBbsTmplateMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/model/XitBbsTmplateMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/model/XitBbsTmplateMngSearchVO.java new file mode 100644 index 00000000..a96204c6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/model/XitBbsTmplateMngSearchVO.java @@ -0,0 +1,288 @@ +package kr.xit.framework.biz.mng.bbs.tmplate.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 게시판템플릿관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsTmplateMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 최초 등록자명 */ + private String frstRegisterNm = ""; + + /** 최종 수정자명 */ + private String lastUpdusrNm = ""; + + /** 템플릿 구분 코드 */ + private String tmplatSeCode = ""; + + /** 템플릿 구분 코드명 */ + private String tmplatSeCodeNm = ""; + + /** 검색시작일 */ + private String searchBgnDe = ""; + + /** 검색조건 */ + private String searchCnd = ""; + + /** 검색종료일 */ + private String searchEndDe = ""; + + /** 검색단어 */ + private String searchWrd = ""; + + /** 정렬순서(DESC,ASC) */ + private String sortOrdr = ""; + + /** 검색사용여부 */ + private String searchUseYn = ""; + + /** 레코드 번호 */ + private int rowNo = 0; + + /** 구분 유형 */ + private String typeFlag = ""; + + /** + * frstRegisterNm attribute를 리턴한다. + * + * @return the frstRegisterNm + */ + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + /** + * frstRegisterNm attribute 값을 설정한다. + * + * @param frstRegisterNm + * the frstRegisterNm to set + */ + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + /** + * lastUpdusrNm attribute를 리턴한다. + * + * @return the lastUpdusrNm + */ + public String getLastUpdusrNm() { + return lastUpdusrNm; + } + + /** + * lastUpdusrNm attribute 값을 설정한다. + * + * @param lastUpdusrNm + * the lastUpdusrNm to set + */ + public void setLastUpdusrNm(String lastUpdusrNm) { + this.lastUpdusrNm = lastUpdusrNm; + } + + /** + * tmplatSeCodeNm attribute를 리턴한다. + * + * @return the tmplatSeCodeNm + */ + public String getTmplatSeCodeNm() { + return tmplatSeCodeNm; + } + + /** + * tmplatSeCodeNm attribute 값을 설정한다. + * + * @param tmplatSeCodeNm + * the tmplatSeCodeNm to set + */ + public void setTmplatSeCodeNm(String tmplatSeCodeNm) { + this.tmplatSeCodeNm = tmplatSeCodeNm; + } + + /** + * searchBgnDe attribute를 리턴한다. + * + * @return the searchBgnDe + */ + public String getSearchBgnDe() { + return searchBgnDe; + } + + /** + * searchBgnDe attribute 값을 설정한다. + * + * @param searchBgnDe + * the searchBgnDe to set + */ + public void setSearchBgnDe(String searchBgnDe) { + this.searchBgnDe = searchBgnDe; + } + + /** + * searchCnd attribute를 리턴한다. + * + * @return the searchCnd + */ + public String getSearchCnd() { + return searchCnd; + } + + /** + * searchCnd attribute 값을 설정한다. + * + * @param searchCnd + * the searchCnd to set + */ + public void setSearchCnd(String searchCnd) { + this.searchCnd = searchCnd; + } + + /** + * searchEndDe attribute를 리턴한다. + * + * @return the searchEndDe + */ + public String getSearchEndDe() { + return searchEndDe; + } + + /** + * searchEndDe attribute 값을 설정한다. + * + * @param searchEndDe + * the searchEndDe to set + */ + public void setSearchEndDe(String searchEndDe) { + this.searchEndDe = searchEndDe; + } + + /** + * searchWrd attribute를 리턴한다. + * + * @return the searchWrd + */ + public String getSearchWrd() { + return searchWrd; + } + + /** + * searchWrd attribute 값을 설정한다. + * + * @param searchWrd + * the searchWrd to set + */ + public void setSearchWrd(String searchWrd) { + this.searchWrd = searchWrd; + } + + /** + * sortOrdr attribute를 리턴한다. + * + * @return the sortOrdr + */ + public String getSortOrdr() { + return sortOrdr; + } + + /** + * sortOrdr attribute 값을 설정한다. + * + * @param sortOrdr + * the sortOrdr to set + */ + public void setSortOrdr(String sortOrdr) { + this.sortOrdr = sortOrdr; + } + + /** + * searchUseYn attribute를 리턴한다. + * + * @return the searchUseYn + */ + public String getSearchUseYn() { + return searchUseYn; + } + + /** + * searchUseYn attribute 값을 설정한다. + * + * @param searchUseYn + * the searchUseYn to set + */ + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + + /** + * rowNo attribute를 리턴한다. + * + * @return the rowNo + */ + public int getRowNo() { + return rowNo; + } + + /** + * rowNo attribute 값을 설정한다. + * + * @param rowNo + * the rowNo to set + */ + public void setRowNo(int rowNo) { + this.rowNo = rowNo; + } + + /** + * typeFlag attribute를 리턴한다. + * + * @return the typeFlag + */ + public String getTypeFlag() { + return typeFlag; + } + + /** + * typeFlag attribute 값을 설정한다. + * + * @param typeFlag + * the typeFlag to set + */ + public void setTypeFlag(String typeFlag) { + this.typeFlag = typeFlag; + } + /** + * tmplatSeCode attribute를 리턴한다. + * + * @return the tmplatSeCode + */ + public String getTmplatSeCode() { + return tmplatSeCode; + } + + /** + * tmplatSeCode attribute 값을 설정한다. + * + * @param tmplatSeCode + * the tmplatSeCode to set + */ + public void setTmplatSeCode(String tmplatSeCode) { + this.tmplatSeCode = tmplatSeCode; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/model/XitBbsTmplateMngVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/model/XitBbsTmplateMngVO.java new file mode 100644 index 00000000..4a16f597 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/model/XitBbsTmplateMngVO.java @@ -0,0 +1,255 @@ +package kr.xit.framework.biz.mng.bbs.tmplate.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판템플릿관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsTmplateMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 최초등록자 아이디 */ + private String frstRegisterId = ""; + + /** 최초등록자 아이디 명 */ + private String frstRegisterNm = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최종수정자 아이디 */ + private String lastUpdusrId = ""; + + /** 최종수정자 아이디 명 */ + private String lastUpdusrNm = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 템플릿 경로 */ + private String tmplatCours = ""; + + /** 템플릿 아이디 */ + private String tmplatId = ""; + + /** 템플릿 명 */ + private String tmplatNm = ""; + + /** 탬플릿 구분코드 */ + private String tmplatSeCode = ""; + + /** 탬플릿 구분코드 명 */ + private String tmplatSeCodeNm = ""; + + /** 사용여부 */ + private String useAt = ""; + + /** + * frstRegisterId attribute를 리턴한다. + * + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * + * @param frstRegisterId + * the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * frstRegisterPnttm attribute를 리턴한다. + * + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * + * @param frstRegisterPnttm + * the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * lastUpdusrId attribute를 리턴한다. + * + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * + * @param lastUpdusrId + * the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * lastUpdusrPnttm attribute를 리턴한다. + * + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * + * @param lastUpdusrPnttm + * the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * tmplatCours attribute를 리턴한다. + * + * @return the tmplatCours + */ + public String getTmplatCours() { + return tmplatCours; + } + + /** + * tmplatCours attribute 값을 설정한다. + * + * @param tmplatCours + * the tmplatCours to set + */ + public void setTmplatCours(String tmplatCours) { + this.tmplatCours = tmplatCours; + } + + /** + * tmplatId attribute를 리턴한다. + * + * @return the tmplatId + */ + public String getTmplatId() { + return tmplatId; + } + + /** + * tmplatId attribute 값을 설정한다. + * + * @param tmplatId + * the tmplatId to set + */ + public void setTmplatId(String tmplatId) { + this.tmplatId = tmplatId; + } + + /** + * tmplatNm attribute를 리턴한다. + * + * @return the tmplatNm + */ + public String getTmplatNm() { + return tmplatNm; + } + + /** + * tmplatNm attribute 값을 설정한다. + * + * @param tmplatNm + * the tmplatNm to set + */ + public void setTmplatNm(String tmplatNm) { + this.tmplatNm = tmplatNm; + } + + /** + * tmplatSeCode attribute를 리턴한다. + * + * @return the tmplatSeCode + */ + public String getTmplatSeCode() { + return tmplatSeCode; + } + + /** + * tmplatSeCode attribute 값을 설정한다. + * + * @param tmplatSeCode + * the tmplatSeCode to set + */ + public void setTmplatSeCode(String tmplatSeCode) { + this.tmplatSeCode = tmplatSeCode; + } + + public String getTmplatSeCodeNm() { + return tmplatSeCodeNm; + } + + public void setTmplatSeCodeNm(String tmplatSeCodeNm) { + this.tmplatSeCodeNm = tmplatSeCodeNm; + } + + /** + * useAt attribute를 리턴한다. + * + * @return the useAt + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * + * @param useAt + * the useAt to set + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + public String getLastUpdusrNm() { + return lastUpdusrNm; + } + + public void setLastUpdusrNm(String lastUpdusrNm) { + this.lastUpdusrNm = lastUpdusrNm; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/service/XitBbsTmplateMngService.java b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/service/XitBbsTmplateMngService.java new file mode 100644 index 00000000..ef8a325e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/service/XitBbsTmplateMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.bbs.tmplate.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngVO; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngSearchVO; + +/** + * + * @업무그룹명: 게시판템플릿관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBbsTmplateMngService { + + + /** + *
메소드 설명: 게시판템플릿관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBbsTmplateMngSearchVO searchVO); + + /** + *
메소드 설명: 게시판템플릿관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBbsTmplateMngSearchVO searchVO); + + /** + *
메소드 설명: 게시판템플릿관리 상세정보 조회
+ * @param vo + * @return XitBbsTmplateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBbsTmplateMngVO findView(XitBbsTmplateMngVO vo); + + /** + *
메소드 설명: 게시판템플릿관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitBbsTmplateMngVO vo); + + /** + *
메소드 설명: 게시판템플릿관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitBbsTmplateMngVO vo); + + /** + *
메소드 설명: 게시판템플릿관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitBbsTmplateMngVO vo); + + /** + *
메소드 설명: 게시판템플릿관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/service/impl/XitBbsTmplateMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/service/impl/XitBbsTmplateMngServiceImpl.java new file mode 100644 index 00000000..627075bd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/service/impl/XitBbsTmplateMngServiceImpl.java @@ -0,0 +1,152 @@ +package kr.xit.framework.biz.mng.bbs.tmplate.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitTmplatInfoVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.bbs.tmplate.dao.XitBbsTmplateMngMapper; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngVO; +import kr.xit.framework.biz.mng.bbs.tmplate.service.XitBbsTmplateMngService; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngSearchVO; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitBbsTmplateMngServiceImpl implements XitBbsTmplateMngService { + + @Resource + private XitBbsTmplateMngMapper xitBbsTmplateMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name = "xitTmplatIdGnrService") + private EgovIdGnrService idgenService; + + @Override + public List findList(XitBbsTmplateMngSearchVO searchVO) { + List result = null; + try { + result = xitBbsTmplateMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("게시판템플릿관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitBbsTmplateMngSearchVO searchVO) { + int result = 0; + try { + result = xitBbsTmplateMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("게시판템플릿관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBbsTmplateMngVO findView(XitBbsTmplateMngVO vo) { + XitBbsTmplateMngVO result = null; + try { + result = xitBbsTmplateMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("게시판템플릿관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBbsTmplateMngVO vo) { + /** + * 필수값 설정 + */ + String tmplatId = null; + try { + tmplatId = idgenService.getNextStringId(); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setTmplatId(tmplatId); + XitTmplatInfoVO tmplatInfoVO = convertToCrudVO(vo); + tmplatInfoVO.setFrst_register_id(vo.getFrstRegisterId()); + + + /** + * 처리 + */ + xitFrameCrudService.addXitTmplatInfo(tmplatInfoVO); + + } + + @Override + public void modifyProc(XitBbsTmplateMngVO vo) { + /** + * 필수값 설정 + */ + XitTmplatInfoVO tmplatInfoVO = convertToCrudVO(vo); + tmplatInfoVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitTmplatInfo(tmplatInfoVO); + } + + @Override + public void removeProc(XitBbsTmplateMngVO vo) { + /** + * 필수값 설정 + */ + XitTmplatInfoVO tmplatInfoVO = convertToCrudVO(vo); + tmplatInfoVO.setLast_updusr_id(vo.getLastUpdusrId()); + tmplatInfoVO.setUse_at("N"); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitTmplatInfo(tmplatInfoVO); + } + + @Override + public void removesProc(String ids, String userId) { + /** + * 처리 + */ + String [] codeIds = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitTmplatInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitTmplatInfoVO convertToCrudVO(XitBbsTmplateMngVO vo) { + XitTmplatInfoVO crudVO = new XitTmplatInfoVO(); + crudVO.setTmplat_id(vo.getTmplatId()); //템플릿 id + crudVO.setTmplat_nm(vo.getTmplatNm()); //템플릿 명 + crudVO.setTmplat_cours(vo.getTmplatCours()); //템플릿 경로 + crudVO.setUse_at(vo.getUseAt()); //사용 여부 + crudVO.setTmplat_se_code(vo.getTmplatSeCode()); //템플릿 구분 코드 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/web/XitBbsTmplateMngController.java b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/web/XitBbsTmplateMngController.java new file mode 100644 index 00000000..b494302f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/tmplate/web/XitBbsTmplateMngController.java @@ -0,0 +1,373 @@ +package kr.xit.framework.biz.mng.bbs.tmplate.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngVO; +import kr.xit.framework.biz.mng.bbs.tmplate.service.XitBbsTmplateMngService; +import kr.xit.framework.biz.mng.bbs.tmplate.model.XitBbsTmplateMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 게시판템플릿관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/bbs/tmplate/") +public class XitBbsTmplateMngController { + + @Resource + private XitBbsTmplateMngService xitBbsTmplateMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 게시판템플릿관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsTmplateMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsTmplateMng_list(@ModelAttribute("searchVO") XitBbsTmplateMngSearchVO searchVO, ModelMap model) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/tmplate/XitBbsTmplateMng_list"; + } + + /** + *
메소드 설명: 게시팜 템플릿 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8. 04. + */ + @RequestMapping(value = "BbsTmplateMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BbsTmplateMng_listAjax(@ModelAttribute("searchVO") XitBbsTmplateMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitBbsTmplateMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitBbsTmplateMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsTmplateMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsTmplateMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBbsTmplateMngVO vo + , @ModelAttribute("searchVO") XitBbsTmplateMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + model.addAttribute("resultList", xitFrameCodeService.findCmmnDetailCodes("XIT005")); + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("resultList", xitFrameCodeService.findCmmnDetailCodes("XIT005")); + model.addAttribute("TemplateInfVO", xitBbsTmplateMngService.findView(vo)); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/tmplate/XitBbsTmplateMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsTmplateMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsTmplateMng_page_popup(@PathVariable String cmd + , @ModelAttribute("searchVO") XitBbsTmplateMngSearchVO searchVO + , @ModelAttribute("vo") XitBbsTmplateMngVO vo, ModelMap model + , @RequestParam Map commandMap + ) { + switch (cmd) { + case "choice": //템플릿 선택 팝업 + /* ============================== + * 2020.10.06 박민규 + * tui-grid로 전환 + * -tui-grid로 전환함에 따라 주석처리 함 + ============================== */ + //2020.10.06 박민규 +// String typeFlag = (String) commandMap.get("typeFlag"); +// +// if ("CLB".equals(typeFlag)) { +// searchVO.setTypeFlag(typeFlag); +// searchVO.setTmplatSeCode("TMPT03"); +// } else if ("CMY".equals(typeFlag)) { +// searchVO.setTypeFlag(typeFlag); +// searchVO.setTmplatSeCode("TMPT02"); +// } else { +// searchVO.setTypeFlag(typeFlag); +// searchVO.setTmplatSeCode("TMPT01"); +// } +// +// searchVO.setPageUnit(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageUnit"))); +// searchVO.setPageSize(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageSize"))); +// //CMY, CLB +// +// PaginationInfo paginationInfo = new PaginationInfo(); +// +// paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); +// paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); +// paginationInfo.setPageSize(searchVO.getPageSize()); +// +// searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); +// searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); +// searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); +// +// List resultList = xitBbsTmplateMngService.findList(searchVO); +// int totCnt = xitBbsTmplateMngService.findListTotCnt(searchVO); +// +// paginationInfo.setTotalRecordCount(totCnt); +// +// model.addAttribute("resultList", resultList); +// model.addAttribute("resultCnt", totCnt); +// model.addAttribute("paginationInfo", paginationInfo); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/tmplate/XitBbsTmplateMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 게시판템플릿관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsTmplateMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BbsTmplateMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitBbsTmplateMngVO vo + ,@ModelAttribute("searchVO") XitBbsTmplateMngSearchVO searchVO + ,@RequestParam(value="codeIds", required=false, defaultValue="") String codeIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("templateInf", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + xitBbsTmplateMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("templateInf", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBbsTmplateMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBbsTmplateMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/bbs/tmplate/BbsTmplateMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitBbsTmplateMngService.removesProc(codeIds, loginVO.getUniqId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/use/dao/XitBbsUseMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/bbs/use/dao/XitBbsUseMngMapper.java new file mode 100644 index 00000000..94f538b0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/use/dao/XitBbsUseMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.bbs.use.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngSearchVO; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngVO; + +/** + * + * @업무그룹명: 게시판사용관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitBbsUseMngMapper { + + /** + *
메소드 설명: 게시판사용관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBbsUseMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 게시판사용관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBbsUseMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 게시판사용관리 상세정보 조회
+ * @param vo + * @return XitBbsUseMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBbsUseMngVO findView(XitBbsUseMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/use/model/XitBbsUseMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/use/model/XitBbsUseMngSearchVO.java new file mode 100644 index 00000000..b223f8e3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/use/model/XitBbsUseMngSearchVO.java @@ -0,0 +1,309 @@ +package kr.xit.framework.biz.mng.bbs.use.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 게시판사용관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsUseMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 검색시작일 */ + private String searchBgnDe = ""; + + /** 검색조건 */ + private String searchCnd = ""; + + /** 검색종료일 */ + private String searchEndDe = ""; + + /** 검색단어 */ + private String searchWrd = ""; + + /** 정렬순서(DESC,ASC) */ + private long sortOrdr = 0L; + + /** 검색사용여부 */ + private String searchUseYn = ""; + + /** 현재페이지 */ + private int pageIndex = 1; + + /** 페이지갯수 */ + private int pageUnit = 10; + + /** 페이지사이즈 */ + private int pageSize = 10; + + /** 첫페이지 인덱스 */ + private int firstIndex = 1; + + /** 마지막페이지 인덱스 */ + private int lastIndex = 1; + + /** 페이지당 레코드 개수 */ + private int recordCountPerPage = 10; + + /** 레코드 번호 */ + private int rowNo = 0; + + /** + * searchBgnDe attribute를 리턴한다. + * + * @return the searchBgnDe + */ + public String getSearchBgnDe() { + return searchBgnDe; + } + + /** + * searchBgnDe attribute 값을 설정한다. + * + * @param searchBgnDe + * the searchBgnDe to set + */ + public void setSearchBgnDe(String searchBgnDe) { + this.searchBgnDe = searchBgnDe; + } + + /** + * searchCnd attribute를 리턴한다. + * + * @return the searchCnd + */ + public String getSearchCnd() { + return searchCnd; + } + + /** + * searchCnd attribute 값을 설정한다. + * + * @param searchCnd + * the searchCnd to set + */ + public void setSearchCnd(String searchCnd) { + this.searchCnd = searchCnd; + } + + /** + * searchEndDe attribute를 리턴한다. + * + * @return the searchEndDe + */ + public String getSearchEndDe() { + return searchEndDe; + } + + /** + * searchEndDe attribute 값을 설정한다. + * + * @param searchEndDe + * the searchEndDe to set + */ + public void setSearchEndDe(String searchEndDe) { + this.searchEndDe = searchEndDe; + } + + /** + * searchWrd attribute를 리턴한다. + * + * @return the searchWrd + */ + public String getSearchWrd() { + return searchWrd; + } + + /** + * searchWrd attribute 값을 설정한다. + * + * @param searchWrd + * the searchWrd to set + */ + public void setSearchWrd(String searchWrd) { + this.searchWrd = searchWrd; + } + + /** + * sortOrdr attribute를 리턴한다. + * + * @return the sortOrdr + */ + public long getSortOrdr() { + return sortOrdr; + } + + /** + * sortOrdr attribute 값을 설정한다. + * + * @param sortOrdr + * the sortOrdr to set + */ + public void setSortOrdr(long sortOrdr) { + this.sortOrdr = sortOrdr; + } + + /** + * searchUseYn attribute를 리턴한다. + * + * @return the searchUseYn + */ + public String getSearchUseYn() { + return searchUseYn; + } + + /** + * searchUseYn attribute 값을 설정한다. + * + * @param searchUseYn + * the searchUseYn to set + */ + public void setSearchUseYn(String searchUseYn) { + this.searchUseYn = searchUseYn; + } + + /** + * pageIndex attribute를 리턴한다. + * + * @return the pageIndex + */ + public int getPageIndex() { + return pageIndex; + } + + /** + * pageIndex attribute 값을 설정한다. + * + * @param pageIndex + * the pageIndex to set + */ + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + /** + * pageUnit attribute를 리턴한다. + * + * @return the pageUnit + */ + public int getPageUnit() { + return pageUnit; + } + + /** + * pageUnit attribute 값을 설정한다. + * + * @param pageUnit + * the pageUnit to set + */ + public void setPageUnit(int pageUnit) { + this.pageUnit = pageUnit; + } + + /** + * pageSize attribute를 리턴한다. + * + * @return the pageSize + */ + public int getPageSize() { + return pageSize; + } + + /** + * pageSize attribute 값을 설정한다. + * + * @param pageSize + * the pageSize to set + */ + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + /** + * firstIndex attribute를 리턴한다. + * + * @return the firstIndex + */ + public int getFirstIndex() { + return firstIndex; + } + + /** + * firstIndex attribute 값을 설정한다. + * + * @param firstIndex + * the firstIndex to set + */ + public void setFirstIndex(int firstIndex) { + this.firstIndex = firstIndex; + } + + /** + * lastIndex attribute를 리턴한다. + * + * @return the lastIndex + */ + public int getLastIndex() { + return lastIndex; + } + + /** + * lastIndex attribute 값을 설정한다. + * + * @param lastIndex + * the lastIndex to set + */ + public void setLastIndex(int lastIndex) { + this.lastIndex = lastIndex; + } + + /** + * recordCountPerPage attribute를 리턴한다. + * + * @return the recordCountPerPage + */ + public int getRecordCountPerPage() { + return recordCountPerPage; + } + + /** + * recordCountPerPage attribute 값을 설정한다. + * + * @param recordCountPerPage + * the recordCountPerPage to set + */ + public void setRecordCountPerPage(int recordCountPerPage) { + this.recordCountPerPage = recordCountPerPage; + } + + /** + * rowNo attribute를 리턴한다. + * + * @return the rowNo + */ + public int getRowNo() { + return rowNo; + } + + /** + * rowNo attribute 값을 설정한다. + * + * @param rowNo + * the rowNo to set + */ + public void setRowNo(int rowNo) { + this.rowNo = rowNo; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/use/model/XitBbsUseMngVO.java b/src/main/java/kr/xit/framework/biz/mng/bbs/use/model/XitBbsUseMngVO.java new file mode 100644 index 00000000..14b1f4ca --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/use/model/XitBbsUseMngVO.java @@ -0,0 +1,477 @@ +package kr.xit.framework.biz.mng.bbs.use.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 게시판사용관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBbsUseMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 게시판 아이디 */ + private String bbsId = ""; + + /** 대상시스템 아이디 */ + private String trgetId = ""; + + /** 대상 구분 (커뮤니티, 동호회) */ + private String trgetType = ""; + + /** 최초 등록자 아이디 */ + private String frstRegisterId = ""; + + /** 최초등록시점 */ + private String frstRegisterPnttm = ""; + + /** 최종수정자 아이디 */ + private String lastUpdusrId = ""; + + /** 최종수정시점 */ + private String lastUpdusrPnttm = ""; + + /** 등록구분코드 */ + private String registSeCode = ""; + + /** 사용여부 */ + private String useAt = ""; + + + /** 최초 등록자명 */ + private String frstRegisterNm = ""; + + /** 최종 수정자명 */ + private String lastUpdusrNm = ""; + + /** 등록구분 코드명 */ + private String registSeCodeNm = ""; + + /** 커뮤니티 아이디 */ + private String cmmntyId = ""; + + /** 커뮤니티 명 */ + private String cmmntyNm = ""; + + /** 동호회 아이디 */ + private String clbId = ""; + + /** 동호회 명 */ + private String clbNm = ""; + + /** 게시판 명 */ + private String bbsNm = ""; + + /** 사용자 명 */ + private String userNm = ""; + + /** 제공 URL */ + private String provdUrl = ""; + + /** 게시판 유형코드 */ + private String bbsTyCode = ""; + + private String cmntyId; + private String cmntyNm; + + /** + * bbsId attribute를 리턴한다. + * + * @return the bbsId + */ + public String getBbsId() { + return bbsId; + } + + /** + * bbsId attribute 값을 설정한다. + * + * @param bbsId + * the bbsId to set + */ + public void setBbsId(String bbsId) { + this.bbsId = bbsId; + } + + /** + * trgetId attribute를 리턴한다. + * + * @return the trgetId + */ + public String getTrgetId() { + return trgetId; + } + + /** + * trgetId attribute 값을 설정한다. + * + * @param trgetId + * the trgetId to set + */ + public void setTrgetId(String trgetId) { + this.trgetId = trgetId; + } + + /** + * frstRegisterId attribute를 리턴한다. + * + * @return the frstRegisterId + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * + * @param frstRegisterId + * the frstRegisterId to set + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * frstRegisterPnttm attribute를 리턴한다. + * + * @return the frstRegisterPnttm + */ + public String getFrstRegisterPnttm() { + return frstRegisterPnttm; + } + + /** + * frstRegisterPnttm attribute 값을 설정한다. + * + * @param frstRegisterPnttm + * the frstRegisterPnttm to set + */ + public void setFrstRegisterPnttm(String frstRegisterPnttm) { + this.frstRegisterPnttm = frstRegisterPnttm; + } + + /** + * lastUpdusrId attribute를 리턴한다. + * + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * + * @param lastUpdusrId + * the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + + /** + * lastUpdusrPnttm attribute를 리턴한다. + * + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + + /** + * lastUpdusrPnttm attribute 값을 설정한다. + * + * @param lastUpdusrPnttm + * the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + + /** + * registSeCode attribute를 리턴한다. + * + * @return the registSeCode + */ + public String getRegistSeCode() { + return registSeCode; + } + + /** + * registSeCode attribute 값을 설정한다. + * + * @param registSeCode + * the registSeCode to set + */ + public void setRegistSeCode(String registSeCode) { + this.registSeCode = registSeCode; + } + + /** + * useAt attribute를 리턴한다. + * + * @return the useAt + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * + * @param useAt + * the useAt to set + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * trgetType attribute를 리턴한다. + * @return the trgetType + */ + public String getTrgetType() { + return trgetType; + } + + /** + * trgetType attribute 값을 설정한다. + * @param trgetType the trgetType to set + */ + public void setTrgetType(String trgetType) { + this.trgetType = trgetType; + } + + /** + * frstRegisterNm attribute를 리턴한다. + * + * @return the frstRegisterNm + */ + public String getFrstRegisterNm() { + return frstRegisterNm; + } + + /** + * frstRegisterNm attribute 값을 설정한다. + * + * @param frstRegisterNm + * the frstRegisterNm to set + */ + public void setFrstRegisterNm(String frstRegisterNm) { + this.frstRegisterNm = frstRegisterNm; + } + + /** + * lastUpdusrNm attribute를 리턴한다. + * + * @return the lastUpdusrNm + */ + public String getLastUpdusrNm() { + return lastUpdusrNm; + } + + /** + * lastUpdusrNm attribute 값을 설정한다. + * + * @param lastUpdusrNm + * the lastUpdusrNm to set + */ + public void setLastUpdusrNm(String lastUpdusrNm) { + this.lastUpdusrNm = lastUpdusrNm; + } + + /** + * registSeCodeNm attribute를 리턴한다. + * + * @return the registSeCodeNm + */ + public String getRegistSeCodeNm() { + return registSeCodeNm; + } + + /** + * registSeCodeNm attribute 값을 설정한다. + * + * @param registSeCodeNm + * the registSeCodeNm to set + */ + public void setRegistSeCodeNm(String registSeCodeNm) { + this.registSeCodeNm = registSeCodeNm; + } + + /** + * cmmntyId attribute를 리턴한다. + * + * @return the cmmntyId + */ + public String getCmmntyId() { + return cmmntyId; + } + + /** + * cmmntyId attribute 값을 설정한다. + * + * @param cmmntyId + * the cmmntyId to set + */ + public void setCmmntyId(String cmmntyId) { + this.cmmntyId = cmmntyId; + } + + /** + * cmmntyNm attribute를 리턴한다. + * + * @return the cmmntyNm + */ + public String getCmmntyNm() { + return cmmntyNm; + } + + /** + * cmmntyNm attribute 값을 설정한다. + * + * @param cmmntyNm + * the cmmntyNm to set + */ + public void setCmmntyNm(String cmmntyNm) { + this.cmmntyNm = cmmntyNm; + } + + /** + * clbId attribute를 리턴한다. + * + * @return the clbId + */ + public String getClbId() { + return clbId; + } + + /** + * clbId attribute 값을 설정한다. + * + * @param clbId + * the clbId to set + */ + public void setClbId(String clbId) { + this.clbId = clbId; + } + + /** + * clbNm attribute를 리턴한다. + * + * @return the clbNm + */ + public String getClbNm() { + return clbNm; + } + + /** + * clbNm attribute 값을 설정한다. + * + * @param clbNm + * the clbNm to set + */ + public void setClbNm(String clbNm) { + this.clbNm = clbNm; + } + + /** + * bbsNm attribute를 리턴한다. + * + * @return the bbsNm + */ + public String getBbsNm() { + return bbsNm; + } + + /** + * bbsNm attribute 값을 설정한다. + * + * @param bbsNm + * the bbsNm to set + */ + public void setBbsNm(String bbsNm) { + this.bbsNm = bbsNm; + } + + /** + * userNm attribute를 리턴한다. + * + * @return the userNm + */ + public String getUserNm() { + return userNm; + } + + /** + * userNm attribute 값을 설정한다. + * + * @param userNm + * the userNm to set + */ + public void setUserNm(String userNm) { + this.userNm = userNm; + } + + /** + * provdUrl attribute를 리턴한다. + * + * @return the provdUrl + */ + public String getProvdUrl() { + return provdUrl; + } + + /** + * provdUrl attribute 값을 설정한다. + * + * @param provdUrl + * the provdUrl to set + */ + public void setProvdUrl(String provdUrl) { + this.provdUrl = provdUrl; + } + + /** + * bbsTyCode attribute를 리턴한다. + * @return the bbsTyCode + */ + public String getBbsTyCode() { + return bbsTyCode; + } + + /** + * bbsTyCode attribute 값을 설정한다. + * @param bbsTyCode the bbsTyCode to set + */ + public void setBbsTyCode(String bbsTyCode) { + this.bbsTyCode = bbsTyCode; + } + + public String getCmntyId() { + return cmntyId; + } + + public void setCmntyId(String cmntyId) { + this.cmntyId = cmntyId; + } + + public String getCmntyNm() { + return cmntyNm; + } + + public void setCmntyNm(String cmntyNm) { + this.cmntyNm = cmntyNm; + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/use/service/XitBbsUseMngService.java b/src/main/java/kr/xit/framework/biz/mng/bbs/use/service/XitBbsUseMngService.java new file mode 100644 index 00000000..9e8b0598 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/use/service/XitBbsUseMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.bbs.use.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngSearchVO; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngVO; + +/** + * + * @업무그룹명: 게시판사용관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitBbsUseMngService { + + + /** + *
메소드 설명: 게시판사용관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitBbsUseMngSearchVO searchVO); + + /** + *
메소드 설명: 게시판사용관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitBbsUseMngSearchVO searchVO); + + /** + *
메소드 설명: 게시판사용관리 상세정보 조회
+ * @param vo + * @return XitBbsUseMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitBbsUseMngVO findView(XitBbsUseMngVO vo); + + /** + *
메소드 설명: 게시판사용관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitBbsUseMngVO vo); + + /** + *
메소드 설명: 게시판사용관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitBbsUseMngVO vo); + + /** + *
메소드 설명: 게시판사용관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitBbsUseMngVO vo); + + /** + *
메소드 설명: 게시판사용관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/use/service/impl/XitBbsUseMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/bbs/use/service/impl/XitBbsUseMngServiceImpl.java new file mode 100644 index 00000000..db63174c --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/use/service/impl/XitBbsUseMngServiceImpl.java @@ -0,0 +1,147 @@ +package kr.xit.framework.biz.mng.bbs.use.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitBbsPrcuseVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngSearchVO; +import kr.xit.framework.biz.mng.bbs.use.dao.XitBbsUseMngMapper; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngVO; +import kr.xit.framework.biz.mng.bbs.use.service.XitBbsUseMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitBbsUseMngServiceImpl implements XitBbsUseMngService{ + + @Resource + private XitBbsUseMngMapper xitBbsUseMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitBbsUseMngSearchVO searchVO) { + List result = null; + try { + result = xitBbsUseMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("게시판사용관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitBbsUseMngSearchVO searchVO) { + int result = 0; + try { + result = xitBbsUseMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("게시판사용관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitBbsUseMngVO findView(XitBbsUseMngVO vo) { + XitBbsUseMngVO result = null; + try { + result = xitBbsUseMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("게시판사용관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitBbsUseMngVO vo) { + /** + * 필수값 설정 + */ + XitBbsPrcuseVO bbsPrcuseVO = convertToCrudVO(vo); + bbsPrcuseVO.setFrst_register_id(vo.getFrstRegisterId()); + + /** + * 처리 + */ + if(XitCmmnUtil.isEmpty(xitFrameCrudService.findXitBbsPrcuse(bbsPrcuseVO))) { + xitFrameCrudService.addXitBbsPrcuse(bbsPrcuseVO); + }else { + vo.setLastUpdusrId(vo.getFrstRegisterId()); + this.modifyProc(vo); + } + + } + + @Override + public void modifyProc(XitBbsUseMngVO vo) { + /** + * 필수값 설정 + */ + XitBbsPrcuseVO bbsPrcuseVO = convertToCrudVO(vo); + bbsPrcuseVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitBbsPrcuse(bbsPrcuseVO); + } + + @Override + public void removeProc(XitBbsUseMngVO vo) { + /** + * 필수값 설정 + */ + XitBbsPrcuseVO bbsPrcuseVO = new XitBbsPrcuseVO(); + bbsPrcuseVO.setTrget_id(vo.getTrgetId()); + bbsPrcuseVO.setBbs_id(vo.getBbsId()); + bbsPrcuseVO.setLast_updusr_id(vo.getLastUpdusrId()); + bbsPrcuseVO.setUse_at("N"); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitBbsPrcuse(bbsPrcuseVO); + } + + @Override + public void removesProc(String ids, String userId) { +// /** +// * 처리 +// */ +// String [] codeIds = ids.split(";"); +// for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitBbsPrcuseVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitBbsPrcuseVO convertToCrudVO(XitBbsUseMngVO vo) { + XitBbsPrcuseVO crudVO = new XitBbsPrcuseVO(); + crudVO.setTrget_id(vo.getTrgetId()); //대상 id + crudVO.setBbs_id(vo.getBbsId()); //게시판 id + crudVO.setUse_at(vo.getUseAt()); //사용 여부 + crudVO.setRegist_se_code(vo.getRegistSeCode()); //등록 구분 코드 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/bbs/use/web/XitBbsUseMngController.java b/src/main/java/kr/xit/framework/biz/mng/bbs/use/web/XitBbsUseMngController.java new file mode 100644 index 00000000..28317c60 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/bbs/use/web/XitBbsUseMngController.java @@ -0,0 +1,354 @@ +package kr.xit.framework.biz.mng.bbs.use.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngSearchVO; +import kr.xit.framework.biz.mng.bbs.use.model.XitBbsUseMngVO; +import kr.xit.framework.biz.mng.bbs.use.service.XitBbsUseMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 게시판사용관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/bbs/use/") +public class XitBbsUseMngController { + + @Resource + private XitBbsUseMngService xitBbsUseMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 게시판사용관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsUseMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsUseMng_list(@ModelAttribute("searchVO") XitBbsUseMngSearchVO searchVO, ModelMap model) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/use/XitBbsUseMng_list"; + } + + + /** + *
메소드 설명: 배치작업관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8. 04. + */ + @RequestMapping(value = "BbsUseMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map BbsUseMng_listAjax(@ModelAttribute("searchVO") XitBbsUseMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitBbsUseMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitBbsUseMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsUseMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsUseMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitBbsUseMngVO vo + , @ModelAttribute("searchVO") XitBbsUseMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + XitBbsUseMngVO result = xitBbsUseMngService.findView(vo); + // 시스템 사용 게시판의 경우 URL 표시 + if ("SYSTEM_DEFAULT_BOARD".equals(result.getTrgetId())) { + if (result.getBbsTyCode().equals("BBST02")) { // 익명게시판 +// result.setProvdUrl("/cop/bbs/anonymous/selectBoardList.do?bbsId=" + result.getBbsId()); + result.setProvdUrl(String.format("/_mng_/bbs/basic/BasicBbsMng_%s_list.do", result.getBbsId())); + } else { +// result.setProvdUrl("/cop/bbs/selectBoardList.do?bbsId=" + result.getBbsId()); + result.setProvdUrl(String.format("/_mng_/bbs/basic/BasicBbsMng_%s_list.do", result.getBbsId())); + } + } + model.addAttribute("bdUseVO", result); + + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/use/XitBbsUseMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsUseMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String BbsUseMng_page_popup(@PathVariable String cmd + , @ModelAttribute("searchVO") XitBbsUseMngSearchVO searchVO + , @ModelAttribute("vo") XitBbsUseMngVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/bbs/use/XitBbsUseMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 게시판사용관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "BbsUseMng_{cmd}_proc.do", method=RequestMethod.POST) + public void BbsUseMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("boardUseInf") XitBbsUseMngVO vo + ,@ModelAttribute("searchVO") XitBbsUseMngSearchVO searchVO + ,@RequestParam(value="codeIds", required=false, defaultValue="") String codeIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,@RequestParam(value="param_trgetType", required=false, defaultValue="") String param_trgetType + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("boardUseInf", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_input.do"; + break; + } + //처리 + try { + + String registSeCode = ""; + // CMMNTY 06/CLUB 05/SYSTEM(REGC01) + if ("CMMNTY".equals(param_trgetType)) { + registSeCode = "REGC06"; + } else if ("CLUB".equals(param_trgetType)) { + registSeCode = "REGC05"; + } else { + registSeCode = "REGC01"; + } + + vo.setUseAt("Y"); + vo.setRegistSeCode(registSeCode); + vo.setFrstRegisterId(loginVO.getUniqId()); + xitBbsUseMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("boardUseInf", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBbsUseMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitBbsUseMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/bbs/use/BbsUseMng_edit.do"; + } + break; + +// case "deletes": //다건 삭제 +// //처리 +// try { +// xitBbsUseMngService.removesProc(codeIds, loginVO.getUniqId()); +// status.setComplete(); +// resultMsg = xitMessageSource.getMessage("success.common.delete"); +// } catch (RuntimeException e) { +// resultMsg = e.getMessage(); +// } catch (Exception e) { +// resultMsg = xitMessageSource.getMessage("fail.common.delete"); +// } +// break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cl/dao/XitClCodeMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/code/cl/dao/XitClCodeMngMapper.java new file mode 100644 index 00000000..333d06fe --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cl/dao/XitClCodeMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.code.cl.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngVO; + +/** + * + * @업무그룹명: 분류코드관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitClCodeMngMapper { + + /** + *
메소드 설명: 분류코드관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitClCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 분류코드관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitClCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 분류코드관리 상세정보 조회
+ * @param vo + * @return XitClCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitClCodeMngVO findView(XitClCodeMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cl/model/XitClCodeMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/code/cl/model/XitClCodeMngSearchVO.java new file mode 100644 index 00000000..ffe7afd6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cl/model/XitClCodeMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.code.cl.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 분류코드관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitClCodeMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cl/model/XitClCodeMngVO.java b/src/main/java/kr/xit/framework/biz/mng/code/cl/model/XitClCodeMngVO.java new file mode 100644 index 00000000..06a2e125 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cl/model/XitClCodeMngVO.java @@ -0,0 +1,148 @@ +package kr.xit.framework.biz.mng.code.cl.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 분류코드관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitClCodeMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /* + * 분류코드 + */ + private String clCode = ""; + + /* + * 분류코드명 + */ + private String clCodeNm = ""; + + /* + * 분류코드설명 + */ + private String clCodeDc = ""; + + /* + * 사용여부 + */ + private String useAt = ""; + + /* + * 최초등록자ID + */ + private String frstRegisterId = ""; + + /* + * 최종수정자ID + */ + private String lastUpdusrId = ""; + + /** + * clCode attribute 를 리턴한다. + * @return String + */ + public String getClCode() { + return clCode; + } + + /** + * clCode attribute 값을 설정한다. + * @param clCode String + */ + public void setClCode(String clCode) { + this.clCode = clCode; + } + + /** + * clCodeNm attribute 를 리턴한다. + * @return String + */ + public String getClCodeNm() { + return clCodeNm; + } + + /** + * clCodeNm attribute 값을 설정한다. + * @param clCodeNm String + */ + public void setClCodeNm(String clCodeNm) { + this.clCodeNm = clCodeNm; + } + + /** + * clCodeDc attribute 를 리턴한다. + * @return String + */ + public String getClCodeDc() { + return clCodeDc; + } + + /** + * clCodeDc attribute 값을 설정한다. + * @param clCodeDc String + */ + public void setClCodeDc(String clCodeDc) { + this.clCodeDc = clCodeDc; + } + + /** + * useAt attribute 를 리턴한다. + * @return String + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * @param useAt String + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @param frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @param lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cl/service/XitClCodeMngService.java b/src/main/java/kr/xit/framework/biz/mng/code/cl/service/XitClCodeMngService.java new file mode 100644 index 00000000..d7b5dfd9 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cl/service/XitClCodeMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.code.cl.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngVO; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngSearchVO; + +/** + * + * @업무그룹명: 분류코드관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitClCodeMngService { + + + /** + *
메소드 설명: 분류코드관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitClCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 분류코드관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitClCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 분류코드관리 상세정보 조회
+ * @param vo + * @return XitClCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitClCodeMngVO findView(XitClCodeMngVO vo); + + /** + *
메소드 설명: 분류코드관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitClCodeMngVO vo); + + /** + *
메소드 설명: 분류코드관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitClCodeMngVO vo); + + /** + *
메소드 설명: 분류코드관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitClCodeMngVO vo); + + /** + *
메소드 설명: 분류코드관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cl/service/impl/XitClCodeMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/code/cl/service/impl/XitClCodeMngServiceImpl.java new file mode 100644 index 00000000..37cebeb6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cl/service/impl/XitClCodeMngServiceImpl.java @@ -0,0 +1,141 @@ +package kr.xit.framework.biz.mng.code.cl.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitCmmnClCodeVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngVO; +import kr.xit.framework.biz.mng.code.cl.service.XitClCodeMngService; +import kr.xit.framework.biz.mng.code.cl.dao.XitClCodeMngMapper; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitClCodeMngServiceImpl implements XitClCodeMngService { + + @Resource + private XitClCodeMngMapper xitClCodeMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name="xitGroupIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitClCodeMngSearchVO searchVO) { + List result = null; + try { + result = xitClCodeMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("분류코드관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitClCodeMngSearchVO searchVO) { + int result = 0; + try { + result = xitClCodeMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("분류코드관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitClCodeMngVO findView(XitClCodeMngVO vo) { + XitClCodeMngVO result = null; + try { + result = xitClCodeMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("분류코드관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitClCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnClCodeVO cmmnClCodeVO = convertToCrudVO(vo); + cmmnClCodeVO.setFrst_register_id(vo.getFrstRegisterId()); + + /** + * 처리 + */ + xitFrameCrudService.addXitCmmnClCode(cmmnClCodeVO); + + } + + @Override + public void modifyProc(XitClCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnClCodeVO cmmnClCodeVO = convertToCrudVO(vo); + cmmnClCodeVO.setLast_updusr_id(vo.getLastUpdusrId()); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitCmmnClCode(cmmnClCodeVO); + } + + @Override + public void removeProc(XitClCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnClCodeVO cmmnClCodeVO = new XitCmmnClCodeVO(); + cmmnClCodeVO.setCl_code(vo.getClCode()); + cmmnClCodeVO.setLast_updusr_id(vo.getLastUpdusrId()); + cmmnClCodeVO.setUse_at("N"); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitCmmnClCode(cmmnClCodeVO); + } + + @Override + public void removesProc(String ids, String userId) { + /** + * 처리 + */ + String [] clCodes = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitCmmnClCodeVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitCmmnClCodeVO convertToCrudVO(XitClCodeMngVO vo) { + XitCmmnClCodeVO crudVO = new XitCmmnClCodeVO(); + crudVO.setCl_code (vo.getClCode()); //분류 코드 + crudVO.setCl_code_nm (vo.getClCodeNm()); //분류 코드 명 + crudVO.setCl_code_dc (vo.getClCodeDc()); //분류 코드 설명 + crudVO.setUse_at (vo.getUseAt()); //사용 여부 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cl/web/XitClCodeMngController.java b/src/main/java/kr/xit/framework/biz/mng/code/cl/web/XitClCodeMngController.java new file mode 100644 index 00000000..2d895e54 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cl/web/XitClCodeMngController.java @@ -0,0 +1,343 @@ +package kr.xit.framework.biz.mng.code.cl.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngVO; +import kr.xit.framework.biz.mng.code.cl.service.XitClCodeMngService; +import kr.xit.framework.biz.mng.code.cl.model.XitClCodeMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 분류코드관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/code/cl/") +public class XitClCodeMngController { + + @Resource + private XitClCodeMngService xitClCodeMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 분류코드관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ClCodeMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ClCodeMng_list(@ModelAttribute("searchVO") XitClCodeMngSearchVO searchVO, ModelMap model) { + + /** pageing */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //model.addAttribute("resultList", xitClCodeMngService.findList(searchVO)); + + //int totCnt = xitClCodeMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/cl/XitClCodeMng_list"; + } + + /** + *
메소드 설명: 분류코드 관리 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "ClCodeMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map ClCodeMng_listAjax(@ModelAttribute("searchVO") XitClCodeMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitClCodeMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitClCodeMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ClCodeMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ClCodeMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("cmmnClCode") XitClCodeMngVO vo + , @ModelAttribute XitClCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("cmmnClCode", xitClCodeMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/cl/XitClCodeMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ClCodeMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ClCodeMng_page_popup(@PathVariable String cmd + , @ModelAttribute("cmmnClCode") XitClCodeMngVO vo + , @ModelAttribute XitClCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/cl/XitClCodeMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 분류코드관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ClCodeMng_{cmd}_proc.do", method=RequestMethod.POST) + public void ClCodeMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitClCodeMngVO vo + ,@ModelAttribute("searchVO") XitClCodeMngSearchVO searchVO + ,@RequestParam(value="clCodes", required=false, defaultValue="") String clCodes + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("cmmnClCode", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + xitClCodeMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("cmmnClCode", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitClCodeMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitClCodeMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/code/cl/ClCodeMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitClCodeMngService.removesProc(clCodes, loginVO.getUniqId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cmmn/dao/XitCmmnCodeMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/dao/XitCmmnCodeMngMapper.java new file mode 100644 index 00000000..a43c4094 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/dao/XitCmmnCodeMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.code.cmmn.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngVO; + +/** + * + * @업무그룹명: 공통코드관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitCmmnCodeMngMapper { + + /** + *
메소드 설명: 공통코드관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitCmmnCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 공통코드관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitCmmnCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 공통코드관리 상세정보 조회
+ * @param vo + * @return XitCmmnCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitCmmnCodeMngVO findView(XitCmmnCodeMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cmmn/model/XitCmmnCodeMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/model/XitCmmnCodeMngSearchVO.java new file mode 100644 index 00000000..ccb68177 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/model/XitCmmnCodeMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.code.cmmn.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 공통코드관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCmmnCodeMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cmmn/model/XitCmmnCodeMngVO.java b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/model/XitCmmnCodeMngVO.java new file mode 100644 index 00000000..3bf1170c --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/model/XitCmmnCodeMngVO.java @@ -0,0 +1,199 @@ +package kr.xit.framework.biz.mng.code.cmmn.model; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 공통코드관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCmmnCodeMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /* + * 코드ID + */ + private String codeId = ""; + + /* + * 코드ID명 + */ + private String codeIdNm = ""; + + /* + * 코드ID설명 + */ + private String codeIdDc = ""; + + /* + * 분류코드 + */ + private String clCode = ""; + + /* + * 분류코드명 + */ + private String clCodeNm = ""; + + /* + * 사용여부 + */ + private String useAt = ""; + + /* + * 최초등록자ID + */ + private String frstRegisterId = ""; + + /* + * 최종수정자ID + */ + private String lastUpdusrId = ""; + + /** + * codeId attribute 를 리턴한다. + * @return String + */ + public String getCodeId() { + return codeId; + } + + /** + * codeId attribute 값을 설정한다. + * @param codeId String + */ + public void setCodeId(String codeId) { + this.codeId = codeId; + } + + /** + * codeIdNm attribute 를 리턴한다. + * @return String + */ + public String getCodeIdNm() { + return codeIdNm; + } + + /** + * codeIdNm attribute 값을 설정한다. + * @param codeIdNm String + */ + public void setCodeIdNm(String codeIdNm) { + this.codeIdNm = codeIdNm; + } + + /** + * codeIdDc attribute 를 리턴한다. + * @return String + */ + public String getCodeIdDc() { + return codeIdDc; + } + + /** + * codeIdDc attribute 값을 설정한다. + * @param codeIdDc String + */ + public void setCodeIdDc(String codeIdDc) { + this.codeIdDc = codeIdDc; + } + + /** + * clCode attribute 를 리턴한다. + * @return String + */ + public String getClCode() { + return clCode; + } + + /** + * clCode attribute 값을 설정한다. + * @param clCode String + */ + public void setClCode(String clCode) { + this.clCode = clCode; + } + + /** + * clCodeNm attribute 를 리턴한다. + * @return String + */ + public String getClCodeNm() { + return clCodeNm; + } + + /** + * clCodeNm attribute 값을 설정한다. + * @param clCodeNm String + */ + public void setClCodeNm(String clCodeNm) { + this.clCodeNm = clCodeNm; + } + + /** + * 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; + } + + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cmmn/service/XitCmmnCodeMngService.java b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/service/XitCmmnCodeMngService.java new file mode 100644 index 00000000..c07c61e9 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/service/XitCmmnCodeMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.code.cmmn.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngVO; + +/** + * + * @업무그룹명: 공통코드관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitCmmnCodeMngService { + + + /** + *
메소드 설명: 공통코드관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitCmmnCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 공통코드관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitCmmnCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 공통코드관리 상세정보 조회
+ * @param vo + * @return XitCmmnCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitCmmnCodeMngVO findView(XitCmmnCodeMngVO vo); + + /** + *
메소드 설명: 공통코드관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitCmmnCodeMngVO vo); + + /** + *
메소드 설명: 공통코드관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitCmmnCodeMngVO vo); + + /** + *
메소드 설명: 공통코드관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitCmmnCodeMngVO vo); + + /** + *
메소드 설명: 공통코드관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cmmn/service/impl/XitCmmnCodeMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/service/impl/XitCmmnCodeMngServiceImpl.java new file mode 100644 index 00000000..9b8e0632 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/service/impl/XitCmmnCodeMngServiceImpl.java @@ -0,0 +1,142 @@ +package kr.xit.framework.biz.mng.code.cmmn.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitCmmnCodeVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.code.cmmn.service.XitCmmnCodeMngService; +import kr.xit.framework.biz.mng.code.cmmn.dao.XitCmmnCodeMngMapper; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngVO; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitCmmnCodeMngServiceImpl implements XitCmmnCodeMngService { + + @Resource + private XitCmmnCodeMngMapper xitCmmnCodeMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitCmmnCodeMngSearchVO searchVO) { + List result = null; + try { + result = xitCmmnCodeMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("공통코드관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitCmmnCodeMngSearchVO searchVO) { + int result = 0; + try { + result = xitCmmnCodeMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("공통코드관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitCmmnCodeMngVO findView(XitCmmnCodeMngVO vo) { + XitCmmnCodeMngVO result = null; + try { + result = xitCmmnCodeMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("공통코드관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitCmmnCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnCodeVO cmmnCodeVO = convertToCrudVO(vo); + cmmnCodeVO.setFrst_register_id(vo.getFrstRegisterId()); + + + /** + * 처리 + */ + xitFrameCrudService.addXitCmmnCode(cmmnCodeVO); + + } + + @Override + public void modifyProc(XitCmmnCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnCodeVO cmmnCodeVO = convertToCrudVO(vo); + cmmnCodeVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitCmmnCode(cmmnCodeVO); + } + + @Override + public void removeProc(XitCmmnCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnCodeVO cmmnCodeVO = new XitCmmnCodeVO(); + cmmnCodeVO.setCode_id(vo.getCodeId()); + cmmnCodeVO.setLast_updusr_id(vo.getLastUpdusrId()); + cmmnCodeVO.setUse_at("N"); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitCmmnCode(cmmnCodeVO); + } + + @Override + public void removesProc(String ids, String userId) { + /** + * 처리 + */ + String [] codeIds = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitCmmnCodeVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitCmmnCodeVO convertToCrudVO(XitCmmnCodeMngVO vo) { + XitCmmnCodeVO crudVO = new XitCmmnCodeVO(); + crudVO.setCode_id (vo.getCodeId()); //코드 id + crudVO.setCode_id_nm (vo.getCodeIdNm()); //코드 id 명 + crudVO.setCode_id_dc (vo.getCodeIdDc()); //코드 id 설명 + crudVO.setUse_at (vo.getUseAt()); //사용 여부 + crudVO.setCl_code (vo.getClCode()); //분류 코드 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/cmmn/web/XitCmmnCodeMngController.java b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/web/XitCmmnCodeMngController.java new file mode 100644 index 00000000..97579f6a --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/cmmn/web/XitCmmnCodeMngController.java @@ -0,0 +1,348 @@ +package kr.xit.framework.biz.mng.code.cmmn.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngVO; +import kr.xit.framework.biz.mng.code.cmmn.service.XitCmmnCodeMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 공통코드관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/code/cmmn/") +public class XitCmmnCodeMngController { + + @Resource + private XitCmmnCodeMngService xitCmmnCodeMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 공통코드관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "CmmnCodeMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String CmmnCodeMng_list(@ModelAttribute("searchVO") XitCmmnCodeMngSearchVO searchVO, ModelMap model) { + + + /** pageing */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //model.addAttribute("resultList", xitCmmnCodeMngService.findList(searchVO)); + + //int totCnt =xitCmmnCodeMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/cmmn/XitCmmnCodeMng_list"; + } + + /** + *
메소드 설명: 공통코드 관리 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "CmmnCodeMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map CmmnCodeMng_listAjax(@ModelAttribute("searchVO") XitCmmnCodeMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitCmmnCodeMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitCmmnCodeMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "CmmnCodeMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String CmmnCodeMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("cmmnCode") XitCmmnCodeMngVO vo + , @ModelAttribute XitCmmnCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + model.addAttribute("cmmnClCode", xitFrameCodeService.findClCodes(null)); + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("cmmnCode", xitCmmnCodeMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/cmmn/XitCmmnCodeMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "CmmnCodeMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String CmmnCodeMng_page_popup(@PathVariable String cmd + , @ModelAttribute("cmmnCode") XitCmmnCodeMngVO vo + , @ModelAttribute XitCmmnCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/cmmn/XitCmmnCodeMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 공통코드관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "CmmnCodeMng_{cmd}_proc.do", method=RequestMethod.POST) + public void CmmnCodeMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitCmmnCodeMngVO vo + ,@ModelAttribute("searchVO") XitCmmnCodeMngSearchVO searchVO + ,@RequestParam(value="codeIds", required=false, defaultValue="") String codeIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("cmmnCode", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + xitCmmnCodeMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("cmmnCode", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitCmmnCodeMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitCmmnCodeMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/code/cmmn/CmmnCodeMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitCmmnCodeMngService.removesProc(codeIds, loginVO.getUniqId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/detail/dao/XitDetailCodeMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/code/detail/dao/XitDetailCodeMngMapper.java new file mode 100644 index 00000000..ea14b7dd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/detail/dao/XitDetailCodeMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.code.detail.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngVO; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngSearchVO; + +/** + * + * @업무그룹명: 상세코드관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitDetailCodeMngMapper { + + /** + *
메소드 설명: 상세코드관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitDetailCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 상세코드관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitDetailCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 상세코드관리 상세정보 조회
+ * @param vo + * @return XitDetailCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitDetailCodeMngVO findView(XitDetailCodeMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/detail/model/XitDetailCodeMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/code/detail/model/XitDetailCodeMngSearchVO.java new file mode 100644 index 00000000..2b0500ab --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/detail/model/XitDetailCodeMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.code.detail.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 상세코드관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitDetailCodeMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/detail/model/XitDetailCodeMngVO.java b/src/main/java/kr/xit/framework/biz/mng/code/detail/model/XitDetailCodeMngVO.java new file mode 100644 index 00000000..288906ea --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/detail/model/XitDetailCodeMngVO.java @@ -0,0 +1,190 @@ +package kr.xit.framework.biz.mng.code.detail.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 상세코드관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitDetailCodeMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /* + * 코드ID + */ + private String codeId = ""; + + /* + * 코드ID명 + */ + private String codeIdNm = ""; + + /* + * 코드 + */ + private String code = ""; + + /* + * 코드명 + */ + private String codeNm = ""; + + /* + * 코드설명 + */ + private String codeDc = ""; + + /* + * 사용여부 + */ + private String useAt = ""; + + /* + * 최초등록자ID + */ + private String frstRegisterId = ""; + + /* + * 최종수정자ID + */ + private String lastUpdusrId = ""; + + /** + * codeId attribute 를 리턴한다. + * @return String + */ + public String getCodeId() { + return codeId; + } + + /** + * codeId attribute 값을 설정한다. + * @param codeId String + */ + public void setCodeId(String codeId) { + this.codeId = codeId; + } + + /** + * codeIdNm attribute 를 리턴한다. + * @return String + */ + public String getCodeIdNm() { + return codeIdNm; + } + + /** + * codeIdNm attribute 값을 설정한다. + * @param codeIdNm String + */ + public void setCodeIdNm(String codeIdNm) { + this.codeIdNm = codeIdNm; + } + + /** + * code attribute 를 리턴한다. + * @return String + */ + public String getCode() { + return code; + } + + /** + * code attribute 값을 설정한다. + * @param code String + */ + public void setCode(String code) { + this.code = code; + } + + /** + * codeNm attribute 를 리턴한다. + * @return String + */ + public String getCodeNm() { + return codeNm; + } + + /** + * codeNm attribute 값을 설정한다. + * @param codeNm String + */ + public void setCodeNm(String codeNm) { + this.codeNm = codeNm; + } + + /** + * codeDc attribute 를 리턴한다. + * @return String + */ + public String getCodeDc() { + return codeDc; + } + + /** + * codeDc attribute 값을 설정한다. + * @param codeDc String + */ + public void setCodeDc(String codeDc) { + this.codeDc = codeDc; + } + + /** + * useAt attribute 를 리턴한다. + * @return String + */ + public String getUseAt() { + return useAt; + } + + /** + * useAt attribute 값을 설정한다. + * @param useAt String + */ + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @param frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @param lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/detail/service/XitDetailCodeMngService.java b/src/main/java/kr/xit/framework/biz/mng/code/detail/service/XitDetailCodeMngService.java new file mode 100644 index 00000000..47db2509 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/detail/service/XitDetailCodeMngService.java @@ -0,0 +1,82 @@ +package kr.xit.framework.biz.mng.code.detail.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngVO; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngSearchVO; + +/** + * + * @업무그룹명: 상세코드관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitDetailCodeMngService { + + + /** + *
메소드 설명: 상세코드관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitDetailCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 상세코드관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitDetailCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 상세코드관리 상세정보 조회
+ * @param vo + * @return XitDetailCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitDetailCodeMngVO findView(XitDetailCodeMngVO vo); + + /** + *
메소드 설명: 상세코드관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitDetailCodeMngVO vo); + + /** + *
메소드 설명: 상세코드관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitDetailCodeMngVO vo); + + /** + *
메소드 설명: 상세코드관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitDetailCodeMngVO vo); + + /** + *
메소드 설명: 상세코드관리 다건 삭제
+ * @param codeIds + * @param codes + * @param userId + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String codeIds, String codes, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/detail/service/impl/XitDetailCodeMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/code/detail/service/impl/XitDetailCodeMngServiceImpl.java new file mode 100644 index 00000000..921f5d66 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/detail/service/impl/XitDetailCodeMngServiceImpl.java @@ -0,0 +1,145 @@ +package kr.xit.framework.biz.mng.code.detail.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitCmmnDetailCodeVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.code.detail.dao.XitDetailCodeMngMapper; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngVO; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.detail.service.XitDetailCodeMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitDetailCodeMngServiceImpl implements XitDetailCodeMngService{ + + @Resource + private XitDetailCodeMngMapper xitDetailCodeMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitDetailCodeMngSearchVO searchVO) { + List result = null; + try { + result = xitDetailCodeMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("상세코드관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitDetailCodeMngSearchVO searchVO) { + int result = 0; + try { + result = xitDetailCodeMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("상세코드관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitDetailCodeMngVO findView(XitDetailCodeMngVO vo) { + XitDetailCodeMngVO result = null; + try { + result = xitDetailCodeMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("상세코드관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitDetailCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnDetailCodeVO cmmnDetailCodeVO = convertToCrudVO(vo); + cmmnDetailCodeVO.setFrst_register_id(vo.getFrstRegisterId()); + + + /** + * 처리 + */ + xitFrameCrudService.addXitCmmnDetailCode(cmmnDetailCodeVO); + + } + + @Override + public void modifyProc(XitDetailCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnDetailCodeVO cmmnDetailCodeVO = convertToCrudVO(vo); + cmmnDetailCodeVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitCmmnDetailCode(cmmnDetailCodeVO); + } + + @Override + public void removeProc(XitDetailCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitCmmnDetailCodeVO cmmnDetailCodeVO = new XitCmmnDetailCodeVO(); + cmmnDetailCodeVO.setCode_id(vo.getCodeId()); + cmmnDetailCodeVO.setCode(vo.getCode()); + cmmnDetailCodeVO.setLast_updusr_id(vo.getLastUpdusrId()); + cmmnDetailCodeVO.setUse_at("N"); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitCmmnDetailCode(cmmnDetailCodeVO); + } + + @Override + public void removesProc(String codeIds, String codes, String userId) { + /** + * 처리 + */ + String [] arrCodeId = codeIds.split(";"); + String [] arrCode = codes.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitCmmnDetailCodeVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitCmmnDetailCodeVO convertToCrudVO(XitDetailCodeMngVO vo) { + XitCmmnDetailCodeVO crudVO = new XitCmmnDetailCodeVO(); + crudVO.setCode_id (vo.getCodeId()); //코드 id + crudVO.setCode (vo.getCode()); //코드 + crudVO.setCode_nm (vo.getCodeNm()); //코드 명 + crudVO.setCode_dc (vo.getCodeDc()); //코드 설명 + crudVO.setUse_at (vo.getUseAt()); //사용 여부 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/detail/web/XitDetailCodeMngController.java b/src/main/java/kr/xit/framework/biz/mng/code/detail/web/XitDetailCodeMngController.java new file mode 100644 index 00000000..71bd3daf --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/detail/web/XitDetailCodeMngController.java @@ -0,0 +1,390 @@ +package kr.xit.framework.biz.mng.code.detail.web; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.code.cmmn.model.XitCmmnCodeMngVO; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngVO; +import kr.xit.framework.biz.mng.code.detail.service.XitDetailCodeMngService; +import kr.xit.framework.biz.mng.code.detail.model.XitDetailCodeMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.XitCodeVO; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 상세코드관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/code/detail/") +public class XitDetailCodeMngController { + + @Resource + private XitDetailCodeMngService xitDetailCodeMngService; + @Resource + private XitFrameCodeService xitFrameCodeService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 상세코드관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "DetailCodeMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String DetailCodeMng_list(@ModelAttribute("searchVO") XitDetailCodeMngSearchVO searchVO, ModelMap model) { + + /** pageing */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //model.addAttribute("resultList", xitDetailCodeMngService.findList(searchVO)); + + //int totCnt = xitDetailCodeMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/detail/XitDetailCodeMng_list"; + } + + /** + *
메소드 설명: 상세코드 관리 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 31. + */ + @RequestMapping(value = "DetailCodeMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map DetailCodeMng_listAjax(@ModelAttribute("searchVO") XitDetailCodeMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitDetailCodeMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitDetailCodeMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "DetailCodeMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String DetailCodeMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("cmmnDetailCode") XitDetailCodeMngVO vo + , @ModelAttribute("cmmnCode") XitCmmnCodeMngVO cmmnCodeMngVO + , @ModelAttribute XitDetailCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + List cmmnClCodeList = xitFrameCodeService.findClCodes(null); + model.addAttribute("cmmnClCodeList", cmmnClCodeList); + if(XitCmmnUtil.isEmpty(cmmnCodeMngVO.getClCode())) { + if(XitCmmnUtil.isEmpty(cmmnClCodeList)) + model.addAttribute("cmmnCodeList", new ArrayList()); + else + model.addAttribute("cmmnCodeList", xitFrameCodeService.findCmmnCodes(cmmnClCodeList.get(0).getClCode())); + } else { + model.addAttribute("cmmnCodeList", xitFrameCodeService.findCmmnCodes(cmmnCodeMngVO.getClCode())); + } + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("cmmnDetailCode", xitDetailCodeMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/detail/XitDetailCodeMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "DetailCodeMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String DetailCodeMng_page_popup(@PathVariable String cmd + , @ModelAttribute("cmmnDetailCode") XitDetailCodeMngVO vo + , @ModelAttribute("cmmnCode") XitCmmnCodeMngVO cmmnCodeMngVO + , @ModelAttribute XitDetailCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/detail/XitDetailCodeMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 상세코드관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "DetailCodeMng_{cmd}_proc.do", method=RequestMethod.POST) + public void DetailCodeMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitDetailCodeMngVO vo + ,@ModelAttribute("searchVO") XitDetailCodeMngSearchVO searchVO + ,@ModelAttribute("cmmnCode") XitCmmnCodeMngVO cmmnCodeMngVO + ,@RequestParam(value="codeIds", required=false, defaultValue="") String codeIds + ,@RequestParam(value="codes", required=false, defaultValue="") String codes + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("cmmnDetailCode", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + xitDetailCodeMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("cmmnDetailCode", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitDetailCodeMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitDetailCodeMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/code/detail/DetailCodeMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitDetailCodeMngService.removesProc(codeIds, codes, loginVO.getUniqId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + /** + *
메소드 설명: 코드조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8. 12. + */ + @RequestMapping(value = "DetailCodeMng_getCodeList.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map DetailCodeMng_getCodeListAjax( + @ModelAttribute("cmmnCode") XitCmmnCodeMngVO cmmnCodeMngVO + ,Model model){ + Map resultMap = new HashMap(); + System.out.println("test===================="); + List cmmnClCodeList = xitFrameCodeService.findClCodes(null); + model.addAttribute("cmmnClCodeList", cmmnClCodeList); + if(XitCmmnUtil.isEmpty(cmmnCodeMngVO.getClCode())) { + if(XitCmmnUtil.isEmpty(cmmnClCodeList)) + resultMap.put("cmmnCodeList", new ArrayList()); + else + resultMap.put("cmmnCodeList", xitFrameCodeService.findCmmnCodes(cmmnClCodeList.get(0).getClCode())); + } else { + resultMap.put("cmmnCodeList", xitFrameCodeService.findCmmnCodes(cmmnCodeMngVO.getClCode())); + } + return resultMap; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/zip/dao/XitZipCodeMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/code/zip/dao/XitZipCodeMngMapper.java new file mode 100644 index 00000000..2a4c4e53 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/zip/dao/XitZipCodeMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.code.zip.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngVO; + +/** + * + * @업무그룹명: 우편번호관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitZipCodeMngMapper { + + /** + *
메소드 설명: 우편번호관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitZipCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 우편번호관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitZipCodeMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 우편번호관리 상세정보 조회
+ * @param vo + * @return XitZipCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitZipCodeMngVO findView(XitZipCodeMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/zip/model/XitZipCodeMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/code/zip/model/XitZipCodeMngSearchVO.java new file mode 100644 index 00000000..1a241af2 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/zip/model/XitZipCodeMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.code.zip.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 우편번호관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitZipCodeMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/zip/model/XitZipCodeMngVO.java b/src/main/java/kr/xit/framework/biz/mng/code/zip/model/XitZipCodeMngVO.java new file mode 100644 index 00000000..832aa50e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/zip/model/XitZipCodeMngVO.java @@ -0,0 +1,211 @@ +package kr.xit.framework.biz.mng.code.zip.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 우편번호관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitZipCodeMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /* + * 우편번호 + */ + private String zip = ""; + + /* + * 일련번호 + */ + private int sn = 0; + + /* + * 시도명 + */ + private String ctprvnNm = ""; + + /* + * 시군구명 + */ + private String signguNm = ""; + + /* + * 읍면동명 + */ + private String emdNm = ""; + + /* + * 리건물명 + */ + private String liBuldNm = ""; + + /* + * 번지동호 + */ + private String lnbrDongHo = ""; + + /* + * 최초등록자ID + */ + private String frstRegisterId = ""; + + /* + * 최종수정자ID + */ + private String lastUpdusrId = ""; + + /** + * zip attribute 를 리턴한다. + * @return String + */ + public String getZip() { + return zip; + } + + /** + * zip attribute 값을 설정한다. + * @param zip String + */ + public void setZip(String zip) { + this.zip = zip; + } + + /** + * sn attribute 를 리턴한다. + * @return int + */ + public int getSn() { + return sn; + } + + /** + * sn attribute 값을 설정한다. + * @param sn int + */ + public void setSn(int sn) { + this.sn = sn; + } + + /** + * ctprvnNm attribute 를 리턴한다. + * @return String + */ + public String getCtprvnNm() { + return ctprvnNm; + } + + /** + * ctprvnNm attribute 값을 설정한다. + * @param ctprvnNm String + */ + public void setCtprvnNm(String ctprvnNm) { + this.ctprvnNm = ctprvnNm; + } + + /** + * signguNm attribute 를 리턴한다. + * @return String + */ + public String getSignguNm() { + return signguNm; + } + + /** + * signguNm attribute 값을 설정한다. + * @param signguNm String + */ + public void setSignguNm(String signguNm) { + this.signguNm = signguNm; + } + + /** + * emdNm attribute 를 리턴한다. + * @return String + */ + public String getEmdNm() { + return emdNm; + } + + /** + * emdNm attribute 값을 설정한다. + * @param emdNm String + */ + public void setEmdNm(String emdNm) { + this.emdNm = emdNm; + } + + /** + * liBuldNm attribute 를 리턴한다. + * @return String + */ + public String getLiBuldNm() { + return liBuldNm; + } + + /** + * liBuldNm attribute 값을 설정한다. + * @param liBuldNm String + */ + public void setLiBuldNm(String liBuldNm) { + this.liBuldNm = liBuldNm; + } + + /** + * lnbrDongHo attribute 를 리턴한다. + * @return String + */ + public String getLnbrDongHo() { + return lnbrDongHo; + } + + /** + * lnbrDongHo attribute 값을 설정한다. + * @param lnbrDongHo String + */ + public void setLnbrDongHo(String lnbrDongHo) { + this.lnbrDongHo = lnbrDongHo; + } + + /** + * frstRegisterId attribute 를 리턴한다. + * @return String + */ + public String getFrstRegisterId() { + return frstRegisterId; + } + + /** + * frstRegisterId attribute 값을 설정한다. + * @param frstRegisterId String + */ + public void setFrstRegisterId(String frstRegisterId) { + this.frstRegisterId = frstRegisterId; + } + + /** + * lastUpdusrId attribute 를 리턴한다. + * @return String + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + + /** + * lastUpdusrId attribute 값을 설정한다. + * @param lastUpdusrId String + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/zip/service/XitZipCodeMngService.java b/src/main/java/kr/xit/framework/biz/mng/code/zip/service/XitZipCodeMngService.java new file mode 100644 index 00000000..87d298d2 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/zip/service/XitZipCodeMngService.java @@ -0,0 +1,90 @@ +package kr.xit.framework.biz.mng.code.zip.service; + +import java.io.InputStream; +import java.util.List; + +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngVO; + +/** + * + * @업무그룹명: 우편번호관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitZipCodeMngService { + + + /** + *
메소드 설명: 우편번호관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitZipCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 우편번호관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitZipCodeMngSearchVO searchVO); + + /** + *
메소드 설명: 우편번호관리 상세정보 조회
+ * @param vo + * @return XitZipCodeMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitZipCodeMngVO findView(XitZipCodeMngVO vo); + + /** + *
메소드 설명: 우편번호관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitZipCodeMngVO vo); + + /** + *
메소드 설명: 우편번호관리 일괄 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addsProc(InputStream fis) throws Exception; + + /** + *
메소드 설명: 우편번호관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitZipCodeMngVO vo); + + /** + *
메소드 설명: 우편번호관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitZipCodeMngVO vo); + + /** + *
메소드 설명: 우편번호관리 다건 삭제
+ * @param zips + * @param sns + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String zips, String sns); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/zip/service/impl/XitZipCodeMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/code/zip/service/impl/XitZipCodeMngServiceImpl.java new file mode 100644 index 00000000..9adc9d04 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/zip/service/impl/XitZipCodeMngServiceImpl.java @@ -0,0 +1,158 @@ +package kr.xit.framework.biz.mng.code.zip.service.impl; + +import java.io.InputStream; +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.excel.EgovExcelService; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitZipVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngVO; +import kr.xit.framework.biz.mng.code.zip.service.XitZipCodeMngService; +import kr.xit.framework.biz.mng.code.zip.dao.XitZipCodeMngMapper; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitZipCodeMngServiceImpl implements XitZipCodeMngService { + + @Resource + private XitZipCodeMngMapper xitZipCodeMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name="xitGroupIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name = "xitExcelZipService") + private EgovExcelService excelZipService; + + @Override + public List findList(XitZipCodeMngSearchVO searchVO) { + List result = null; + try { + result = xitZipCodeMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자그룹관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitZipCodeMngSearchVO searchVO) { + int result = 0; + try { + result = xitZipCodeMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자그룹관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitZipCodeMngVO findView(XitZipCodeMngVO vo) { + XitZipCodeMngVO result = null; + try { + result = xitZipCodeMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("사용자그룹관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitZipCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitZipVO zipVO = convertToCrudVO(vo); + zipVO.setFrst_register_id(vo.getFrstRegisterId()); + + + /** + * 처리 + */ + xitFrameCrudService.addXitZip(zipVO); + + } + + @Override + public void addsProc(InputStream fis) throws Exception { + /** + * 처리 + */ + xitFrameCrudService.removesXitZip(new XitZipVO()); + excelZipService.uploadExcel("kr.xit.framework.biz.cmm.dao.XitFrameCrudMapper.addXitZip", fis, 2, 5000); + } + + @Override + public void modifyProc(XitZipCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitZipVO zipVO = convertToCrudVO(vo); + zipVO.setLast_updusr_id(vo.getLastUpdusrId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitZip(zipVO); + } + + @Override + public void removeProc(XitZipCodeMngVO vo) { + /** + * 필수값 설정 + */ + XitZipVO zipVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.removeXitZip(zipVO); + } + + @Override + public void removesProc(String zips, String sns) { + /** + * 처리 + */ + String [] arrZip = zips.split(";"); + String [] arrSn = sns.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitZipVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitZipVO convertToCrudVO(XitZipCodeMngVO vo) { + XitZipVO crudVO = new XitZipVO(); + crudVO.setZip (vo.getZip()); //우편번호 + crudVO.setSn (String.valueOf(vo.getSn())); //순번 + crudVO.setCtprvn_nm (vo.getCtprvnNm()); //시도 명 + crudVO.setSigngu_nm (vo.getSignguNm()); //시군구 명 + crudVO.setEmd_nm (vo.getEmdNm()); //읍면동 명 + crudVO.setLi_buld_nm (vo.getLiBuldNm()); //리 건물 명 + crudVO.setLnbr_dong_ho (vo.getLnbrDongHo()); //번지 동 호 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/code/zip/web/XitZipCodeMngController.java b/src/main/java/kr/xit/framework/biz/mng/code/zip/web/XitZipCodeMngController.java new file mode 100644 index 00000000..0415b493 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/code/zip/web/XitZipCodeMngController.java @@ -0,0 +1,379 @@ +package kr.xit.framework.biz.mng.code.zip.web; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +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.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngSearchVO; +import kr.xit.framework.biz.mng.code.zip.model.XitZipCodeMngVO; +import kr.xit.framework.biz.mng.code.zip.service.XitZipCodeMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileVO; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 우편번호관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/code/zip/") +public class XitZipCodeMngController { + + private static final Logger logger = LoggerFactory.getLogger(XitZipCodeMngController.class); + + @Resource + private XitZipCodeMngService xitZipCodeMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 우편번호관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ZipCodeMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ZipCodeMng_list(@ModelAttribute("searchVO") XitZipCodeMngSearchVO searchVO, ModelMap model) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/zip/XitZipCodeMng_list"; + } + /* +
메소드 설명: 우편번호 관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8.04. + */ + @RequestMapping(value = "ZipCodeMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map ZipCodeMng_listAjax(@ModelAttribute("searchVO") XitZipCodeMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitZipCodeMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitZipCodeMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ZipCodeMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ZipCodeMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("zip") XitZipCodeMngVO vo + , @ModelAttribute XitZipCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + case "inputs": //다건 등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("zip", xitZipCodeMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/zip/XitZipCodeMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ZipCodeMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ZipCodeMng_page_popup(@PathVariable String cmd + , @ModelAttribute("zip") XitZipCodeMngVO vo + , @ModelAttribute XitZipCodeMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/code/zip/XitZipCodeMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 우편번호관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ZipCodeMng_{cmd}_proc.do", method=RequestMethod.POST) + public void ZipCodeMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitZipCodeMngVO vo + ,@ModelAttribute("searchVO") XitZipCodeMngSearchVO searchVO + ,@RequestParam(value="zips", required=false, defaultValue="") String zips + ,@RequestParam(value="sns", required=false, defaultValue="") String sns + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("zip", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_input.do"; + break; + } + //처리 + try { + vo.setFrstRegisterId(loginVO.getUniqId()); + xitZipCodeMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_input.do"; + } + break; + + case "inserts": //다건 등록 + List listAttchFile = null; + try { + listAttchFile = XitAttachFileUtil.fileUpload(request, XitCmmnUtil.setOsPath("/home/tempUpload"), true, 5); + } catch (RuntimeException | IOException e1) { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_inputs.do"; + } + + if(XitCmmnUtil.isEmpty(listAttchFile)) { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_inputs.do"; + }else { + FileInputStream fis = null; + try { + XitAttachFileVO fileVO = listAttchFile.get(0); + File file = new File(fileVO.getFileFullPath()); + fis = new FileInputStream(file); + if (!"".equals(fileVO.getFileName())) { + // 2011.10.07 업로드 파일에 대한 확장자를 체크 + if (fileVO.getFileName().toLowerCase().endsWith(".xls") || fileVO.getFileName().toLowerCase().endsWith(".xlsx")) { + xitZipCodeMngService.addsProc(fis); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } else { + //log.info("xls, xlsx 파일 타입만 등록이 가능합니다."); + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + model.addAttribute("resultMsg", resultMsg); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_inputs.do"; + } + + } else { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + } + } catch (Exception e) { + } finally { + try { + if (fis != null) { + fis.close(); + } + } catch (IOException ee) { + logger.debug("{}", ee); + } + } + } + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_inputs.do"; + break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("zip", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + xitZipCodeMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitZipCodeMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/code/zip/ZipCodeMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitZipCodeMngService.removesProc(zips, sns); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/log/cnctn/dao/XitConectionLogMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/dao/XitConectionLogMngMapper.java new file mode 100644 index 00000000..20304461 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/dao/XitConectionLogMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.log.cnctn.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngSearchVO; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngVO; + +/** + * + * @업무그룹명: 접속로그관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitConectionLogMngMapper { + + /** + *
메소드 설명: 접속로그관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitConectionLogMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 접속로그관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitConectionLogMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 접속로그관리 상세정보 조회
+ * @param vo + * @return XitConectionLogMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitConectionLogMngVO findView(XitConectionLogMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/log/cnctn/model/XitConectionLogMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/model/XitConectionLogMngSearchVO.java new file mode 100644 index 00000000..4b1dbbe4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/model/XitConectionLogMngSearchVO.java @@ -0,0 +1,172 @@ +package kr.xit.framework.biz.mng.log.cnctn.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 접속로그관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitConectionLogMngSearchVO extends XitBaseSearchVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** + * 검색시작일 + */ + private String searchBgnDe = ""; + /** + * 검색조건 + */ + private String searchCnd = ""; + /** + * 검색종료일 + */ + private String searchEndDe = ""; + /** + * 검색단어 + */ + private String searchWrd = ""; + /** + * 정렬순서(DESC,ASC) + */ + private String sortOrdr = ""; + + /** 검색사용여부 */ + 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; + + /** rowNo */ + private int rowNo = 0; + + + public String getSearchBgnDe() { + return searchBgnDe; + } + + public void setSearchBgnDe(String searchBgnDe) { + this.searchBgnDe = searchBgnDe; + } + + public String getSearchCnd() { + return searchCnd; + } + + public void setSearchCnd(String searchCnd) { + this.searchCnd = searchCnd; + } + + public String getSearchEndDe() { + return searchEndDe; + } + + public void setSearchEndDe(String searchEndDe) { + this.searchEndDe = searchEndDe; + } + + public String getSearchWrd() { + return searchWrd; + } + + public void setSearchWrd(String searchWrd) { + this.searchWrd = searchWrd; + } + + public String getSortOrdr() { + return sortOrdr; + } + + public void setSortOrdr(String sortOrdr) { + this.sortOrdr = sortOrdr; + } + + 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 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 int getRowNo() { + return rowNo; + } + + public void setRowNo(int rowNo) { + this.rowNo = rowNo; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/log/cnctn/model/XitConectionLogMngVO.java b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/model/XitConectionLogMngVO.java new file mode 100644 index 00000000..1f4cb3e4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/model/XitConectionLogMngVO.java @@ -0,0 +1,111 @@ +package kr.xit.framework.biz.mng.log.cnctn.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 접속로그관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitConectionLogMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 로그ID */ + private String logId; + + /** 사용자ID */ + private String loginId; + + /** 사용자명 */ + private String loginNm; + + /** 접속IP */ + private String loginIp; + + /** 접속방식 */ + private String loginMthd; + + /** 에러발생여부 */ + private String errOccrrAt; + + /** 에러코드 */ + private String errorCode; + + /** 생성일시 */ + private String creatDt; + + + public String getLogId() { + return logId; + } + + public void setLogId(String logId) { + this.logId = logId; + } + + public String getLoginId() { + return loginId; + } + + public void setLoginId(String loginId) { + this.loginId = loginId; + } + + public String getLoginNm() { + return loginNm; + } + + public void setLoginNm(String loginNm) { + this.loginNm = loginNm; + } + + public String getLoginIp() { + return loginIp; + } + + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + public String getLoginMthd() { + return loginMthd; + } + + public void setLoginMthd(String loginMthd) { + this.loginMthd = loginMthd; + } + + public String getErrOccrrAt() { + return errOccrrAt; + } + + public void setErrOccrrAt(String errOccrrAt) { + this.errOccrrAt = errOccrrAt; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getCreatDt() { + return creatDt; + } + + public void setCreatDt(String creatDt) { + this.creatDt = creatDt; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/log/cnctn/service/XitConectionLogMngService.java b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/service/XitConectionLogMngService.java new file mode 100644 index 00000000..40f65733 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/service/XitConectionLogMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.log.cnctn.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngSearchVO; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngVO; + +/** + * + * @업무그룹명: 접속로그관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitConectionLogMngService { + + + /** + *
메소드 설명: 접속로그관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitConectionLogMngSearchVO searchVO); + + /** + *
메소드 설명: 접속로그관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitConectionLogMngSearchVO searchVO); + + /** + *
메소드 설명: 접속로그관리 상세정보 조회
+ * @param vo + * @return XitConectionLogMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitConectionLogMngVO findView(XitConectionLogMngVO vo); + + /** + *
메소드 설명: 접속로그관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitConectionLogMngVO vo); + + /** + *
메소드 설명: 접속로그관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitConectionLogMngVO vo); + + /** + *
메소드 설명: 접속로그관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitConectionLogMngVO vo); + + /** + *
메소드 설명: 접속로그관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/log/cnctn/service/impl/XitConectionLogMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/service/impl/XitConectionLogMngServiceImpl.java new file mode 100644 index 00000000..b2b0c5e3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/service/impl/XitConectionLogMngServiceImpl.java @@ -0,0 +1,136 @@ +package kr.xit.framework.biz.mng.log.cnctn.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitConectLogVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.log.cnctn.service.XitConectionLogMngService; +import kr.xit.framework.core.message.XitMessageSource; +import lombok.AllArgsConstructor; +import kr.xit.framework.biz.mng.log.cnctn.dao.XitConectionLogMngMapper; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngSearchVO; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngVO; + +@AllArgsConstructor +@Service +public class XitConectionLogMngServiceImpl implements XitConectionLogMngService { + + private final XitConectionLogMngMapper xitConectionLogMngMapper; + private final XitFrameCrudService xitFrameCrudService; + private final XitMessageSource xitMessageSource; + + @Override + public List findList(XitConectionLogMngSearchVO searchVO) { + List result = null; + try { + result = xitConectionLogMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("접속로그관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitConectionLogMngSearchVO searchVO) { + int result = 0; + try { + result = xitConectionLogMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("접속로그관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitConectionLogMngVO findView(XitConectionLogMngVO vo) { + XitConectionLogMngVO result = null; + try { + result = xitConectionLogMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("접속로그관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitConectionLogMngVO vo) { + /** + * 필수값 설정 + */ + XitConectLogVO conectLogVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.addXitConectLog(conectLogVO); + + } + + @Override + public void modifyProc(XitConectionLogMngVO vo) { + /** + * 필수값 설정 + */ + XitConectLogVO conectLogVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitConectLog(conectLogVO); + } + + @Override + public void removeProc(XitConectionLogMngVO vo) { + /** + * 필수값 설정 + */ + XitConectLogVO conectLogVO = new XitConectLogVO(); + conectLogVO.setLog_id(vo.getLogId()); + + /** + * 처리 + */ + xitFrameCrudService.removeXitConectLog(conectLogVO); + } + + @Override + public void removesProc(String ids, String userId) { + /** + * 처리 + */ + String [] logIds = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitConectLogVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitConectLogVO convertToCrudVO(XitConectionLogMngVO vo) { + XitConectLogVO crudVO = new XitConectLogVO(); + crudVO.setLog_id(vo.getLogId()); //로그 id + crudVO.setConect_id(vo.getLoginId()); //접속 id + crudVO.setConect_ip(vo.getLoginIp()); //접속 ip + crudVO.setConect_mthd(vo.getLoginMthd()); //접속 방식 + crudVO.setError_occrrnc_at(vo.getErrOccrrAt()); //오류 발생 여부 + crudVO.setError_code(vo.getErrorCode()); //오류 코드 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/log/cnctn/web/XitConectionLogMngController.java b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/web/XitConectionLogMngController.java new file mode 100644 index 00000000..dc742bec --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/log/cnctn/web/XitConectionLogMngController.java @@ -0,0 +1,316 @@ +package kr.xit.framework.biz.mng.log.cnctn.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngVO; +import kr.xit.framework.biz.mng.log.cnctn.service.XitConectionLogMngService; +import kr.xit.framework.biz.mng.log.cnctn.model.XitConectionLogMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; +import lombok.AllArgsConstructor; + +/** + * + * @업무그룹명: 접속로그관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@AllArgsConstructor +@Controller +@RequestMapping("/_mng_/log/cnctn/") +public class XitConectionLogMngController { + + private final XitConectionLogMngService xitConectionLogMngService; + private final XitFrameCodeService xitFrameCodeService; + private final XitBeanValidator beanValidator; + private final XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 접속로그관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionLogMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ConectionLogMng_list(@ModelAttribute("searchVO") XitConectionLogMngSearchVO searchVO, ModelMap model) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/log/cnctn/XitConectionLogMng_list"; + } + + /** + *
메소드 설명: 접속로그관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8.04. + */ + @RequestMapping(value = "ConectionLogMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map ConectionLogMng_listAjax(@ModelAttribute("searchVO") XitConectionLogMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitConectionLogMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitConectionLogMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd String + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionLogMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ConectionLogMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("cmmnCode") XitConectionLogMngVO vo + , @ModelAttribute XitConectionLogMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { +// case "input": //등록 페이지 +// break; +// case "edit": //수정 페이지 + case "view": //상세 페이지 + model.addAttribute("result", xitConectionLogMngService.findView(vo)); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/log/cnctn/XitConectionLogMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd String + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionLogMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ConectionLogMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitConectionLogMngSearchVO searchVO + , @ModelAttribute XitConectionLogMngVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/log/cnctn/XitConectionLogMng_"+cmd+"_popup"+ FrameworkConstants.TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 접속로그관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionLogMng_{cmd}_proc.do", method=RequestMethod.POST) + public void ConectionLogMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitConectionLogMngVO vo + ,@ModelAttribute("searchVO") XitConectionLogMngSearchVO searchVO + ,@RequestParam(value="logIds", required=false, defaultValue="") String logIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_input.do"; + break; + } + //처리 + try { + xitConectionLogMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_edit.do"; + break; + } + //처리 + try { + xitConectionLogMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitConectionLogMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/log/cnctn/ConectionLogMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitConectionLogMngService.removesProc(logIds, loginVO.getUniqId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/mapper/ProgramMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/mapper/ProgramMngMapper.java new file mode 100644 index 00000000..c63cc0ed --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/mapper/ProgramMngMapper.java @@ -0,0 +1,70 @@ +package kr.xit.framework.biz.mng.mapper; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.session.RowBounds; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.model.ProgramMngSearchVO; +import kr.xit.framework.biz.mng.model.ProgramMngVO; + +/** + * + * @업무그룹명: 프로그램관리 Mapper + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:03:50 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface ProgramMngMapper { + + /** + *
메소드 설명: 프로그램관리 목록 조회
+ * @param map + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map map, RowBounds rowBounds); + + /** + *
메소드 설명: 프로그램관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(ProgramMngSearchVO searchVO); + + /** + *
메소드 설명: 프로그램관리 상세정보 조회
+ * @param vo + * @return XitProgramMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public ProgramMngVO findView(ProgramMngVO vo); + + /** + *
메소드 설명: 프로그램정보 전체데이터 삭제
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public int deleteAllProgrm(); + + /** + *
메소드 설명: 프로그램변경내역정보 전체데이터 삭제
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public int deleteAllProgrmDtls(); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/create/dao/XitMenuCreateMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/menu/create/dao/XitMenuCreateMngMapper.java new file mode 100644 index 00000000..1a880279 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/create/dao/XitMenuCreateMngMapper.java @@ -0,0 +1,80 @@ +package kr.xit.framework.biz.mng.menu.create.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngSearchVO; +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngVO; +import org.apache.ibatis.session.RowBounds; + +/** + * + * @업무그룹명: 메뉴생성관리 Mapper + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:03:50 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitMenuCreateMngMapper { + + /** + *
메소드 설명: 메뉴생성관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map paramMap, RowBounds rowBounds); + + /** + *
메소드 설명: 메뉴생성관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitMenuCreateMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 메뉴생성관리 상세정보 조회
+ * @param vo + * @return XitMenuCreateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitMenuCreateMngVO findView(XitMenuCreateMngVO vo) throws SQLException; + + /** + *
메소드 설명: 메뉴목록 조회
+ * @param vo + * @return + * @author: 박민규 + * @date: 2020. 3. 31. + */ + public List findListOfMenuInfo(XitMenuCreateMngVO vo) throws SQLException; + + /** + *
메소드 설명: 사용자별 사용자보안설정 데이터 조회
+ * @param searchVO + * @return XitMenuCreateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 31. + */ + public XitMenuCreateMngVO findUserScrtySetupByUsr(XitMenuCreateMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 매뉴생성내역 전체데이터 삭제
+ * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 31. + */ + public int deleteAllMenuCreatDtlsList() throws SQLException; + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/create/model/XitMenuCreateMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/menu/create/model/XitMenuCreateMngSearchVO.java new file mode 100644 index 00000000..e36e7ae0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/create/model/XitMenuCreateMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.menu.create.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 메뉴생성관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuCreateMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/create/model/XitMenuCreateMngVO.java b/src/main/java/kr/xit/framework/biz/mng/menu/create/model/XitMenuCreateMngVO.java new file mode 100644 index 00000000..f8007cd9 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/create/model/XitMenuCreateMngVO.java @@ -0,0 +1,221 @@ +package kr.xit.framework.biz.mng.menu.create.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 메뉴생성관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuCreateMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 메뉴번호 */ + private int menuNo; + /** 맵생성ID */ + private String mapCreatId; + /** 권한코드 */ + private String authorCode; + + /** 권한정보설정 */ + /** 권한명 */ + private String authorNm; + /** 권한설명 */ + private String authorDc; + /** 권한생성일자 */ + private String authorCreatDe; + + /** 기타VO변수 */ + /** 생성자ID **/ + private String creatPersonId; + /** 체크여부 **/ + private String chkYeoBu; + /** 부모메뉴ID **/ + private String upperMenuId; + /** 메뉴순서 **/ + private String menuOrdr; + /** 메뉴명 **/ + private String menuNm; + /** 프로그램명 **/ + private String progrmFileNm; + + + /** + * menuNo attribute를 리턴한다. + * @return int + */ + public int getMenuNo() { + return menuNo; + } + /** + * menuNo attribute 값을 설정한다. + * @param menuNo int + */ + public void setMenuNo(int menuNo) { + this.menuNo = menuNo; + } + /** + * mapCreatId attribute를 리턴한다. + * @return String + */ + public String getMapCreatId() { + return mapCreatId; + } + /** + * mapCreatId attribute 값을 설정한다. + * @param mapCreatId String + */ + public void setMapCreatId(String mapCreatId) { + this.mapCreatId = mapCreatId; + } + /** + * authorCode attribute를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + /** + * authorNm attribute를 리턴한다. + * @return String + */ + public String getAuthorNm() { + return authorNm; + } + /** + * authorNm attribute 값을 설정한다. + * @param authorNm String + */ + public void setAuthorNm(String authorNm) { + this.authorNm = authorNm; + } + /** + * authorDc attribute를 리턴한다. + * @return String + */ + public String getAuthorDc() { + return authorDc; + } + /** + * authorDc attribute 값을 설정한다. + * @param authorDc String + */ + public void setAuthorDc(String authorDc) { + this.authorDc = authorDc; + } + /** + * authorCreatDe attribute를 리턴한다. + * @return String + */ + public String getAuthorCreatDe() { + return authorCreatDe; + } + /** + * authorCreatDe attribute 값을 설정한다. + * @param authorCreatDe String + */ + public void setAuthorCreatDe(String authorCreatDe) { + this.authorCreatDe = authorCreatDe; + } + /** + * creatPersonId attribute를 리턴한다. + * @return String + */ + public String getCreatPersonId() { + return creatPersonId; + } + /** + * creatPersonId attribute 값을 설정한다. + * @param creatPersonId String + */ + public void setCreatPersonId(String creatPersonId) { + this.creatPersonId = creatPersonId; + } + /** + * chkYeoBu attribute 값을 리턴한다. + * @return String + */ + public String getChkYeoBu() { + return chkYeoBu; + } + /** + * chkYeoBu attribute 값을 설정한다. + * @param chkYeoBu String + */ + public void setChkYeoBu(String chkYeoBu) { + this.chkYeoBu = chkYeoBu; + } + /** + * upperMenuId attribute 값을 리턴한다. + * @return String + */ + public String getUpperMenuId() { + return upperMenuId; + } + /** + * upperMenuId attribute 값을 설정한다. + * @param upperMenuId String + */ + public void setUpperMenuId(String upperMenuId) { + this.upperMenuId = upperMenuId; + } + /** + * menuOrdr attribute 값을 리턴한다. + * @return String + */ + public String getMenuOrdr() { + return menuOrdr; + } + /** + * menuOrdr attribute 값을 설정한다. + * @param menuOrdr String + */ + public void setMenuOrdr(String menuOrdr) { + this.menuOrdr = menuOrdr; + } + /** + * menuNm attribute 값을 리턴한다. + * @return String + */ + public String getMenuNm() { + return menuNm; + } + /** + * menuNm attribute 값을 설정한다. + * @param menuNm String + */ + public void setMenuNm(String menuNm) { + this.menuNm = menuNm; + } + /** + * progrmFileNm attribute 값을 리턴한다. + * @return String + */ + public String getProgrmFileNm() { + return progrmFileNm; + } + /** + * progrmFileNm attribute 값을 설정한다. + * @param progrmFileNm String + */ + public void setProgrmFileNm(String progrmFileNm) { + this.progrmFileNm = progrmFileNm; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/create/service/XitMenuCreateMngService.java b/src/main/java/kr/xit/framework/biz/mng/menu/create/service/XitMenuCreateMngService.java new file mode 100644 index 00000000..46436384 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/create/service/XitMenuCreateMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.menu.create.service; + +import java.util.List; +import java.util.Map; + +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngSearchVO; +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngVO; +import org.apache.ibatis.session.RowBounds; + +/** + * + * @업무그룹명: 메뉴생성관리 Service + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:07:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitMenuCreateMngService { + + /** + *
메소드 설명: 메뉴생성관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map paramMap, RowBounds rowBounds); + + /** + *
메소드 설명: 메뉴생성관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitMenuCreateMngSearchVO searchVO); + + /** + *
메소드 설명: 메뉴생성관리 상세정보 조회
+ * @param vo + * @return XitMenuCreateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitMenuCreateMngVO findView(XitMenuCreateMngVO vo); + + /** + *
메소드 설명: 메뉴생성관리 다건 등록
+ * @param authorCodes 권한코드 + * @param MenuNos 메뉴코드 다건 + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void addsProc(String authorCode, String MenuNos); + + + /** + *
메소드 설명: 메뉴목록 조회
+ * @param vo + * @return + * @author: 박민규 + * @date: 2020. 3. 31. + */ + public List findListOfMenuInfo(XitMenuCreateMngVO vo); + + + /** + *
메소드 설명: 사용자별 사용자보안설정 데이터 조회
+ * @param searchVO + * @return XitMenuCreateMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 31. + */ + public XitMenuCreateMngVO findUserScrtySetupByUsr(XitMenuCreateMngSearchVO searchVO); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/create/service/impl/XitMenuCreateMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/menu/create/service/impl/XitMenuCreateMngServiceImpl.java new file mode 100644 index 00000000..23fb96c8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/create/service/impl/XitMenuCreateMngServiceImpl.java @@ -0,0 +1,134 @@ +package kr.xit.framework.biz.mng.menu.create.service.impl; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.apache.ibatis.session.RowBounds; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitMenuCreatDtlsVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.menu.create.dao.XitMenuCreateMngMapper; +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngSearchVO; +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngVO; +import kr.xit.framework.biz.mng.menu.create.service.XitMenuCreateMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitMenuCreateMngServiceImpl implements XitMenuCreateMngService { + + @Resource + private XitMenuCreateMngMapper xitMenuCreateMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + @Override + public List findList(Map paramMap, RowBounds rowBounds) { + return xitMenuCreateMngMapper.findList(paramMap, rowBounds); + } + + @Override + public int findListTotCnt(XitMenuCreateMngSearchVO searchVO) { + int result = 0; + try { + result = xitMenuCreateMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("메뉴생성관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitMenuCreateMngVO findView(XitMenuCreateMngVO vo) { + XitMenuCreateMngVO result = null; + try { + result = xitMenuCreateMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("메뉴생성관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addsProc(String authorCode, String MenuNos) { + + /** + * 유효성 확인 + */ + String[] arrMenuNo = MenuNos.split(","); + if (arrMenuNo == null || (arrMenuNo.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + } + + + /** + * 필수값 설정 + */ + List listMenuCreatDtlsVO = new ArrayList(); + for (int i = 0; i < arrMenuNo.length; i++) { + XitMenuCreatDtlsVO menuCreatDtlsVO = this.convertToCrudVO(arrMenuNo[i], authorCode, null); + listMenuCreatDtlsVO.add(menuCreatDtlsVO); + } + + + /** + * 처리 + */ + //이전에 존재하는 권한코드에 대한 메뉴생성내역 삭제 + XitMenuCreatDtlsVO xitMenuCreatDtlsVO = new XitMenuCreatDtlsVO(); + xitMenuCreatDtlsVO.setAuthor_code(authorCode); + List listBeforeData = xitFrameCrudService.findXitMenuCreatDtlss(xitMenuCreatDtlsVO); + for(XitMenuCreatDtlsVO menuCreatDtlsVO : listBeforeData) { + xitFrameCrudService.removeXitMenuCreatDtls(menuCreatDtlsVO); + } + //메뉴생성내역 테이블에 insert + for (XitMenuCreatDtlsVO menuCreatDtlsVO : listMenuCreatDtlsVO) { + xitFrameCrudService.addXitMenuCreatDtls(menuCreatDtlsVO); + } + + } + + @Override + public List findListOfMenuInfo(XitMenuCreateMngVO vo) { + List result = null; + try { + result = xitMenuCreateMngMapper.findListOfMenuInfo(vo); + } catch (SQLException e) { + throw new RuntimeException("메뉴 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public XitMenuCreateMngVO findUserScrtySetupByUsr(XitMenuCreateMngSearchVO searchVO) { + XitMenuCreateMngVO result = null; + try { + result = xitMenuCreateMngMapper.findUserScrtySetupByUsr(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자별 사용자보안설정 데이터 조회 FAIL::", e); + } + return result; + } + + + /** + *
메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다.
+ * @return XitMenuCreatDtlsVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private XitMenuCreatDtlsVO convertToCrudVO(String menuNo, String authorCode, String mapngCreatId) { + XitMenuCreatDtlsVO menuCreatDtlsVO = new XitMenuCreatDtlsVO(); + menuCreatDtlsVO.setMenu_no (menuNo); + menuCreatDtlsVO.setAuthor_code (authorCode); + menuCreatDtlsVO.setMapng_creat_id(mapngCreatId); + + return menuCreatDtlsVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/create/web/XitMenuCreateMngController.java b/src/main/java/kr/xit/framework/biz/mng/menu/create/web/XitMenuCreateMngController.java new file mode 100644 index 00000000..ebe6523d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/create/web/XitMenuCreateMngController.java @@ -0,0 +1,197 @@ +package kr.xit.framework.biz.mng.menu.create.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kr.xit.framework.core.model.ResultResponse; +import kr.xit.framework.support.mybatis.MybatisUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngSearchVO; +import kr.xit.framework.biz.mng.menu.create.model.XitMenuCreateMngVO; +import kr.xit.framework.biz.mng.menu.create.service.XitMenuCreateMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; +import org.springframework.web.servlet.ModelAndView; + +/** + * + * @업무그룹명: 메뉴생성관리 Controller + * @설명: + * @최초작성일: 2020. 3. 25. 오후 4:05:40 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping(value = "/_mng_/menu/create/") +public class XitMenuCreateMngController { + + @Resource + private XitMenuCreateMngService xitMenuCreateMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 메뉴생성관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "MenuCreateMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String MenuCreateMng_list(@ModelAttribute("searchVO") XitMenuCreateMngSearchVO searchVO, ModelMap model) { + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/create/XitMenuCreateMng_list"; + } + + /** + * 메소드 설명: 자료 검색 + * Paging처리 : parameter로 Map 사용 + * @RequestParam 필요 + * @param paramMap + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 10. 13. + */ + @GetMapping(value = "MenuCreateMng_list.ajax") + public ModelAndView finds(@RequestParam Map paramMap) { + + return ResultResponse.of(xitMenuCreateMngService.findList(paramMap, MybatisUtils.getPagingInfo(paramMap))); + } + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "MenuCreateMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String MenuCreateMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("menuCreatVO") XitMenuCreateMngVO vo, ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + List list_menulist = xitMenuCreateMngService.findListOfMenuInfo(vo); + model.addAttribute("list_menulist", list_menulist); + model.addAttribute("resultVO", vo); + break; +// case "edit": //수정 페이지 +// case "view": //상세 페이지 +// break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/create/XitMenuCreateMng_"+cmd+tilesDef; + + } + + + + /** + *
메소드 설명: 메뉴생성관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "MenuCreateMng_{cmd}_proc.do", method=RequestMethod.POST) + public void MenuCreateMng_cmd_proc(HttpServletRequest req + ,@PathVariable String cmd + ,@ModelAttribute("menuCreatVO") XitMenuCreateMngVO vo + ,@RequestParam(value="checkedAuthorForInsert", required=false, defaultValue="")String checkedAuthorForInsert + ,@RequestParam(value="checkedMenuNoForInsert", required=false, defaultValue="")String checkedMenuNoForInsert + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/menu/create/MenuCreateMng_list.do"; + String resultMsg = null; + switch (cmd) { +// case "insert": //등록 +// break; + + case "inserts": //다건 등록 + //처리 + try { + xitMenuCreateMngService.addsProc(checkedAuthorForInsert, checkedMenuNoForInsert); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + } + sLocationUrl = "forward:/_mng_/menu/create/MenuCreateMng_input.do?tilesDef=popup"; + break; + +// case "update": //수정 +// break; + +// case "delete": //삭제 +// break; + +// case "deletes": //다건 삭제 +// break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/list/dao/XitMenuListMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/menu/list/dao/XitMenuListMngMapper.java new file mode 100644 index 00000000..c8cc89e0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/list/dao/XitMenuListMngMapper.java @@ -0,0 +1,60 @@ +package kr.xit.framework.biz.mng.menu.list.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngVO; +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngSearchVO; +import org.apache.ibatis.session.RowBounds; + +/** + * + * @업무그룹명: 메뉴목록관리 Mapper + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:03:50 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitMenuListMngMapper { + + /** + *
메소드 설명: 메뉴목록관리 목록 조회
+ * @param map + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map paramMap, RowBounds rowBounds); + + /** + *
메소드 설명: 메뉴목록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitMenuListMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 메뉴목록관리 상세정보 조회
+ * @param vo + * @return XitMenuListMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitMenuListMngVO findView(XitMenuListMngVO vo) throws SQLException; + + /** + *
메소드 설명: 메뉴정보 전체데이터 삭제
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public int deleteAllMenuList() throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/list/model/XitMenuListMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/menu/list/model/XitMenuListMngSearchVO.java new file mode 100644 index 00000000..a5cc5b8a --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/list/model/XitMenuListMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.menu.list.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 메뉴목록관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuListMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/list/model/XitMenuListMngVO.java b/src/main/java/kr/xit/framework/biz/mng/menu/list/model/XitMenuListMngVO.java new file mode 100644 index 00000000..e7b2b677 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/list/model/XitMenuListMngVO.java @@ -0,0 +1,353 @@ +package kr.xit.framework.biz.mng.menu.list.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 메뉴목록관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuListMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 메뉴정보 */ + /** 메뉴번호 */ + private int menuNo; + /** 메뉴순서 */ + private int menuOrdr; + /** 메뉴명 */ + private String menuNm; + /** 상위메뉴번호 */ + private int upperMenuId; + /** 메뉴설명 */ + private String menuDc; + /** 관련이미지경로 */ + private String relateImagePath; + /** 관련이미지명 */ + private String relateImageNm; + /** 프로그램파일명 */ + private String progrmFileNm; + + /** 사이트맵 */ + /** 생성자ID **/ + private String creatPersonId; + + /** 권한정보설정 */ + /** 권한코드 */ + private String authorCode; + + /** 기타VO변수 */ + private String tempValue; + private int tempInt; + + + /** Login 메뉴관련 VO변수 */ + /** tmp_Id */ + private String tmp_Id; + /** tmp_Password */ + private String tmp_Password; + /** tmp_Name */ + private String tmp_Name; + /** tmp_UserSe */ + private String tmp_UserSe; + /** tmp_Email */ + private String tmp_Email; + /** tmp_OrgnztId */ + private String tmp_OrgnztId; + /** tmp_UniqId */ + private String tmp_UniqId; + /** tmp_Cmd */ + private String tmp_Cmd; + + /** + * menuNo attribute를 리턴한다. + * @return int + */ + public int getMenuNo() { + return menuNo; + } + /** + * menuNo attribute 값을 설정한다. + * @param menuNo int + */ + public void setMenuNo(int menuNo) { + this.menuNo = menuNo; + } + /** + * menuOrdr attribute를 리턴한다. + * @return int + */ + public int getMenuOrdr() { + return menuOrdr; + } + /** + * menuOrdr attribute 값을 설정한다. + * @param menuOrdr int + */ + public void setMenuOrdr(int menuOrdr) { + this.menuOrdr = menuOrdr; + } + /** + * menuNm attribute를 리턴한다. + * @return String + */ + public String getMenuNm() { + return menuNm; + } + /** + * menuNm attribute 값을 설정한다. + * @param menuNm String + */ + public void setMenuNm(String menuNm) { + this.menuNm = menuNm; + } + /** + * upperMenuId attribute를 리턴한다. + * @return int + */ + public int getUpperMenuId() { + return upperMenuId; + } + /** + * upperMenuId attribute 값을 설정한다. + * @param upperMenuId int + */ + public void setUpperMenuId(int upperMenuId) { + this.upperMenuId = upperMenuId; + } + /** + * menuDc attribute를 리턴한다. + * @return String + */ + public String getMenuDc() { + return menuDc; + } + /** + * menuDc attribute 값을 설정한다. + * @param menuDc String + */ + public void setMenuDc(String menuDc) { + this.menuDc = menuDc; + } + /** + * relateImagePath attribute를 리턴한다. + * @return String + */ + public String getRelateImagePath() { + return relateImagePath; + } + /** + * relateImagePath attribute 값을 설정한다. + * @param relateImagePath String + */ + public void setRelateImagePath(String relateImagePath) { + this.relateImagePath = relateImagePath; + } + /** + * relateImageNm attribute를 리턴한다. + * @return String + */ + public String getRelateImageNm() { + return relateImageNm; + } + /** + * relateImageNm attribute 값을 설정한다. + * @param relateImageNm String + */ + public void setRelateImageNm(String relateImageNm) { + this.relateImageNm = relateImageNm; + } + /** + * progrmFileNm attribute를 리턴한다. + * @return String + */ + public String getProgrmFileNm() { + return progrmFileNm; + } + /** + * progrmFileNm attribute 값을 설정한다. + * @param progrmFileNm String + */ + public void setProgrmFileNm(String progrmFileNm) { + this.progrmFileNm = progrmFileNm; + } + /** + * creatPersonId attribute를 리턴한다. + * @return String + */ + public String getCreatPersonId() { + return creatPersonId; + } + /** + * creatPersonId attribute 값을 설정한다. + * @param creatPersonId String + */ + public void setCreatPersonId(String creatPersonId) { + this.creatPersonId = creatPersonId; + } + /** + * authorCode attribute를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + + /** + * tmp_Id attribute를 리턴한다. + * @return String + */ + public String getTmp_Id() { + return tmp_Id; + } + /** + * tmp_Id attribute 값을 설정한다. + * @param tmp_Id String + */ + public void setTmp_Id(String tmp_Id) { + this.tmp_Id = tmp_Id; + } + /** + * tmp_Password attribute를 리턴한다. + * @return String + */ + public String getTmp_Password() { + return tmp_Password; + } + /** + * tmp_Password attribute 값을 설정한다. + * @param tmp_Password String + */ + public void setTmp_Password(String tmp_Password) { + this.tmp_Password = tmp_Password; + } + /** + * tmp_Name attribute를 리턴한다. + * @return String + */ + public String getTmp_Name() { + return tmp_Name; + } + /** + * tmp_Name attribute 값을 설정한다. + * @param tmp_Name String + */ + public void setTmp_Name(String tmp_Name) { + this.tmp_Name = tmp_Name; + } + /** + * tmp_UserSe attribute를 리턴한다. + * @return String + */ + public String getTmp_UserSe() { + return tmp_UserSe; + } + /** + * tmp_UserSe attribute 값을 설정한다. + * @param tmp_UserSe String + */ + public void setTmp_UserSe(String tmp_UserSe) { + this.tmp_UserSe = tmp_UserSe; + } + /** + * tmp_Email attribute를 리턴한다. + * @return String + */ + public String getTmp_Email() { + return tmp_Email; + } + /** + * tmp_Email attribute 값을 설정한다. + * @param tmp_Email String + */ + public void setTmp_Email(String tmp_Email) { + this.tmp_Email = tmp_Email; + } + /** + * tmp_OrgnztId attribute를 리턴한다. + * @return String + */ + public String getTmp_OrgnztId() { + return tmp_OrgnztId; + } + /** + * tmp_OrgnztId attribute 값을 설정한다. + * @param tmp_OrgnztId String + */ + public void setTmp_OrgnztId(String tmp_OrgnztId) { + this.tmp_OrgnztId = tmp_OrgnztId; + } + /** + * tmp_UniqId attribute를 리턴한다. + * @return String + */ + public String getTmp_UniqId() { + return tmp_UniqId; + } + /** + * tmp_UniqId attribute 값을 설정한다. + * @param tmp_UniqId String + */ + public void setTmp_UniqId(String tmp_UniqId) { + this.tmp_UniqId = tmp_UniqId; + } + /** + * tmp_Cmd attribute를 리턴한다. + * @return String + */ + public String getTmp_Cmd() { + return tmp_Cmd; + } + /** + * tmp_Cmd attribute 값을 설정한다. + * @param tmp_Cmd String + */ + public void setTmp_Cmd(String tmp_Cmd) { + this.tmp_Cmd = tmp_Cmd; + } + + /** + * tempValue attribute를 리턴한다. + * @return String + */ + public String getTempValue() { + return tempValue; + } + /** + * tempValue attribute 값을 설정한다. + * @param tempValue String + */ + public void setTempValue(String tempValue) { + this.tempValue = tempValue; + } + /** + * tempInt attribute를 리턴한다. + * @return int + */ + public int getTempInt() { + return tempInt; + } + /** + * tempInt attribute 값을 설정한다. + * @param tempInt int + */ + public void setTempInt(int tempInt) { + this.tempInt = tempInt; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/list/service/XitMenuListMngService.java b/src/main/java/kr/xit/framework/biz/mng/menu/list/service/XitMenuListMngService.java new file mode 100644 index 00000000..a667d80e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/list/service/XitMenuListMngService.java @@ -0,0 +1,105 @@ +package kr.xit.framework.biz.mng.menu.list.service; + +import java.io.FileInputStream; +import java.util.List; +import java.util.Map; + +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngVO; +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngSearchVO; +import org.apache.ibatis.session.RowBounds; + +/** + * + * @업무그룹명: 메뉴목록관리 Service + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:07:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitMenuListMngService { + + /** + *
메소드 설명: 메뉴목록관리 목록 조회
+ * @param map + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map paramMap, RowBounds rowBounds); + + /** + *
메소드 설명: 메뉴목록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitMenuListMngSearchVO searchVO); + + /** + *
메소드 설명: 메뉴목록관리 상세정보 조회
+ * @param vo + * @return XitMenuListMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitMenuListMngVO findView(XitMenuListMngVO vo); + + /** + *
메소드 설명: 메뉴목록관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void addProc(XitMenuListMngVO vo); + + /** + *
메소드 설명: 메뉴목록관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void modifyProc(XitMenuListMngVO vo); + + /** + *
메소드 설명: 메뉴목록관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void removeProc(XitMenuListMngVO vo); + + /** + *
메소드 설명: 메뉴목록관리 다건 삭제
+ * @param menuNos void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public void removesProc(String menuNos); + + /** + *
메소드 설명: 메뉴일괄초기화
+	 * 	-메뉴목록 테이블, 프로그램목록 테이블 전체 삭제
+	 * 
+ * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public boolean menuBndeAllDelete() throws Exception; + + /** + *
메소드 설명: 메뉴일괄등록 프로세스
+ * @param vo + * @param inputStream + * @return + * @throws Exception String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public String addsProc(XitMenuListMngVO vo, FileInputStream inputStream) throws Exception; + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/list/service/impl/XitMenuListMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/menu/list/service/impl/XitMenuListMngServiceImpl.java new file mode 100644 index 00000000..a13a5e8b --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/list/service/impl/XitMenuListMngServiceImpl.java @@ -0,0 +1,544 @@ +package kr.xit.framework.biz.mng.menu.list.service.impl; + +import java.io.FileInputStream; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.apache.ibatis.session.RowBounds; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.excel.EgovExcelService; +import kr.xit.framework.biz.cmm.model.XitMenuInfoVO; +import kr.xit.framework.biz.cmm.model.ProgrmListVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.menu.create.dao.XitMenuCreateMngMapper; +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngVO; +import kr.xit.framework.biz.mng.menu.list.service.XitMenuListMngService; +import kr.xit.framework.biz.mng.menu.program.dao.XitProgramMngMapper; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngVO; +import kr.xit.framework.biz.mng.menu.list.dao.XitMenuListMngMapper; +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngSearchVO; +import kr.xit.framework.biz.mng.menu.program.service.XitProgramMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitMenuListMngServiceImpl implements XitMenuListMngService { + + private static final Logger logger = LoggerFactory.getLogger(XitMenuListMngServiceImpl.class); + + @Resource + private XitMenuListMngMapper xitMenuListMngMapper; + @Resource + private XitProgramMngMapper xitProgramMngMapper; + @Resource + private XitProgramMngService xitProgramMngService; + @Resource + private XitMenuCreateMngMapper xitMenuCreateMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name = "xitExcelZipService") + private EgovExcelService excelZipService; + + @Override + public List findList(Map paramMap, RowBounds rowBounds) { + + return xitMenuListMngMapper.findList(paramMap, rowBounds); + } + + @Override + public int findListTotCnt(XitMenuListMngSearchVO searchVO) { + int result = 0; + try { + result = xitMenuListMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("메뉴목록관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitMenuListMngVO findView(XitMenuListMngVO vo) { + XitMenuListMngVO result = null; + try { + result = xitMenuListMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("메뉴목록관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitMenuListMngVO vo) { + + /** + * 유효성 확인 + */ + //메뉴 유무 확인 + XitMenuInfoVO xitMenuInfoVO = new XitMenuInfoVO(); + xitMenuInfoVO.setMenu_no(String.valueOf(vo.getMenuNo())); + xitMenuInfoVO = xitFrameCrudService.findXitMenuInfo(xitMenuInfoVO); + if (XitCmmnUtil.notEmpty(xitMenuInfoVO)) + throw new RuntimeException(xitMessageSource.getMessage("common.isExist.msg")); + //프로그램 유무 확인 + ProgrmListVO xitProgrmListVO = new ProgrmListVO(); + xitProgrmListVO.setProgrm_file_nm(vo.getProgrmFileNm()); + xitProgrmListVO = xitFrameCrudService.findXitProgrmList(xitProgrmListVO); + if (XitCmmnUtil.isEmpty(xitProgrmListVO)) + throw new RuntimeException(xitMessageSource.getMessage("custom.isNotExist.msg")); + + + /** + * 필수값 설정 + */ + XitMenuInfoVO menuInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.addXitMenuInfo(menuInfoVO); + + } + + @Override + public void modifyProc(XitMenuListMngVO vo) { + + /** + * 유효성 확인 + */ + //프로그램 유무 확인 + ProgrmListVO xitProgrmListVO = new ProgrmListVO(); + xitProgrmListVO.setProgrm_file_nm(vo.getProgrmFileNm()); + xitProgrmListVO = xitFrameCrudService.findXitProgrmList(xitProgrmListVO); + if (XitCmmnUtil.isEmpty(xitProgrmListVO)) + throw new RuntimeException(xitMessageSource.getMessage("custom.isNotExist.msg")); + + + /** + * 필수값 설정 + */ + XitMenuInfoVO menuInfoVO = convertToCrudVO(vo); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitMenuInfo(menuInfoVO); + + } + + @Override + public void removeProc(XitMenuListMngVO vo) { + /** + * 유효성 확인 + */ + //삭제대상을 참조 중인 하위메뉴 확인 + XitMenuInfoVO xitMenuInfoVO = new XitMenuInfoVO(); + xitMenuInfoVO.setUpper_menu_no(String.valueOf(vo.getMenuNo())); + List listXitMenuInfo = xitFrameCrudService.findXitMenuInfos(xitMenuInfoVO); + if (XitCmmnUtil.notEmpty(listXitMenuInfo)) + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete.upperMenuExist")); + + /** + * 필수값 설정 + */ + XitMenuInfoVO menuInfoVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.removeXitMenuInfo(menuInfoVO); + + } + + @Override + public void removesProc(String menuNos) { + /** + * 유효성 확인 + */ + //메뉴번호 유무 확인 + String[] delMenuNo = menuNos.split(","); + if (delMenuNo == null || (delMenuNo.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete")); + } + + /** + * 처리 + */ + String[] arrMenuNo = menuNos.split(","); + for (int i = 0; i < arrMenuNo.length; i++) { + XitMenuListMngVO vo = new XitMenuListMngVO(); + vo.setMenuNo(Integer.parseInt(arrMenuNo[i])); + + this.removeProc(vo); + } + } + + /** + *
+	 * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다.
+	 * 
+ * + * @return XitMenuInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private XitMenuInfoVO convertToCrudVO(XitMenuListMngVO vo) { + XitMenuInfoVO xitMenuInfoVO = new XitMenuInfoVO(); + xitMenuInfoVO.setMenu_no(String.valueOf(vo.getMenuNo())); + xitMenuInfoVO.setMenu_nm(vo.getMenuNm()); + xitMenuInfoVO.setProgrm_file_nm(vo.getProgrmFileNm()); + xitMenuInfoVO.setUpper_menu_no(String.valueOf(vo.getUpperMenuId())); + xitMenuInfoVO.setMenu_ordr(String.valueOf(vo.getMenuOrdr())); + xitMenuInfoVO.setMenu_dc(vo.getMenuDc()); + xitMenuInfoVO.setRelate_image_cours(vo.getRelateImagePath()); + xitMenuInfoVO.setRelate_image_nm(vo.getRelateImageNm()); + + return xitMenuInfoVO; + } + + @Override + public boolean menuBndeAllDelete() throws Exception { + //if(!deleteAllProgrmDtls()){return false;} // 프로그램변경요청 테이블 + if (!deleteAllMenuCreatDtlsList()) { + return false; + } // 메뉴정보생성내역 테이블 + if (!deleteAllMenuList()) { + return false; + } // 메뉴정보 테이블 + if (!deleteAllProgrm()) { + return false; + } // 프로그램목록 테이블 + return true; + } + + + /** + * 메뉴정보 전체데이터 초기화 + * @return boolean + * @exception Exception + */ + private boolean deleteAllMenuList() throws Exception { + xitMenuListMngMapper.deleteAllMenuList(); + return true; + } + + /** + * 메뉴정보생성내역 전체데이터 초기화 + * @return boolean + * @exception Exception + */ + private boolean deleteAllMenuCreatDtlsList() throws Exception { + xitMenuCreateMngMapper.deleteAllMenuCreatDtlsList(); + return true; + } + + /** + * 프로그램 정보 전체데이타 초기화 + * @return boolean + * @exception Exception + */ + private boolean deleteAllProgrm() throws Exception { + xitProgramMngMapper.deleteAllProgrm(); + return true; + } + + /** + * 프로그램변경내역 정보 전체데이타 초기화 + * @return boolean + * @exception Exception + */ + private boolean deleteAllProgrmDtls() throws Exception { + xitProgramMngMapper.deleteAllProgrmDtls(); + return true; + } + + @Override + public String addsProc(XitMenuListMngVO vo, FileInputStream inputStream) throws Exception { + + String message = addsProc(inputStream); + String sMessage = null; + + switch (Integer.parseInt(message)) { + case 99: + logger.debug("프로그램목록/메뉴정보테이블 데이타 존재오류 - 초기화 하신 후 다시 처리하세요."); + sMessage = "프로그램목록/메뉴정보테이블 데이타 존재오류 - 초기화 하신 후 다시 처리하세요."; + break; + case 90: + logger.debug("파일존재하지 않음."); + sMessage = "파일존재하지 않음."; + break; + case 91: + logger.debug("프로그램시트의 cell 갯수 오류."); + sMessage = "프로그램시트의 cell 갯수 오류."; + break; + case 92: + logger.debug("메뉴정보시트의 cell 갯수 오류."); + sMessage = "메뉴정보시트의 cell 갯수 오류."; + break; + case 93: + logger.debug("엑셀 시트갯수 오류."); + sMessage = "엑셀 시트갯수 오류."; + break; + case 95: + logger.debug("메뉴정보 입력시 에러."); + sMessage = "메뉴정보 입력시 에러."; + break; + case 96: + logger.debug("프로그램목록입력시 에러."); + sMessage = "프로그램목록입력시 에러."; + break; + default: + logger.debug("일괄배치처리 완료."); + sMessage = "일괄배치처리 완료."; + break; + } + logger.debug(message); + return sMessage; + } + + /** + * 메뉴목록_프로그램목록 일괄생성 + * @param inputStream InputStream + * @return String + * @exception Exception + */ + private String addsProc(FileInputStream inputStream) throws Exception { + boolean success = false; + String requestValue = null; + //char FILE_SEPARATOR = File.separatorChar; + int progrmSheetRowCnt = 0; + int menuSheetRowCnt = 0; + //String xlsFile = null; + try { + /* + 오류 메세지 정보 + message = "99"; //프로그램목록테이블 데이타 존재오류. + message = "99"; //메뉴정보테이블 데이타 존재오류. + message = "90"; //파일존재하지 않음. + message = "91"; //프로그램시트의 cell 갯수 오류 + message = "92"; //메뉴정보시트의 cell 갯수 오류 + message = "93"; //엑셀 시트갯수 오류 + message = "95"; //메뉴정보 입력시 에러 + message = "96"; //프로그램목록입력시 에러 + message = "0"; //일괄배치처리 완료 + */ + List listProgrmListVO = xitFrameCrudService.findXitProgrmLists(new ProgrmListVO()); + if (XitCmmnUtil.notEmpty(listProgrmListVO) && listProgrmListVO.size() > 1) { + return requestValue = "99"; + } //프로그램목록테이블 데이타 존재오류. + List listMenuInfoVO = xitFrameCrudService.findXitMenuInfos(new XitMenuInfoVO()); + if (XitCmmnUtil.notEmpty(listMenuInfoVO) && listMenuInfoVO.size() > 1) { + return requestValue = "99"; + } //메뉴정보테이블 데이타 존재오류. + Workbook hssfWB = excelZipService.loadWorkbook(inputStream); + //log.debug("hssfWB:::::"+hssfWB); + // 엑셀 파일 시트 갯수 확인 sheet = 2 첫번째시트 = 프로그램목록 두번째시트 = 메뉴목록 + if (hssfWB.getNumberOfSheets() == 2) { + Sheet progrmSheet = hssfWB.getSheetAt(0); //프로그램목록 시트 가져오기 + Sheet menuSheet = hssfWB.getSheetAt(1); //메뉴정보 시트 가져오기 + Row progrmRow = progrmSheet.getRow(1); //프로그램 row 가져오기 + Row menuRow = menuSheet.getRow(1); //메뉴정보 row 가져오기 + progrmSheetRowCnt = progrmRow.getPhysicalNumberOfCells(); //프로그램 cell Cnt + menuSheetRowCnt = menuRow.getPhysicalNumberOfCells(); //메뉴정보 cell Cnt + + // 프로그램 시트 파일 데이타 검증 cell = 5개 + if (progrmSheetRowCnt != 5) { + return requestValue = "91"; //프로그램시트의 cell 갯수 오류 + } + + // 메뉴목록 시트 파일 데이타 검증 cell = 8개 + if (menuSheetRowCnt != 8) { + return requestValue = "92"; //메뉴정보시트의 cell 갯수 오류 + } + + /* sheet1번 = 프로그램목록 , sheet2번 = 메뉴정보 */ + success = progrmRegist(progrmSheet); + if (success) { + success = menuRegist(menuSheet); + if (success) { + return requestValue = "0"; // 일괄배치처리 완료 + } else { + deleteAllMenuCreatDtlsList(); + deleteAllMenuList(); +// deleteAllProgrmDtls(); //2020.04.09 박민규-프로그램변경내역 테이블이 없어 주석처리 + deleteAllProgrm(); + return requestValue = "95"; // 메뉴정보 입력시 에러 + } + } else { +// deleteAllProgrmDtls(); //2020.04.09 박민규-프로그램변경내역 테이블이 없어 주석처리 + deleteAllProgrm(); + return requestValue = "96"; // 프로그램목록입력시 에러 + } + } else { + return requestValue = "93"; // 엑셀 시트갯수 오류 + } + + } catch (Exception e) { + logger.debug("{}", e); + + requestValue = "99"; + } + return requestValue; + } + + /** + * 프로그램목록 일괄등록 + * @param progrmSheet HSSFSheet + * @return boolean + * @exception Exception + */ + private boolean progrmRegist(Sheet progrmSheet) throws Exception { + int count = 0; + boolean success = false; + try { + int rows = progrmSheet.getPhysicalNumberOfRows(); //행 갯수 가져오기 + for (int j = 1; j < rows; j++) { //row 루프 + XitProgramMngVO vo = new XitProgramMngVO(); + Row row = progrmSheet.getRow(j); //row 가져오기 + if (row != null) { + //int cells=row.getPhysicalNumberOfCells(); //cell 갯수 가져오기 + + Cell cell = null; + cell = row.getCell(0); //프로그램명 + if (cell != null) { + vo.setProgrmFileNm("" + cell.getStringCellValue()); + } + cell = row.getCell(1); //프로그램한글명 + if (cell != null) { + vo.setProgrmKoreanNm("" + cell.getStringCellValue()); + } + cell = row.getCell(2); //프로그램저장경로 + if (cell != null) { + vo.setProgrmStrePath("" + cell.getStringCellValue()); + } + cell = row.getCell(3); //프로그램 URL + if (cell != null) { + vo.setURL("" + cell.getStringCellValue()); + } + cell = row.getCell(4); //프로그램설명 + if (cell != null) { + vo.setProgrmDc("" + cell.getStringCellValue()); + } + } + if (insertProgrm(vo)) { + count++; + } + } + if (count == rows - 1) { + success = true; + } else { + success = false; + } + } catch (Exception e) { + logger.debug("{}", e); + + success = false; + } + return success; + } + + /** + * 메뉴정보 일괄등록 + * @param menuSheet HSSFSheet + * @return boolean + * @exception Exception + */ + private boolean menuRegist(Sheet menuSheet) throws Exception { + boolean success = false; + int count = 0; + try { + int rows = menuSheet.getPhysicalNumberOfRows(); //행 갯수 가져오기 + for (int j = 1; j < rows; j++) { //row 루프 + XitMenuListMngVO vo = new XitMenuListMngVO(); + Row row = menuSheet.getRow(j); //row 가져오기 + if (row != null) { + //int cells=row.getPhysicalNumberOfCells(); //cell 갯수 가져오기 + Cell cell = null; + cell = row.getCell(0); //메뉴번호 + if (cell != null) { + Double doubleCell = new Double(cell.getNumericCellValue()); + vo.setMenuNo(Integer.parseInt("" + doubleCell.longValue())); + } + cell = row.getCell(1); //메뉴순서 + if (cell != null) { + Double doubleCell = new Double(cell.getNumericCellValue()); + vo.setMenuOrdr(Integer.parseInt("" + doubleCell.longValue())); + } + cell = row.getCell(2); //메뉴명 + if (cell != null) { + vo.setMenuNm("" + cell.getStringCellValue()); + } + cell = row.getCell(3); //상위메뉴번호 + if (cell != null) { + Double doubleCell = new Double(cell.getNumericCellValue()); + vo.setUpperMenuId(Integer.parseInt("" + doubleCell.longValue())); + } + cell = row.getCell(4); //메뉴설명 + if (cell != null) { + vo.setMenuDc("" + cell.getStringCellValue()); + } + cell = row.getCell(5); //관련이미지경로 + if (cell != null) { + vo.setRelateImagePath("" + cell.getStringCellValue()); + } + cell = row.getCell(6); //관련이미지명 + if (cell != null) { + vo.setRelateImageNm("" + cell.getStringCellValue()); + } + cell = row.getCell(7); //프로그램파일명 + if (cell != null) { + vo.setProgrmFileNm("" + cell.getStringCellValue()); + } + } + try { + this.addProc(vo); + if (true) { + count++; + } + } catch (Exception e) { + throw e; + } + } + if (count == rows - 1) { + success = true; + } else { + + } + } catch (Exception e) { + logger.debug("{}", e); + + success = false; + + } + return success; + } + + + /** + * 프로그램 정보를 등록 + * @param vo ProgrmManageVO + * @return boolean + * @exception Exception + */ + private boolean insertProgrm(XitProgramMngVO vo) throws Exception { + if(XitCmmnUtil.isEmpty(xitProgramMngService.findView(vo))) + xitProgramMngService.addProc(vo); + else + xitProgramMngService.modifyProc(vo); + return true; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/list/web/XitMenuListMngController.java b/src/main/java/kr/xit/framework/biz/mng/menu/list/web/XitMenuListMngController.java new file mode 100644 index 00000000..e73e4734 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/list/web/XitMenuListMngController.java @@ -0,0 +1,369 @@ +package kr.xit.framework.biz.mng.menu.list.web; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kr.xit.framework.core.model.ResultResponse; +import kr.xit.framework.support.mybatis.MybatisUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngVO; +import kr.xit.framework.biz.mng.menu.list.model.XitMenuListMngSearchVO; +import kr.xit.framework.biz.mng.menu.list.service.XitMenuListMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileUtil; +import kr.xit.framework.core.utils.attachfile.XitAttachFileVO; +import kr.xit.framework.core.validation.XitBeanValidator; +import org.springframework.web.servlet.ModelAndView; + +/** + * + * @업무그룹명: 메뉴목록관리 Controller + * @설명: + * @최초작성일: 2020. 3. 25. 오후 4:05:40 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping(value = "/_mng_/menu/list/") +public class XitMenuListMngController { + + private static final Logger logger = LoggerFactory.getLogger(XitMenuListMngController.class); + + @Resource + private XitMenuListMngService xitMenuListMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 메뉴목록관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "MenuListMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String MenuListMng_list(@ModelAttribute("searchVO") XitMenuListMngSearchVO searchVO, ModelMap model) { + + // 내역 조회 + + //searchVO.setPageUnit(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageUnit"))); + //searchVO.setPageSize(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageSize"))); + + /** pageing */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //model.addAttribute("list_menumanage", xitMenuListMngService.findList(searchVO)); + //model.addAttribute("searchVO", searchVO); + + //int totCnt = xitMenuListMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/list/XitMenuListMng_list"; + } + + /** + * 메소드 설명: 자료 검색 + * Paging처리 : parameter로 Map 사용 + * @RequestParam 필요 + * @param paramMap + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 10. 13. + */ + @RequestMapping(value = "MenuCreateMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + public ModelAndView finds(@RequestParam Map paramMap) { + + return ResultResponse.of(xitMenuListMngService.findList(paramMap, MybatisUtils.getPagingInfo(paramMap))); + } + + + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "MenuListMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String MenuListMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("menuManageVO") XitMenuListMngVO vo + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + case "inputs": //일괄등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + XitMenuListMngVO xitMenuListMngVO = xitMenuListMngService.findView(vo); + model.addAttribute("menuManageVO", xitMenuListMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/list/XitMenuListMng_"+cmd+tilesDef; + + } + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "MenuListMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ProgramMng_page_popup(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("menuManageVO") XitMenuListMngVO vo + , ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/list/XitMenuListMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + /** + *
메소드 설명: 메뉴목록관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "MenuListMng_{cmd}_proc.do", method=RequestMethod.POST) + public void MenuListMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("menuManageVO") XitMenuListMngVO vo + ,@RequestParam(value="checkedMenuNoForDel", required=false, defaultValue="") String checkedMenuNoForDel + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("menuManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_input.do"; + break; + } + //처리 + try { + xitMenuListMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_input.do"; + } + break; + + case "inserts": //다건 등록 + + List listAttchFile = null; + try { + listAttchFile = XitAttachFileUtil.fileUpload(request, XitCmmnUtil.setOsPath("/home/tempUpload"), true, 5); + } catch (RuntimeException | IOException e1) { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_inputs.do"; + } + + if(XitCmmnUtil.isEmpty(listAttchFile)) { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_inputs.do"; + }else { + FileInputStream fis = null; + try { + XitAttachFileVO fileVO = listAttchFile.get(0); + File file = new File(fileVO.getFileFullPath()); + fis = new FileInputStream(file); + if (!"".equals(fileVO.getFileName())) { + // 2011.10.07 업로드 파일에 대한 확장자를 체크 + if (fileVO.getFileName().toLowerCase().endsWith(".xls") || fileVO.getFileName().toLowerCase().endsWith(".xlsx")) { + if (xitMenuListMngService.menuBndeAllDelete()) { + resultMsg = xitMenuListMngService.addsProc(vo, fis); + } else { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + vo.setTmp_Cmd("EgovMenuBndeRegist Error!!"); + model.addAttribute("resultVO", vo); + } + } else { + //log.info("xls, xlsx 파일 타입만 등록이 가능합니다."); + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return "forward:/_mng_/menu/list/MenuListMng_inputs.do"; + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_inputs.do"; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } + + } else { + resultMsg = xitMessageSource.getMessage("fail.common.msg"); + } + } catch (Exception e) { + } finally { + try { + if (fis != null) { + fis.close(); + } + } catch (IOException ee) { + logger.debug("{}", ee); + } + } + } + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_inputs.do"; + break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("menuManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.update")); + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_edit.do"; + break; + } + //처리 + try { + xitMenuListMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitMenuListMngService.removeProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/menu/list/MenuListMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitMenuListMngService.removesProc(checkedMenuNoForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/program/dao/XitProgramMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/menu/program/dao/XitProgramMngMapper.java new file mode 100644 index 00000000..db6d3435 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/program/dao/XitProgramMngMapper.java @@ -0,0 +1,69 @@ +package kr.xit.framework.biz.mng.menu.program.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngSearchVO; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngVO; +import org.apache.ibatis.session.RowBounds; + +/** + * + * @업무그룹명: 프로그램관리 Mapper + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:03:50 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitProgramMngMapper { + + /** + *
메소드 설명: 프로그램관리 목록 조회
+ * @param map + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map map, RowBounds rowBounds); + + /** + *
메소드 설명: 프로그램관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitProgramMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 프로그램관리 상세정보 조회
+ * @param vo + * @return XitProgramMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitProgramMngVO findView(XitProgramMngVO vo) throws SQLException; + + /** + *
메소드 설명: 프로그램정보 전체데이터 삭제
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public int deleteAllProgrm() throws SQLException; + + /** + *
메소드 설명: 프로그램변경내역정보 전체데이터 삭제
+ * @return + * @throws SQLException int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public int deleteAllProgrmDtls() throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/program/model/XitProgramMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/menu/program/model/XitProgramMngSearchVO.java new file mode 100644 index 00000000..8d476b0e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/program/model/XitProgramMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.menu.program.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 프로그램관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitProgramMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/program/model/XitProgramMngVO.java b/src/main/java/kr/xit/framework/biz/mng/menu/program/model/XitProgramMngVO.java new file mode 100644 index 00000000..aaaad2d7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/program/model/XitProgramMngVO.java @@ -0,0 +1,103 @@ +package kr.xit.framework.biz.mng.menu.program.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 프로그램관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitProgramMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 프로그램파일명 */ + private String progrmFileNm; + /** 프로그램저장경로 */ + private String progrmStrePath; + /** 프로그램한글명 */ + private String progrmKoreanNm; + /** URL */ + private String URL; + /** 프로그램설명 */ + private String progrmDc; + + /** + * progrmFileNm attribute를 리턴한다. + * @return String + */ + public String getProgrmFileNm() { + return progrmFileNm; + } + /** + * progrmFileNm attribute 값을 설정한다. + * @param progrmFileNm String + */ + public void setProgrmFileNm(String progrmFileNm) { + this.progrmFileNm = progrmFileNm; + } + /** + * progrmStrePath attribute를 리턴한다. + * @return String + */ + public String getProgrmStrePath() { + return progrmStrePath; + } + /** + * progrmStrePath attribute 값을 설정한다. + * @param progrmStrePath String + */ + public void setProgrmStrePath(String progrmStrePath) { + this.progrmStrePath = progrmStrePath; + } + /** + * progrmKoreanNm attribute를 리턴한다. + * @return String + */ + public String getProgrmKoreanNm() { + return progrmKoreanNm; + } + /** + * progrmKoreanNm attribute 값을 설정한다. + * @param progrmKoreanNm String + */ + public void setProgrmKoreanNm(String progrmKoreanNm) { + this.progrmKoreanNm = progrmKoreanNm; + } + /** + * url attribute를 리턴한다. + * @return String + */ + public String getURL() { + return URL; + } + /** + * URL attribute 값을 설정한다. + * @param URL String + */ + public void setURL(String URL) { + this.URL = URL; + } + /** + * progrmDc attribute를 리턴한다. + * @return StringS + */ + public String getProgrmDc() { + return progrmDc; + } + /** + * progrmDc attribute 값을 설정한다. + * @param progrmDc String + */ + public void setProgrmDc(String progrmDc) { + this.progrmDc = progrmDc; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/program/service/XitProgramMngService.java b/src/main/java/kr/xit/framework/biz/mng/menu/program/service/XitProgramMngService.java new file mode 100644 index 00000000..3ed378d3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/program/service/XitProgramMngService.java @@ -0,0 +1,81 @@ +package kr.xit.framework.biz.mng.menu.program.service; + +import java.util.List; +import java.util.Map; + +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngSearchVO; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngVO; +import org.apache.ibatis.session.RowBounds; + +/** + * + * @업무그룹명: 프로그램관리 Service + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:07:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitProgramMngService { + + /** + *
메소드 설명: 프로그램관리 목록 조회
+ * @param map + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map paramMap, RowBounds rowBounds); + + /** + *
메소드 설명: 프로그램관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitProgramMngSearchVO searchVO); + + /** + *
메소드 설명: 프로그램관리 상세정보 조회
+ * @param vo + * @return XitProgramMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitProgramMngVO findView(XitProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void addProc(XitProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void modifyProc(XitProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void removeProc(XitProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 다건 삭제
+ * @param progrmFileNms void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public void removesProc(String progrmFileNms); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/program/service/impl/XitProgramMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/menu/program/service/impl/XitProgramMngServiceImpl.java new file mode 100644 index 00000000..2924d6df --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/program/service/impl/XitProgramMngServiceImpl.java @@ -0,0 +1,141 @@ +package kr.xit.framework.biz.mng.menu.program.service.impl; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.apache.ibatis.session.RowBounds; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.ProgrmListVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.menu.program.dao.XitProgramMngMapper; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngSearchVO; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngVO; +import kr.xit.framework.biz.mng.menu.program.service.XitProgramMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitProgramMngServiceImpl implements XitProgramMngService{ + + @Resource + private XitProgramMngMapper xitProgramMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(Map paramMap, RowBounds rowBounds) { + return xitProgramMngMapper.findList(paramMap, rowBounds); + } + + @Override + public int findListTotCnt(XitProgramMngSearchVO searchVO) { + int result = 0; + try { + result = xitProgramMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("프로그램관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitProgramMngVO findView(XitProgramMngVO vo) { + XitProgramMngVO result = null; + try { + result = xitProgramMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("프로그램관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitProgramMngVO vo) { + /** + * 필수값 설정 + */ + ProgrmListVO progrmListVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.addXitProgrmList(progrmListVO); + + } + + @Override + public void modifyProc(XitProgramMngVO vo) { + /** + * 필수값 설정 + */ + ProgrmListVO progrmListVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitProgrmList(progrmListVO); + + } + + @Override + public void removeProc(XitProgramMngVO vo) { + /** + * 필수값 설정 + */ + ProgrmListVO progrmListVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.removeXitProgrmList(progrmListVO); + + } + + @Override + public void removesProc(String progrmFileNms) { + + /** + * 유효성 확인 + */ + String[] delProgrmFileNm = progrmFileNms.split(","); + if (delProgrmFileNm == null || (delProgrmFileNm.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete")); + } + + + /** + * 처리 + */ + String [] arrProgrmFileNm = progrmFileNms.split(","); + for (int i=0; i메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * @return XitProgrmListVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private ProgrmListVO convertToCrudVO(XitProgramMngVO vo) { + ProgrmListVO progrmListVO = new ProgrmListVO(); + progrmListVO.setProgrm_file_nm (vo.getProgrmFileNm()); + progrmListVO.setProgrm_stre_cours(vo.getProgrmStrePath()); + progrmListVO.setProgrm_korean_nm (vo.getProgrmKoreanNm()); + progrmListVO.setProgrm_dc (vo.getProgrmDc()); + progrmListVO.setUrl (vo.getURL()); + + return progrmListVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/menu/program/web/XitProgramMngController.java b/src/main/java/kr/xit/framework/biz/mng/menu/program/web/XitProgramMngController.java new file mode 100644 index 00000000..82c9c4aa --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/menu/program/web/XitProgramMngController.java @@ -0,0 +1,329 @@ +package kr.xit.framework.biz.mng.menu.program.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import kr.xit.framework.core.model.ResultResponse; +import kr.xit.framework.support.mybatis.MybatisUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngSearchVO; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngVO; +import kr.xit.framework.biz.mng.menu.program.service.XitProgramMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; +import org.springframework.web.servlet.ModelAndView; + +/** + * + * @업무그룹명: 프로그램관리 Controller + * @설명: + * @최초작성일: 2020. 3. 25. 오후 4:05:40 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +//@RequestMapping(value = "/_mng_/menu/program/") +@RequestMapping(value = "/framework/biz/mng/menu/program/") +public class XitProgramMngController { + + @Resource + private XitProgramMngService xitProgramMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + + /** + *
메소드 설명: 프로그램관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "ProgramMng2.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ProgramMng2(@ModelAttribute("searchVO") XitProgramMngSearchVO searchVO, ModelMap model + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef) { + + // 내역 조회 + + //searchVO.setPageUnit(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageUnit"))); + //searchVO.setPageSize(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageSize"))); + + /** pageing */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //model.addAttribute("list_progrmmanage", xitProgramMngService.findList(searchVO)); + //model.addAttribute("searchVO", searchVO); + + //int totCnt = xitProgramMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + if (!"".equals(tilesDef)) + tilesDef = "." + tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/program/XitProgramMng"+tilesDef; + } + + + @RequestMapping(value = "ProgramMng.do", method={RequestMethod.GET, RequestMethod.POST}) + public ModelAndView ProgramMng() { + return new ModelAndView(); + } + + + /** + * 메소드 설명: 자료 검색 + * Paging처리 : parameter로 Map 사용 + * @RequestParam 필요 + * @param paramMap + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 10. 13. + */ + + /*@PostMapping(value = "ProgramMng_list.ajax")*/ + @RequestMapping(value = "ProgramMngList.do", method = {RequestMethod.GET, RequestMethod.POST}) + public ModelAndView finds(@RequestParam Map paramMap) { + + return ResultResponse.of(xitProgramMngService.findList(paramMap, MybatisUtils.getPagingInfo(paramMap))); + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "ProgramMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ProgramMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("progrmManageVO") XitProgramMngVO vo + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + XitProgramMngVO xitProgramMngVO = xitProgramMngService.findView(vo); + model.addAttribute("progrmManageVO", xitProgramMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/program/XitProgramMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "ProgramMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ProgramMng_page_popup(@PathVariable String cmd + , @ModelAttribute("searchVO") XitProgramMngSearchVO searchVO + , @ModelAttribute("progrmManageVO") XitProgramMngVO vo, ModelMap model) { + switch (cmd) { + case "FileNmSearch": //프로그램 파일명 조회 페이지 + // 내역 조회 + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + /*model.addAttribute("list_progrmmanage", xitProgramMngService.findList(searchVO));*/ + model.addAttribute("searchVO", searchVO); + + int totCnt = xitProgramMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + break; + case "input" : + break; + case "edit" : + XitProgramMngVO xitProgramMngVO = xitProgramMngService.findView(vo); + model.addAttribute("progrmManageVO", xitProgramMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/program/XitProgramMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 프로그램관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "ProgramMng_{cmd}_proc.do", method=RequestMethod.POST) + public void ProgramMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("progrmManageVO") XitProgramMngVO vo + ,@RequestParam(value="checkedProgrmFileNmForDel", required=false, defaultValue="") String checkedProgrmFileNmForDel + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/menu/program/ProgramMngList.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("progrmManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_input.do"; + break; + } + if (vo.getProgrmDc() == null || vo.getProgrmDc().equals("")) { + vo.setProgrmDc(" "); + } + //처리 + xitProgramMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("progrmManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.update")); + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_edit.do"; + break; + } + if (vo.getProgrmDc() == null || vo.getProgrmDc().equals("")) { + vo.setProgrmDc(" "); + } + //처리 + xitProgramMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + break; + + case "delete": //삭제 + //처리 + try { + xitProgramMngService.removeProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitProgramMngService.removesProc(checkedProgrmFileNmForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/model/ProgramMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/model/ProgramMngSearchVO.java new file mode 100644 index 00000000..fce12a16 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/model/ProgramMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 프로그램관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class ProgramMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/model/ProgramMngVO.java b/src/main/java/kr/xit/framework/biz/mng/model/ProgramMngVO.java new file mode 100644 index 00000000..da09eb64 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/model/ProgramMngVO.java @@ -0,0 +1,103 @@ +package kr.xit.framework.biz.mng.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 프로그램관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class ProgramMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** 프로그램파일명 */ + private String progrmFileNm; + /** 프로그램저장경로 */ + private String progrmStrePath; + /** 프로그램한글명 */ + private String progrmKoreanNm; + /** URL */ + private String URL; + /** 프로그램설명 */ + private String progrmDc; + + /** + * progrmFileNm attribute를 리턴한다. + * @return String + */ + public String getProgrmFileNm() { + return progrmFileNm; + } + /** + * progrmFileNm attribute 값을 설정한다. + * @param progrmFileNm String + */ + public void setProgrmFileNm(String progrmFileNm) { + this.progrmFileNm = progrmFileNm; + } + /** + * progrmStrePath attribute를 리턴한다. + * @return String + */ + public String getProgrmStrePath() { + return progrmStrePath; + } + /** + * progrmStrePath attribute 값을 설정한다. + * @param progrmStrePath String + */ + public void setProgrmStrePath(String progrmStrePath) { + this.progrmStrePath = progrmStrePath; + } + /** + * progrmKoreanNm attribute를 리턴한다. + * @return String + */ + public String getProgrmKoreanNm() { + return progrmKoreanNm; + } + /** + * progrmKoreanNm attribute 값을 설정한다. + * @param progrmKoreanNm String + */ + public void setProgrmKoreanNm(String progrmKoreanNm) { + this.progrmKoreanNm = progrmKoreanNm; + } + /** + * url attribute를 리턴한다. + * @return String + */ + public String getURL() { + return URL; + } + /** + * URL attribute 값을 설정한다. + * @param URL String + */ + public void setURL(String URL) { + this.URL = URL; + } + /** + * progrmDc attribute를 리턴한다. + * @return StringS + */ + public String getProgrmDc() { + return progrmDc; + } + /** + * progrmDc attribute 값을 설정한다. + * @param progrmDc String + */ + public void setProgrmDc(String progrmDc) { + this.progrmDc = progrmDc; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/policy/login/dao/XitLoginPolicyMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/policy/login/dao/XitLoginPolicyMngMapper.java new file mode 100644 index 00000000..872beb0f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/policy/login/dao/XitLoginPolicyMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.policy.login.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngSearchVO; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngVO; + +/** + * + * @업무그룹명: 로그인정책관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitLoginPolicyMngMapper { + + /** + *
메소드 설명: 로그인정책관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitLoginPolicyMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 로그인정책관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitLoginPolicyMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 로그인정책관리 상세정보 조회
+ * @param vo + * @return XitLoginPolicyMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitLoginPolicyMngVO findView(XitLoginPolicyMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/policy/login/model/XitLoginPolicyMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/policy/login/model/XitLoginPolicyMngSearchVO.java new file mode 100644 index 00000000..93821ade --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/policy/login/model/XitLoginPolicyMngSearchVO.java @@ -0,0 +1,58 @@ +package kr.xit.framework.biz.mng.policy.login.model; + +import java.util.List; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 로그인정책관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitLoginPolicyMngSearchVO extends XitBaseSearchVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** + * 로그인 정책 목록 + */ + List loginPolicyList; + /** + * 삭제 여부 + */ + String [] delYn; + + /** + * @return the loginPolicyList + */ + public List getLoginPolicyList() { + return loginPolicyList; + } + /** + * @param loginPolicyList the loginPolicyList to set + */ + public void setLoginPolicyList(List loginPolicyList) { + this.loginPolicyList = loginPolicyList; + } + /** + * @return the delYn + */ + public String[] getDelYn() { + return delYn; + } + /** + * @param delYn the delYn to set + */ + public void setDelYn(String[] delYn) { + this.delYn = delYn; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/policy/login/model/XitLoginPolicyMngVO.java b/src/main/java/kr/xit/framework/biz/mng/policy/login/model/XitLoginPolicyMngVO.java new file mode 100644 index 00000000..ee2dd4a7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/policy/login/model/XitLoginPolicyMngVO.java @@ -0,0 +1,167 @@ +package kr.xit.framework.biz.mng.policy.login.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 로그인정책관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitLoginPolicyMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** + * 사용자 ID + */ + private String emplyrId; + /** + * 사용자 명 + */ + private String emplyrNm; + /** + * 사용자 구분 + */ + private String emplyrSe; + /** + * IP정보 + */ + private String ipInfo; + /** + * 중복허용여부 + */ + private String dplctPermAt; + /** + * 제한여부 + */ + private String lmttAt; + /** + * 등록자 ID + */ + private String userId; + /** + * 등록일시 + */ + private String regDate; + /** + * 등록여부 + */ + private String regYn; + + /** + * @return the emplyrId + */ + public String getEmplyrId() { + return emplyrId; + } + /** + * @param emplyrId the emplyrId to set + */ + public void setEmplyrId(String emplyrId) { + this.emplyrId = emplyrId; + } + /** + * @return the emplyrNm + */ + public String getEmplyrNm() { + return emplyrNm; + } + /** + * @param emplyrNm the emplyrNm to set + */ + public void setEmplyrNm(String emplyrNm) { + this.emplyrNm = emplyrNm; + } + /** + * @return the emplyrSe + */ + public String getEmplyrSe() { + return emplyrSe; + } + /** + * @param emplyrSe the emplyrSe to set + */ + public void setEmplyrSe(String emplyrSe) { + this.emplyrSe = emplyrSe; + } + /** + * @return the ipInfo + */ + public String getIpInfo() { + return ipInfo; + } + /** + * @param ipInfo the ipInfo to set + */ + public void setIpInfo(String ipInfo) { + this.ipInfo = ipInfo; + } + /** + * @return the dplctPermAt + */ + public String getDplctPermAt() { + return dplctPermAt; + } + /** + * @param dplctPermAt the dplctPermAt to set + */ + public void setDplctPermAt(String dplctPermAt) { + this.dplctPermAt = dplctPermAt; + } + /** + * @return the lmttAt + */ + public String getLmttAt() { + return lmttAt; + } + /** + * @param lmttAt the lmttAt to set + */ + public void setLmttAt(String lmttAt) { + this.lmttAt = lmttAt; + } + /** + * @return the userId + */ + public String getUserId() { + return userId; + } + /** + * @param userId the userId to set + */ + public void setUserId(String userId) { + this.userId = userId; + } + /** + * @return the regDate + */ + public String getRegDate() { + return regDate; + } + /** + * @param regDate the regDate to set + */ + public void setRegDate(String regDate) { + this.regDate = regDate; + } + /** + * @return the regYn + */ + public String getRegYn() { + return regYn; + } + /** + * @param regYn the regYn to set + */ + public void setRegYn(String regYn) { + this.regYn = regYn; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/policy/login/service/XitLoginPolicyMngService.java b/src/main/java/kr/xit/framework/biz/mng/policy/login/service/XitLoginPolicyMngService.java new file mode 100644 index 00000000..284b24a8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/policy/login/service/XitLoginPolicyMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.policy.login.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngSearchVO; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngVO; + +/** + * + * @업무그룹명: 로그인정책관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitLoginPolicyMngService { + + + /** + *
메소드 설명: 로그인정책관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitLoginPolicyMngSearchVO searchVO); + + /** + *
메소드 설명: 로그인정책관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitLoginPolicyMngSearchVO searchVO); + + /** + *
메소드 설명: 로그인정책관리 상세정보 조회
+ * @param vo + * @return XitLoginPolicyMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitLoginPolicyMngVO findView(XitLoginPolicyMngVO vo); + + /** + *
메소드 설명: 로그인정책관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void addProc(XitLoginPolicyMngVO vo); + + /** + *
메소드 설명: 로그인정책관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void modifyProc(XitLoginPolicyMngVO vo); + + /** + *
메소드 설명: 로그인정책관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removeProc(XitLoginPolicyMngVO vo); + + /** + *
메소드 설명: 로그인정책관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public void removesProc(String ids, String userId); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/policy/login/service/impl/XitLoginPolicyMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/policy/login/service/impl/XitLoginPolicyMngServiceImpl.java new file mode 100644 index 00000000..c2b95c20 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/policy/login/service/impl/XitLoginPolicyMngServiceImpl.java @@ -0,0 +1,136 @@ +package kr.xit.framework.biz.mng.policy.login.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitLoginPolicyVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.policy.login.dao.XitLoginPolicyMngMapper; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngSearchVO; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngVO; +import kr.xit.framework.core.message.XitMessageSource; +import lombok.AllArgsConstructor; +import kr.xit.framework.biz.mng.policy.login.service.XitLoginPolicyMngService; + +@AllArgsConstructor +@Service +public class XitLoginPolicyMngServiceImpl implements XitLoginPolicyMngService{ + + private final XitLoginPolicyMngMapper xitLoginPolicyMngMapper; + private final XitFrameCrudService xitFrameCrudService; + private final XitMessageSource xitMessageSource; + + @Override + public List findList(XitLoginPolicyMngSearchVO searchVO) { + List result = null; + try { + result = xitLoginPolicyMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("로그인정책관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitLoginPolicyMngSearchVO searchVO) { + int result = 0; + try { + result = xitLoginPolicyMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("로그인정책관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitLoginPolicyMngVO findView(XitLoginPolicyMngVO vo) { + XitLoginPolicyMngVO result = null; + try { + result = xitLoginPolicyMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("로그인정책관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitLoginPolicyMngVO vo) { + /** + * 필수값 설정 + */ + XitLoginPolicyVO loginPolicyVO = convertToCrudVO(vo); + loginPolicyVO.setFrst_register_id(vo.getUserId()); + + + /** + * 처리 + */ + xitFrameCrudService.addXitLoginPolicy(loginPolicyVO); + + } + + @Override + public void modifyProc(XitLoginPolicyMngVO vo) { + /** + * 필수값 설정 + */ + XitLoginPolicyVO loginPolicyVO = convertToCrudVO(vo); + loginPolicyVO.setLast_updusr_id(vo.getUserId()); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitLoginPolicy(loginPolicyVO); + } + + @Override + public void removeProc(XitLoginPolicyMngVO vo) { + /** + * 필수값 설정 + */ + XitLoginPolicyVO loginPolicyVO = new XitLoginPolicyVO(); + loginPolicyVO.setUser_id(vo.getEmplyrId()); + + + /** + * 처리 + */ + xitFrameCrudService.removeXitLoginPolicy(loginPolicyVO); + } + + @Override + public void removesProc(String ids, String userId) { + /** + * 처리 + */ + String [] emplyrIds = ids.split(";"); + for(int i=0; i + * 메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * + * + * @return XitLoginPolicyVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + private XitLoginPolicyVO convertToCrudVO(XitLoginPolicyMngVO vo) { + XitLoginPolicyVO crudVO = new XitLoginPolicyVO(); + crudVO.setUser_id(vo.getEmplyrId()); //사용자 id + crudVO.setIp_info(vo.getIpInfo()); //ip 정보 + crudVO.setDplct_perm_at(vo.getDplctPermAt()); //중복 허용 여부 + crudVO.setLmtt_at(vo.getLmttAt()); //제한 여부 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/policy/login/web/XitLoginPolicyMngController.java b/src/main/java/kr/xit/framework/biz/mng/policy/login/web/XitLoginPolicyMngController.java new file mode 100644 index 00000000..1b8991de --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/policy/login/web/XitLoginPolicyMngController.java @@ -0,0 +1,335 @@ +package kr.xit.framework.biz.mng.policy.login.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.support.SessionStatus; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngSearchVO; +import kr.xit.framework.biz.mng.policy.login.model.XitLoginPolicyMngVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; +import lombok.AllArgsConstructor; +import kr.xit.framework.biz.mng.policy.login.service.XitLoginPolicyMngService; + +/** + * + * @업무그룹명: 로그인정책관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@AllArgsConstructor +@Controller +@RequestMapping("/_mng_/policy/login/") +public class XitLoginPolicyMngController { + + private final XitLoginPolicyMngService xitLoginPolicyMngService; + private final XitFrameCodeService xitFrameCodeService; + private final XitBeanValidator beanValidator; + private final XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 로그인정책관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "LoginPolicyMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String LoginPolicyMng_list(@ModelAttribute("searchVO") XitLoginPolicyMngSearchVO searchVO, ModelMap model) { + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/policy/login/XitLoginPolicyMng_list"; + } + + /** + *
메소드 설명: 로그인 정책 관리 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8.04. + */ + @RequestMapping(value = "LoginPolicyMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map LoginPolicyMng_listAjax(@ModelAttribute("searchVO") XitLoginPolicyMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitLoginPolicyMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitLoginPolicyMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); +// pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd String + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "LoginPolicyMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String LoginPolicyMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("vo") XitLoginPolicyMngVO vo + , @ModelAttribute("searchVO") XitLoginPolicyMngSearchVO searchVO + , ModelMap model + ) { + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + String returnUrl = FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/policy/login/XitLoginPolicyMng_"+cmd+tilesDef; + + switch (cmd) { + case "input": //등록 페이지 + model.addAttribute("loginPolicy", xitLoginPolicyMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + XitLoginPolicyMngVO result = xitLoginPolicyMngService.findView(vo); + model.addAttribute("loginPolicy", result); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + if("N".equals(result.getRegYn())) + returnUrl = FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/policy/login/XitLoginPolicyMng_input"+tilesDef; + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + return returnUrl; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd String + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "LoginPolicyMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String LoginPolicyMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitLoginPolicyMngSearchVO searchVO + , @ModelAttribute XitLoginPolicyMngVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/policy/login/XitLoginPolicyMng_"+cmd+"_popup"+ FrameworkConstants.TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 로그인정책관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "LoginPolicyMng_{cmd}_proc.do", method=RequestMethod.POST) + public void LoginPolicyMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("vo") XitLoginPolicyMngVO vo + ,@ModelAttribute("searchVO") XitLoginPolicyMngSearchVO searchVO + ,@RequestParam(value="emplyrIds", required=false, defaultValue="") String emplyrIds + ,BindingResult bindingResult + ,SessionStatus status + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + String sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("loginPolicy", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_input.do"; + break; + } + //처리 + try { + vo.setUserId(loginVO.getId()); + xitLoginPolicyMngService.addProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("loginPolicy", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + break; + } + //처리 + try { + vo.setUserId(loginVO.getId()); + xitLoginPolicyMngService.modifyProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + vo.setUserId(loginVO.getId()); + xitLoginPolicyMngService.removeProc(vo); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/policy/login/LoginPolicyMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitLoginPolicyMngService.removesProc(emplyrIds, loginVO.getId()); + status.setComplete(); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/service/ProgramMngService.java b/src/main/java/kr/xit/framework/biz/mng/service/ProgramMngService.java new file mode 100644 index 00000000..7fbffbe2 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/service/ProgramMngService.java @@ -0,0 +1,82 @@ +package kr.xit.framework.biz.mng.service; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.session.RowBounds; + +import kr.xit.framework.biz.mng.model.ProgramMngSearchVO; +import kr.xit.framework.biz.mng.model.ProgramMngVO; + +/** + * + * @업무그룹명: 프로그램관리 Service + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:07:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface ProgramMngService { + + /** + *
메소드 설명: 프로그램관리 목록 조회
+ * @param map + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(Map paramMap, RowBounds rowBounds); + + /** + *
메소드 설명: 프로그램관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(ProgramMngSearchVO searchVO); + + /** + *
메소드 설명: 프로그램관리 상세정보 조회
+ * @param vo + * @return XitProgramMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public ProgramMngVO findView(ProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void addProc(ProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void modifyProc(ProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 삭제
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public void removeProc(ProgramMngVO vo); + + /** + *
메소드 설명: 프로그램관리 다건 삭제
+ * @param progrmFileNms void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + public void removesProc(String progrmFileNms); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/service/impl/ProgramMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/service/impl/ProgramMngServiceImpl.java new file mode 100644 index 00000000..3f5862ab --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/service/impl/ProgramMngServiceImpl.java @@ -0,0 +1,128 @@ +package kr.xit.framework.biz.mng.service.impl; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import org.apache.ibatis.session.RowBounds; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.ProgrmListVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.mapper.ProgramMngMapper; +import kr.xit.framework.biz.mng.model.ProgramMngSearchVO; +import kr.xit.framework.biz.mng.model.ProgramMngVO; +import kr.xit.framework.biz.mng.service.ProgramMngService; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class ProgramMngServiceImpl implements ProgramMngService { + + @Resource + private ProgramMngMapper programMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(Map paramMap, RowBounds rowBounds) { + return programMngMapper.findList(paramMap, rowBounds); + } + + @Override + public int findListTotCnt(ProgramMngSearchVO searchVO) { + return programMngMapper.findListTotCnt(searchVO); + } + + @Override + public ProgramMngVO findView(ProgramMngVO vo) { + return programMngMapper.findView(vo); + } + + @Override + public void addProc(ProgramMngVO vo) { + /** + * 필수값 설정 + */ + ProgrmListVO progrmListVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.addXitProgrmList(progrmListVO); + + } + + @Override + public void modifyProc(ProgramMngVO vo) { + /** + * 필수값 설정 + */ + ProgrmListVO progrmListVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitProgrmList(progrmListVO); + + } + + @Override + public void removeProc(ProgramMngVO vo) { + /** + * 필수값 설정 + */ + ProgrmListVO progrmListVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.removeXitProgrmList(progrmListVO); + + } + + @Override + public void removesProc(String progrmFileNms) { + + /** + * 유효성 확인 + */ + String[] delProgrmFileNm = progrmFileNms.split(","); + if (delProgrmFileNm == null || (delProgrmFileNm.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete")); + } + + + /** + * 처리 + */ + String [] arrProgrmFileNm = progrmFileNms.split(","); + for (int i=0; i메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * @return XitProgrmListVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private ProgrmListVO convertToCrudVO(ProgramMngVO vo) { + ProgrmListVO progrmListVO = new ProgrmListVO(); + progrmListVO.setProgrm_file_nm (vo.getProgrmFileNm()); + progrmListVO.setProgrm_stre_cours(vo.getProgrmStrePath()); + progrmListVO.setProgrm_korean_nm (vo.getProgrmKoreanNm()); + progrmListVO.setProgrm_dc (vo.getProgrmDc()); + progrmListVO.setUrl (vo.getURL()); + + return progrmListVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/dao/XitConectionStatsMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/dao/XitConectionStatsMngMapper.java new file mode 100644 index 00000000..6959e62d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/dao/XitConectionStatsMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.stats.cnctn.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngSearchVO; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngVO; + +/** + * + * @업무그룹명: 접속통계관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:07 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitConectionStatsMngMapper { + + /** + *
메소드 설명: 접속통계관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitConectionStatsMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 접속통계관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitConectionStatsMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 접속통계관리 상세정보 조회
+ * @param vo + * @return XitConectionStatsMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitConectionStatsMngVO findView(XitConectionStatsMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/model/XitConectionStatsMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/model/XitConectionStatsMngSearchVO.java new file mode 100644 index 00000000..d300fc87 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/model/XitConectionStatsMngSearchVO.java @@ -0,0 +1,134 @@ +package kr.xit.framework.biz.mng.stats.cnctn.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 접속통계관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:44:22 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitConectionStatsMngSearchVO extends XitBaseSearchVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + /** 시작일자 */ + private String fromDate; + /** 종료일자 */ + private String toDate; + /** 기간구분 */ + private String pdKind; + /** 통계구분 */ + private String statsKind; + /** 세부통계구분 */ + private String detailStatsKind; + /** 탭구분 */ + private String tabKind; + /** 그래프길이 */ + private float maxUnit; + /** + * fromDate attribute 를 리턴한다. + * @return String + */ + public String getFromDate() { + return fromDate; + } + /** + * fromDate attribute 값을 설정한다. + * @param fromDate String + */ + public void setFromDate(String fromDate) { + this.fromDate = fromDate; + } + /** + * toDate attribute 를 리턴한다. + * @return String + */ + public String getToDate() { + return toDate; + } + /** + * toDate attribute 값을 설정한다. + * @param toDate String + */ + public void setToDate(String toDate) { + this.toDate = toDate; + } + /** + * pdKind attribute 를 리턴한다. + * @return String + */ + public String getPdKind() { + return pdKind; + } + /** + * pdKind attribute 값을 설정한다. + * @param pdKind String + */ + public void setPdKind(String pdKind) { + this.pdKind = pdKind; + } + /** + * statsKind attribute 를 리턴한다. + * @return String + */ + public String getStatsKind() { + return statsKind; + } + /** + * statsKind attribute 값을 설정한다. + * @param statsKind String + */ + public void setStatsKind(String statsKind) { + this.statsKind = statsKind; + } + /** + * detailStatsKind attribute 를 리턴한다. + * @return String + */ + public String getDetailStatsKind() { + return detailStatsKind; + } + /** + * detailStatsKind attribute 값을 설정한다. + * @param detailStatsKind String + */ + public void setDetailStatsKind(String detailStatsKind) { + this.detailStatsKind = detailStatsKind; + } + /** + * tabKind attribute 를 리턴한다. + * @return String + */ + public String getTabKind() { + return tabKind; + } + /** + * tabKind attribute 값을 설정한다. + * @param tabKind String + */ + public void setTabKind(String tabKind) { + this.tabKind = tabKind; + } + /** + * maxUnit attribute 를 리턴한다. + * @return float + */ + public float getMaxUnit() { + return maxUnit; + } + /** + * maxUnit attribute 값을 설정한다. + * @param maxUnit float + */ + public void setMaxUnit(float maxUnit) { + this.maxUnit = maxUnit; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/model/XitConectionStatsMngVO.java b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/model/XitConectionStatsMngVO.java new file mode 100644 index 00000000..566c45f4 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/model/XitConectionStatsMngVO.java @@ -0,0 +1,332 @@ +package kr.xit.framework.biz.mng.stats.cnctn.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 접속통계관리 VO + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:40:44 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitConectionStatsMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + + /** 결과통계수 */ + private int statsCo; + /** 결과일자 */ + private String statsDate; + /** 최대통계수 */ + private int maxStatsCo; + /** 최소통계수 */ + private int minStatsCo; + /** 생성글수 */ + private int creatCo; + /** 총조회수 */ + private int totInqireCo; + /** 평균조회수 */ + private float avrgInqireCo; + /** 최대조회게시물ID */ + private String mxmmInqireBbsId; + /** 최대조회게시물제목 */ + private String mxmmInqireBbsNm; + /** 최소조회게시물ID */ + private String mummInqireBbsId; + /** 최소조회게시물제목 */ + private String mummInqireBbsNm; + /** 최고게시자ID */ + private String topNtcepersonId; + /** 최고게시글수 */ + private int topNtcepersonCo; + /** 접속프로그램메소드 */ + private String conectMethod; + /** 수정글수 */ + private int updtCo; + /** 조회글수 */ + private int inqireCo; + /** 삭제글수 */ + private int deleteCo; + /** 출력횟수 */ + private int outptCo; + /** 에러횟수 */ + private int errorCo; + + + + + /** + * statsCo attribute 를 리턴한다. + * @return int + */ + public int getStatsCo() { + return statsCo; + } + /** + * statsCo attribute 값을 설정한다. + * @param statsCo int + */ + public void setStatsCo(int statsCo) { + this.statsCo = statsCo; + } + /** + * statsDate attribute 를 리턴한다. + * @return String + */ + public String getStatsDate() { + return statsDate; + } + /** + * statsDate attribute 값을 설정한다. + * @param statsDate String + */ + public void setStatsDate(String statsDate) { + this.statsDate = statsDate; + } + /** + * maxStatsCo attribute 를 리턴한다. + * @return int + */ + public int getMaxStatsCo() { + return maxStatsCo; + } + /** + * maxStatsCo attribute 값을 설정한다. + * @param maxStatsCo int + */ + public void setMaxStatsCo(int maxStatsCo) { + this.maxStatsCo = maxStatsCo; + } + /** + * minStatsCo attribute 를 리턴한다. + * @return int + */ + public int getMinStatsCo() { + return minStatsCo; + } + /** + * minStatsCo attribute 값을 설정한다. + * @param minStatsCo int + */ + public void setMinStatsCo(int minStatsCo) { + this.minStatsCo = minStatsCo; + } + /** + * creatCo attribute 를 리턴한다. + * @return int + */ + public int getCreatCo() { + return creatCo; + } + /** + * creatCo attribute 값을 설정한다. + * @param creatCo int + */ + public void setCreatCo(int creatCo) { + this.creatCo = creatCo; + } + /** + * totInqireCo attribute 를 리턴한다. + * @return int + */ + public int getTotInqireCo() { + return totInqireCo; + } + /** + * totInqireCo attribute 값을 설정한다. + * @param totInqireCo int + */ + public void setTotInqireCo(int totInqireCo) { + this.totInqireCo = totInqireCo; + } + /** + * avrgInqireCo attribute 를 리턴한다. + * @return float + */ + public float getAvrgInqireCo() { + return avrgInqireCo; + } + /** + * avrgInqireCo attribute 값을 설정한다. + * @param avrgInqireCo float + */ + public void setAvrgInqireCo(float avrgInqireCo) { + this.avrgInqireCo = avrgInqireCo; + } + /** + * mxmmInqireBbsId attribute 를 리턴한다. + * @return String + */ + public String getMxmmInqireBbsId() { + return mxmmInqireBbsId; + } + /** + * mxmmInqireBbsId attribute 값을 설정한다. + * @param mxmmInqireBbsId String + */ + public void setMxmmInqireBbsId(String mxmmInqireBbsId) { + this.mxmmInqireBbsId = mxmmInqireBbsId; + } + /** + * mxmmInqireBbsNm attribute 를 리턴한다. + * @return String + */ + public String getMxmmInqireBbsNm() { + return mxmmInqireBbsNm; + } + /** + * mxmmInqireBbsNm attribute 값을 설정한다. + * @param mxmmInqireBbsNm String + */ + public void setMxmmInqireBbsNm(String mxmmInqireBbsNm) { + this.mxmmInqireBbsNm = mxmmInqireBbsNm; + } + /** + * mummInqireBbsId attribute 를 리턴한다. + * @return String + */ + public String getMummInqireBbsId() { + return mummInqireBbsId; + } + /** + * mummInqireBbsId attribute 값을 설정한다. + * @param mummInqireBbsId String + */ + public void setMummInqireBbsId(String mummInqireBbsId) { + this.mummInqireBbsId = mummInqireBbsId; + } + /** + * mummInqireBbsNm attribute 를 리턴한다. + * @return String + */ + public String getMummInqireBbsNm() { + return mummInqireBbsNm; + } + /** + * mummInqireBbsNm attribute 값을 설정한다. + * @param mummInqireBbsNm String + */ + public void setMummInqireBbsNm(String mummInqireBbsNm) { + this.mummInqireBbsNm = mummInqireBbsNm; + } + /** + * topNtcepersonId attribute 를 리턴한다. + * @return String + */ + public String getTopNtcepersonId() { + return topNtcepersonId; + } + /** + * topNtcepersonId attribute 값을 설정한다. + * @param topNtcepersonId String + */ + public void setTopNtcepersonId(String topNtcepersonId) { + this.topNtcepersonId = topNtcepersonId; + } + /** + * topNtcepersonCo attribute 를 리턴한다. + * @return int + */ + public int getTopNtcepersonCo() { + return topNtcepersonCo; + } + /** + * topNtcepersonCo attribute 값을 설정한다. + * @param topNtcepersonCo int + */ + public void setTopNtcepersonCo(int topNtcepersonCo) { + this.topNtcepersonCo = topNtcepersonCo; + } + /** + * conectMethod attribute 를 리턴한다. + * @return String + */ + public String getConectMethod() { + return conectMethod; + } + /** + * conectMethod attribute 값을 설정한다. + * @param conectMethod String + */ + public void setConectMethod(String conectMethod) { + this.conectMethod = conectMethod; + } + /** + * updtCo attribute 를 리턴한다. + * @return int + */ + public int getUpdtCo() { + return updtCo; + } + /** + * updtCo attribute 값을 설정한다. + * @param updtCo int + */ + public void setUpdtCo(int updtCo) { + this.updtCo = updtCo; + } + /** + * inqireCo attribute 를 리턴한다. + * @return int + */ + public int getInqireCo() { + return inqireCo; + } + /** + * inqireCo attribute 값을 설정한다. + * @param inqireCo int + */ + public void setInqireCo(int inqireCo) { + this.inqireCo = inqireCo; + } + /** + * deleteCo attribute 를 리턴한다. + * @return int + */ + public int getDeleteCo() { + return deleteCo; + } + /** + * deleteCo attribute 값을 설정한다. + * @param deleteCo int + */ + public void setDeleteCo(int deleteCo) { + this.deleteCo = deleteCo; + } + /** + * outptCo attribute 를 리턴한다. + * @return int + */ + public int getOutptCo() { + return outptCo; + } + /** + * outptCo attribute 값을 설정한다. + * @param outptCo int + */ + public void setOutptCo(int outptCo) { + this.outptCo = outptCo; + } + /** + * errorCo attribute 를 리턴한다. + * @return int + */ + public int getErrorCo() { + return errorCo; + } + /** + * errorCo attribute 값을 설정한다. + * @param errorCo int + */ + public void setErrorCo(int errorCo) { + this.errorCo = errorCo; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/service/XitConectionStatsMngService.java b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/service/XitConectionStatsMngService.java new file mode 100644 index 00000000..274a157c --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/service/XitConectionStatsMngService.java @@ -0,0 +1,47 @@ +package kr.xit.framework.biz.mng.stats.cnctn.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngSearchVO; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngVO; + +/** + * + * @업무그룹명: 접속통계관리 Service + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:38:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitConectionStatsMngService { + + + /** + *
메소드 설명: 접속통계관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public List findList(XitConectionStatsMngSearchVO searchVO); + + /** + *
메소드 설명: 접속통계관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public int findListTotCnt(XitConectionStatsMngSearchVO searchVO); + + /** + *
메소드 설명: 접속통계관리 상세정보 조회
+ * @param vo + * @return XitConectionStatsMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + public XitConectionStatsMngVO findView(XitConectionStatsMngVO vo); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/service/impl/XitConectionStatsMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/service/impl/XitConectionStatsMngServiceImpl.java new file mode 100644 index 00000000..77928d8e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/service/impl/XitConectionStatsMngServiceImpl.java @@ -0,0 +1,55 @@ +package kr.xit.framework.biz.mng.stats.cnctn.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.mng.stats.cnctn.dao.XitConectionStatsMngMapper; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngSearchVO; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngVO; +import kr.xit.framework.biz.mng.stats.cnctn.service.XitConectionStatsMngService; +import kr.xit.framework.core.message.XitMessageSource; +import lombok.AllArgsConstructor; + +@AllArgsConstructor +@Service +public class XitConectionStatsMngServiceImpl implements XitConectionStatsMngService{ + + private final XitConectionStatsMngMapper xitConectionStatsMngMapper; + private final XitMessageSource xitMessageSource; + + @Override + public List findList(XitConectionStatsMngSearchVO searchVO) { + List result = null; + try { + result = xitConectionStatsMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("접속통계관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitConectionStatsMngSearchVO searchVO) { + int result = 0; + try { + result = xitConectionStatsMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("접속통계관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitConectionStatsMngVO findView(XitConectionStatsMngVO vo) { + XitConectionStatsMngVO result = null; + try { + result = xitConectionStatsMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("접속통계관리 상세정보 조회 FAIL::", e); + } + return result; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/web/XitConectionStatsMngController.java b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/web/XitConectionStatsMngController.java new file mode 100644 index 00000000..a01137c0 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/stats/cnctn/web/XitConectionStatsMngController.java @@ -0,0 +1,208 @@ +package kr.xit.framework.biz.mng.stats.cnctn.web; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngSearchVO; +import kr.xit.framework.biz.mng.stats.cnctn.model.XitConectionStatsMngVO; +import kr.xit.framework.biz.mng.stats.cnctn.service.XitConectionStatsMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.message.XitMessageSource; +import lombok.AllArgsConstructor; + +/** + * + * @업무그룹명: 접속통계관리 Controller + * @설명: + * @최초작성일: 2020. 4. 16. 오전 9:39:52 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@AllArgsConstructor +@Controller +@RequestMapping("/_mng_/stats/cnctn/") +public class XitConectionStatsMngController { + + private final XitConectionStatsMngService xitConectionStatsMngService; + private final XitFrameCodeService xitFrameCodeService; + private final XitMessageSource xitMessageSource; + + + /** + *
메소드 설명: 접속통계관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionStatsMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ConectionStatsMng_list(@ModelAttribute("searchVO") XitConectionStatsMngSearchVO searchVO, ModelMap model) { + + if (searchVO.getFromDate() != null && !"".equals(searchVO.getFromDate())) { + + List conectStats = xitConectionStatsMngService.findList(searchVO); + + // 1. 서비스별 + if ("SERVICE".equals(searchVO.getStatsKind())) { + model.addAttribute("conectStats", conectStats); + model.addAttribute("statsInfo", searchVO); + // 2. 개인별 + } else { + // 그래프에 표시될 이미지 길이를 결정한다. + float iMaxUnit = 50.0f; + for (int i = 0; i < conectStats.size(); i++) { + XitConectionStatsMngVO vo = conectStats.get(i); + int iCnt = vo.getStatsCo(); + if (iCnt > 10 && iCnt <= 100) { + if (iMaxUnit > 5.0f) { + iMaxUnit = 5.0f; + } + } else if (iCnt > 100 && iCnt <= 1000) { + if (iMaxUnit > 0.5f) { + iMaxUnit = 0.5f; + } + } else if (iCnt > 1000) { + if (iMaxUnit > 0.05f) { + iMaxUnit = 0.05f; + } + } + } + searchVO.setMaxUnit(iMaxUnit); + model.addAttribute("conectStats", conectStats); + model.addAttribute("statsInfo", searchVO); + } + } + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/stats/cnctn/XitConectionStatsMng_list"; + } + + /** + *
메소드 설명: 접속로그관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 8.04. + */ + @RequestMapping(value = "ConectionStatsMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map ConectionStatsMng_listAjax(@ModelAttribute("searchVO") XitConectionStatsMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ +// int totCnt = xitConectionStatsMngService.findListTotCnt(searchVO); +// paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitConectionStatsMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); +// pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd String + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionStatsMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ConectionStatsMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute() XitConectionStatsMngVO vo + , @ModelAttribute XitConectionStatsMngSearchVO searchVO + , ModelMap model) { + switch (cmd) { + case "": // + break; +// case "input": //등록 페이지 +// break; +// case "edit": //수정 페이지 +// case "view": //상세 페이지 +// break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/stats/cnctn/XitConectionStatsMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd String + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 16. + */ + @RequestMapping(value = "ConectionStatsMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String ConectionStatsMng_page_popup(@PathVariable String cmd + , @ModelAttribute XitConectionStatsMngSearchVO searchVO + , @ModelAttribute XitConectionStatsMngVO vo, ModelMap model) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/stats/cnctn/XitConectionStatsMng_"+cmd+"_popup"+ FrameworkConstants.TILES_TYPE.POPUP.getVal(); + } + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/absnt/dao/XitUserAbsntMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/user/absnt/dao/XitUserAbsntMngMapper.java new file mode 100644 index 00000000..4600dd60 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/absnt/dao/XitUserAbsntMngMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.biz.mng.user.absnt.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngSearchVO; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngVO; + +/** + * + * @업무그룹명: 사용자부재관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 10. 오후 4:41:35 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitUserAbsntMngMapper { + + /** + *
메소드 설명: 사용자부재관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public List findList(XitUserAbsntMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자부재관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public int findListTotCnt(XitUserAbsntMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자부재관리 상세정보 조회
+ * @param vo + * @return XitUserAbsntMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public XitUserAbsntMngVO findView(XitUserAbsntMngVO vo) throws SQLException; +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/absnt/model/XitUserAbsntMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/user/absnt/model/XitUserAbsntMngSearchVO.java new file mode 100644 index 00000000..1a1646a8 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/absnt/model/XitUserAbsntMngSearchVO.java @@ -0,0 +1,73 @@ +package kr.xit.framework.biz.mng.user.absnt.model; + +import java.util.List; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자부재관리 SearchVO + * @설명: + * @최초작성일: 2020. 4. 10. 오후 4:42:43 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserAbsntMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** + * 사용자부재 목록 + */ + List userAbsnceList; + /** + * 삭제대상 목록 + */ + String[] delYn; + /** + * 부재여부 조회조건 + */ + String selAbsnceAt; + + /** + * @return the userAbsnceList + */ + public List getUserAbsnceList() { + return userAbsnceList; + } + /** + * @param userAbsnceList the userAbsnceList to set + */ + public void setUserAbsnceList(List userAbsnceList) { + this.userAbsnceList = userAbsnceList; + } + /** + * @return the delYn + */ + public String[] getDelYn() { + return delYn; + } + /** + * @param delYn the delYn to set + */ + public void setDelYn(String[] delYn) { + this.delYn = delYn; + } + /** + * @return the selAbsnceAt + */ + public String getSelAbsnceAt() { + return selAbsnceAt; + } + /** + * @param selAbsnceAt the selAbsnceAt to set + */ + public void setSelAbsnceAt(String selAbsnceAt) { + this.selAbsnceAt = selAbsnceAt; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/absnt/model/XitUserAbsntMngVO.java b/src/main/java/kr/xit/framework/biz/mng/user/absnt/model/XitUserAbsntMngVO.java new file mode 100644 index 00000000..06262aca --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/absnt/model/XitUserAbsntMngVO.java @@ -0,0 +1,121 @@ +package kr.xit.framework.biz.mng.user.absnt.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자부재관리 VO + * @설명: + * @최초작성일: 2020. 4. 10. 오후 4:43:26 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserAbsntMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + + /** + * 사용자ID + */ + private String userId; + /** + * 사용자명 + */ + private String userNm; + /** + * 사용자부재여부 + */ + private String userAbsnceAt; + /** + * 최종등록자ID + */ + private String lastUpdusrId; + /** + * 최종등록시점 + */ + private String lastUpdusrPnttm; + /** + * 등록여부 + */ + private String regYn; + + /** + * @return the userId + */ + public String getUserId() { + return userId; + } + /** + * @param userId the userId to set + */ + public void setUserId(String userId) { + this.userId = userId; + } + /** + * @return the userNm + */ + public String getUserNm() { + return userNm; + } + /** + * @param userNm the userNm to set + */ + public void setUserNm(String userNm) { + this.userNm = userNm; + } + /** + * @return the userAbsnceAt + */ + public String getUserAbsnceAt() { + return userAbsnceAt; + } + /** + * @param userAbsnceAt the userAbsnceAt to set + */ + public void setUserAbsnceAt(String userAbsnceAt) { + this.userAbsnceAt = userAbsnceAt; + } + /** + * @return the lastUpdusrId + */ + public String getLastUpdusrId() { + return lastUpdusrId; + } + /** + * @param lastUpdusrId the lastUpdusrId to set + */ + public void setLastUpdusrId(String lastUpdusrId) { + this.lastUpdusrId = lastUpdusrId; + } + /** + * @return the lastUpdusrPnttm + */ + public String getLastUpdusrPnttm() { + return lastUpdusrPnttm; + } + /** + * @param lastUpdusrPnttm the lastUpdusrPnttm to set + */ + public void setLastUpdusrPnttm(String lastUpdusrPnttm) { + this.lastUpdusrPnttm = lastUpdusrPnttm; + } + /** + * @return the regYn + */ + public String getRegYn() { + return regYn; + } + /** + * @param regYn the regYn to set + */ + public void setRegYn(String regYn) { + this.regYn = regYn; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/absnt/service/XitUserAbsntMngService.java b/src/main/java/kr/xit/framework/biz/mng/user/absnt/service/XitUserAbsntMngService.java new file mode 100644 index 00000000..58bd8fce --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/absnt/service/XitUserAbsntMngService.java @@ -0,0 +1,79 @@ +package kr.xit.framework.biz.mng.user.absnt.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngSearchVO; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngVO; + +/** + * + * @업무그룹명: 사용자부재관리 Service + * @설명: + * @최초작성일: 2020. 4. 10. 오후 4:41:16 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitUserAbsntMngService { + + + /** + *
메소드 설명: 사용자부재관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public List findList(XitUserAbsntMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자부재관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public int findListTotCnt(XitUserAbsntMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자부재관리 상세정보 조회
+ * @param vo + * @return XitUserAbsntMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public XitUserAbsntMngVO findView(XitUserAbsntMngVO vo); + + /** + *
메소드 설명: 사용자부재관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void addProc(XitUserAbsntMngVO vo); + + /** + *
메소드 설명: 사용자부재관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void modifyProc(XitUserAbsntMngVO vo); + + /** + *
메소드 설명: 사용자부재관리 삭제
+ * @param id void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void removeProc(String id); + + /** + *
메소드 설명: 사용자부재관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void removesProc(String ids); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/absnt/service/impl/XitUserAbsntMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/user/absnt/service/impl/XitUserAbsntMngServiceImpl.java new file mode 100644 index 00000000..7f8ccc70 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/absnt/service/impl/XitUserAbsntMngServiceImpl.java @@ -0,0 +1,134 @@ +package kr.xit.framework.biz.mng.user.absnt.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.XitUserAbsnceVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.mng.user.absnt.dao.XitUserAbsntMngMapper; +import kr.xit.framework.biz.mng.user.absnt.service.XitUserAbsntMngService; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngSearchVO; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngVO; +import kr.xit.framework.core.message.XitMessageSource; + +@Service +public class XitUserAbsntMngServiceImpl implements XitUserAbsntMngService { + private static final Logger logger = LoggerFactory.getLogger(XitUserAbsntMngServiceImpl.class); + + @Resource + private XitUserAbsntMngMapper xitUserAbsntMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitMessageSource xitMessageSource; + + @Override + public List findList(XitUserAbsntMngSearchVO searchVO) { + List result = null; + try { + result = xitUserAbsntMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자부재관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitUserAbsntMngSearchVO searchVO) { + int result = 0; + try { + result = xitUserAbsntMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자부재관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitUserAbsntMngVO findView(XitUserAbsntMngVO vo) { + XitUserAbsntMngVO result = null; + try { + result = xitUserAbsntMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("사용자부재관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitUserAbsntMngVO vo) { + /** + * 필수값 설정 + */ + XitUserAbsnceVO userAbsnceVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.addXitUserAbsnce(userAbsnceVO); + } + + @Override + public void modifyProc(XitUserAbsntMngVO vo) { + /** + * 필수값 설정 + */ + XitUserAbsnceVO userAbsnceVO = convertToCrudVO(vo); + + /** + * 처리 + */ + xitFrameCrudService.modifyXitUserAbsnce(userAbsnceVO); + } + + @Override + public void removeProc(String id) { + /** + * 필수값 설정 + */ + XitUserAbsnceVO userAbsnceVO = new XitUserAbsnceVO(); + userAbsnceVO.setUser_id(id); + + /** + * 처리 + */ + xitFrameCrudService.removeXitUserAbsnce(userAbsnceVO); + } + + @Override + public void removesProc(String ids) { + + /** + * 처리 + */ + String[] strUserIds = ids.split(";"); + for (int i = 0; i < strUserIds.length; i++) { + this.removeProc(strUserIds[i]); + } + } + + + /** + *
메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다.
+ * @return XitUserAbsnceVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private XitUserAbsnceVO convertToCrudVO(XitUserAbsntMngVO vo) { + XitUserAbsnceVO userAbsnceVO = new XitUserAbsnceVO(); + userAbsnceVO.setUser_id (vo.getUserId()); //사용자 id + userAbsnceVO.setUser_absnce_at (vo.getUserAbsnceAt()); //사용자 부재 여부 +// userAbsnceVO.setFrst_regist_pnttm(vo.get); //최초 등록 시점 + userAbsnceVO.setFrst_register_id (vo.getLastUpdusrId()); //최초 등록자 id +// userAbsnceVO.setLast_updt_pnttm (vo.get); //최종 수정 시점 + userAbsnceVO.setLast_updusr_id (vo.getLastUpdusrId()); //최종 수정자 id + + return userAbsnceVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/absnt/web/XitUserAbsntMngController.java b/src/main/java/kr/xit/framework/biz/mng/user/absnt/web/XitUserAbsntMngController.java new file mode 100644 index 00000000..f371fdd7 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/absnt/web/XitUserAbsntMngController.java @@ -0,0 +1,355 @@ +package kr.xit.framework.biz.mng.user.absnt.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +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.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngVO; +import kr.xit.framework.biz.mng.user.absnt.service.XitUserAbsntMngService; +import kr.xit.framework.biz.mng.user.absnt.model.XitUserAbsntMngSearchVO; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 사용자부재관리 Controller + * @설명: + * @최초작성일: 2020. 4. 10. 오후 4:40:36 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/usr/absnt/") +public class XitUserAbsntMngController { + + private static final Logger logger = LoggerFactory.getLogger(XitUserAbsntMngController.class); + + @Resource + private XitUserAbsntMngService xitUserAbsntMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + @Resource + private XitFrameCodeService xitFrameCodeService; + + /** + *
메소드 설명: 사용자부재관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserAbsntMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserAbsntMng_list(@RequestParam(value="selAbsnceAt", required=false, defaultValue="") String selAbsnceAt, @ModelAttribute("userAbsnceVO") XitUserAbsntMngSearchVO searchVO, ModelMap model) { + + /** paging */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //searchVO.setSelAbsnceAt(selAbsnceAt); + //searchVO.setUserAbsnceList(xitUserAbsntMngService.findList(searchVO)); + + //model.addAttribute("userAbsnceList", searchVO.getUserAbsnceList()); + + //int totCnt = xitUserAbsntMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/absnt/XitUserAbsntMng_list"; + } + + /** + *
메소드 설명: 사용자부재관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 김동규 + * @date: 2020. 7. 30. + */ + @RequestMapping(value = "UserAbsntMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map UserAbsntMng_listAjax(@RequestParam(value="selAbsnceAt", required=false, defaultValue="") String selAbsnceAt, @ModelAttribute("userAbsnceVO") XitUserAbsntMngSearchVO searchVO, ModelMap model) { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitUserAbsntMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitUserAbsntMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserAbsntMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserAbsntMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("userAbsnceSearchVO") XitUserAbsntMngSearchVO searchVO + , @ModelAttribute("userAbsnceVO") XitUserAbsntMngVO vo + , @RequestParam("userId") String userId + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + case "edit": //수정 페이지 + case "view": //상세 페이지 + vo.setUserId(userId); + model.addAttribute("userAbsnce", xitUserAbsntMngService.findView(vo)); + model.addAttribute("message", xitMessageSource.getMessage("success.common.select")); + + vo = (XitUserAbsntMngVO) model.get("userAbsnce"); + + if ("N".equals(vo.getRegYn())) + cmd = "input"; + else + cmd = "edit"; + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/absnt/XitUserAbsntMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserAbsntMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserAbsntMng_page_popup(@PathVariable String cmd + , @ModelAttribute("userAbsnceSearchVO") XitUserAbsntMngSearchVO searchVO + , @ModelAttribute("userAbsnceVO") XitUserAbsntMngVO vo + , @RequestParam("userId") String userId + , ModelMap model + ) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/absnt/XitUserAbsntMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 사용자부재관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserAbsntMng_{cmd}_proc.do", method=RequestMethod.POST) + public void UserAbsntMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("userManageVO") XitUserAbsntMngVO vo + ,@RequestParam(value="userIds", required=false, defaultValue="") String userIds + ,@RequestParam Map commandMap + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_list.do"; + String resultMsg = null; + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + switch (cmd) { + case "insert": //등록 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_input.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + + xitUserAbsntMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + beanValidator.validate(vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_edit.do"; + break; + } + //처리 + try { + vo.setLastUpdusrId(loginVO.getUniqId()); + + xitUserAbsntMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitUserAbsntMngService.removeProc(vo.getUserId()); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/usr/absnt/UserAbsntMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitUserAbsntMngService.removesProc(userIds); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/opt/dao/XitUserEtcOptMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/user/opt/dao/XitUserEtcOptMngMapper.java new file mode 100644 index 00000000..624fb961 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/opt/dao/XitUserEtcOptMngMapper.java @@ -0,0 +1,50 @@ +package kr.xit.framework.biz.mng.user.opt.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngSearchVO; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngVO; + +/** + * + * @업무그룹명: 사용자기타옵션관리 Mapper + * @설명: + * @최초작성일: 2020. 11. 5. 오후 3:32:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitUserEtcOptMngMapper { + + /** + *
메소드 설명: 사용자기타옵션관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public List findList(XitUserEtcOptMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자기타옵션관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public int findListTotCnt(XitUserEtcOptMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자기타옵션관리 상세정보 조회
+ * @param vo + * @return XitUserEtcOptMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public XitUserEtcOptMngVO findView(XitUserEtcOptMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/opt/model/XitUserEtcOptMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/user/opt/model/XitUserEtcOptMngSearchVO.java new file mode 100644 index 00000000..898aa9bd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/opt/model/XitUserEtcOptMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.user.opt.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자기타옵션관리SearchVO + * @설명: + * @최초작성일: 2020. 11. 5. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserEtcOptMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/opt/model/XitUserEtcOptMngVO.java b/src/main/java/kr/xit/framework/biz/mng/user/opt/model/XitUserEtcOptMngVO.java new file mode 100644 index 00000000..487cf778 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/opt/model/XitUserEtcOptMngVO.java @@ -0,0 +1,103 @@ +package kr.xit.framework.biz.mng.user.opt.model; + +import java.util.List; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자기타옵션관리VO + * @설명: + * @최초작성일: 2020. 11. 5. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserEtcOptMngVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + private List listVO; + + /** + * 사용자ID + */ + private String userId; + /** + * 사용자명 + */ + private String userNm; + /** + * 업무 데이터 권한 + */ + private String jobDataAuthor; + /** + * 사용자 관리 권한 + */ + private String userManageAuthor; + /** + * 전자결재 사용 여부 + */ + private String elctrnsanctnUseAt; + /** + * 업무 승인 권한 여부 + */ + private String jobConfmAuthorAt; + + + + public List getListVO() { + return listVO; + } + public void setListVO(List listVO) { + this.listVO = listVO; + } + /** + * userId attribute 값을 리턴한다. + * @return String + */ + public String getUserId() { + return userId; + } + /** + * userId attribute 값을 설정한다. + * @param userId String + */ + public void setUserId(String userId) { + this.userId = userId; + } + public String getUserNm() { + return userNm; + } + public void setUserNm(String userNm) { + this.userNm = userNm; + } + public String getJobDataAuthor() { + return jobDataAuthor; + } + public void setJobDataAuthor(String jobDataAuthor) { + this.jobDataAuthor = jobDataAuthor; + } + public String getUserManageAuthor() { + return userManageAuthor; + } + public void setUserManageAuthor(String userManageAuthor) { + this.userManageAuthor = userManageAuthor; + } + public String getElctrnsanctnUseAt() { + return elctrnsanctnUseAt; + } + public void setElctrnsanctnUseAt(String elctrnsanctnUseAt) { + this.elctrnsanctnUseAt = elctrnsanctnUseAt; + } + public String getJobConfmAuthorAt() { + return jobConfmAuthorAt; + } + public void setJobConfmAuthorAt(String jobConfmAuthorAt) { + this.jobConfmAuthorAt = jobConfmAuthorAt; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/opt/service/XitUserEtcOptMngService.java b/src/main/java/kr/xit/framework/biz/mng/user/opt/service/XitUserEtcOptMngService.java new file mode 100644 index 00000000..398c3f9d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/opt/service/XitUserEtcOptMngService.java @@ -0,0 +1,78 @@ +package kr.xit.framework.biz.mng.user.opt.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngSearchVO; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngVO; + +/** + * + * @업무그룹명: 사용자기타옵션관리 Service + * @설명: + * @최초작성일: 2020. 11. 5. 오후 3:32:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitUserEtcOptMngService { + + /** + *
메소드 설명: 사용자기타옵션관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public List findList(XitUserEtcOptMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자기타옵션관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public int findListTotCnt(XitUserEtcOptMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자기타옵션관리 상세정보 조회
+ * @param vo + * @return XitUserEtcOptMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public XitUserEtcOptMngVO findView(XitUserEtcOptMngVO vo); + + /** + *
메소드 설명: 사용자기타옵션관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public void addProc(XitUserEtcOptMngVO vo); + + /** + *
메소드 설명: 사용자기타옵션관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public void modifyProc(XitUserEtcOptMngVO vo); + + /** + *
메소드 설명: 사용자기타옵션관리 삭제
+ * @param id void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public void removeProc(String id); + + /** + *
메소드 설명: 사용자기타옵션관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + public void removesProc(String ids); +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/opt/service/impl/XitUserEtcOptMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/user/opt/service/impl/XitUserEtcOptMngServiceImpl.java new file mode 100644 index 00000000..43b700c1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/opt/service/impl/XitUserEtcOptMngServiceImpl.java @@ -0,0 +1,124 @@ +package kr.xit.framework.biz.mng.user.opt.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitUserEtcOptionVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.mng.user.opt.dao.XitUserEtcOptMngMapper; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngSearchVO; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngVO; +import kr.xit.framework.biz.mng.user.opt.service.XitUserEtcOptMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +@Service +public class XitUserEtcOptMngServiceImpl implements XitUserEtcOptMngService { + + @Resource + private XitUserEtcOptMngMapper xitUserEtcOptMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name="xitUsrEsntlIdGnrService") + private EgovIdGnrService idgenService; + + @Override + public List findList(XitUserEtcOptMngSearchVO searchVO) { + List result = null; + try { + result = xitUserEtcOptMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자기타옵션관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitUserEtcOptMngSearchVO searchVO) { + int result = 0; + try { + result = xitUserEtcOptMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자기타옵션관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitUserEtcOptMngVO findView(XitUserEtcOptMngVO vo) { + + XitUserEtcOptMngVO result = null; + try { + result = xitUserEtcOptMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("사용자기타옵션관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitUserEtcOptMngVO vo) { + + } + + @Override + public void modifyProc(XitUserEtcOptMngVO vo) { + + if(XitCmmnUtil.notEmpty(vo.getListVO())) + for(XitUserEtcOptMngVO row : vo.getListVO()) { + /** + * 필수값 설정 + */ + XitUserEtcOptionVO userEtcOptionVO = convertToCrudVO(row); + + + /** + * 처리 + */ + if(XitCmmnUtil.isEmpty(xitFrameCrudService.findXitUserEtcOption(userEtcOptionVO))) + xitFrameCrudService.addXitUserEtcOption(userEtcOptionVO); + else + xitFrameCrudService.modifyXitUserEtcOption(userEtcOptionVO); + + } + } + + @Override + public void removeProc(String id) { + + + } + + @Override + public void removesProc(String userIds) { + + } + + + /** + *
메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다.
+ * @return XitUserEtcOptionVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 5. + */ + private XitUserEtcOptionVO convertToCrudVO(XitUserEtcOptMngVO vo) { + XitUserEtcOptionVO crudVO = new XitUserEtcOptionVO(); + crudVO.setUser_id (vo.getUserId()); //사용자 id + crudVO.setJob_data_author (vo.getJobDataAuthor()); //업무 데이터 권한 + crudVO.setUser_manage_author (vo.getUserManageAuthor()); //사용자 관리 권한 + crudVO.setElctrnsanctn_use_at(vo.getElctrnsanctnUseAt()); //전자결재 사용 여부 + crudVO.setJob_confm_author_at(vo.getJobConfmAuthorAt()); //업무 승인 권한 여부 + + return crudVO; + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/opt/web/XitUserEtcOptMngController.java b/src/main/java/kr/xit/framework/biz/mng/user/opt/web/XitUserEtcOptMngController.java new file mode 100644 index 00000000..1bf2511d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/opt/web/XitUserEtcOptMngController.java @@ -0,0 +1,286 @@ +package kr.xit.framework.biz.mng.user.opt.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngSearchVO; +import kr.xit.framework.biz.mng.user.opt.model.XitUserEtcOptMngVO; +import kr.xit.framework.biz.mng.user.opt.service.XitUserEtcOptMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 사용자기타옵션관리 Controller + * @설명: + * @최초작성일: 2020. 11. 5. 오후 3:32:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/usr/opt/") +public class XitUserEtcOptMngController { + + @Resource + private XitUserEtcOptMngService xitUserEtcOptMngService; + + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + @Resource + private XitFrameCodeService xitFrameCodeService; + + /** + *
메소드 설명: 사용자기타옵션관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserEtcOptMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserEtcOptMng_list(@ModelAttribute("userSearchVO") XitUserEtcOptMngSearchVO searchVO, ModelMap model) { + +// searchVO.setPageUnit(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageUnit"))); +// searchVO.setPageSize(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageSize"))); +// +// /** pageing */ +// PaginationInfo paginationInfo = new PaginationInfo(); +// paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); +// paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); +// paginationInfo.setPageSize(searchVO.getPageSize()); +// +// searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); +// searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); +// searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); +// +// model.addAttribute("resultList", xitUserEtcOptMngService.findList(searchVO)); +// +// int totCnt = xitUserEtcOptMngService.findListTotCnt(searchVO); +// paginationInfo.setTotalRecordCount(totCnt); +// model.addAttribute("paginationInfo", paginationInfo); + + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("dataAuthorCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT401")); //자료조회및관리범위코드 목록 + model.addAttribute("elctrnsanctnUseAtCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT402")); //전자결재사용여부코드 목록 + model.addAttribute("jobConfmAuthorAtCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT403")); //업무승인권한코드 목록 + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/opt/XitUserEtcOptMng_list"; + } + /** + *
메소드 설명: 사용자기타옵션관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 7. 29. + */ + @RequestMapping(value = "UserEtcOptMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map UserEtcOptMng_listAjax(HttpServletRequest req, @ModelAttribute("searchVO") XitUserEtcOptMngSearchVO searchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitUserEtcOptMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitUserEtcOptMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserEtcOptMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserEtcOptMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("userSearchVO") XitUserEtcOptMngSearchVO searchVO + , @ModelAttribute("userEtcOptionManageVO") XitUserEtcOptMngVO vo + , ModelMap model + , HttpServletRequest request) { + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/opt/XitUserEtcOptMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserEtcOptMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserEtcOptMng_page_popup( + @PathVariable String cmd + , @ModelAttribute("userSearchVO") XitUserEtcOptMngSearchVO searchVO + , @ModelAttribute("userEtcOptionManageVO") XitUserEtcOptMngVO vo + , ModelMap model + ) { + + switch (cmd) { + case "": // + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/opt/XitUserEtcOptMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 사용자기타옵션관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserEtcOptMng_{cmd}_proc.do", method=RequestMethod.POST) + public void UserEtcOptMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("userEtcOptionManageVO") XitUserEtcOptMngVO vo + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/usr/reg/UserEtcOptMng_list.do"; + String resultMsg = null; + switch (cmd) { +// case "insert": //등록 +// break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //처리 + try { + xitUserEtcOptMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); +// sLocationUrl = "forward:/_mng_/usr/reg/UserEtcOptMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); +// sLocationUrl = "forward:/_mng_/usr/reg/UserEtcOptMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); +// sLocationUrl = "forward:/_mng_/usr/reg/UserEtcOptMng_edit.do"; + } + break; + +// case "delete": //삭제 +// break; + +// case "deletes": //다건 삭제 +// break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitEntUserRegMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitEntUserRegMngMapper.java new file mode 100644 index 00000000..3e884179 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitEntUserRegMngMapper.java @@ -0,0 +1,50 @@ +package kr.xit.framework.biz.mng.user.reg.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngVO; + +/** + * + * @업무그룹명: 기업사용자등록관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:33:35 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitEntUserRegMngMapper { + + /** + *
메소드 설명: 기업사용자등록관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(XitEntUserRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 기업사용자등록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitEntUserRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 기업사용자등록관리 상세정보 조회
+ * @param vo + * @return XitEntUserRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitEntUserRegMngVO findView(XitEntUserRegMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitGnrUserRegMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitGnrUserRegMngMapper.java new file mode 100644 index 00000000..35bfafaf --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitGnrUserRegMngMapper.java @@ -0,0 +1,50 @@ +package kr.xit.framework.biz.mng.user.reg.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngVO; + +/** + * + * @업무그룹명: 일반사용자등록관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:33:35 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitGnrUserRegMngMapper { + + /** + *
메소드 설명: 일반사용자등록관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(XitGnrUserRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 일반사용자등록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitGnrUserRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 일반사용자등록관리 상세정보 조회
+ * @param vo + * @return XitGnrUserRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitGnrUserRegMngVO findView(XitGnrUserRegMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitUserRegMngMapper.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitUserRegMngMapper.java new file mode 100644 index 00000000..a006848a --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/dao/XitUserRegMngMapper.java @@ -0,0 +1,50 @@ +package kr.xit.framework.biz.mng.user.reg.dao; + +import java.sql.SQLException; +import java.util.List; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngVO; + +/** + * + * @업무그룹명: 사용자등록관리 Mapper + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:33:35 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Mapper +public interface XitUserRegMngMapper { + + /** + *
메소드 설명: 사용자등록관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public List findList(XitUserRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자등록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public int findListTotCnt(XitUserRegMngSearchVO searchVO) throws SQLException; + + /** + *
메소드 설명: 사용자등록관리 상세정보 조회
+ * @param vo + * @return XitUserRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + public XitUserRegMngVO findView(XitUserRegMngVO vo) throws SQLException; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitEntUserRegMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitEntUserRegMngSearchVO.java new file mode 100644 index 00000000..80ae72e3 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitEntUserRegMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.user.reg.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 기업사용자등록관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitEntUserRegMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitEntUserRegMngVO.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitEntUserRegMngVO.java new file mode 100644 index 00000000..1c6ff74d --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitEntUserRegMngVO.java @@ -0,0 +1,562 @@ +package kr.xit.framework.biz.mng.user.reg.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 기업사용자등록관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitEntUserRegMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 이전비밀번호 - 비밀번호 변경시 사용*/ + private String oldPassword = ""; + + /** + * 사용자고유아이디 + */ + private String uniqId=""; + /** + * 사용자 유형 + */ + private String userTy; + /** + * 주소 + */ + private String adres; + /** + * 상세주소 + */ + private String detailAdres; + /** + * 신청자 주민등록번호 + */ + private String applcntIhidnum; + /** + * 신청자 명 + */ + private String applcntNm; + /** + * 사업자번호 + */ + private String bizrno; + /** + * 회사명 + */ + private String cmpnyNm; + /** + * 대표이사 + */ + private String cxfc; + /** + * 기업 회원 ID + */ + private String entrprsmberId; + /** + * 기업 회원 비밀번호 + */ + private String entrprsMberPassword; + /** + * 기업 회원 비밀번호 정답 + */ + private String entrprsMberPasswordCnsr; + /** + * 기업 회원 비밀번호 힌트 + */ + private String entrprsMberPasswordHint; + /** + * 기업 회원 상태 + */ + private String entrprsMberSttus; + /** + * 기업구분코드 + */ + private String entrprsSeCode; + /** + * 팩스번호 + */ + private String fxnum; + /** + * 그룹 ID + */ + private String groupId; + /** + * 업종코드 + */ + private String indutyCode; + /** + * 법인등록번호 + */ + private String jurirno; + /** + * 지역번호 + */ + private String areaNo; + /** + * 회사끝전화번호 + */ + private String entrprsEndTelno; + /** + * 회사중간전화번호 + */ + private String entrprsMiddleTelno; + /** + * 가입 일자 + */ + private String sbscrbDe; + /** + * 우편번호 + */ + private String zip; + /** + * 신청자 이메일주소 + */ + private String applcntEmailAdres; + /** + * 회원상태 코드 명 + */ + private String userSttusCode; + + /** + * 로그인인증제한여부 + */ + private String lockAt; + public String getLockAt() {return lockAt;} + public void setLockAt(String lockAt) {this.lockAt = lockAt;} + + /*======================== + * 목록화면 select 항목 + ========================*/ + private String userId; + private String userNm; + private String middleTelno; + private String endTelno; + private String sttus; + private String emailAdres; + private String moblphonNo; + + + + /** + * oldPassword attribute 값을 리턴한다. + * @return String + */ + public String getOldPassword() { + return oldPassword; + } + /** + * oldPassword attribute 값을 설정한다. + * @param oldPassword String + */ + public void setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + } + /** + * uniqId attribute 값을 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + /** + * userTy attribute 값을 리턴한다. + * @return String + */ + public String getUserTy() { + return userTy; + } + /** + * userTy attribute 값을 설정한다. + * @param userTy String + */ + public void setUserTy(String userTy) { + this.userTy = userTy; + } + /** + * adres attribute 값을 리턴한다. + * @return String + */ + public String getAdres() { + return adres; + } + /** + * adres attribute 값을 설정한다. + * @param adres String + */ + public void setAdres(String adres) { + this.adres = adres; + } + /** + * detailAdres attribute 값을 리턴한다. + * @return String + */ + public String getDetailAdres() { + return detailAdres; + } + /** + * detailAdres attribute 값을 설정한다. + * @param detailAdres String + */ + public void setDetailAdres(String detailAdres) { + this.detailAdres = detailAdres; + } + /** + * applcntIhidnum attribute 값을 리턴한다. + * @return String + */ + public String getApplcntIhidnum() { + return applcntIhidnum; + } + /** + * applcntIhidnum attribute 값을 설정한다. + * @param applcntIhidnum String + */ + public void setApplcntIhidnum(String applcntIhidnum) { + this.applcntIhidnum = applcntIhidnum; + } + /** + * applcntNm attribute 값을 리턴한다. + * @return String + */ + public String getApplcntNm() { + return applcntNm; + } + /** + * applcntNm attribute 값을 설정한다. + * @param applcntNm String + */ + public void setApplcntNm(String applcntNm) { + this.applcntNm = applcntNm; + } + /** + * bizrno attribute 값을 리턴한다. + * @return String + */ + public String getBizrno() { + return bizrno; + } + /** + * bizrno attribute 값을 설정한다. + * @param bizrno String + */ + public void setBizrno(String bizrno) { + this.bizrno = bizrno; + } + /** + * cmpnyNm attribute 값을 리턴한다. + * @return String + */ + public String getCmpnyNm() { + return cmpnyNm; + } + /** + * cmpnyNm attribute 값을 설정한다. + * @param cmpnyNm String + */ + public void setCmpnyNm(String cmpnyNm) { + this.cmpnyNm = cmpnyNm; + } + /** + * cxfc attribute 값을 리턴한다. + * @return String + */ + public String getCxfc() { + return cxfc; + } + /** + * cxfc attribute 값을 설정한다. + * @param cxfc String + */ + public void setCxfc(String cxfc) { + this.cxfc = cxfc; + } + /** + * entrprsmberId attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsmberId() { + return entrprsmberId; + } + /** + * entrprsmberId attribute 값을 설정한다. + * @param entrprsmberId String + */ + public void setEntrprsmberId(String entrprsmberId) { + this.entrprsmberId = entrprsmberId; + } + /** + * entrprsMberPassword attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsMberPassword() { + return entrprsMberPassword; + } + /** + * entrprsMberPassword attribute 값을 설정한다. + * @param entrprsMberPassword String + */ + public void setEntrprsMberPassword(String entrprsMberPassword) { + this.entrprsMberPassword = entrprsMberPassword; + } + /** + * entrprsMberPasswordCnsr attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsMberPasswordCnsr() { + return entrprsMberPasswordCnsr; + } + /** + * entrprsMberPasswordCnsr attribute 값을 설정한다. + * @param entrprsMberPasswordCnsr String + */ + public void setEntrprsMberPasswordCnsr(String entrprsMberPasswordCnsr) { + this.entrprsMberPasswordCnsr = entrprsMberPasswordCnsr; + } + /** + * entrprsMberPasswordHint attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsMberPasswordHint() { + return entrprsMberPasswordHint; + } + /** + * entrprsMberPasswordHint attribute 값을 설정한다. + * @param entrprsMberPasswordHint String + */ + public void setEntrprsMberPasswordHint(String entrprsMberPasswordHint) { + this.entrprsMberPasswordHint = entrprsMberPasswordHint; + } + /** + * entrprsMberSttus attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsMberSttus() { + return entrprsMberSttus; + } + /** + * entrprsMberSttus attribute 값을 설정한다. + * @param entrprsMberSttus String + */ + public void setEntrprsMberSttus(String entrprsMberSttus) { + this.entrprsMberSttus = entrprsMberSttus; + } + /** + * entrprsSeCode attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsSeCode() { + return entrprsSeCode; + } + /** + * entrprsSeCode attribute 값을 설정한다. + * @param entrprsSeCode String + */ + public void setEntrprsSeCode(String entrprsSeCode) { + this.entrprsSeCode = entrprsSeCode; + } + /** + * fxnum attribute 값을 리턴한다. + * @return String + */ + public String getFxnum() { + return fxnum; + } + /** + * fxnum attribute 값을 설정한다. + * @param fxnum String + */ + public void setFxnum(String fxnum) { + this.fxnum = fxnum; + } + /** + * groupId attribute 값을 리턴한다. + * @return String + */ + public String getGroupId() { + return groupId; + } + /** + * groupId attribute 값을 설정한다. + * @param groupId String + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * indutyCode attribute 값을 리턴한다. + * @return String + */ + public String getIndutyCode() { + return indutyCode; + } + /** + * indutyCode attribute 값을 설정한다. + * @param indutyCode String + */ + public void setIndutyCode(String indutyCode) { + this.indutyCode = indutyCode; + } + /** + * jurirno attribute 값을 리턴한다. + * @return String + */ + public String getJurirno() { + return jurirno; + } + /** + * jurirno attribute 값을 설정한다. + * @param jurirno String + */ + public void setJurirno(String jurirno) { + this.jurirno = jurirno; + } + /** + * areaNo attribute 값을 리턴한다. + * @return String + */ + public String getAreaNo() { + return areaNo; + } + /** + * areaNo attribute 값을 설정한다. + * @param areaNo String + */ + public void setAreaNo(String areaNo) { + this.areaNo = areaNo; + } + /** + * entrprsEndTelno attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsEndTelno() { + return entrprsEndTelno; + } + /** + * entrprsEndTelno attribute 값을 설정한다. + * @param entrprsEndTelno String + */ + public void setEntrprsEndTelno(String entrprsEndTelno) { + this.entrprsEndTelno = entrprsEndTelno; + } + /** + * entrprsMiddleTelno attribute 값을 리턴한다. + * @return String + */ + public String getEntrprsMiddleTelno() { + return entrprsMiddleTelno; + } + /** + * entrprsMiddleTelno attribute 값을 설정한다. + * @param entrprsMiddleTelno String + */ + public void setEntrprsMiddleTelno(String entrprsMiddleTelno) { + this.entrprsMiddleTelno = entrprsMiddleTelno; + } + /** + * sbscrbDe attribute 값을 리턴한다. + * @return String + */ + public String getSbscrbDe() { + return sbscrbDe; + } + /** + * sbscrbDe attribute 값을 설정한다. + * @param sbscrbDe String + */ + public void setSbscrbDe(String sbscrbDe) { + this.sbscrbDe = sbscrbDe; + } + /** + * zip attribute 값을 리턴한다. + * @return String + */ + public String getZip() { + return zip; + } + /** + * zip attribute 값을 설정한다. + * @param zip String + */ + public void setZip(String zip) { + this.zip = zip; + } + /** + * applcntEmailAdres attribute 값을 리턴한다. + * @return String + */ + public String getApplcntEmailAdres() { + return applcntEmailAdres; + } + /** + * applcntEmailAdres attribute 값을 설정한다. + * @param applcntEmailAdres String + */ + public void setApplcntEmailAdres(String applcntEmailAdres) { + this.applcntEmailAdres = applcntEmailAdres; + } + public String getUserSttusCode() { + return userSttusCode; + } + public void setUserSttusCode(String userSttusCode) { + this.userSttusCode = userSttusCode; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + public String getUserNm() { + return userNm; + } + public void setUserNm(String userNm) { + this.userNm = userNm; + } + public String getMiddleTelno() { + return middleTelno; + } + public void setMiddleTelno(String middleTelno) { + this.middleTelno = middleTelno; + } + public String getEndTelno() { + return endTelno; + } + public void setEndTelno(String endTelno) { + this.endTelno = endTelno; + } + public String getSttus() { + return sttus; + } + public void setSttus(String sttus) { + this.sttus = sttus; + } + public String getEmailAdres() { + return emailAdres; + } + public void setEmailAdres(String emailAdres) { + this.emailAdres = emailAdres; + } + public String getMoblphonNo() { + return moblphonNo; + } + public void setMoblphonNo(String moblphonNo) { + this.moblphonNo = moblphonNo; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitGnrUserRegMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitGnrUserRegMngSearchVO.java new file mode 100644 index 00000000..b5d0d008 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitGnrUserRegMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.user.reg.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 일반사용자등록관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitGnrUserRegMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitGnrUserRegMngVO.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitGnrUserRegMngVO.java new file mode 100644 index 00000000..697ca380 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitGnrUserRegMngVO.java @@ -0,0 +1,471 @@ +package kr.xit.framework.biz.mng.user.reg.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 일반사용자등록관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitGnrUserRegMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 이전비밀번호 - 비밀번호 변경시 사용*/ + private String oldPassword = ""; + + /** + * 사용자고유아이디 + */ + private String uniqId=""; + /** + * 사용자 유형 + */ + private String userTy; + /** + * 주소 + */ + private String adres; + /** + * 상세주소 + */ + private String detailAdres; + /** + * 끝전화번호 + */ + private String endTelno; + /** + * 팩스번호 + */ + private String mberFxnum; + /** + * 그룹 ID + */ + private String groupId; + /** + * 주민등록번호 + */ + private String ihidnum; + /** + * 성별코드 + */ + private String sexdstnCode; + /** + * 회원 ID + */ + private String mberId; + /** + * 회원명 + */ + private String mberNm; + /** + * 회원상태 + */ + private String mberSttus; + /** + * 지역번호 + */ + private String areaNo; + /** + * 중간전화번호 + */ + private String middleTelno; + /** + * 핸드폰번호 + */ + private String moblphonNo; + /** + * 비밀번호 + */ + private String password; + /** + * 비밀번호 정답 + */ + private String passwordCnsr; + /** + * 비밀번호 힌트 + */ + private String passwordHint; + /** + * 가입 일자 + */ + private String sbscrbDe; + /** + * 우편번호 + */ + private String zip; + /** + * 이메일주소 + */ + private String mberEmailAdres; + + /** + * 회원상태 코드 명 + */ + private String userSttusCode; + + + /** + * 로그인인증제한여부 + */ + private String lockAt; + public String getLockAt() {return lockAt;} + public void setLockAt(String lockAt) {this.lockAt = lockAt;} + + /*======================== + * 목록화면 select 항목 + ========================*/ + private String userId; + private String userNm; +// private String middleTelno; +// private String endTelno; + private String sttus; + private String emailAdres; + + /** + * oldPassword attribute 값을 리턴한다. + * @return String + */ + public String getOldPassword() { + return oldPassword; + } + /** + * oldPassword attribute 값을 설정한다. + * @param oldPassword String + */ + public void setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + } + /** + * uniqId attribute 값을 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + /** + * userTy attribute 값을 리턴한다. + * @return String + */ + public String getUserTy() { + return userTy; + } + /** + * userTy attribute 값을 설정한다. + * @param userTy String + */ + public void setUserTy(String userTy) { + this.userTy = userTy; + } + /** + * adres attribute 값을 리턴한다. + * @return String + */ + public String getAdres() { + return adres; + } + /** + * adres attribute 값을 설정한다. + * @param adres String + */ + public void setAdres(String adres) { + this.adres = adres; + } + /** + * detailAdres attribute 값을 리턴한다. + * @return String + */ + public String getDetailAdres() { + return detailAdres; + } + /** + * detailAdres attribute 값을 설정한다. + * @param detailAdres String + */ + public void setDetailAdres(String detailAdres) { + this.detailAdres = detailAdres; + } + /** + * endTelno attribute 값을 리턴한다. + * @return String + */ + public String getEndTelno() { + return endTelno; + } + /** + * endTelno attribute 값을 설정한다. + * @param endTelno String + */ + public void setEndTelno(String endTelno) { + this.endTelno = endTelno; + } + /** + * mberFxnum attribute 값을 리턴한다. + * @return String + */ + public String getMberFxnum() { + return mberFxnum; + } + /** + * mberFxnum attribute 값을 설정한다. + * @param mberFxnum String + */ + public void setMberFxnum(String mberFxnum) { + this.mberFxnum = mberFxnum; + } + /** + * groupId attribute 값을 리턴한다. + * @return String + */ + public String getGroupId() { + return groupId; + } + /** + * groupId attribute 값을 설정한다. + * @param groupId String + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * ihidnum attribute 값을 리턴한다. + * @return String + */ + public String getIhidnum() { + return ihidnum; + } + /** + * ihidnum attribute 값을 설정한다. + * @param ihidnum String + */ + public void setIhidnum(String ihidnum) { + this.ihidnum = ihidnum; + } + /** + * sexdstnCode attribute 값을 리턴한다. + * @return String + */ + public String getSexdstnCode() { + return sexdstnCode; + } + /** + * sexdstnCode attribute 값을 설정한다. + * @param sexdstnCode String + */ + public void setSexdstnCode(String sexdstnCode) { + this.sexdstnCode = sexdstnCode; + } + /** + * mberId attribute 값을 리턴한다. + * @return String + */ + public String getMberId() { + return mberId; + } + /** + * mberId attribute 값을 설정한다. + * @param mberId String + */ + public void setMberId(String mberId) { + this.mberId = mberId; + } + /** + * mberNm attribute 값을 리턴한다. + * @return String + */ + public String getMberNm() { + return mberNm; + } + /** + * mberNm attribute 값을 설정한다. + * @param mberNm String + */ + public void setMberNm(String mberNm) { + this.mberNm = mberNm; + } + /** + * mberSttus attribute 값을 리턴한다. + * @return String + */ + public String getMberSttus() { + return mberSttus; + } + /** + * mberSttus attribute 값을 설정한다. + * @param mberSttus String + */ + public void setMberSttus(String mberSttus) { + this.mberSttus = mberSttus; + } + /** + * areaNo attribute 값을 리턴한다. + * @return String + */ + public String getAreaNo() { + return areaNo; + } + /** + * areaNo attribute 값을 설정한다. + * @param areaNo String + */ + public void setAreaNo(String areaNo) { + this.areaNo = areaNo; + } + /** + * middleTelno attribute 값을 리턴한다. + * @return String + */ + public String getMiddleTelno() { + return middleTelno; + } + /** + * middleTelno attribute 값을 설정한다. + * @param middleTelno String + */ + public void setMiddleTelno(String middleTelno) { + this.middleTelno = middleTelno; + } + /** + * moblphonNo attribute 값을 리턴한다. + * @return String + */ + public String getMoblphonNo() { + return moblphonNo; + } + /** + * moblphonNo attribute 값을 설정한다. + * @param moblphonNo String + */ + public void setMoblphonNo(String moblphonNo) { + this.moblphonNo = moblphonNo; + } + /** + * password attribute 값을 리턴한다. + * @return String + */ + public String getPassword() { + return password; + } + /** + * password attribute 값을 설정한다. + * @param password String + */ + public void setPassword(String password) { + this.password = password; + } + /** + * passwordCnsr attribute 값을 리턴한다. + * @return String + */ + public String getPasswordCnsr() { + return passwordCnsr; + } + /** + * passwordCnsr attribute 값을 설정한다. + * @param passwordCnsr String + */ + public void setPasswordCnsr(String passwordCnsr) { + this.passwordCnsr = passwordCnsr; + } + /** + * passwordHint attribute 값을 리턴한다. + * @return String + */ + public String getPasswordHint() { + return passwordHint; + } + /** + * passwordHint attribute 값을 설정한다. + * @param passwordHint String + */ + public void setPasswordHint(String passwordHint) { + this.passwordHint = passwordHint; + } + /** + * sbscrbDe attribute 값을 리턴한다. + * @return String + */ + public String getSbscrbDe() { + return sbscrbDe; + } + /** + * sbscrbDe attribute 값을 설정한다. + * @param sbscrbDe String + */ + public void setSbscrbDe(String sbscrbDe) { + this.sbscrbDe = sbscrbDe; + } + /** + * zip attribute 값을 리턴한다. + * @return String + */ + public String getZip() { + return zip; + } + /** + * zip attribute 값을 설정한다. + * @param zip String + */ + public void setZip(String zip) { + this.zip = zip; + } + /** + * mberEmailAdres attribute 값을 리턴한다. + * @return String + */ + public String getMberEmailAdres() { + return mberEmailAdres; + } + /** + * mberEmailAdres attribute 값을 설정한다. + * @param mberEmailAdres String + */ + public void setMberEmailAdres(String mberEmailAdres) { + this.mberEmailAdres = mberEmailAdres; + } + public String getUserSttusCode() { + return userSttusCode; + } + public void setUserSttusCode(String userSttusCode) { + this.userSttusCode = userSttusCode; + } + public String getUserId() { + return userId; + } + public void setUserId(String userId) { + this.userId = userId; + } + public String getUserNm() { + return userNm; + } + public void setUserNm(String userNm) { + this.userNm = userNm; + } + public String getSttus() { + return sttus; + } + public void setSttus(String sttus) { + this.sttus = sttus; + } + public String getEmailAdres() { + return emailAdres; + } + public void setEmailAdres(String emailAdres) { + this.emailAdres = emailAdres; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserRegMngSearchVO.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserRegMngSearchVO.java new file mode 100644 index 00000000..a5e01c56 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserRegMngSearchVO.java @@ -0,0 +1,22 @@ +package kr.xit.framework.biz.mng.user.reg.model; + +import kr.xit.framework.core.model.XitBaseSearchVO; + +/** + * + * @업무그룹명: 사용자등록관리SearchVO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:33:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserRegMngSearchVO extends XitBaseSearchVO{ + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserRegMngVO.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserRegMngVO.java new file mode 100644 index 00000000..abb21544 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserRegMngVO.java @@ -0,0 +1,657 @@ +package kr.xit.framework.biz.mng.user.reg.model; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 사용자등록관리VO + * @설명: + * @최초작성일: 2020. 3. 26. 오후 1:32:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitUserRegMngVO extends BaseVO { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 이전비밀번호 - 비밀번호 변경시 사용*/ + private String oldPassword = ""; + + /** + * 가입일 + */ + private String sbscrbDe; + /** + * 사용자고유아이디 + */ + private String uniqId=""; + /** + * 사용자 유형 + */ + private String userTy; + /** + * 지역번호 + */ + private String areaNo; + /** + * 생일 + */ + private String brth; + /** + * 상세주소 + */ + private String detailAdres; + /** + * 이메일주소 + */ + private String emailAdres; + /** + * 사원번호 + */ + private String emplNo; + /** + * 사용자 ID + */ + private String emplyrId; + /** + * 사용자 명 + */ + private String emplyrNm; + /** + * 사용자 상태 + */ + private String emplyrSttusCode; + /** + * 팩스번호 + */ + private String fxnum; + /** + * 그룹 ID + */ + private String groupId; + /** + * 집 주소 + */ + private String homeadres; + /** + * 집끝전화번호 + */ + private String homeendTelno; + /** + * 집중간전화번호 + */ + private String homemiddleTelno; + /** + * 주민등록번호 + */ + private String ihidnum; + /** + * 소속기관코드 + */ + private String insttCode; + /** + * 검색조건 회원타입 + */ + private String mberTy; + /** + * 핸드폰번호 + */ + private String moblphonNo; + /** + * 직위명 + */ + private String ofcpsNm; + /** + * 사무실전화번호 + */ + private String offmTelno; + /** + * 조직 ID + */ + private String orgnztId; + /** + * 비밀번호 + */ + private String password; + /** + * 비밀번호 정답 + */ + private String passwordCnsr; + /** + * 비밀번호 힌트 + */ + private String passwordHint; + /** + * 검색조건 가입일자 시작일 + */ + private String sbscrbDeBegin; + /** + * 검색조건 가입일자 종료일 + */ + private String sbscrbDeEnd; + /** + * 성별코드 + */ + private String sexdstnCode; + /** + * 우편번호 + */ + private String zip; + /** + * DN 값 + */ + private String subDn; + + /*======================== + * 목록화면 select 항목 + ========================*/ + private String userId; + private String userNm; + private String middleTelno; + private String endTelno; + private String sttus; + + + /** + * 회원상태 코드 명 + */ + private String userSttusCode; + + /** + * oldPassword attribute 값을 리턴한다. + * @return String + */ + public String getOldPassword() { + return oldPassword; + } + /** + * oldPassword attribute 값을 설정한다. + * @param oldPassword String + */ + public void setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + } + /** + * sbscrbDe attribute 값을 리턴한다. + * @return String + */ + public String getSbscrbDe() { + return sbscrbDe; + } + /** + * sbscrbDe attribute 값을 설정한다. + * @param sbscrbDe String + */ + public void setSbscrbDe(String sbscrbDe) { + this.sbscrbDe = sbscrbDe; + } + /** + * uniqId attribute 값을 리턴한다. + * @return String + */ + public String getUniqId() { + return uniqId; + } + /** + * uniqId attribute 값을 설정한다. + * @param uniqId String + */ + public void setUniqId(String uniqId) { + this.uniqId = uniqId; + } + /** + * userTy attribute 값을 리턴한다. + * @return String + */ + public String getUserTy() { + return userTy; + } + /** + * userTy attribute 값을 설정한다. + * @param userTy String + */ + public void setUserTy(String userTy) { + this.userTy = userTy; + } + /** + * areaNo attribute 값을 리턴한다. + * @return String + */ + public String getAreaNo() { + return areaNo; + } + /** + * areaNo attribute 값을 설정한다. + * @param areaNo String + */ + public void setAreaNo(String areaNo) { + this.areaNo = areaNo; + } + /** + * brth attribute 값을 리턴한다. + * @return String + */ + public String getBrth() { + return brth; + } + /** + * brth attribute 값을 설정한다. + * @param brth String + */ + public void setBrth(String brth) { + this.brth = brth; + } + /** + * detailAdres attribute 값을 리턴한다. + * @return String + */ + public String getDetailAdres() { + return detailAdres; + } + /** + * detailAdres attribute 값을 설정한다. + * @param detailAdres String + */ + public void setDetailAdres(String detailAdres) { + this.detailAdres = detailAdres; + } + /** + * emailAdres attribute 값을 리턴한다. + * @return String + */ + public String getEmailAdres() { + return emailAdres; + } + /** + * emailAdres attribute 값을 설정한다. + * @param emailAdres String + */ + public void setEmailAdres(String emailAdres) { + this.emailAdres = emailAdres; + } + /** + * emplNo attribute 값을 리턴한다. + * @return String + */ + public String getEmplNo() { + return emplNo; + } + /** + * emplNo attribute 값을 설정한다. + * @param emplNo String + */ + public void setEmplNo(String emplNo) { + this.emplNo = emplNo; + } + /** + * userId attribute 값을 리턴한다. + * @return String + */ + public String getUserId() { + return userId; + } + /** + * userId attribute 값을 설정한다. + * @param userId String + */ + public void setUserId(String userId) { + this.userId = userId; + } + /** + * emplyrId attribute 값을 리턴한다. + * @return String + */ + public String getEmplyrId() { + return emplyrId; + } + /** + * emplyrId attribute 값을 설정한다. + * @param emplyrId String + */ + public void setEmplyrId(String emplyrId) { + this.emplyrId = emplyrId; + } + /** + * emplyrNm attribute 값을 리턴한다. + * @return String + */ + public String getEmplyrNm() { + return emplyrNm; + } + /** + * emplyrNm attribute 값을 설정한다. + * @param emplyrNm String + */ + public void setEmplyrNm(String emplyrNm) { + this.emplyrNm = emplyrNm; + } + /** + * emplyrSttusCode attribute 값을 리턴한다. + * @return String + */ + public String getEmplyrSttusCode() { + return emplyrSttusCode; + } + /** + * emplyrSttusCode attribute 값을 설정한다. + * @param emplyrSttusCode String + */ + public void setEmplyrSttusCode(String emplyrSttusCode) { + this.emplyrSttusCode = emplyrSttusCode; + } + /** + * fxnum attribute 값을 리턴한다. + * @return String + */ + public String getFxnum() { + return fxnum; + } + /** + * fxnum attribute 값을 설정한다. + * @param fxnum String + */ + public void setFxnum(String fxnum) { + this.fxnum = fxnum; + } + /** + * groupId attribute 값을 리턴한다. + * @return String + */ + public String getGroupId() { + return groupId; + } + /** + * groupId attribute 값을 설정한다. + * @param groupId String + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * homeadres attribute 값을 리턴한다. + * @return String + */ + public String getHomeadres() { + return homeadres; + } + /** + * homeadres attribute 값을 설정한다. + * @param homeadres String + */ + public void setHomeadres(String homeadres) { + this.homeadres = homeadres; + } + /** + * homeendTelno attribute 값을 리턴한다. + * @return String + */ + public String getHomeendTelno() { + return homeendTelno; + } + /** + * homeendTelno attribute 값을 설정한다. + * @param homeendTelno String + */ + public void setHomeendTelno(String homeendTelno) { + this.homeendTelno = homeendTelno; + } + /** + * homemiddleTelno attribute 값을 리턴한다. + * @return String + */ + public String getHomemiddleTelno() { + return homemiddleTelno; + } + /** + * homemiddleTelno attribute 값을 설정한다. + * @param homemiddleTelno String + */ + public void setHomemiddleTelno(String homemiddleTelno) { + this.homemiddleTelno = homemiddleTelno; + } + /** + * ihidnum attribute 값을 리턴한다. + * @return String + */ + public String getIhidnum() { + return ihidnum; + } + /** + * ihidnum attribute 값을 설정한다. + * @param ihidnum String + */ + public void setIhidnum(String ihidnum) { + this.ihidnum = ihidnum; + } + /** + * insttCode attribute 값을 리턴한다. + * @return String + */ + public String getInsttCode() { + return insttCode; + } + /** + * insttCode attribute 값을 설정한다. + * @param insttCode String + */ + public void setInsttCode(String insttCode) { + this.insttCode = insttCode; + } + /** + * mberTy attribute 값을 리턴한다. + * @return String + */ + public String getMberTy() { + return mberTy; + } + /** + * mberTy attribute 값을 설정한다. + * @param mberTy String + */ + public void setMberTy(String mberTy) { + this.mberTy = mberTy; + } + /** + * moblphonNo attribute 값을 리턴한다. + * @return String + */ + public String getMoblphonNo() { + return moblphonNo; + } + /** + * moblphonNo attribute 값을 설정한다. + * @param moblphonNo String + */ + public void setMoblphonNo(String moblphonNo) { + this.moblphonNo = moblphonNo; + } + /** + * ofcpsNm attribute 값을 리턴한다. + * @return String + */ + public String getOfcpsNm() { + return ofcpsNm; + } + /** + * ofcpsNm attribute 값을 설정한다. + * @param ofcpsNm String + */ + public void setOfcpsNm(String ofcpsNm) { + this.ofcpsNm = ofcpsNm; + } + /** + * offmTelno attribute 값을 리턴한다. + * @return String + */ + public String getOffmTelno() { + return offmTelno; + } + /** + * offmTelno attribute 값을 설정한다. + * @param offmTelno String + */ + public void setOffmTelno(String offmTelno) { + this.offmTelno = offmTelno; + } + /** + * orgnztId attribute 값을 리턴한다. + * @return String + */ + public String getOrgnztId() { + return orgnztId; + } + /** + * orgnztId attribute 값을 설정한다. + * @param orgnztId String + */ + public void setOrgnztId(String orgnztId) { + this.orgnztId = orgnztId; + } + /** + * password attribute 값을 리턴한다. + * @return String + */ + public String getPassword() { + return password; + } + /** + * password attribute 값을 설정한다. + * @param password String + */ + public void setPassword(String password) { + this.password = password; + } + /** + * passwordCnsr attribute 값을 리턴한다. + * @return String + */ + public String getPasswordCnsr() { + return passwordCnsr; + } + /** + * passwordCnsr attribute 값을 설정한다. + * @param passwordCnsr String + */ + public void setPasswordCnsr(String passwordCnsr) { + this.passwordCnsr = passwordCnsr; + } + /** + * passwordHint attribute 값을 리턴한다. + * @return String + */ + public String getPasswordHint() { + return passwordHint; + } + /** + * passwordHint attribute 값을 설정한다. + * @param passwordHint String + */ + public void setPasswordHint(String passwordHint) { + this.passwordHint = passwordHint; + } + /** + * sbscrbDeBegin attribute 값을 리턴한다. + * @return String + */ + public String getSbscrbDeBegin() { + return sbscrbDeBegin; + } + /** + * sbscrbDeBegin attribute 값을 설정한다. + * @param sbscrbDeBegin String + */ + public void setSbscrbDeBegin(String sbscrbDeBegin) { + this.sbscrbDeBegin = sbscrbDeBegin; + } + /** + * sbscrbDeEnd attribute 값을 리턴한다. + * @return String + */ + public String getSbscrbDeEnd() { + return sbscrbDeEnd; + } + /** + * sbscrbDeEnd attribute 값을 설정한다. + * @param sbscrbDeEnd String + */ + public void setSbscrbDeEnd(String sbscrbDeEnd) { + this.sbscrbDeEnd = sbscrbDeEnd; + } + /** + * sexdstnCode attribute 값을 리턴한다. + * @return String + */ + public String getSexdstnCode() { + return sexdstnCode; + } + /** + * sexdstnCode attribute 값을 설정한다. + * @param sexdstnCode String + */ + public void setSexdstnCode(String sexdstnCode) { + this.sexdstnCode = sexdstnCode; + } + /** + * zip attribute 값을 리턴한다. + * @return String + */ + public String getZip() { + return zip; + } + /** + * zip attribute 값을 설정한다. + * @param zip String + */ + public void setZip(String zip) { + this.zip = zip; + } + /** + * subDn attribute 값을 리턴한다. + * @return String + */ + public String getSubDn() { + return subDn; + } + /** + * subDn attribute 값을 설정한다. + * @param subDn String + */ + public void setSubDn(String subDn) { + this.subDn = subDn; + } + public String getUserNm() { + return userNm; + } + public void setUserNm(String userNm) { + this.userNm = userNm; + } + public String getMiddleTelno() { + return middleTelno; + } + public void setMiddleTelno(String middleTelno) { + this.middleTelno = middleTelno; + } + public String getEndTelno() { + return endTelno; + } + public void setEndTelno(String endTelno) { + this.endTelno = endTelno; + } + public String getSttus() { + return sttus; + } + public void setSttus(String sttus) { + this.sttus = sttus; + } + public String getUserSttusCode() { + return userSttusCode; + } + public void setUserSttusCode(String userSttusCode) { + this.userSttusCode = userSttusCode; + } + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserReg_inputEvr.jsp b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserReg_inputEvr.jsp new file mode 100644 index 00000000..5b781042 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/model/XitUserReg_inputEvr.jsp @@ -0,0 +1,320 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
+
+ + + +
+ <%@ include file="/WEB-INF/jsp/framework/biz/common/anonymous/forms/GnrUserForm.jsp" %> +
+ + +
+ <%@ include file="/WEB-INF/jsp/framework/biz/common/anonymous/forms/EntUserForm.jsp" %> +
+ + +
+ <%@ include file="/WEB-INF/jsp/framework/biz/common/anonymous/forms/UserForm.jsp" %> +
+ + +
+ +
diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitEntUserRegMngService.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitEntUserRegMngService.java new file mode 100644 index 00000000..9a939a4b --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitEntUserRegMngService.java @@ -0,0 +1,92 @@ +package kr.xit.framework.biz.mng.user.reg.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngVO; + +/** + * + * @업무그룹명: 기업사용자등록관리 Service + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:33:18 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitEntUserRegMngService { + + /** + *
메소드 설명: 기업사용자등록관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findList(XitEntUserRegMngSearchVO searchVO); + + /** + *
메소드 설명: 기업사용자등록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public int findListTotCnt(XitEntUserRegMngSearchVO searchVO); + + /** + *
메소드 설명: 기업사용자등록관리 상세정보 조회
+ * @param vo + * @return XitEntUserRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public XitEntUserRegMngVO findView(XitEntUserRegMngVO vo); + + /** + *
메소드 설명: 기업사용자등록관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void addProc(XitEntUserRegMngVO vo); + + /** + *
메소드 설명: 기업사용자등록관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void modifyProc(XitEntUserRegMngVO vo); + + /** + *
메소드 설명: 사용자 비밀번호 수정
+ * @param uniqId 고유식별ID + * @param id 사용자ID + * @param oldPassword 구 비밀번호 + * @param newPassword 신규 비밀번호 + * @param newPassword2 신규 비밀번호 확인 + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void modifyPwdProc(String uniqId, String id, String oldPassword, String newPassword, String newPassword2); + + /** + *
메소드 설명: 기업사용자등록관리 삭제
+ * @param id void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void removeProc(String id); + + /** + *
메소드 설명: 기업사용자등록관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitGnrUserRegMngService.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitGnrUserRegMngService.java new file mode 100644 index 00000000..66708a7f --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitGnrUserRegMngService.java @@ -0,0 +1,92 @@ +package kr.xit.framework.biz.mng.user.reg.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngVO; + +/** + * + * @업무그룹명: 일반사용자등록관리 Service + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:33:18 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitGnrUserRegMngService { + + /** + *
메소드 설명: 일반사용자등록관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findList(XitGnrUserRegMngSearchVO searchVO); + + /** + *
메소드 설명: 일반사용자등록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public int findListTotCnt(XitGnrUserRegMngSearchVO searchVO); + + /** + *
메소드 설명: 일반사용자등록관리 상세정보 조회
+ * @param vo + * @return XitGnrUserRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public XitGnrUserRegMngVO findView(XitGnrUserRegMngVO vo); + + /** + *
메소드 설명: 일반사용자등록관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void addProc(XitGnrUserRegMngVO vo); + + /** + *
메소드 설명: 일반사용자등록관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void modifyProc(XitGnrUserRegMngVO vo); + + /** + *
메소드 설명: 사용자 비밀번호 수정
+ * @param uniqId 고유식별ID + * @param id 사용자ID + * @param oldPassword 구 비밀번호 + * @param newPassword 신규 비밀번호 + * @param newPassword2 신규 비밀번호 확인 + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void modifyPwdProc(String uniqId, String id, String oldPassword, String newPassword, String newPassword2); + + /** + *
메소드 설명: 일반사용자등록관리 삭제
+ * @param id void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void removeProc(String id); + + /** + *
메소드 설명: 일반사용자등록관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitUserRegMngService.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitUserRegMngService.java new file mode 100644 index 00000000..99c9c504 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/XitUserRegMngService.java @@ -0,0 +1,92 @@ +package kr.xit.framework.biz.mng.user.reg.service; + +import java.util.List; + +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngSearchVO; + +/** + * + * @업무그룹명: 사용자등록관리 Service + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:33:18 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface XitUserRegMngService { + + /** + *
메소드 설명: 사용자등록관리 목록 조회
+ * @param searchVO + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public List findList(XitUserRegMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자등록관리 목록 총건수 조회
+ * @param searchVO + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public int findListTotCnt(XitUserRegMngSearchVO searchVO); + + /** + *
메소드 설명: 사용자등록관리 상세정보 조회
+ * @param vo + * @return XitUserRegMngVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public XitUserRegMngVO findView(XitUserRegMngVO vo); + + /** + *
메소드 설명: 사용자등록관리 등록
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void addProc(XitUserRegMngVO vo); + + /** + *
메소드 설명: 사용자등록관리 수정
+ * @param vo void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void modifyProc(XitUserRegMngVO vo); + + /** + *
메소드 설명: 사용자 비밀번호 수정
+ * @param uniqId 고유식별ID + * @param id 사용자ID + * @param oldPassword 구 비밀번호 + * @param newPassword 신규 비밀번호 + * @param newPassword2 신규 비밀번호 확인 + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 10. + */ + public void modifyPwdProc(String uniqId, String id, String oldPassword, String newPassword, String newPassword2); + + /** + *
메소드 설명: 사용자등록관리 삭제
+ * @param id void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void removeProc(String id); + + /** + *
메소드 설명: 사용자등록관리 다건 삭제
+ * @param ids void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + public void removesProc(String ids); + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitEntUserRegMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitEntUserRegMngServiceImpl.java new file mode 100644 index 00000000..add746dd --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitEntUserRegMngServiceImpl.java @@ -0,0 +1,381 @@ +package kr.xit.framework.biz.mng.user.reg.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.user.reg.dao.XitEntUserRegMngMapper; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.service.XitEntUserRegMngService; +import kr.xit.framework.biz.mng.user.reg.service.XitUserRegMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitScrtyUtil; + +@Service +public class XitEntUserRegMngServiceImpl implements XitEntUserRegMngService { + private static final Logger logger = LoggerFactory.getLogger(XitEntUserRegMngServiceImpl.class); + + @Resource + private XitEntUserRegMngMapper xitEntUserRegMngMapper; + @Resource + private XitUserRegMngService xitUserRegMngService; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name="xitUsrEsntlIdGnrService") + private EgovIdGnrService idgenService; + + @Override + public List findList(XitEntUserRegMngSearchVO searchVO) { + List result = null; + try { + result = xitEntUserRegMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("기업사용자등록관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitEntUserRegMngSearchVO searchVO) { + int result = 0; + try { + result = xitEntUserRegMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("기업사용자등록관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitEntUserRegMngVO findView(XitEntUserRegMngVO vo) { + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(vo.getUniqId())) + throw new RuntimeException("대상에 대한 열람 권한이 없습니다."); + + XitEntUserRegMngVO result = null; + try { + result = xitEntUserRegMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("기업사용자등록관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitEntUserRegMngVO vo) { + /** + * 필수값 설정 + */ + String esntlId = null; + try { + esntlId = idgenService.getNextStringId(); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setUniqId(esntlId); //고유식별키 + XitEntrprsMberVO crudVO = convertToCrudVO(vo); + //그룹의 기본권한 조회 및 설정 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(crudVO.getEsntl_id()); + userScrtySetupVO.setMber_ty_code("USR02"); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(crudVO.getGroup_id()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + + /** + * 처리 + */ + //사용자정보 등록 + xitFrameCrudService.addXitEntrprsMber(crudVO); + //사용자의 권한 등록 + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + + } + + @Override + public void modifyProc(XitEntUserRegMngVO vo) { + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(vo.getUniqId())) + throw new RuntimeException("대상에 대한 수정 권한이 없습니다."); + + /** + * 필수값 설정 + */ + XitEntrprsMberVO crudVO = convertToCrudVO(vo); + crudVO.setEntrprs_mber_password(null); + boolean isChangedGroupId = false; //그룹ID 변경 여부 + XitEntrprsMberVO curUserInfo = xitFrameCrudService.findXitEntrprsMber(crudVO); + if(!crudVO.getGroup_id().equals(curUserInfo.getGroup_id())) + isChangedGroupId = true; + /* ======================================= + * 2020.11.16. 박민규 + * 고유식별자 수정 방지 + * -사유: esntl_id의 경우 회원의 고유식별자이므로 변경 되어선 안됨. + * -작업내용: crudVO.setEsntl_id(null) 코드 추가 + ======================================= */ + String uniqId = crudVO.getEsntl_id(); + crudVO.setEsntl_id(null); + /* ======================================= + * 2020.11.16. 박민규 + * 고유식별자 확인 코드 추가 + * -사유: parameter 조작(CSRF)에 대한 방어 코드 + * -작업내용: 현재 사용자정보와 요청값 확인코드 추가 + * -> if(!curUserInfo.getEsntl_id().equals(uniqId)) + ======================================= */ + if(!curUserInfo.getEsntl_id().equals(uniqId)) + throw new RuntimeException("사용자 고유식별값이 일치하지 않습니다."); + + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitEntrprsMber(crudVO); + if(isChangedGroupId) { //그룹ID가 변경되었을 경우 + //그룹의 기본권한 조회 및 설정 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(uniqId); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(crudVO.getGroup_id()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + //사용자의 권한 갱신 + if(XitCmmnUtil.isEmpty(xitFrameCrudService.findXitUserScrtySetup(userScrtySetupVO))) { + userScrtySetupVO.setMber_ty_code("USR02"); + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + }else { + xitFrameCrudService.modifyXitUserScrtySetup(userScrtySetupVO); + } + } + } + + @Override + public void modifyPwdProc(String uniqId, String id, String oldPassword, String newPassword, String newPassword2) { + + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(uniqId)) + throw new RuntimeException("대상에 대한 수정 권한이 없습니다."); + XitEntUserRegMngVO vo = new XitEntUserRegMngVO(); + vo.setUniqId(uniqId); + vo = this.findView(vo); + String encryptPass = null; + String encryptNewPass = null; + try { + encryptPass = XitScrtyUtil.encryptPassword(oldPassword, id); + encryptNewPass = XitScrtyUtil.encryptPassword(newPassword, id); + } catch (Exception e) { + throw new RuntimeException(String.format("비밀번호 암호화 실패:: %s", e.getMessage())); + } + //비밀번호 동일 여부 + if (vo.getEntrprsMberPassword().equals(encryptPass)) { + //신 비밀번호/비밀번호 확인 동일 여부 + if (!newPassword.equals(newPassword2)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.user.passwordUpdate2")); + } + } else { + throw new RuntimeException(xitMessageSource.getMessage("fail.user.passwordUpdate1")); + } + + + /** + * 필수값 설정 + */ + XitEntrprsMberVO crudVO = new XitEntrprsMberVO(); + crudVO.setEntrprs_mber_id(id); + crudVO.setEntrprs_mber_password(encryptNewPass); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitEntrprsMber(crudVO); + + } + + @Override + public void removeProc(String id) { + xitUserRegMngService.removeProc(id); + } + + @Override + public void removesProc(String userIds) { + + /** + * 유효성 확인 + */ + String [] delId = userIds.split(","); + if (delId == null || (delId.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete")); + } + + /** + * 처리 + */ + String [] arrUserId = userIds.split(","); + for (int i=0; i메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * @return XitEntrprsMberVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private XitEntrprsMberVO convertToCrudVO(XitEntUserRegMngVO vo) { + String password = null; + try { + password = XitScrtyUtil.encryptPassword(vo.getEntrprsMberPassword(), vo.getEntrprsmberId()); + } catch (Exception e) { + throw new RuntimeException(String.format("비밀번호 암호화 실패:: %s", e.getMessage())); + } + + + XitEntrprsMberVO crudVO = new XitEntrprsMberVO(); + crudVO.setEntrprs_mber_id (vo.getEntrprsmberId()); //기업 회원 id + crudVO.setEntrprs_se_code (vo.getEntrprsSeCode()); //기업 구분 코드 + crudVO.setBizrno (vo.getBizrno()); //사업자등록번호 + crudVO.setJurirno (vo.getJurirno()); //법인등록번호 + crudVO.setCmpny_nm (vo.getCmpnyNm()); //회사 명 + crudVO.setCxfc (vo.getCxfc()); //대표이사 + crudVO.setZip (vo.getZip()); //우편번호 + crudVO.setAdres (vo.getAdres()); //주소 + crudVO.setEntrprs_middle_telno (vo.getEntrprsMiddleTelno()); //기업 중간 전화번호 + crudVO.setFxnum (vo.getFxnum()); //팩스번호 + crudVO.setInduty_code (vo.getIndutyCode()); //업종 코드 + crudVO.setApplcnt_nm (vo.getApplcntNm()); //신청인 명 + crudVO.setApplcnt_ihidnum (vo.getApplcntIhidnum()); //신청인 주민등록번호 + crudVO.setSbscrb_de (vo.getSbscrbDe()); //가입 일 + crudVO.setEntrprs_mber_sttus (vo.getEntrprsMberSttus()); //기업 회원 상태 + crudVO.setEntrprs_mber_password (password); //기업 회원 비밀번호 + crudVO.setEntrprs_mber_password_hint(vo.getEntrprsMberPasswordHint()); //기업 회원 비밀번호 힌트 + crudVO.setEntrprs_mber_password_cnsr(vo.getEntrprsMberPasswordCnsr()); //기업 회원 비밀번호 정답 + crudVO.setGroup_id (vo.getGroupId()); //그룹 id + crudVO.setDetail_adres (vo.getDetailAdres()); //상세 주소 + crudVO.setEntrprs_end_telno (vo.getEntrprsEndTelno()); //기업 끝 전화번호 + crudVO.setArea_no (vo.getAreaNo()); //지역 번호 + crudVO.setApplcnt_email_adres (vo.getApplcntEmailAdres()); //신청자 이메일 주소 + crudVO.setEsntl_id (vo.getUniqId()); //고유 id + + return crudVO; + } + + + /** + *
메소드 설명: 사용자정보 수정 권한 여부 확인
+	 * 	-보안성 강화를 위해 다음 조건을 충족 하도록 한다.
+	 * 	 :"ROLE_ADMIN 권한"의 사용자는 모든 사용자의 정보 수정이 가능해야 한다.
+	 * 	 :"ROLE_ADMIN 권한"의 사용자정보는 같은 "ROLE_ADMIN 권한"의 사용자만 수정이 가능해야 한다.
+	 * 	 :타인의 정보는 "ROLE_ADMIN 권한" 또는 "사용자관리권한"이 부여된 사용자만 수정이 가능해야 한다.
+	 * 
+ * @param uniqId 고유ID + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 6. 9. + */ + private boolean isUserModifyAuth(String uniqId) { + + XitLoginVO loginVO = XitCmmnUtil.getUserInfo(); + + + //본인정보인 경우 + if(loginVO.getUniqId().equals(uniqId)) { + return true; + } + //본인정보가 아닌 경우 + else { + /** + * 필수조회 + */ + //사용자(수정대상) 권한 조회 + String trgetAuthorCode = null; + XitUserScrtySetupVO vo = new XitUserScrtySetupVO(); + vo.setScrty_setup_trget_id(uniqId); + vo = xitFrameCrudService.findXitUserScrtySetup(vo); + trgetAuthorCode = vo.getAuthor_code(); + //사용자(수정자) 권한 조회 + String userAuthorCode = null; + vo = new XitUserScrtySetupVO(); + vo.setScrty_setup_trget_id(loginVO.getUniqId()); + vo = xitFrameCrudService.findXitUserScrtySetup(vo); + userAuthorCode = vo.getAuthor_code(); + + + /** + * 유효성 확인 + */ + //사용자(수정자)가 ROLE_ADMIN 권한의 사용자인 경우 + if("ROLE_ADMIN".equals(userAuthorCode)) { + return true; + }else { + //사용자(수정대상)가 ROLE_ADMIN 권한의 사용자인 경우 + if("ROLE_ADMIN".equals(trgetAuthorCode)) { + return false; + } + //사용자관리권한별 분기 + XitUserInfoVO trgetUserInfoVO = new XitUserInfoVO(); + trgetUserInfoVO.setEsntl_id(uniqId); + trgetUserInfoVO = xitFrameCrudService.findXitUserInfos(trgetUserInfoVO).get(0); //사용자(수정대상) 정보 조회 + XitUserInfoVO loginUserInfoVO = new XitUserInfoVO(); + loginUserInfoVO.setEsntl_id(uniqId); + loginUserInfoVO = xitFrameCrudService.findXitUserInfos(loginUserInfoVO).get(0); //사용자(수정자) 정보 조회 + switch(loginVO.getUserManageAuthor()) { + case "ALL": //모든 사용자 + return true; + case "DEPT": //자신이 속한 부서의 모든 사용자 + if(loginUserInfoVO.getPstinst_code().equals(trgetUserInfoVO.getPstinst_code())) + return true; + break; +// case "ONESELF": //본인정보만 +// return true; + case "ORGNZT": //자신이 속한 조직의 모든 사용자 + if(loginVO.getOrgnztId().equals(trgetUserInfoVO.getOrgnzt_id())) + return true; + break; +// case "ORGNZT_N_CHILD": //자신이 속한 조직의 모든 하위 조직 사용자(ex: 종로구청이 담당하는 조직) +// return true; + default: + return false; + } + } + + + + return false; + + } + + + + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitGnrUserRegMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitGnrUserRegMngServiceImpl.java new file mode 100644 index 00000000..0b987b7e --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitGnrUserRegMngServiceImpl.java @@ -0,0 +1,377 @@ +package kr.xit.framework.biz.mng.user.reg.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.user.reg.dao.XitGnrUserRegMngMapper; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.service.XitGnrUserRegMngService; +import kr.xit.framework.biz.mng.user.reg.service.XitUserRegMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitScrtyUtil; + +@Service +public class XitGnrUserRegMngServiceImpl implements XitGnrUserRegMngService{ + private static final Logger logger = LoggerFactory.getLogger(XitGnrUserRegMngServiceImpl.class); + + @Resource + private XitGnrUserRegMngMapper xitGnrUserRegMngMapper; + @Resource + private XitUserRegMngService xitUserRegMngService; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name="xitUsrEsntlIdGnrService") + private EgovIdGnrService idgenService; + + @Override + public List findList(XitGnrUserRegMngSearchVO searchVO) { + List result = null; + try { + result = xitGnrUserRegMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("일반사용자등록관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitGnrUserRegMngSearchVO searchVO) { + int result = 0; + try { + result = xitGnrUserRegMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("일반사용자등록관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitGnrUserRegMngVO findView(XitGnrUserRegMngVO vo) { + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(vo.getUniqId())) + throw new RuntimeException("대상에 대한 열람 권한이 없습니다."); + + XitGnrUserRegMngVO result = null; + try { + result = xitGnrUserRegMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("일반사용자등록관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitGnrUserRegMngVO vo) { + /** + * 필수값 설정 + */ + String esntlId = null; + try { + esntlId = idgenService.getNextStringId(); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setUniqId(esntlId); //고유식별키 + XitGnrlMberVO crudVO = this.convertToCrudVO(vo); + //그룹의 기본권한 조회 및 설정 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(crudVO.getEsntl_id()); + userScrtySetupVO.setMber_ty_code("USR01"); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(crudVO.getGroup_id()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + + /** + * 처리 + */ + //일반회원정보 등록 + xitFrameCrudService.addXitGnrlMber(crudVO); + //사용자의 권한 등록 + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + + } + + @Override + public void modifyProc(XitGnrUserRegMngVO vo) { + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(vo.getUniqId())) + throw new RuntimeException("대상에 대한 수정 권한이 없습니다."); + + /** + * 필수값 설정 + */ + XitGnrlMberVO crudVO = convertToCrudVO(vo); + crudVO.setPassword(null); + boolean isChangedGroupId = false; //그룹ID 변경 여부 + XitGnrlMberVO curUserInfo = xitFrameCrudService.findXitGnrlMber(crudVO); + if(!crudVO.getGroup_id().equals(curUserInfo.getGroup_id())) + isChangedGroupId = true; + /* ======================================= + * 2020.11.16. 박민규 + * 고유식별자 수정 방지 + * -사유: esntl_id의 경우 회원의 고유식별자이므로 변경 되어선 안됨. + * -작업내용: crudVO.setEsntl_id(null) 코드 추가 + ======================================= */ + String uniqId = crudVO.getEsntl_id(); + crudVO.setEsntl_id(null); + /* ======================================= + * 2020.11.16. 박민규 + * 고유식별자 확인 코드 추가 + * -사유: parameter 조작(CSRF)에 대한 방어 코드 + * -작업내용: 현재 사용자정보와 요청값 확인코드 추가 + * -> if(!curUserInfo.getEsntl_id().equals(uniqId)) + ======================================= */ + if(!curUserInfo.getEsntl_id().equals(uniqId)) + throw new RuntimeException("사용자 고유식별값이 일치하지 않습니다."); + + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitGnrlMber(crudVO); + if(isChangedGroupId) { //그룹ID가 변경되었을 경우 + //그룹의 기본권한 조회 및 설정 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(uniqId); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(crudVO.getGroup_id()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + //사용자의 권한 갱신 + if(XitCmmnUtil.isEmpty(xitFrameCrudService.findXitUserScrtySetup(userScrtySetupVO))) { + userScrtySetupVO.setMber_ty_code("USR01"); + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + }else { + xitFrameCrudService.modifyXitUserScrtySetup(userScrtySetupVO); + } + } + } + + @Override + public void modifyPwdProc(String uniqId, String id, String oldPassword, String newPassword, String newPassword2) { + + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(uniqId)) + throw new RuntimeException("대상에 대한 수정 권한이 없습니다."); + XitGnrUserRegMngVO vo = new XitGnrUserRegMngVO(); + vo.setUniqId(uniqId); + vo = this.findView(vo); + String encryptPass = null; + String encryptNewPass = null; + try { + encryptPass = XitScrtyUtil.encryptPassword(oldPassword, id); + encryptNewPass = XitScrtyUtil.encryptPassword(newPassword, id); + } catch (Exception e) { + throw new RuntimeException(String.format("비밀번호 암호화 실패:: %s", e.getMessage())); + } + //비밀번호 동일 여부 + if (vo.getPassword().equals(encryptPass)) { + //신 비밀번호/비밀번호 확인 동일 여부 + if (!newPassword.equals(newPassword2)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.user.passwordUpdate2")); + } + } else { + throw new RuntimeException(xitMessageSource.getMessage("fail.user.passwordUpdate1")); + } + + + /** + * 필수값 설정 + */ + XitGnrlMberVO crudVO = new XitGnrlMberVO(); + crudVO.setMber_id(id); + crudVO.setPassword(encryptNewPass); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitGnrlMber(crudVO); + + } + + @Override + public void removeProc(String id) { + xitUserRegMngService.removeProc(id); + } + + @Override + public void removesProc(String userIds) { + + /** + * 유효성 확인 + */ + String [] delId = userIds.split(","); + if (delId == null || (delId.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete")); + } + + /** + * 처리 + */ + String [] arrUserId = userIds.split(","); + for (int i=0; i메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * @return XitGnrlMberVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private XitGnrlMberVO convertToCrudVO(XitGnrUserRegMngVO vo) { + String password = null; + try { + password = XitScrtyUtil.encryptPassword(vo.getPassword(), vo.getMberId()); + } catch (Exception e) { + throw new RuntimeException(String.format("비밀번호 암호화 실패:: %s", e.getMessage())); + } + + + XitGnrlMberVO crudVO = new XitGnrlMberVO(); + crudVO.setMber_id (vo.getMberId()); //회원 id + crudVO.setPassword (password); //비밀번호 + crudVO.setPassword_hint (vo.getPasswordHint()); //비밀번호 힌트 + crudVO.setPassword_cnsr (vo.getPasswordCnsr()); //비밀번호 정답 + crudVO.setIhidnum (vo.getIhidnum()); //주민등록번호 + crudVO.setMber_nm (vo.getMberNm()); //회원 명 + crudVO.setZip (vo.getZip()); //우편번호 + crudVO.setAdres (vo.getAdres()); //주소 + crudVO.setArea_no (vo.getAreaNo()); //지역 번호 + crudVO.setMber_sttus (vo.getMberSttus()); //회원 상태 + crudVO.setDetail_adres (vo.getDetailAdres()); //상세 주소 + crudVO.setEnd_telno (vo.getEndTelno()); //끝 전화번호 + crudVO.setMbtlnum (vo.getMoblphonNo()); //이동전화번호 + crudVO.setGroup_id (vo.getGroupId()); //그룹 id + crudVO.setMber_fxnum (vo.getMberFxnum()); //회원 팩스번호 + crudVO.setMber_email_adres (vo.getMberEmailAdres()); //회원 이메일 주소 + crudVO.setMiddle_telno (vo.getMiddleTelno()); //중간 전화번호 + crudVO.setSbscrb_de (vo.getSbscrbDe()); //가입 일자 + crudVO.setSexdstn_code (vo.getSexdstnCode()); //성별 코드 + crudVO.setEsntl_id (vo.getUniqId()); //고유 id + + return crudVO; + } + + + /** + *
메소드 설명: 사용자정보 수정 권한 여부 확인
+	 * 	-보안성 강화를 위해 다음 조건을 충족 하도록 한다.
+	 * 	 :"ROLE_ADMIN 권한"의 사용자는 모든 사용자의 정보 수정이 가능해야 한다.
+	 * 	 :"ROLE_ADMIN 권한"의 사용자정보는 같은 "ROLE_ADMIN 권한"의 사용자만 수정이 가능해야 한다.
+	 * 	 :타인의 정보는 "ROLE_ADMIN 권한" 또는 "사용자관리권한"이 부여된 사용자만 수정이 가능해야 한다.
+	 * 
+ * @param uniqId 고유ID + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 6. 9. + */ + private boolean isUserModifyAuth(String uniqId) { + + XitLoginVO loginVO = XitCmmnUtil.getUserInfo(); + + + //본인정보인 경우 + if(loginVO.getUniqId().equals(uniqId)) { + return true; + } + //본인정보가 아닌 경우 + else { + /** + * 필수조회 + */ + //사용자(수정대상) 권한 조회 + String trgetAuthorCode = null; + XitUserScrtySetupVO vo = new XitUserScrtySetupVO(); + vo.setScrty_setup_trget_id(uniqId); + vo = xitFrameCrudService.findXitUserScrtySetup(vo); + trgetAuthorCode = vo.getAuthor_code(); + //사용자(수정자) 권한 조회 + String userAuthorCode = null; + vo = new XitUserScrtySetupVO(); + vo.setScrty_setup_trget_id(loginVO.getUniqId()); + vo = xitFrameCrudService.findXitUserScrtySetup(vo); + userAuthorCode = vo.getAuthor_code(); + + + /** + * 유효성 확인 + */ + //사용자(수정자)가 ROLE_ADMIN 권한의 사용자인 경우 + if("ROLE_ADMIN".equals(userAuthorCode)) { + return true; + }else { + //사용자(수정대상)가 ROLE_ADMIN 권한의 사용자인 경우 + if("ROLE_ADMIN".equals(trgetAuthorCode)) { + return false; + } + //사용자관리권한별 분기 + XitUserInfoVO trgetUserInfoVO = new XitUserInfoVO(); + trgetUserInfoVO.setEsntl_id(uniqId); + trgetUserInfoVO = xitFrameCrudService.findXitUserInfos(trgetUserInfoVO).get(0); //사용자(수정대상) 정보 조회 + XitUserInfoVO loginUserInfoVO = new XitUserInfoVO(); + loginUserInfoVO.setEsntl_id(uniqId); + loginUserInfoVO = xitFrameCrudService.findXitUserInfos(loginUserInfoVO).get(0); //사용자(수정자) 정보 조회 + switch(loginVO.getUserManageAuthor()) { + case "ALL": //모든 사용자 + return true; + case "DEPT": //자신이 속한 부서의 모든 사용자 + if(loginUserInfoVO.getPstinst_code().equals(trgetUserInfoVO.getPstinst_code())) + return true; + break; +// case "ONESELF": //본인정보만 +// return true; + case "ORGNZT": //자신이 속한 조직의 모든 사용자 + if(loginVO.getOrgnztId().equals(trgetUserInfoVO.getOrgnzt_id())) + return true; + break; +// case "ORGNZT_N_CHILD": //자신이 속한 조직의 모든 하위 조직 사용자(ex: 종로구청이 담당하는 조직) +// return true; + default: + return false; + } + } + + + + return false; + + } + + + + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitUserRegMngServiceImpl.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitUserRegMngServiceImpl.java new file mode 100644 index 00000000..9fbbc0fb --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/service/impl/XitUserRegMngServiceImpl.java @@ -0,0 +1,485 @@ +package kr.xit.framework.biz.mng.user.reg.service.impl; + +import java.sql.SQLException; +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import kr.xit.framework.biz.cmm.model.XitEntrprsMberVO; +import kr.xit.framework.biz.cmm.model.XitGnrlMberVO; +import kr.xit.framework.biz.cmm.model.XitUserEtcOptionVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoChangeDtlsVO; +import kr.xit.framework.biz.cmm.model.XitUserInfoVO; +import kr.xit.framework.biz.cmm.model.XitUserScrtySetupVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.biz.mng.user.reg.dao.XitUserRegMngMapper; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.service.XitUserRegMngService; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.utils.XitScrtyUtil; + +@Service +public class XitUserRegMngServiceImpl implements XitUserRegMngService { + private static final Logger logger = LoggerFactory.getLogger(XitUserRegMngServiceImpl.class); + + @Resource + private XitUserRegMngMapper xitUserRegMngMapper; + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitMessageSource xitMessageSource; + @Resource(name="xitUsrEsntlIdGnrService") + private EgovIdGnrService idgenService; + + @Override + public List findList(XitUserRegMngSearchVO searchVO) { + List result = null; + try { + result = xitUserRegMngMapper.findList(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자등록관리 목록 조회 FAIL::", e); + } + return result; + } + + @Override + public int findListTotCnt(XitUserRegMngSearchVO searchVO) { + int result = 0; + try { + result = xitUserRegMngMapper.findListTotCnt(searchVO); + } catch (SQLException e) { + throw new RuntimeException("사용자등록관리 목록 총건수 조회 FAIL::", e); + } + return result; + } + + @Override + public XitUserRegMngVO findView(XitUserRegMngVO vo) { + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(vo.getUniqId())) + throw new RuntimeException("대상에 대한 열람 권한이 없습니다."); + + XitUserRegMngVO result = null; + try { + result = xitUserRegMngMapper.findView(vo); + } catch (SQLException e) { + throw new RuntimeException("사용자등록관리 상세정보 조회 FAIL::", e); + } + return result; + } + + @Override + public void addProc(XitUserRegMngVO vo) { + /** + * 필수값 설정 + */ + String esntlId = null; + try { + esntlId = idgenService.getNextStringId(); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setUniqId(esntlId); //고유식별키 + XitUserInfoVO userInfoVO = convertToCrudVO(vo); + //그룹의 기본권한 조회 및 설정 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(userInfoVO.getEsntl_id()); + userScrtySetupVO.setMber_ty_code("USR03"); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(userInfoVO.getGroup_id()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + //사용자 기타옵션 기본값 설정 + XitUserEtcOptionVO userEtcOptionVO = new XitUserEtcOptionVO(); + userEtcOptionVO.setUser_id(userInfoVO.getUser_id()); + userEtcOptionVO.setJob_data_author("ONESELF"); //업무 데이터 권한 + userEtcOptionVO.setUser_manage_author("ONESELF"); //사용자 관리 권한 + + /** + * 처리 + */ + //사용자정보 등록 + xitFrameCrudService.addXitUserInfo(userInfoVO); + //사용자의 권한 등록 + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + //사용자 기타 옵션 관리 + xitFrameCrudService.addXitUserEtcOption(userEtcOptionVO); + + } + + @Override + public void modifyProc(XitUserRegMngVO vo) { + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(vo.getUniqId())) + throw new RuntimeException("대상에 대한 수정 권한이 없습니다."); + + /** + * 필수값 설정 + */ + XitUserInfoChangeDtlsVO userInfoChangeDtlsVO = convertToCrudHistVO(vo); + XitUserInfoVO crudVO = convertToCrudVO(vo); + crudVO.setPassword(null); + boolean isChangedGroupId = false; //그룹ID 변경 여부 + XitUserInfoVO curUserInfo = xitFrameCrudService.findXitUserInfo(crudVO); + if(!crudVO.getGroup_id().equals(curUserInfo.getGroup_id())) + isChangedGroupId = true; + /* ======================================= + * 2020.11.16. 박민규 + * 고유식별자 수정 방지 + * -사유: esntl_id의 경우 회원의 고유식별자이므로 변경 되어선 안됨. + * -작업내용: crudVO.setEsntl_id(null) 코드 추가 + ======================================= */ + String uniqId = crudVO.getEsntl_id(); + crudVO.setEsntl_id(null); + /* ======================================= + * 2020.11.16. 박민규 + * 고유식별자 확인 코드 추가 + * -사유: parameter 조작(CSRF)에 대한 방어 코드 + * -작업내용: 현재 사용자정보와 요청값 확인코드 추가 + * -> if(!curUserInfo.getEsntl_id().equals(uniqId)) + ======================================= */ + if(!curUserInfo.getEsntl_id().equals(uniqId)) + throw new RuntimeException("사용자 고유식별값이 일치하지 않습니다."); + + + + + /** + * 처리 + */ + xitFrameCrudService.addXitUserInfoChangeDtls(userInfoChangeDtlsVO); + xitFrameCrudService.modifyXitUserInfo(crudVO); + if(isChangedGroupId) { //그룹ID가 변경되었을 경우 + //그룹의 기본권한 조회 및 설정 + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(uniqId); + String defaultAuthorCode = xitFrameUnitService.getDefaultAuthorCode(crudVO.getGroup_id()); + userScrtySetupVO.setAuthor_code(defaultAuthorCode); + //사용자의 권한 갱신 + if(XitCmmnUtil.isEmpty(xitFrameCrudService.findXitUserScrtySetup(userScrtySetupVO))) { + userScrtySetupVO.setMber_ty_code("USR03"); + xitFrameCrudService.addXitUserScrtySetup(userScrtySetupVO); + }else { + xitFrameCrudService.modifyXitUserScrtySetup(userScrtySetupVO); + } + } + } + + @Override + public void modifyPwdProc(String uniqId, String id, String oldPassword, String newPassword, String newPassword2) { + + /** + * 유효성 확인 + */ + if(!this.isUserModifyAuth(uniqId)) + throw new RuntimeException("대상에 대한 수정 권한이 없습니다."); + XitUserRegMngVO vo = new XitUserRegMngVO(); + vo.setUniqId(uniqId); + vo = this.findView(vo); + String encryptPass = null; + String encryptNewPass = null; + try { + encryptPass = XitScrtyUtil.encryptPassword(oldPassword, id); + encryptNewPass = XitScrtyUtil.encryptPassword(newPassword, id); + } catch (Exception e) { + throw new RuntimeException(String.format("비밀번호 암호화 실패:: %s", e.getMessage())); + } + //비밀번호 동일 여부 + if (vo.getPassword().equals(encryptPass)) { + //신 비밀번호/비밀번호 확인 동일 여부 + if (!newPassword.equals(newPassword2)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.user.passwordUpdate2")); + } + } else { + throw new RuntimeException(xitMessageSource.getMessage("fail.user.passwordUpdate1")); + } + + + /** + * 필수값 설정 + */ + XitUserInfoVO xitUserInfoVO = new XitUserInfoVO(); + xitUserInfoVO.setUser_id(id); + xitUserInfoVO.setPassword(encryptNewPass); + + + /** + * 처리 + */ + xitFrameCrudService.modifyXitUserInfo(xitUserInfoVO); + + } + + @Override + public void removeProc(String id) { + String [] items = id.split(":"); + + /** + * 필수값 확인 + */ + if(items.length<2) + throw new RuntimeException(String.format("%s %s" + , xitMessageSource.getMessage("fail.common.delete") + , "식별값이 유효하지 않습니다.") + ); + + + /** + * 필수값 설정 + */ + String userTy = items[0]; + String userId = items[1]; + + /** + * 처리 + */ + if (userTy.equals("USR03")){ //업무사용자 삭제 + //필수값 설정 + XitUserInfoVO xitUserInfoVO = new XitUserInfoVO(); + xitUserInfoVO.setUser_id(userId); + + //사용자보안설정 삭제 + try { + XitUserScrtySetupVO userScrtySetupVO = new XitUserScrtySetupVO(); + userScrtySetupVO.setScrty_setup_trget_id(xitFrameCrudService.findXitUserInfo(xitUserInfoVO).getEsntl_id()); + if(XitCmmnUtil.notEmpty(xitFrameCrudService.findXitUserScrtySetup(userScrtySetupVO))) + xitFrameCrudService.removeXitUserScrtySetup(userScrtySetupVO); + } catch (Exception e) { + logger.debug(e.getMessage()); + } + //사용자정보변경내역 전체 삭제 + XitUserInfoChangeDtlsVO xitUserInfoChangeDtlsVO = new XitUserInfoChangeDtlsVO(); + xitUserInfoChangeDtlsVO.setUser_id(userId); + xitFrameCrudService.removeXitUserInfoChangeDtlss(xitUserInfoChangeDtlsVO); + //업무사용자(직원)삭제 + xitFrameCrudService.removeXitUserInfo(xitUserInfoVO); + + }else if(userTy.equals("USR01")){ //일반회원 삭제 + //필수값 설정 + XitGnrlMberVO gnrlMberVO = new XitGnrlMberVO(); + gnrlMberVO.setMber_id(userId); + + //일반회원 삭제 + xitFrameCrudService.removeXitGnrlMber(gnrlMberVO); + + }else if(userTy.equals("USR02")){ //기업회원 삭제 + //필수값 설정 + XitEntrprsMberVO entrprsMberVO = new XitEntrprsMberVO(); + entrprsMberVO.setEntrprs_mber_id(userId); + + //기업회원 삭제 + xitFrameCrudService.removeXitEntrprsMber(entrprsMberVO); + } + + + } + + @Override + public void removesProc(String userIds) { + + /** + * 유효성 확인 + */ + String [] delId = userIds.split(","); + if (delId == null || (delId.length == 0)) { + throw new RuntimeException(xitMessageSource.getMessage("fail.common.delete")); + } + + /** + * 처리 + */ + String [] arrUserId = userIds.split(","); + for (int i=0; i메소드 설명: 메뉴VO를 CRUD Service의 VO로 변환 한다. + * @return XitUserInfoVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 27. + */ + private XitUserInfoVO convertToCrudVO(XitUserRegMngVO vo) { + String password = null; + try { + password = XitScrtyUtil.encryptPassword(vo.getPassword(), vo.getEmplyrId()); + } catch (Exception e) { + throw new RuntimeException(String.format("비밀번호 암호화 실패:: %s", e.getMessage())); + } + + + XitUserInfoVO userInfoVO = new XitUserInfoVO(); + userInfoVO.setUser_id (vo.getEmplyrId()); //사용자 id + userInfoVO.setOrgnzt_id (vo.getOrgnztId()); //조직 id + userInfoVO.setUser_nm (vo.getEmplyrNm()); //사용자 명 + userInfoVO.setPassword (password); //비밀번호 + userInfoVO.setEmpl_no (vo.getEmplNo()); //사원 번호 + userInfoVO.setIhidnum (vo.getIhidnum()); //주민등록번호 + userInfoVO.setSexdstn_code (vo.getSexdstnCode()); //성별 코드 + userInfoVO.setBrthdy (vo.getBrth()); //생일 + userInfoVO.setFxnum (vo.getFxnum()); //팩스번호 + userInfoVO.setHouse_adres (vo.getHomeadres()); //주택 주소 + userInfoVO.setPassword_hint (vo.getPasswordHint()); //비밀번호 힌트 + userInfoVO.setPassword_cnsr (vo.getPasswordCnsr()); //비밀번호 정답 + userInfoVO.setHouse_end_telno (vo.getHomeendTelno()); //주택 끝 전화번호 + userInfoVO.setArea_no (vo.getAreaNo()); //지역 번호 + userInfoVO.setDetail_adres (vo.getDetailAdres()); //상세 주소 + userInfoVO.setZip (vo.getZip()); //우편번호 + userInfoVO.setOffm_telno (vo.getOffmTelno()); //사무실 전화번호 + userInfoVO.setMbtlnum (vo.getMoblphonNo()); //이동전화번호 + userInfoVO.setEmail_adres (vo.getEmailAdres()); //이메일 주소 + userInfoVO.setOfcps_nm (vo.getOfcpsNm()); //직위 명 + userInfoVO.setHouse_middle_telno (vo.getHomemiddleTelno()); //주택 중간 전화번호 + userInfoVO.setGroup_id (vo.getGroupId()); //그룹 id + userInfoVO.setPstinst_code (vo.getInsttCode()); //소속기관 코드 + userInfoVO.setUser_sttus_code (vo.getEmplyrSttusCode()); //사용자 상태 코드 + userInfoVO.setEsntl_id (vo.getUniqId()); //고유 id + userInfoVO.setCrtfc_dn_value (vo.getSubDn()); //인증 dn 값 + userInfoVO.setSbscrb_de (vo.getSbscrbDe()); //가입 일 + + return userInfoVO; + } + /** + *
메소드 설명: 메뉴VO를 CRUD Service의 이력VO로 변환 한다
+ * @param vo + * @return XitUserInfoChangeDtlsVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 9. + */ + private XitUserInfoChangeDtlsVO convertToCrudHistVO(XitUserRegMngVO vo) { + XitUserInfoChangeDtlsVO userInfoChangeDtlsVO = new XitUserInfoChangeDtlsVO(); + userInfoChangeDtlsVO.setUser_id (vo.getEmplyrId()); //사용자 id +// userInfoChangeDtlsVO.setChange_de (vo.get); //변경 일 + userInfoChangeDtlsVO.setOrgnzt_id (vo.getOrgnztId()); //조직 id + userInfoChangeDtlsVO.setGroup_id (vo.getGroupId()); //그룹 id + userInfoChangeDtlsVO.setEmpl_no (vo.getEmplNo()); //사원 번호 + userInfoChangeDtlsVO.setSexdstn_code (vo.getSexdstnCode()); //성별 코드 + userInfoChangeDtlsVO.setBrthdy (vo.getBrth()); //생일 + userInfoChangeDtlsVO.setFxnum (vo.getFxnum()); //팩스번호 + userInfoChangeDtlsVO.setHouse_adres (vo.getHomeadres()); //주택 주소 + userInfoChangeDtlsVO.setHouse_end_telno (vo.getHomeendTelno()); //주택 끝 전화번호 + userInfoChangeDtlsVO.setArea_no (vo.getAreaNo()); //지역 번호 + userInfoChangeDtlsVO.setDetail_adres (vo.getDetailAdres()); //상세 주소 + userInfoChangeDtlsVO.setZip (vo.getZip()); //우편번호 + userInfoChangeDtlsVO.setOffm_telno (vo.getOffmTelno()); //사무실 전화번호 + userInfoChangeDtlsVO.setMbtlnum (vo.getMoblphonNo()); //이동전화번호 + userInfoChangeDtlsVO.setEmail_adres (vo.getEmailAdres()); //이메일 주소 + userInfoChangeDtlsVO.setHouse_middle_telno(vo.getHomemiddleTelno()); //주택 중간 전화번호 + userInfoChangeDtlsVO.setPstinst_code (vo.getInsttCode()); //소속기관 코드 + userInfoChangeDtlsVO.setUser_sttus_code (vo.getEmplyrSttusCode()); //사용자 상태 코드 + userInfoChangeDtlsVO.setEsntl_id (vo.getUniqId()); //고유 id + + return userInfoChangeDtlsVO; + } + + + /** + *
메소드 설명: 사용자정보 수정 권한 여부 확인
+	 * 	-보안성 강화를 위해 다음 조건을 충족 하도록 한다.
+	 * 	 :"ROLE_ADMIN 권한"의 사용자는 모든 사용자의 정보 수정이 가능해야 한다.
+	 * 	 :"ROLE_ADMIN 권한"의 사용자정보는 같은 "ROLE_ADMIN 권한"의 사용자만 수정이 가능해야 한다.
+	 * 	 :타인의 정보는 "ROLE_ADMIN 권한" 또는 "사용자관리권한"이 부여된 사용자만 수정이 가능해야 한다.
+	 * 
+ * @param uniqId 고유ID + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 6. 9. + */ + private boolean isUserModifyAuth(String uniqId) { + + XitLoginVO loginVO = XitCmmnUtil.getUserInfo(); + + + //본인정보인 경우 + if(loginVO.getUniqId().equals(uniqId)) { + return true; + } + //본인정보가 아닌 경우 + else { + /** + * 필수조회 + */ + //사용자(수정대상) 권한 조회 + String trgetAuthorCode = null; + XitUserScrtySetupVO vo = new XitUserScrtySetupVO(); + vo.setScrty_setup_trget_id(uniqId); + vo = xitFrameCrudService.findXitUserScrtySetup(vo); + trgetAuthorCode = vo.getAuthor_code(); + //사용자(수정자) 권한 조회 + String userAuthorCode = null; + vo = new XitUserScrtySetupVO(); + vo.setScrty_setup_trget_id(loginVO.getUniqId()); + vo = xitFrameCrudService.findXitUserScrtySetup(vo); + userAuthorCode = vo.getAuthor_code(); + + + /** + * 유효성 확인 + */ + //사용자(수정자)가 ROLE_ADMIN 권한의 사용자인 경우 + if("ROLE_ADMIN".equals(userAuthorCode)) { + return true; + }else { + //사용자(수정대상)가 ROLE_ADMIN 권한의 사용자인 경우 + if("ROLE_ADMIN".equals(trgetAuthorCode)) { + return false; + } + //사용자관리권한별 분기 + XitUserInfoVO trgetUserInfoVO = new XitUserInfoVO(); + trgetUserInfoVO.setEsntl_id(uniqId); + trgetUserInfoVO = xitFrameCrudService.findXitUserInfos(trgetUserInfoVO).get(0); //사용자(수정대상) 정보 조회 + XitUserInfoVO loginUserInfoVO = new XitUserInfoVO(); + loginUserInfoVO.setEsntl_id(uniqId); + loginUserInfoVO = xitFrameCrudService.findXitUserInfos(loginUserInfoVO).get(0); //사용자(수정자) 정보 조회 + switch(loginVO.getUserManageAuthor()) { + case "ALL": //모든 사용자 + return true; + case "DEPT": //자신이 속한 부서의 모든 사용자 + if(loginUserInfoVO.getPstinst_code().equals(trgetUserInfoVO.getPstinst_code())) + return true; + break; +// case "ONESELF": //본인정보만 +// return true; + case "ORGNZT": //자신이 속한 조직의 모든 사용자 + if(loginVO.getOrgnztId().equals(trgetUserInfoVO.getOrgnzt_id())) + return true; + break; +// case "ORGNZT_N_CHILD": //자신이 속한 조직의 모든 하위 조직 사용자(ex: 종로구청이 담당하는 조직) +// return true; + default: + return false; + } + } + + + + return false; + + } + + + + } + + + + +} diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitEntUserRegMngController.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitEntUserRegMngController.java new file mode 100644 index 00000000..24e1a500 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitEntUserRegMngController.java @@ -0,0 +1,404 @@ +package kr.xit.framework.biz.mng.user.reg.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +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.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitEntUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.service.XitEntUserRegMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 기업사용자등록관리 Controller + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:32:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/usr/reg/") +public class XitEntUserRegMngController { + + private static final Logger logger = LoggerFactory.getLogger(XitEntUserRegMngController.class); + + @Resource + private XitEntUserRegMngService xitEntUserRegMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + @Resource + private XitFrameCodeService xitFrameCodeService; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + + /** + *
메소드 설명: 기업사용자등록관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "EntUserRegMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String EntUserRegMng_list(@ModelAttribute("userSearchVO") XitEntUserRegMngSearchVO searchVO, ModelMap model) { + + // 내역 조회 + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + model.addAttribute("resultList", xitEntUserRegMngService.findList(searchVO)); + + int totCnt = xitEntUserRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + //사용자상태코드를 코드정보로부터 조회 + model.addAttribute("entrprsMberSttus_result", xitFrameCodeService.findCmmnDetailCodes("XIT013"));//사용자상태코드목록 + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitEntUserRegMng_list"; + } + /** + *
메소드 설명: 기업사용자등록관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 7. 29. + */ + @RequestMapping(value = "EntUserRegMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map EntUserRegMng_listAjax(HttpServletRequest req, @ModelAttribute("userSearchVO") XitEntUserRegMngSearchVO searchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitEntUserRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitEntUserRegMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "EntUserRegMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String EntUserRegMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("userSearchVO") XitEntUserRegMngSearchVO searchVO + , @ModelAttribute("entrprsManageVO") XitEntUserRegMngVO vo + , @RequestParam(value="selectedId", required=false, defaultValue="") String uniqId + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + , ModelMap model + , HttpServletRequest request) { + switch (cmd) { + case "input": //등록 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("entrprsMberSttus_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("entrprsSeCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT026")); //기업구분코드 목록 + model.addAttribute("indutyCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT027")); //업종코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + break; + case "view": //수정 페이지 + case "edit": //상세 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("entrprsMberSttus_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("entrprsSeCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT026")); //기업구분코드 목록 + model.addAttribute("indutyCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT027")); //업종코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + if(XitCmmnUtil.notEmpty(uniqId)) + vo.setUniqId(uniqId); + + XitEntUserRegMngVO xitEntUserRegMngVO = xitEntUserRegMngService.findView(vo); + model.addAttribute("entrprsManageVO", xitEntUserRegMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitEntUserRegMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "EntUserRegMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String EntUserRegMng_page_popup( + @PathVariable String cmd + , @ModelAttribute("userSearchVO") XitEntUserRegMngSearchVO searchVO + , @ModelAttribute("entrprsManageVO") XitEntUserRegMngVO vo + , ModelMap model + , @RequestParam(value="selectedId", required=false, defaultValue="") String uniqId + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + ) { + + switch (cmd) { + case "editPwd": //수정(비밀번호) 페이지 + vo.setUserTy(userTyForPassword); + model.addAttribute("entrprsManageVO", vo); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitEntUserRegMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 기업사용자등록관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "EntUserRegMng_{cmd}_proc.do", method=RequestMethod.POST) + public void EntUserRegMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("entrprsManageVO") XitEntUserRegMngVO vo + ,@RequestParam(value="checkedIdForDel", required=false, defaultValue="") String checkedIdForDel + ,@RequestParam(value="isViewPage", required=false, defaultValue="N") String isViewPage + ,@RequestParam Map commandMap + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/usr/reg/EntUserRegMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("entrprsManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/reg/EntUserRegMng_input.do"; + break; + } + //처리 + try { + xitEntUserRegMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/usr/reg/EntUserRegMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/reg/EntUserRegMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("entrprsManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + break; + } + //처리 + try { + xitEntUserRegMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } + break; + + case "update_pwd": //수정(비밀번호) + String oldPassword = (String) commandMap.get("oldPassword"); + String newPassword = (String) commandMap.get("newPassword"); + String newPassword2 = (String) commandMap.get("newPassword2"); + String uniqId = (String) commandMap.get("uniqId"); + + try { + xitEntUserRegMngService.modifyPwdProc(uniqId, vo.getEntrprsmberId(), oldPassword, newPassword, newPassword2); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitEntUserRegMngService.removeProc(checkedIdForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/EntUserRegMng_view.do":"forward:/_mng_/usr/reg/EntUserRegMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitEntUserRegMngService.removesProc(checkedIdForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} + + diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitGnrUserRegMngController.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitGnrUserRegMngController.java new file mode 100644 index 00000000..77024e10 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitGnrUserRegMngController.java @@ -0,0 +1,399 @@ +package kr.xit.framework.biz.mng.user.reg.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +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.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitGnrUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.service.XitGnrUserRegMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 일반사용자등록관리 Controller + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:32:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/usr/reg/") +public class XitGnrUserRegMngController { + + private static final Logger logger = LoggerFactory.getLogger(XitGnrUserRegMngController.class); + + @Resource + private XitGnrUserRegMngService xitGnrUserRegMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + @Resource + private XitFrameCodeService xitFrameCodeService; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + + /** + *
메소드 설명: 일반사용자등록관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "GnrUserRegMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String GnrUserRegMng_list(@ModelAttribute("userSearchVO") XitGnrUserRegMngSearchVO searchVO, ModelMap model) { + + // 내역 조회 + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + model.addAttribute("resultList", xitGnrUserRegMngService.findList(searchVO)); + + int totCnt = xitGnrUserRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + model.addAttribute("mberSttus_result", xitFrameCodeService.findCmmnDetailCodes("XIT013"));//사용자상태코드목록 + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitGnrUserRegMng_list"; + } + /** + *
메소드 설명: 일반사용자등록관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 7. 29. + */ + @RequestMapping(value = "GnrUserRegMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map GnrUserRegMng_listAjax(HttpServletRequest req, @ModelAttribute("userSearchVO") XitGnrUserRegMngSearchVO searchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitGnrUserRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitGnrUserRegMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "GnrUserRegMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String GnrUserRegMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("userSearchVO") XitGnrUserRegMngSearchVO searchVO + , @ModelAttribute("mberManageVO") XitGnrUserRegMngVO vo + , @RequestParam(value="selectedId", required=false, defaultValue="") String uniqId + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + , ModelMap model + , HttpServletRequest request) { + switch (cmd) { + case "input": //등록 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("mberSttus_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + break; + case "view": //수정 페이지 + case "edit": //상세 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("mberSttus_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + if(XitCmmnUtil.notEmpty(uniqId)) + vo.setUniqId(uniqId); + + XitGnrUserRegMngVO xitGnrUserRegMngVO = xitGnrUserRegMngService.findView(vo); + model.addAttribute("mberManageVO", xitGnrUserRegMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitGnrUserRegMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "GnrUserRegMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String GnrUserRegMng_page_popup( + @PathVariable String cmd + , @ModelAttribute("userSearchVO") XitGnrUserRegMngSearchVO searchVO + , @ModelAttribute("mberManageVO") XitGnrUserRegMngVO vo + , ModelMap model + , @RequestParam(value="selectedId", required=false, defaultValue="") String uniqId + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + ) { + + switch (cmd) { + case "editPwd": //수정(비밀번호) 페이지 + vo.setUserTy(userTyForPassword); + model.addAttribute("mberManageVO", vo); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitGnrUserRegMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 일반사용자등록관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "GnrUserRegMng_{cmd}_proc.do", method=RequestMethod.POST) + public void GnrUserRegMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("mberManageVO") XitGnrUserRegMngVO vo + ,@RequestParam(value="checkedIdForDel", required=false, defaultValue="") String checkedIdForDel + ,@RequestParam(value="isViewPage", required=false, defaultValue="N") String isViewPage + ,@RequestParam Map commandMap + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/usr/reg/GnrUserRegMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("mberManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/reg/GnrUserRegMng_input.do"; + break; + } + //처리 + try { + xitGnrUserRegMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/usr/reg/GnrUserRegMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/reg/GnrUserRegMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("mberManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + break; + } + //처리 + try { + xitGnrUserRegMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } + break; + + case "update_pwd": //수정(비밀번호) + String oldPassword = (String) commandMap.get("oldPassword"); + String newPassword = (String) commandMap.get("newPassword"); + String newPassword2 = (String) commandMap.get("newPassword2"); + String uniqId = (String) commandMap.get("uniqId"); + + try { + xitGnrUserRegMngService.modifyPwdProc(uniqId, vo.getMberId(), oldPassword, newPassword, newPassword2); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitGnrUserRegMngService.removeProc(checkedIdForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/GnrUserRegMng_view.do":"forward:/_mng_/usr/reg/GnrUserRegMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitGnrUserRegMngService.removesProc(checkedIdForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} + + diff --git a/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitUserRegMngController.java b/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitUserRegMngController.java new file mode 100644 index 00000000..cc075bcc --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/user/reg/web/XitUserRegMngController.java @@ -0,0 +1,404 @@ +package kr.xit.framework.biz.mng.user.reg.web; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +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.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.cmm.service.XitFrameCodeService; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngSearchVO; +import kr.xit.framework.biz.mng.user.reg.model.XitUserRegMngVO; +import kr.xit.framework.biz.mng.user.reg.service.XitUserRegMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; + +/** + * + * @업무그룹명: 사용자등록관리 Controller + * @설명: + * @최초작성일: 2020. 4. 8. 오후 3:32:51 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +@RequestMapping("/_mng_/usr/reg/") +public class XitUserRegMngController { + + private static final Logger logger = LoggerFactory.getLogger(XitUserRegMngController.class); + + @Resource + private XitUserRegMngService xitUserRegMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + @Resource + private XitFrameCodeService xitFrameCodeService; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + + /** + *
메소드 설명: 사용자등록관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserRegMng_list.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserRegMng_list(@ModelAttribute("userSearchVO") XitUserRegMngSearchVO searchVO, ModelMap model) { + + // 내역 조회 + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + model.addAttribute("resultList", xitUserRegMngService.findList(searchVO)); + + int totCnt = xitUserRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + + //사용자상태코드를 코드정보로부터 조회 + model.addAttribute("emplyrSttusCode_result", xitFrameCodeService.findCmmnDetailCodes("XIT013"));//사용자상태코드목록 + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitUserRegMng_list"; + } + /** + *
메소드 설명: 사용자등록관리 목록 페이지 조회
+ * @return String 요청처리 후 응답객체 + * @author: 최유수 + * @date: 2020. 7. 29. + */ + @RequestMapping(value = "UserRegMng_list.ajax", method={RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public Map UserRegMng_listAjax(HttpServletRequest req, @ModelAttribute("userSearchVO") XitUserRegMngSearchVO searchVO, ModelMap model) throws IOException, SQLException, RuntimeException { + + /** paging */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPage()>-1?searchVO.getPage():searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPerPage()>-1?searchVO.getPerPage():searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + Map resultMap = new HashMap(); + try { + /** + * 조회 + */ + int totCnt = xitUserRegMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + /** + * 반환값 설정 + */ + /* *************************** + * tui Grid Response Set + *************************** */ + resultMap.put("result", true); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("success.common.select")); //[tui Grid] result message + Map data = new HashMap(); + data.put("contents", xitUserRegMngService.findList(searchVO)); //[tui Grid] data-contents + Map pagination = new HashMap(); + pagination.put("page", searchVO.getPage()); + pagination.put("totalCount", totCnt); + data.put("pagination", pagination); //[tui Grid] data-paging + resultMap.put("data", data); //[tui Grid] data + /* *************************** + * //tui Grid Response Set + *************************** */ + } catch (Exception e) { + /** + * 반환값 설정 + */ + //tui Grid Response Set + resultMap.put("result", false); //[tui Grid] result + resultMap.put("message", xitMessageSource.getMessage("fail.common.select")); //[tui Grid] result message + } + + return resultMap; + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param page + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserRegMng_{cmd}.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserRegMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("userSearchVO") XitUserRegMngSearchVO searchVO + , @ModelAttribute("userManageVO") XitUserRegMngVO vo + , @RequestParam(value="selectedId", required=false, defaultValue="") String uniqId + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + , ModelMap model + , HttpServletRequest request) { + switch (cmd) { + case "input": //등록 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("emplyrSttusCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("insttCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT025")); //소속기관코드 목록 + model.addAttribute("orgnztId_result" , xitFrameCodeService.findOrgnztCodes("XIT_ORGNZT_INFO")); //조직정보코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + break; + case "view": //수정 페이지 + case "edit": //상세 페이지 + /*================ + * 코드목록 조회 + ================*/ + model.addAttribute("passwordHint_result" , xitFrameCodeService.findCmmnDetailCodes("XIT022")); //패스워트힌트코드 목록 + model.addAttribute("sexdstnCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT014")); //성별구분코드 목록 + model.addAttribute("emplyrSttusCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT013")); //사용자상태코드 목록 + model.addAttribute("insttCode_result" , xitFrameCodeService.findCmmnDetailCodes("XIT025")); //소속기관코드 목록 + model.addAttribute("orgnztId_result" , xitFrameCodeService.findOrgnztCodes("XIT_ORGNZT_INFO")); //조직정보코드 목록 + model.addAttribute("groupId_result" , xitFrameCodeService.findGroupCodes("XIT_ORGNZT_INFO")); //그룹정보코드 목록 + if(XitCmmnUtil.notEmpty(uniqId)) + vo.setUniqId(uniqId); + + XitUserRegMngVO xitUserRegMngVO = xitUserRegMngService.findView(vo); + model.addAttribute("userManageVO", xitUserRegMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitUserRegMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param page + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserRegMng_{cmd}_popup.do", method={RequestMethod.GET, RequestMethod.POST}) + public String UserRegMng_page_popup( + @PathVariable String cmd + , @ModelAttribute("userSearchVO") XitUserRegMngSearchVO searchVO + , @ModelAttribute("userManageVO") XitUserRegMngVO vo + , ModelMap model + , @RequestParam(value="selectedId", required=false, defaultValue="") String uniqId + , @RequestParam(value="userTyForPassword", required=false, defaultValue="") String userTyForPassword + ) { + + switch (cmd) { + case "editPwd": //수정(비밀번호) 페이지 + vo.setUserTy(userTyForPassword); + model.addAttribute("userManageVO", vo); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/usr/reg/XitUserRegMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 사용자등록관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 4. 8. + */ + @RequestMapping(value = "UserRegMng_{cmd}_proc.do", method=RequestMethod.POST) + public void UserRegMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("userManageVO") XitUserRegMngVO vo + ,@RequestParam(value="checkedIdForDel", required=false, defaultValue="") String checkedIdForDel + ,@RequestParam(value="isViewPage", required=false, defaultValue="N") String isViewPage + ,@RequestParam Map commandMap + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/usr/reg/UserRegMng_list.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("userManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/reg/UserRegMng_input.do"; + break; + } + //처리 + try { + xitUserRegMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/usr/reg/UserRegMng_input.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/usr/reg/UserRegMng_input.do"; + } + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("userManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/usr/reg/UserRegMng_edit.do"; + break; + } + //처리 + try { + xitUserRegMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } + break; + + case "update_pwd": //수정(비밀번호) + String oldPassword = (String) commandMap.get("oldPassword"); + String newPassword = (String) commandMap.get("newPassword"); + String newPassword2 = (String) commandMap.get("newPassword2"); + String uniqId = (String) commandMap.get("uniqId"); + + try { + xitUserRegMngService.modifyPwdProc(uniqId, vo.getEmplyrId(), oldPassword, newPassword, newPassword2); + resultMsg = xitMessageSource.getMessage("success.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } + break; + + case "delete": //삭제 + //처리 + try { + xitUserRegMngService.removeProc(checkedIdForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "Y".equals(isViewPage)?"forward:/_mng_/usr/reg/UserRegMng_view.do":"forward:/_mng_/usr/reg/UserRegMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + xitUserRegMngService.removesProc(checkedIdForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} + + diff --git a/src/main/java/kr/xit/framework/biz/mng/web/ProgramMngController.java b/src/main/java/kr/xit/framework/biz/mng/web/ProgramMngController.java new file mode 100644 index 00000000..265ea3e6 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/mng/web/ProgramMngController.java @@ -0,0 +1,333 @@ +package kr.xit.framework.biz.mng.web; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngSearchVO; +import kr.xit.framework.biz.mng.menu.program.model.XitProgramMngVO; +import kr.xit.framework.biz.mng.menu.program.service.XitProgramMngService; +import kr.xit.framework.biz.mng.model.ProgramMngSearchVO; +import kr.xit.framework.biz.mng.model.ProgramMngVO; +import kr.xit.framework.biz.mng.service.ProgramMngService; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.model.ResultResponse; +import kr.xit.framework.core.utils.XitCmmnUtil; +import kr.xit.framework.core.validation.XitBeanValidator; +import kr.xit.framework.support.mybatis.MybatisUtils; + +/** + * + * @업무그룹명: 프로그램관리 Controller + * @설명: + * @최초작성일: 2020. 3. 25. 오후 4:05:40 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Controller +//@RequestMapping(value = "/_mng_/menu/program/") +@RequestMapping(value = "/framework/biz/mng/menu") +public class ProgramMngController { + + @Resource + private ProgramMngService programMngService; + @Autowired + private XitBeanValidator beanValidator; + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + @Value("#{prop['Globals.Xit.Pagination.PageUnit']}") + private int PAGE_UNIT; + @Value("#{prop['Globals.Xit.Pagination.PageSize']}") + private int PAGE_SIZE; + + /** + *
메소드 설명: 프로그램관리 목록 페이지
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "/mngProgramMgtFrom", method={RequestMethod.GET, RequestMethod.POST}) + public void mngProgramMgtFrom() { + // 내역 조회 + + //searchVO.setPageUnit(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageUnit"))); + //searchVO.setPageSize(Integer.parseInt(XitProperties.getProperty("Globals.Xit.Pagination.PageSize"))); + + /** pageing */ + //PaginationInfo paginationInfo = new PaginationInfo(); + //paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + //paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + //paginationInfo.setPageSize(searchVO.getPageSize()); + + //searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + //searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + //searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + //model.addAttribute("list_progrmmanage", xitProgramMngService.findList(searchVO)); + //model.addAttribute("searchVO", searchVO); + + //int totCnt = xitProgramMngService.findListTotCnt(searchVO); + //paginationInfo.setTotalRecordCount(totCnt); + //model.addAttribute("paginationInfo", paginationInfo); + + } + + /* + @RequestMapping(value = "mngProgramMgtFrom2", method={RequestMethod.GET, RequestMethod.POST}) + public ModelAndView mngProgramMgtFrom2() { + ModelAndView mav = new ModelAndView(); + mav.setViewName("/framework/biz/mng/menu/mngProgramMgtFrom"); + return mav; + } + */ + + /** + * 메소드 설명: 자료 검색 + * Paging처리 : parameter로 Map 사용 + * @RequestParam 필요 + * @param paramMap + * @return String 요청처리 후 응답객체 + * @author: 최정민 + * @date: 2022. 10. 13. + */ + + /*@PostMapping(value = "ProgramMng_list.ajax")*/ + @RequestMapping(value = "/programList", method = {RequestMethod.GET, RequestMethod.POST}) + public ModelAndView finds(@RequestParam Map paramMap) { + + return ResultResponse.of(programMngService.findList(paramMap, MybatisUtils.getPagingInfo(paramMap))); + } + + + /** + *
메소드 설명: 요청 페이지로 이동 한다.
+ * @param cmd + * @param tilesDef 타일즈 적용 Type(none: tiles 미적용) + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "/ProgramMng_{cmd}", method={RequestMethod.GET, RequestMethod.POST}) + public String ProgramMng_page(@PathVariable String cmd + , @RequestParam(value="tilesDef", required=false, defaultValue="") String tilesDef + , @ModelAttribute("progrmManageVO") ProgramMngVO vo + , ModelMap model) { + switch (cmd) { + case "input": //등록 페이지 + break; + case "edit": //수정 페이지 + case "view": //상세 페이지 + ProgramMngVO programMngVO = programMngService.findView(vo); + model.addAttribute("progrmManageVO", programMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + if(!"".equals(tilesDef)) + tilesDef = "."+tilesDef; + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/program/XitProgramMng_"+cmd+tilesDef; + + } + + + /** + *
메소드 설명: 요청 팝업 페이지 이동 한다.
+ * @param cmd + * @param model + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 26. + */ + @RequestMapping(value = "/ProgramMng_{cmd}_popup", method={RequestMethod.GET, RequestMethod.POST}) + public String ProgramMng_page_popup(@PathVariable String cmd + , @ModelAttribute("searchVO") ProgramMngSearchVO searchVO + , @ModelAttribute("progrmManageVO") ProgramMngVO vo, ModelMap model) { + switch (cmd) { + case "FileNmSearch": //프로그램 파일명 조회 페이지 + // 내역 조회 + + searchVO.setPageUnit(PAGE_UNIT); + searchVO.setPageSize(PAGE_SIZE); + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); + paginationInfo.setPageSize(searchVO.getPageSize()); + + searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); + searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + /*model.addAttribute("list_progrmmanage", xitProgramMngService.findList(searchVO));*/ + model.addAttribute("searchVO", searchVO); + + int totCnt = programMngService.findListTotCnt(searchVO); + paginationInfo.setTotalRecordCount(totCnt); + model.addAttribute("paginationInfo", paginationInfo); + break; + case "input" : + break; + case "edit" : + ProgramMngVO xitProgramMngVO = programMngService.findView(vo); + model.addAttribute("progrmManageVO", xitProgramMngVO); + break; + default: + throw new RuntimeException("유효하지 않은 요청 입니다."); + } + + + return FrameworkConstants.FRAMEWORK_JSP_BASE_PATH +"mng/menu/program/XitProgramMng_"+cmd+"_popup"+TILES_TYPE.POPUP.getVal(); + } + + + + /** + *
메소드 설명: 프로그램관리 CUD 처리
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 3. 25. + */ + @RequestMapping(value = "/ProgramMng_{cmd}_proc", method=RequestMethod.POST) + public void ProgramMng_cmd_proc(@PathVariable String cmd + ,@ModelAttribute("progrmManageVO") ProgramMngVO vo + ,@RequestParam(value="checkedProgrmFileNmForDel", required=false, defaultValue="") String checkedProgrmFileNmForDel + ,BindingResult bindingResult + ,Model model + ,HttpServletRequest request + ,HttpServletResponse response + ) throws ServletException, IOException { + + /** + * 처리 분기 + */ + String sLocationUrl = "forward:/_mng_/menu/program/ProgramMngList.do"; + String resultMsg = null; + switch (cmd) { + case "insert": //등록 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("progrmManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.insert")); + resultMsg = xitMessageSource.getMessage("fail.common.insert"); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_input.do"; + break; + } + if (vo.getProgrmDc() == null || vo.getProgrmDc().equals("")) { + vo.setProgrmDc(" "); + } + //처리 + programMngService.addProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.insert"); + break; + +// case "inserts": //다건 등록 +// break; + + case "update": //수정 + //유효성 확인 + //2020.11.24. 주석처리 + beanValidator.validate(vo, bindingResult); +// beanValidator.validate("progrmManageVO", vo, bindingResult); + if (bindingResult.hasErrors()) { +// throw new RuntimeException(xitMessageSource.getMessage("fail.common.update")); + resultMsg = xitMessageSource.getMessage("fail.common.update"); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_edit.do"; + break; + } + if (vo.getProgrmDc() == null || vo.getProgrmDc().equals("")) { + vo.setProgrmDc(" "); + } + //처리 + programMngService.modifyProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.update"); + break; + + case "delete": //삭제 + //처리 + try { + programMngService.removeProc(vo); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + break; + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_edit.do"; + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + sLocationUrl = "forward:/_mng_/menu/program/ProgramMng_edit.do"; + } + break; + + case "deletes": //다건 삭제 + //처리 + try { + programMngService.removesProc(checkedProgrmFileNmForDel); + resultMsg = xitMessageSource.getMessage("success.common.delete"); + } catch (RuntimeException e) { + resultMsg = e.getMessage(); + } catch (Exception e) { + resultMsg = xitMessageSource.getMessage("fail.common.delete"); + } + break; + + default: + new RuntimeException("유효하지 않은 요청 입니다."); + } + + + + /** + * 응답 설정 + */ + /* ============================ + * 2020.09.10 박민규 + * 서버 호출 방식에 관계 없이 응답처리가 가능하도록 개선 + * -기존 호출방식도 유지하며 ajax로 서버호출 시 json 으로 응답처리가 가능하도록 개선 + * [AS-IS] 반환타입 String, return url에 "forward"구문으로 처리 + * [TO-BE] 반환타입 void, DispatchServlet으로 forward 처리, ajax 호출인 경우 json응답처리 서비스로 forward + ============================ */ + //2020.09.10 주석처리 +// model.addAttribute("resultMsg", resultMsg); +// return sLocationUrl; + model.addAttribute("resultMsg", resultMsg); + if(XitCmmnUtil.isAjaxRequest(request)){ //ajax 요청시 + //반환 데이터 설정 + Map resultMap = new HashMap(); + resultMap.put("resultMsg", resultMsg); + XitCmmnUtil.forwardForAjaxRequest(request, response, resultMap); + }else { //submit 요청 시 + XitCmmnUtil.forwardForSubmitRequest(request, response, sLocationUrl, model.asMap()); + } + } +} diff --git a/src/main/java/kr/xit/framework/core/aop/LogAopAdvice.java b/src/main/java/kr/xit/framework/core/aop/LogAopAdvice.java new file mode 100644 index 00000000..5bb36d18 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/aop/LogAopAdvice.java @@ -0,0 +1,196 @@ +package kr.xit.framework.core.aop; + +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; +import org.springframework.ui.Model; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.servlet.ModelAndView; + +import lombok.extern.slf4j.Slf4j; +import kr.xit.framework.support.mybatis.PagingConstants; +import kr.xit.framework.support.mybatis.paging.domain.Paginator; + +@Slf4j +@Component +@Aspect +public class LogAopAdvice { + + /** + *
+	 * AOP 설정 before Advice : JoinPoint (JointPoint는 Arround 방식에선 사용 불가)
+	 * after-returning Advice : JoinPoint, Object around Advice :
+	 * ProceedingJoinPoint - MethodInterceptor와 동일 <aop:config> <aop:config>
+	 * <aop:aspect id="aroundProceed" ref="huimaiAopdvice"> <aop:pointcut id="pointCut"
+	 * expression="execution(* com.huimai.biz.*.controller.*.*(..))"/>
+	 * <aop:around method="aroundProceed" pointcut-ref="pointCut"/>
+	 * </aop:aspect> <aop:aspect id="afterProceed" ref="huimaiAopdvice">
+	 * <aop:pointcut id="pointCut"
+	 * expression="execution(* com.huimai.biz.*.controller.*.*(..))"/>
+	 * <aop:after-returning method="afterProceed" pointcut-ref="pointCut"
+	 * returning="ret"/> </aop:aspect> <aop:aspect id="beforeProceed"
+	 * ref="huimaiAopdvice"> <aop:pointcut id="pointCut"
+	 * expression="execution(* com.huimai.biz.*.controller.*.*(..))"/>
+	 * <aop:before method="beforeProceed" pointcut-ref="pointCut"/>
+	 * </aop:aspect> </aop:config>
+	 *  ("execution(public * com.sjf..controller.*.*(..))") : com.sjf 하단 controller class의 모든 메소드
+	 *  --> 오류 주의 ("execution(public * com.sjf..controller.*(..))")
+	 *
+ */ + + //@Around("execution((public * project..controller.*.*(..))||execution(public * framework..controller.*.*(..))) && !@annotation(com.tistory.eisen.annotation.SkipChecking)") + @Around("execution(public * kr.xit.framework..web.*.*(..))||execution(public * kr.xit.fims..web.*.*(..))") + public Object aroundProceed(ProceedingJoinPoint pjp) throws Throwable { + String methodName = pjp.getSignature().getName(); +// StopWatch sw = new StopWatch(pjp.toShortString());// +// sw.start(methodName); + + // Parameter log + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes; + HttpServletRequest request = servletRequestAttributes.getRequest(); + requestLog(request); + Object[] args = pjp.getArgs(); + //if (args.length > 0){ + // log.info("//==============================Parameters===================================="); + // log.debug("Http Request Parameters = {}", args[0]); + // log.info("=========================================================================//"); + //} + + //TODO 필요시 insert log + //logInsert(methodName, request, paramMap+""); + + Object rtnObj = pjp.proceed(); +// Object rtnObj = pjp.proceed(args); + log.info("//==============================Result===================================="); + log.info("{}", rtnObj); + log.info("=========================================================================//"); + + Object pageObject = RequestContextHolder.getRequestAttributes().getAttribute(PagingConstants.Session.PAGE_INFO.getCode(), RequestAttributes.SCOPE_REQUEST); + if(pageObject != null){ + Paginator paginator = (Paginator)pageObject; + +log.debug("###################################{}",rtnObj.getClass()); + + //if(rtnObj instanceof Map){ + if(Map.class.isAssignableFrom(rtnObj.getClass())){ + Map map = (Map)rtnObj; + map.putAll(getPageInfoMap(paginator)); + return map; + + //}else if(rtnObj instanceof List){ + }else if(List.class.isAssignableFrom(rtnObj.getClass())){ + Map map = new HashMap(); + map.put("rows", rtnObj); + map.putAll(getPageInfoMap(paginator)); + return map; + + }else if(ModelAndView.class.isAssignableFrom(rtnObj.getClass())){ + ModelAndView mav = (ModelAndView)rtnObj; + ((Map)mav.getModelMap().get("data")).put("pagination", getPageInfoMap(paginator)); + return mav; + + }else if(Model.class.isAssignableFrom(rtnObj.getClass())){ + Model mav = (Model)rtnObj; + mav.addAttribute("pagination", getPageInfoMap(paginator)); + return mav; + + }else if(String.class.isAssignableFrom(rtnObj.getClass())){ + //String jsonObj = (String)rtnObj; + return rtnObj; + + }else{ + throw new IllegalArgumentException("Paging works Illegal argument type, must be : ModelAndView, Map, List:" + rtnObj.getClass()); + } + } + + + //TODO update Log + //update(rtnObj); +// sw.stop(); +// log.info(sw.prettyPrint()); + + return rtnObj; + } + + @AfterThrowing(pointcut="execution(public * kr.xit.framework..*.*(..))||execution(public * kr.xit.fims..*.*(..))", throwing="error") + public void afterThrowingProceed(JoinPoint jp, Throwable error) { + log.error("@@@(THROWS) Method called: {}", jp.getSignature()); + if(jp.getArgs().length ==0 ) log.error("@@@@(THROWS) No arguments passed."); + for(Object arg:jp.getArgs()) log.error("@@@@(THROWS) Argument passed:{}", arg); + log.error("@@@(THORWS) Error: {}", error.getMessage()); + } + + private void requestLog(HttpServletRequest request) { + + if (log.isDebugEnabled()) { + String method = request.getMethod(); + StringBuilder sb = new StringBuilder("\n"); + sb.append("//=========================================================================\n"); + //sb.append("Ajax Call : " + "XMLHttpRequest".equals(request.getHeader(Globals.AJAX_HEADER))).append("\n"); + sb.append("URI : " + request.getRequestURI()).append("\n"); + sb.append("URL : " + request.getRequestURL()).append("\n"); + sb.append("IP : " + request.getRemoteAddr()).append("\n"); + sb.append("Referer URI : " + request.getHeader("referer")).append("\n"); + sb.append("Method : " + request.getMethod()).append("\n"); + sb.append("User Agent : " + request.getHeader("User-Agent")).append("\n"); + sb.append("Session : " + request.getSession().getId()).append("\n"); + sb.append("Locale : " + request.getLocale().getCountry()).append("\n"); + sb.append("ContentType : " + request.getContentType()).append("\n"); + + sb.append("----- Parameters ----- \n"); + + Enumeration e = request.getParameterNames(); + + if (e.hasMoreElements()) { + String pName = ""; + String pValue = ""; + do { + pName = (String) e.nextElement(); + pValue = request.getParameter(pName); + sb.append(pName + " : [" + pValue + "]\n"); + } while (e.hasMoreElements()); + } else { + sb.append(" is Empty \n"); + } + sb.append("=========================================================================//"); + log.debug(sb.toString()); + sb = null; + } + } + + private Map getPageInfoMap(Paginator paginator){ + Map map = new HashMap(); + //map.put("recods", paginator.getTotalCount()); + map.put("totalPage", paginator.getTotalPages()); + map.put("totalCount", paginator.getTotalCount()); + map.put("page", paginator.getPage()); + //map.put("rowNum", paginator.getLimit()); +// +// // Query Data : Paging 정보만 set 하면 되므로 필요 없다 +// //map.put(FwConstants.DEFAULT_RESPONSE_BODY_DATA_NAME, new ArrayList(pageList)); +// map.put("startRow", paginator.getStartRow()); +// map.put("endRow", paginator.getEndRow()); +// map.put("offset", paginator.getOffset()); +// //map.put("slider", paginator.getSlider()); +// map.put("prePage", paginator.getPrePage()); +// map.put("nextPage", paginator.getNextPage()); +// map.put("firstPage", paginator.isFirstPage()); +// map.put("hasNextPage", paginator.isHasNextPage()); +// map.put("hasPrePage", paginator.isHasPrePage()); +// map.put("lastPage", paginator.isLastPage()); + return map; + } +} diff --git a/src/main/java/kr/xit/framework/core/aop/XitLoginLogAspect.java b/src/main/java/kr/xit/framework/core/aop/XitLoginLogAspect.java new file mode 100644 index 00000000..5ec2f469 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/aop/XitLoginLogAspect.java @@ -0,0 +1,122 @@ +package kr.xit.framework.core.aop; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import egovframework.rte.fdl.cmmn.exception.FdlException; +import egovframework.rte.fdl.idgnr.EgovIdGnrService; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import kr.xit.framework.core.utils.XitHttpRequestHelper; +import kr.xit.framework.biz.cmm.model.XitConectLogVO; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 로그인 로그 관리 + * @설명: 사용자의 로그인/로그아웃 로그를 관리 한다. + * @최초작성일: 2020. 5. 6. 오후 4:32:05 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitLoginLogAspect { + @Resource + private XitFrameCrudService xitFrameCrudService; + @Resource(name="xitConectLogIdGnrService") + private EgovIdGnrService idgenService; + @Resource + private XitMessageSource xitMessageSource; + + /** + *
메소드 설명: 사용자의 로그인 로그를 생성 한다. 
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 6. + */ + public void addLogLogin() throws Throwable { + String uniqId = ""; + String ip = ""; + + /** + * 사용자의 인증 여부 확인 + */ + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if(isAuthenticated) { + XitLoginVO user = (XitLoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + uniqId = user.getUniqId(); +// ip = user.getIp(); + HttpServletRequest request = XitHttpRequestHelper.getCurrentRequest(); + ip = XitCmmnUtil.getClientIpAddr(request); + } +// XitLoginVO user = XitCmmnUtil.getSession(req); +// uniqId = user.getUniqId(); +// ip = user.getIp(); + + /** + * 필수값 설정 + */ + XitConectLogVO vo = new XitConectLogVO(); + try { + vo.setLog_id(idgenService.getNextStringId()); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setConect_id(uniqId); + vo.setConect_ip(ip); + vo.setConect_mthd("I"); // 로그인:I, 로그아웃:O + vo.setError_occrrnc_at("N"); + vo.setError_code(""); + + /** + * 처리 + */ + xitFrameCrudService.addXitConectLog(vo); + } + + /** + *
메소드 설명: 사용자의 로그아웃 로그를 생성 한다.
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 5. 6. + */ + public void addLogLogout() throws Throwable { + String uniqId = ""; + String ip = ""; + + /** + * 사용자의 인증 여부 확인 + */ + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if(isAuthenticated) { + XitLoginVO user = (XitLoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + uniqId = user.getUniqId(); +// ip = user.getIp(); + HttpServletRequest request = XitHttpRequestHelper.getCurrentRequest(); + ip = XitCmmnUtil.getClientIpAddr(request); + } + + /** + * 필수값 설정 + */ + XitConectLogVO vo = new XitConectLogVO(); + try { + vo.setLog_id(idgenService.getNextStringId()); + } catch (FdlException e) { + throw new RuntimeException(String.format("%s %s", xitMessageSource.getMessage("fail.common.insert"), e.getMessage())); + } + vo.setConect_id(uniqId); + vo.setConect_ip(ip); + vo.setConect_mthd("O"); // 로그인:I, 로그아웃:O + vo.setError_occrrnc_at("N"); + vo.setError_code(""); + + /** + * 처리 + */ + xitFrameCrudService.addXitConectLog(vo); + } +} diff --git a/src/main/java/kr/xit/framework/core/constants/ErrorCode.java b/src/main/java/kr/xit/framework/core/constants/ErrorCode.java new file mode 100644 index 00000000..2e0376ae --- /dev/null +++ b/src/main/java/kr/xit/framework/core/constants/ErrorCode.java @@ -0,0 +1,102 @@ +package kr.xit.framework.core.constants; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum ErrorCode { + + /* +200 : OK, 요청 정상 처리 +201 : Created, 생성 요청 성공 +202 : Accepted, 비동기 요청 성공 +204 : No Content, 요청 정상 처리, 응답 데이터 없음. + +실패 +400 : Bad Request, 요청이 부적절 할 때, 유효성 검증 실패, 필수 값 누락 등. +401 : Unauthorized, 인증 실패, 로그인하지 않은 사용자 또는 권한 없는 사용자 처리 +402 : Payment Required +403 : Forbidden, 인증 성공 그러나 자원에 대한 권한 없음. 삭제, 수정시 권한 없음. +404 : Not Found, 요청한 URI에 대한 리소스 없을 때 사용. +405 : Method Not Allowed, 사용 불가능한 Method를 이용한 경우. +406 : Not Acceptable, 요청된 리소스의 미디어 타입을 제공하지 못할 때 사용. +408 : Request Timeout +409 : Conflict, 리소스 상태에 위반되는 행위 시 사용. +413 : Payload Too Large +423 : Locked +428 : Precondition Required +429 : Too Many Requests + +500 : 서버 에러 + + */ + + + BAD_REQUEST(HttpStatus.BAD_REQUEST, "요청 매개변수 오류 입니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, "잘못된 요청 입니다"), + FILE_NOT_FOUND(HttpStatus.NOT_FOUND, "파일이 존재하지 않습니다"), + DATA_NOT_FOUND(HttpStatus.NOT_FOUND, "처리 데이타 오류(처리 요청 데이타 미존재)"), + + /* 400 BAD_REQUEST : 잘못된 요청 */ + CANNOT_FOLLOW_MYSELF(HttpStatus.BAD_REQUEST, "자기 자신은 팔로우 할 수 없습니다"), + + /* 401 UNAUTHORIZED : 인증되지 않은 사용자 */ + //INVALID_AUTH_TOKEN(HttpStatus.UNAUTHORIZED, "권한 정보가 없는 토큰입니다"), + UN_AUTHORIZED_USER(HttpStatus.UNAUTHORIZED, "계정 정보가 존재하지 않습니다"), + AUTH_HEADER_NOT_EXISTS(HttpStatus.UNAUTHORIZED, "헤더에 인증 정보를 찾을 수 없습니다"), + LOGOUT_USER(HttpStatus.UNAUTHORIZED, "로그아웃된 사용자 입니다"), + NOT_EXISTS_SECURITY_AUTH(HttpStatus.UNAUTHORIZED, "Security Context 에 인증 정보가 없습니다"), + + NOT_EXISTS_TOKEN(HttpStatus.UNAUTHORIZED, "인증된 토큰이 없습니다"), + NOT_EXISTS_SAVED_REFRESH_TOKEN(HttpStatus.UNAUTHORIZED, "저장된 인증 토큰이 없습니다"), + INVALID_TOKEN(HttpStatus.UNAUTHORIZED, "유효한 토큰이 아닙니다"), + INVALID_ROLE_TOKEN(HttpStatus.UNAUTHORIZED, "사용 권한이 없는 토큰 입니다"), + EXPIRED_TOKEN(HttpStatus.UNAUTHORIZED, "토큰 유효기간이 경과 되었습니다"), + INVALID_SIGN_TOKEN(HttpStatus.UNAUTHORIZED, "잘못된 서명의 토큰 입니다"), + INVALID_REFRESH_TOKEN(HttpStatus.UNAUTHORIZED, "리프레시 토큰이 유효하지 않습니다"), + MISMATCH_REFRESH_TOKEN(HttpStatus.UNAUTHORIZED, "리프레시 토큰의 유저 정보가 일치하지 않습니다"), + MISMATCH_REFRESH_ACCESS_TOKEN(HttpStatus.UNAUTHORIZED, "발급된 refresh token의 정보가 일치하지 않습니다"), + NOT_EXPIRED_TOKEN_YET(HttpStatus.UNAUTHORIZED, "토큰 유효기간이 경과되지 않았습니다"), + + /* 404 NOT_FOUND : Resource 를 찾을 수 없음 */ + USER_NOT_FOUND(HttpStatus.NOT_FOUND, "사용자 정보를 찾을 수 없습니다"), + REFRESH_TOKEN_NOT_FOUND(HttpStatus.NOT_FOUND, "로그아웃 된 사용자입니다"), + + /* 409 CONFLICT : Resource 의 현재 상태와 충돌. 보통 중복된 데이터 존재 */ + DUPLICATE_RESOURCE(HttpStatus.CONFLICT, "데이터가 이미 존재합니다"), + MEMBER_EXISTS(HttpStatus.CONFLICT, "가입되어 있는 회원 입니다"), + + // JPA query error + SQL_DATA_RESOURCE_INVALID(HttpStatus.BAD_REQUEST, "JPA(Hibernate) SQL 오류(데이타 / 조건)"), + + MPOWER_CONNECT_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "MPower DB 접속 에러 입니다"), + MPOWER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "MPower DB 에러 입니다"), + + FORBIDDEN(HttpStatus.FORBIDDEN, "FORBIDDEN"), + INVALID_CODE(HttpStatus.BAD_REQUEST, "유효하지 않은 HttpStatus 상태 코드 입니다"), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "INTERNAL_SERVER_ERROR"), + + MISMATCH_PASSWORD(HttpStatus.BAD_REQUEST, "비밀 번호가 일치하지 않습니다.") + ; + + + //USER_NOT_FOUND(null, "사용자(%s) 정보를 찾을 수 없습니다"); + + private HttpStatus httpStatus; + private String message; + //Integer code; + + ErrorCode(HttpStatus httpStatus, String message){ + this.httpStatus = httpStatus; + this.message = message; + } + + ErrorCode(String message){ + this.httpStatus = HttpStatus.BAD_REQUEST; + this.message = message; + } +} diff --git a/src/main/java/kr/xit/framework/core/constants/FrameworkConstants.java b/src/main/java/kr/xit/framework/core/constants/FrameworkConstants.java new file mode 100644 index 00000000..0caf24b3 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/constants/FrameworkConstants.java @@ -0,0 +1,107 @@ +package kr.xit.framework.core.constants; + +/** + * + * @업무그룹명: XIT 프레임워크 상수 클래스 + * @설명: framework에서 제공하는 공통 기능을 기술 한다. + * 해당 클래스에 선언된 상수는 추가 및 수정을 하지 않는 것을 원칙으로 하며 + * 상수 추가 또는 수정이 필요한 경우 해당 클래스를 상속받아 사용하도록 한다. + * @최초작성일: 2020. 3. 21. 오후 12:35:01 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class FrameworkConstants { + + /** + * JSP파일 BASE PATH + */ + public static final String FRAMEWORK_JSP_BASE_PATH = "framework/biz/"; + + public static final String JSON_VIEW = "jsonView"; + + /** + * + * @업무그룹명: 타일즈 레이아웃 타입 + * @설명: + * @최초작성일: 2020. 4. 29. 오후 4:33:01 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ + public enum TILES_TYPE{ + NONE(".none") //타일즈 미적용 + ,BASE(".base") //기본 tiles layout + ,POPUP(".popup") //팝업페이지 tiles layout + ,FIMS_POPUP(".fims-pop") //팝업페이지 tiles layout + ,MAIN(".main") //메인화면 tiles layout + ; + + private String val; + private TILES_TYPE(String val) { + this.val = val; + } + public String getVal() { + return this.val; + } + } + + + /** + * + * @업무그룹명: DB 동작 구분 + * @설명: CRUD를 설정 한다.(C: INSERT, R: SELECT, U:UPDATE, D:DELETE) + * @최초작성일: 2020. 3. 21. 오후 5:50:36 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ + public enum DB_ACTION{ + C ("insert", "등록") + ,R ("select", "조회") + ,NR("select", "다건 조회") + ,U ("update", "수정") + ,D ("delete", "삭제") + ,ND ("delete", "다건 삭제") + ; + + private String engNm; + private String korNm; + DB_ACTION(String engNm, String korNm){ + this.engNm = engNm; + this.korNm = korNm; + } + public String getEngNm() { return this.engNm; } + public String getKorNm() { return this.korNm; } + } + + + /** + * + * @업무그룹명: 사용자 구분 + * @설명: 사용자 테이블별 구분을 설정한다(GNR: XIT_GNRL_MBER, ENT: XIT_ENTRPRS_MBER, USR: XIT_USER_INFO) + * @최초작성일: 2020. 3. 23. 오후 7:13:40 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ + public enum USER_SE{ + GNR("일반회원", "XIT_GNRL_MBER") + ,ENT("기업회원", "XIT_ENTRPRS_MBER") + ,USR("업무사용자","XIT_USER_INFO") + ; + + private String codeNm; + private String tableNm; + USER_SE(String codeNm, String tableNm){ + this.codeNm = codeNm; + this.codeNm = tableNm; + } + public String getCodeNm() { return this.codeNm; } + public String getTableNm() { return this.tableNm; } + } +} diff --git a/src/main/java/kr/xit/framework/core/exception/CustomBaseException.java b/src/main/java/kr/xit/framework/core/exception/CustomBaseException.java new file mode 100644 index 00000000..912ac225 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/exception/CustomBaseException.java @@ -0,0 +1,56 @@ +package kr.xit.framework.core.exception; + +import kr.xit.framework.core.constants.ErrorCode; +import lombok.Getter; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@Getter +@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Invalid parameter") +public class CustomBaseException extends RuntimeException { +// ResourceBundle message = ResourceBundle.getBundle("error"); + + private ErrorCode errorCode; + private String code; + + public CustomBaseException() { + super(); + } + + public CustomBaseException(String msg) { + super(msg); + } + + public CustomBaseException(ErrorCode errorCode) { + this.errorCode = errorCode; + } + + public CustomBaseException(String code, String msg) { + super(msg); + this.code = code; + } + + public CustomBaseException(Throwable e) { + super(e); + } + + public CustomBaseException(String msg, Throwable cause) { + super(msg, cause); + } + + public HttpStatus getHttpStatus(){ + return HttpStatus.BAD_REQUEST; + }; + + @Override + public String getMessage(){ + return super.getMessage(); + } + +// @Override +// public String getLocalizedMessage(){ +// return message.getString(super.getMessage()); +// //return messageSourceAccessor.get +// } +} diff --git a/src/main/java/kr/xit/framework/core/exception/filter/ExceptionHandlerFilter.java b/src/main/java/kr/xit/framework/core/exception/filter/ExceptionHandlerFilter.java new file mode 100644 index 00000000..7b68ff10 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/exception/filter/ExceptionHandlerFilter.java @@ -0,0 +1,65 @@ +package kr.xit.framework.core.exception.filter; + +import kr.xit.framework.core.utils.Checks; +import lombok.extern.slf4j.Slf4j; +import kr.xit.framework.core.constants.ErrorCode; +import kr.xit.framework.core.model.ErrorResponse; +import kr.xit.framework.core.utils.json.ConvertHelper; + +import org.springframework.core.env.Environment; +import org.springframework.http.HttpStatus; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; + +/** + * CustomExceptionHandler 와 함께 에러 처리 + * Filter에서 발생한 오류 처리 + */ +@Slf4j +//@Component +public class ExceptionHandlerFilter extends OncePerRequestFilter { + + private final Environment env; + + public ExceptionHandlerFilter(Environment env) { + this.env = env; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + try{ + filterChain.doFilter(request,response); + + }catch (RuntimeException ex){ + log.error("runtime exception exception handler filter"); + setErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR,response,ex); + } + } + + private void setErrorResponse(HttpStatus status, HttpServletResponse response,Throwable ex){ + response.setStatus(status.value()); + response.setContentType("application/json"); + ErrorResponse errorResponse = ErrorResponse.getErrorResponse(ErrorCode.INTERNAL_SERVER_ERROR); + + // 운영 환경인 경우는 상세 정보 미출력 + if(Arrays.asList(env.getActiveProfiles()).contains("prod")) + errorResponse.setMessage(Checks.isNotEmpty(ex.getCause())? ex.getLocalizedMessage() : ex.getCause().getLocalizedMessage()); + else + errorResponse.setMessage(Checks.isNotEmpty(ex.getCause())? ex.getLocalizedMessage() : ex.getCause().toString()); + try{ + String json = ConvertHelper.jsonToObject(errorResponse); + log.error(json); + response.getWriter().write(json); + }catch (IOException e){ + e.printStackTrace(); + } + + } +} + diff --git a/src/main/java/kr/xit/framework/core/exception/handling/XitExceptionAdvice.java b/src/main/java/kr/xit/framework/core/exception/handling/XitExceptionAdvice.java new file mode 100644 index 00000000..b60f7c92 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/exception/handling/XitExceptionAdvice.java @@ -0,0 +1,284 @@ +package kr.xit.framework.core.exception.handling; + +import java.io.IOException; +import java.io.OutputStream; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Optional; + +import javax.validation.ConstraintViolationException; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.MethodParameter; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +//import com.mysql.jdbc.exceptions.MySQLSyntaxErrorException; + +import lombok.extern.slf4j.Slf4j; +import kr.xit.framework.core.constants.ErrorCode; +import kr.xit.framework.core.exception.CustomBaseException; +import kr.xit.framework.core.model.ErrorResponse; +import kr.xit.framework.core.utils.Checks; +import kr.xit.framework.core.utils.json.ConvertHelper; + +/** + *
+ * ExceptionHandlerFilter(Filter에서 발생한 에러 처리)와 함께 에러 처리
+ * ErrorCode 에서 해당 Exception 오류를 정의하여 사용
+ *
+ * spring boot의 기본 properties
+ * server.error:
+ *   include-exception: false # 응답에 exception의 내용을 포함할지 여부
+ *   include-stacktrace: never # 오류 응답에 stacktrace 내용을 포함할 지 여부
+ *   path: '/error' # 오류 응답을 처리할 Handler의 경로
+ *   whitelabel.enabled: true # 서버 오류 발생시 브라우저에 보여줄 기본 페이지 생성 여부
+ *   
+ */ +@Slf4j +@RestControllerAdvice +public class XitExceptionAdvice implements ResponseBodyAdvice { + + /** + * ControllerAdvice에서 처리되는 response가 xml 형태로 되는 경우 -> json 타입으로 전환 + * 1. supports에서 현재 Controller작업이 끝난 response를 beforeBodyWrite로 보낼 것인지 판단 + * 2. 보내게 되면 beforeBodyWrite에서 구현 + * @param returnType the return type + * @param converterType the selected converter type + * @return + */ + @Override + public boolean supports(MethodParameter returnType, Class> converterType) { + // 어느클래스에서 호출 되는지 : returnType.getDeclaringClass() + return "XitExceptionAdvice".equals(returnType.getDeclaringClass().getSimpleName()); + } + + + /** + * Controller 응답이 끝난 데이타(body)를 선택된 HttpMessageConverter로 데이터 변환후 return; + * @param body the body to be written + * @param returnType the return type of the controller method + * @param selectedContentType the content type selected through content negotiation + * @param selectedConverterType the converter type selected to write to the response + * @param request the current request + * @param response the current response + * @return + */ + @Override + public T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, + Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { + + if(MediaType.APPLICATION_XML.equals(selectedContentType) || MediaType.APPLICATION_XHTML_XML.equals(selectedContentType)) { + if(body instanceof ErrorResponse){ + ErrorResponse er = (ErrorResponse)body; + try (OutputStream stream = response.getBody()) { + stream.write(ConvertHelper.jsonToObject(er).getBytes("UTF-8")); + stream.flush(); + return null; + } catch (IOException e) { + log.error(">>>>>>>>>>> XitRestControllerAdvice - XitExceptionAdvice json 응답으로 변환중 에러 발생 <<<<<<<<<<<<"); + return body; + } + } + } + + return body; + } + + /** + * CustomBaseException + * + * @param cbe CustomBaseException + * @return ErrorResponse + */ + @ExceptionHandler(value = {CustomBaseException.class}) + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + protected ErrorResponse handleCustomBaseException(CustomBaseException cbe) { + log.error("==================== handleCustomBaseException throw CustomBaseException : {} ====================", cbe.getClass().getCanonicalName()); + return ErrorResponse.of(cbe); + } + + @ExceptionHandler(value = {MethodArgumentNotValidException.class}) + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + protected ErrorResponse handleMethodArgumentNotValid( + MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + log.error("==================== Override handleMethodArgumentNotValid throw MethodArgumentNotValidException ===================="); + + Map validErrorMap = new HashMap<>(); + ex.getBindingResult().getFieldErrors() + .forEach(e -> validErrorMap.put(e.getField(), e.getDefaultMessage())); + + log.error("##############################################################################################"); + log.error("{}", validErrorMap); + log.error("##############################################################################################"); + + Optional firstKey = validErrorMap + .keySet() + .stream() + .findFirst(); + + + Optional firstMessage = validErrorMap + .values() + .stream() + .findFirst(); + + String errMsg = "["+firstKey.orElse("에러 메세지가 정의 되지 않았습니다")+"] "+firstMessage.orElse(""); + + return ErrorResponse.of(HttpStatus.BAD_REQUEST.toString(), errMsg); + } + + /** + * Customize the response for HttpMessageNotReadableException. + *

This method delegates to {@link HttpMessageNotReadableException}. + * @param ex the exception + * @param headers the headers to be written to the response + * @param status the selected response status + * @param request the current request + * @return a {@code ResponseEntity} instance + */ + @ExceptionHandler(HttpMessageNotReadableException.class) + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + protected ErrorResponse handleHttpMessageNotReadable( + HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + log.error("==================== Override handleHttpMessageNotReadable throw HttpMessageNotReadableException ===================="); + return ErrorResponse.of(HttpStatus.BAD_REQUEST.toString(), ex.getLocalizedMessage()); + } + + /** + * NoSuchElementException + * + * @return ErrorResponse + */ + @ExceptionHandler(value = {NoSuchElementException.class}) + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + protected ErrorResponse handleNoSuchElementException() { + log.error("==================== handleNoSuchElementException throw NoSuchElementException ===================="); + return ErrorResponse.of(ErrorCode.SQL_DATA_RESOURCE_INVALID); + } + + /** + * NoSuchElementException + * + * @return ErrorResponse + */ + @ExceptionHandler(value = {IllegalArgumentException.class}) + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + protected ErrorResponse handleIllegalArgumentException(IllegalArgumentException iae) { + log.error("==================== handleIllegalArgumentException throw llegalArgumentException ===================="); + return ErrorResponse.of(HttpStatus.BAD_REQUEST.toString(), iae.getLocalizedMessage()); + } + + /** + * Data 중복 + * + * @return ErrorResponse + */ + @ExceptionHandler(value = {ConstraintViolationException.class}) + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + protected ErrorResponse handleDataException() { + log.error("==================== handleDataException throw ConstraintViolationException ===================="); + return ErrorResponse.of(ErrorCode.SQL_DATA_RESOURCE_INVALID); + } + + + + // @ExceptionHandler(value = {MySQLSyntaxErrorException.class}) + // @ResponseStatus(value = HttpStatus.NOT_ACCEPTABLE) + // protected ErrorResponse handleMySQLSyntaxErrorException(MySQLSyntaxErrorException e) { + // String message = Checks.isNotNull(e) ? e.getLocalizedMessage() : StringUtils.EMPTY; + // log.error("==================== handleMySQLSyntaxErrorException throw MySQLSyntaxErrorException ===================="); + // return ErrorResponse.of(ErrorCode.SQL_DATA_RESOURCE_INVALID.toString(), message); + // } + + @ExceptionHandler(value = {SQLException.class}) + @ResponseStatus(value = HttpStatus.NOT_ACCEPTABLE) + protected ErrorResponse handleSQLException(SQLException e) { + String message = Checks.isNotNull(e) ? e.getLocalizedMessage() : StringUtils.EMPTY; + log.error("==================== handleSQLException throw SQLException ===================="); + return ErrorResponse.of(ErrorCode.SQL_DATA_RESOURCE_INVALID.toString(), message); + } + + @ExceptionHandler(value = {DataIntegrityViolationException.class}) + @ResponseStatus(value = HttpStatus.NOT_ACCEPTABLE) + protected ErrorResponse handleDataIntegrityViolationException(DataIntegrityViolationException e) { + String message = Checks.isNotNull(e) ? e.getLocalizedMessage() : StringUtils.EMPTY; + log.error("==================== handleDataIntegrityViolationException throw DataIntegrityViolationException ===================="); + return ErrorResponse.of(ErrorCode.SQL_DATA_RESOURCE_INVALID.toString(), message); + } + + /** + * RuntimeException + * + * @param e RuntimeException + * @return ErrorResponse + */ + @ExceptionHandler(value = {RuntimeException.class}) + @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) + protected ErrorResponse handleRuntimeException(RuntimeException e) { + String message = Checks.isNotNull(e) ? e.getLocalizedMessage() : StringUtils.EMPTY; + log.error("handleException RuntimeException : {}", Checks.isEmpty(message) ? StringUtils.EMPTY : e.getClass().getCanonicalName()); + return ErrorResponse.of(HttpStatus.INTERNAL_SERVER_ERROR.toString(), message); + } + + /** + * Exception + * + * @param e Exception + * @return ErrorResponse + */ + @ExceptionHandler(value = {Exception.class}) + @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) + protected ErrorResponse handleException(Exception e) { + String message = Checks.isNotNull(e) ? e.getLocalizedMessage() : StringUtils.EMPTY; + log.error("handleException throw Exception : {}", Checks.isEmpty(message) ? StringUtils.EMPTY : e.getClass().getCanonicalName()); + return ErrorResponse.of(HttpStatus.INTERNAL_SERVER_ERROR.toString(), message); + } +} + +/* +//TODO :: 공통 framework에 반영 필요 +javax.validation.constraints @NotNull + + +@ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity> methodArgumentValidException(MethodArgumentNotValidException e) { + return ResponseEntity.badRequest().body(extractErrorMessages(e)); + } + + private List extractErrorMessages(MethodArgumentNotValidException e) { + return e.getBindingResult() + .getAllErrors() + .stream() + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .map(ExceptionDto::new) + .collect(Collectors.toList()); + } + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity> constraintViolationException(ConstraintViolationException e) { + return ResponseEntity.badRequest().body(extractErrorMessages(e)); + } + + private List extractErrorMessages(ConstraintViolationException e) { + return e.getConstraintViolations() + .stream() + .map(ConstraintViolation::getMessage) + .map(ExceptionDto::new) + .collect(Collectors.toList()); + } + */ diff --git a/src/main/java/kr/xit/framework/core/filter/XitCorsFilter.java b/src/main/java/kr/xit/framework/core/filter/XitCorsFilter.java new file mode 100644 index 00000000..0c976b54 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/filter/XitCorsFilter.java @@ -0,0 +1,71 @@ +package kr.xit.framework.core.filter; + +import java.io.IOException; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.filter.OncePerRequestFilter; + +/** + * + * @업무그룹명: CORS(Cross-Origin Resource Sharing) Filter + * @설명: 2009년에 등장한 "교차 출처 자원 공유" 정책. + * 대체적으로 프로토콜, 도메인, 포트가 일치해야 동일출처로 인정 된다(SOP). + * SOP는 동일출처에서만 자원공유가 가능한 정책으로 다른 출처에서 자원요청시 에러가 발생한다. 이에 대한 예외 조항이 CORS 정책 이다. + * SOP 정책에는 다른 출처의 리소스에 접근 할 수 있는 CORS 외에도 몇가지 예외조항이 있는데 실행 가능한 스크립트, 렌더될 이미지, 스타일 시트(css)정도가 있다. + * @최초작성일: 2020. 11. 13. 오후 5:10:57 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCorsFilter extends OncePerRequestFilter{ + + + /** 접근 허용 출처 */ + private String accessControlAllowOrigin; //ex> * OR www.xerotech.co.kr OR www.xerotech.co.kr, www.naver.com 등... 단, Access-Control-Allow-Credentials: true 설정 시 * 은 사용 불가 + /** 접근 허용 Method */ + private String accessControlAllowMethods; //ex> GET, POST, HEAD, PUT, PATCH, DELETE 등.. + /** */ + private String accessControlAllowHeaders; //ex> x-requested-with (비표준 ajax 요청 헤더) + /** Preflight Request의 결과가 캐쉬에 남아있는 시간(단위: 초(second)) */ + private String accessControlMaxAge; //ex> 3600 (1시간) + + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + if(!( this.accessControlAllowOrigin==null || "".equals(this.accessControlAllowOrigin) )) + response.addHeader("Access-Control-Allow-Origin", this.accessControlAllowOrigin); + + if(!( this.accessControlAllowMethods==null || "".equals(this.accessControlAllowMethods) )) + response.addHeader("Access-Control-Allow-Methods", this.accessControlAllowMethods); + + if(!( this.accessControlAllowHeaders==null || "".equals(this.accessControlAllowHeaders) )) + response.addHeader("Access-Control-Allow-Headers", this.accessControlAllowHeaders); + + if(!( this.accessControlMaxAge==null || "".equals(this.accessControlMaxAge) )) + response.addHeader("Access-Control-Max-Age", this.accessControlMaxAge); + + filterChain.doFilter(request, response); + + } + + + public void setAccessControlAllowOrigin(String accessControlAllowOrigin) { + this.accessControlAllowOrigin = accessControlAllowOrigin; + } + public void setAccessControlAllowMethods(String accessControlAllowMethods) { + this.accessControlAllowMethods = accessControlAllowMethods; + } + public void setAccessControlAllowHeaders(String accessControlAllowHeaders) { + this.accessControlAllowHeaders = accessControlAllowHeaders; + } + public void setAccessControlMaxAge(String accessControlMaxAge) { + this.accessControlMaxAge = accessControlMaxAge; + } + +} diff --git a/src/main/java/kr/xit/framework/core/filter/log/ReadableRequestWrapperFilter.java b/src/main/java/kr/xit/framework/core/filter/log/ReadableRequestWrapperFilter.java new file mode 100644 index 00000000..5a748d39 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/filter/log/ReadableRequestWrapperFilter.java @@ -0,0 +1,189 @@ +package kr.xit.framework.core.filter.log; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ReadListener; +import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.apache.commons.io.IOUtils; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.http.MediaType; +import org.springframework.util.StringUtils; + +import kr.xit.framework.core.utils.Checks; +import lombok.extern.slf4j.Slf4j; + +/** + * Post parameter log를 보려면 활설화 해야 함 + */ +@Slf4j +//@WebFilter(urlPatterns = "/api/*") +//@Order(Ordered.HIGHEST_PRECEDENCE) +public class ReadableRequestWrapperFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) { + // Do nothing + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + + // Multipart skip + //if(!Objects.equals(request.getContentType(), MediaType.MULTIPART_FORM_DATA_VALUE)) { + ReadableRequestWrapper wrapper = new ReadableRequestWrapper((HttpServletRequest) request); + chain.doFilter(wrapper, response); + //}else{ + // chain.doFilter(request, response); + //} + } + + @Override + public void destroy() { + // Do nothing + } + + public static class ReadableRequestWrapper extends HttpServletRequestWrapper { + private final Charset encoding; + private byte[] rawData; + private Map params = new HashMap<>(); + + public ReadableRequestWrapper(HttpServletRequest request) { + super(request); + this.params.putAll(request.getParameterMap()); // 원래의 파라미터를 저장 + + String charEncoding = request.getCharacterEncoding(); // 인코딩 설정 + this.encoding = !StringUtils.hasText(charEncoding) ? StandardCharsets.UTF_8 : Charset.forName(charEncoding); + + try { + InputStream is = request.getInputStream(); + this.rawData = IOUtils.toByteArray(is); // InputStream 을 별도로 저장한 다음 getReader() 에서 새 스트림으로 생성 + + // body 파싱 + String collect = this.getReader().lines().collect(Collectors.joining(System.lineSeparator())); + if (!StringUtils.hasText(collect)) { // body 가 없을경우 로깅 제외 + return; + } + if (request.getContentType() != null && request.getContentType().contains( + MediaType.MULTIPART_FORM_DATA_VALUE)) { // 파일 업로드시 로깅제외 + return; + } + JSONParser jsonParser = new JSONParser(); + Object parse = jsonParser.parse(collect); + if (parse instanceof JSONArray) { + JSONArray jsonArray = (JSONArray)jsonParser.parse(collect); + setParameter("requestBody", jsonArray.toJSONString()); + } else { + JSONObject jsonObject = (JSONObject)jsonParser.parse(collect); + @SuppressWarnings("rawtypes") + Iterator iterator = jsonObject.keySet().iterator(); + if (iterator.hasNext()) { + do { + String key = (String) iterator.next(); + setParameter(key, Checks.isNotEmpty(jsonObject.get(key)) ? jsonObject.get(key).toString().replace("\"", "\\\"") : ""); + } while (iterator.hasNext()); + } + } + } catch (Exception e) { + log.error("ReadableRequestWrapper init error", e); + } + } + + @Override + public String getParameter(String name) { + String[] paramArray = getParameterValues(name); + if (paramArray != null && paramArray.length > 0) { + return paramArray[0]; + } else { + return null; + } + } + + @Override + public Map getParameterMap() { + return Collections.unmodifiableMap(params); + } + + @Override + public Enumeration getParameterNames() { + return Collections.enumeration(params.keySet()); + } + + @Override + public String[] getParameterValues(String name) { + String[] result = null; + String[] dummyParamValue = params.get(name); + + if (dummyParamValue != null) { + result = new String[dummyParamValue.length]; + System.arraycopy(dummyParamValue, 0, result, 0, dummyParamValue.length); + } + return result; + } + + public void setParameter(String name, String value) { + String[] param = {value}; + setParameter(name, param); + } + + public void setParameter(String name, String[] values) { + params.put(name, values); + } + + @Override + public ServletInputStream getInputStream() { + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(this.rawData); + + return new ServletInputStream() { + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + // Do nothing + } + + public int read() { + return byteArrayInputStream.read(); + } + }; + } + + @Override + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(this.getInputStream(), this.encoding)); + } + } +} diff --git a/src/main/java/kr/xit/framework/core/interceptor/XitAccessIntercepter.java b/src/main/java/kr/xit/framework/core/interceptor/XitAccessIntercepter.java new file mode 100644 index 00000000..eb55ea12 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/interceptor/XitAccessIntercepter.java @@ -0,0 +1,84 @@ +package kr.xit.framework.core.interceptor; + +import java.io.PrintWriter; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import lombok.extern.slf4j.Slf4j; +import kr.xit.framework.core.message.XitMessageSource; +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 사이트 접근 Interceptor + * @설명: 인증된 사용자에 한해 사이트 접근을 허용 하며 + * 인증되지 않은 사용자는 호출유형에 따라 안내메시지 출력 및 로그인페이지로 이동시킨다. + * @최초작성일: 2020. 3. 24. 오후 4:33:06 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Slf4j +@Service +public class XitAccessIntercepter extends HandlerInterceptorAdapter { + + @Resource(name = "xitMessageSource") + XitMessageSource xitMessageSource; + + /** + * 사이트 접근 시 사용자의 인증 여부를 확인 한다. + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + + log.info("Access interceptor START !!"); + + /** + * ContextPath Setting + */ + String contextPath = request.getContextPath(); + boolean isExistsContextPath = "/".equals(contextPath)?false:true; + + + /** + * 사용자의 인증(로그인) 여부 확인 + */ + Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + if(isAuthenticated) { + log.info("Authenticated User !!"); + + }else { + log.info("No Authenticated User !!"); + + String msg = xitMessageSource.getMessage("custom.fail.access"); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + PrintWriter writer=response.getWriter(); + if(XitCmmnUtil.isAjaxRequest(request)){ + writer.println(msg); + }else { + if(isExistsContextPath) + writer.println(""); + else + writer.println(""); + } + return false; + } + + + log.info("Access interceptor COMPLETE !!"); + + return true; + } + + + +} diff --git a/src/main/java/kr/xit/framework/core/interceptor/XitMenuListIntercepter.java b/src/main/java/kr/xit/framework/core/interceptor/XitMenuListIntercepter.java new file mode 100644 index 00000000..7a55e23b --- /dev/null +++ b/src/main/java/kr/xit/framework/core/interceptor/XitMenuListIntercepter.java @@ -0,0 +1,158 @@ +package kr.xit.framework.core.interceptor; + +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import kr.xit.framework.core.model.XitRollingNotiVO; +import lombok.extern.slf4j.Slf4j; +import kr.xit.framework.biz.cmm.service.XitFrameCrudService; +import kr.xit.framework.biz.cmm.service.XitFrameUnitService; +import kr.xit.framework.biz.login.model.XitLoginVO; +import kr.xit.framework.core.constants.FrameworkConstants.TILES_TYPE; +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 메뉴목록 조회 Interceptor + * @설명: 인증된 사용자에 한해 메뉴목록을 조회 한다. + * @최초작성일: 2020. 3. 24. 오후 4:33:06 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Slf4j +@Service +public class XitMenuListIntercepter extends HandlerInterceptorAdapter { + @Resource + private XitFrameUnitService xitFrameUnitService; + @Resource + private XitFrameCrudService xitFrameCrudService; + + private Map chkUrlAddLength; + + + /** + * 레이아웃 구성을 위해 사용자의 메뉴목록을 가져온다. + */ + @SuppressWarnings("unused") + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception + { + + if(mv==null) //return page가 없으면 stop + return; + + + + log.info("MenuList interceptor START !!"); + + /** + * 필수값 설정 + */ + //타일즈 적용 여부 + String viewName = mv.getViewName(); + boolean isTiles = (viewName.endsWith(TILES_TYPE.NONE.getVal())||viewName.endsWith(TILES_TYPE.POPUP.getVal())||viewName.endsWith(TILES_TYPE.FIMS_POPUP.getVal()))? false: true; + //사용자의 인증 여부 확인 + boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); + + /** + * 사용자별 메뉴 목록 조회 + */ + if(isTiles) { + List> allMenuList = null; + + //메뉴목록 조회 + if(isAuthenticated) { + //사용자정보 취득 + XitLoginVO loginVO = (XitLoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); + + //사용자별 메뉴 목록 조회 + allMenuList = xitFrameUnitService.findMenuListByUser(loginVO.getUniqId()); + + } + else { + //익명사용자 메뉴 목록 조회 + allMenuList = xitFrameUnitService.findMenuListByAuthorCode("ROLE_ANONYMOUS"); + } + + + //요청페이지 URL GET + String url = request.getRequestURI(); +// String[] arrUrl = url.split("/"); +// String[] jobUrl = arrUrl[arrUrl.length-1].split("_"); +// String jobSort = jobUrl[0]; +// String chkUrl = "/"; +// for(int i=1; i < arrUrl.length-1; i++) { +// chkUrl += arrUrl[i] + "/"; +// } +// chkUrl += jobSort; +// if(chkUrlAddLength.containsKey(chkUrl)) { +// int addLength = chkUrlAddLength.get(chkUrl); +// for(int i=1; i<=addLength; i++) +// chkUrl += "_"+jobUrl[i]; +// } +// //요청페이지 URL에서 ContextPath 제거 +// String contextPath = request.getContextPath(); +// if(!"/".equals(contextPath)) +// chkUrl = chkUrl.substring(contextPath.length()); + //요청페이지 정보 Setting + for(int i=0; i < allMenuList.size(); i++) { + Map mUrlInfo = allMenuList.get(i); +// if (mUrlInfo.get("menuUrl").toString().contains(chkUrl)) { + if (mUrlInfo.get("menuUrl").toString().contains(url)) { + log.info("RequestURL Matched OK !!"); + String[] arrPath = mUrlInfo.get("menuPath").toString().split("_"); + mUrlInfo.put("secondMenu", arrPath[1]); + mv.addObject("urlInfoMap", mUrlInfo); + break; + } + } + mv.addObject("allMenuList", allMenuList); + + + + + + /** + * Rolling 공지사항 + */ + XitRollingNotiVO notiVO = xitRollingNotiVO; + if(XitCmmnUtil.notEmpty(notiVO.getBbsId())) { //BBS_ID 값이 없으면 롤링 미사용으로 간주(globals.properties의 Globals.Xit.RollingNotiBbsId 에서 설정 가능) + notiVO.setList(xitFrameUnitService.findLatestBbsList(false)); + mv.addObject("rollingNotiList", notiVO.getList()); + } + + + } + + + + log.info("MenuList interceptor COMPLETE !!"); + + + } + + @Resource + private XitRollingNotiVO xitRollingNotiVO; + + public Map getChkUrlAddLength() { + return chkUrlAddLength; + } + + + public void setChkUrlAddLength(Map chkUrlAddLength) { + this.chkUrlAddLength = chkUrlAddLength; + } + + +} diff --git a/src/main/java/kr/xit/framework/core/interceptor/XitSecurityHeaderIntercepter.java b/src/main/java/kr/xit/framework/core/interceptor/XitSecurityHeaderIntercepter.java new file mode 100644 index 00000000..4465679e --- /dev/null +++ b/src/main/java/kr/xit/framework/core/interceptor/XitSecurityHeaderIntercepter.java @@ -0,0 +1,69 @@ +package kr.xit.framework.core.interceptor; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 보안 헤더 Interceptor + * @설명: 콘텐츠 보안 정책(CSP), Xframe 등 보안과 관련된 헤더를 설정 한다. + * @최초작성일: 2020. 11. 12. 오후 6:04:09 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitSecurityHeaderIntercepter extends HandlerInterceptorAdapter { + + /** XFrame 설정-클랙재킹 공격에 대한 보안 설정 */ + String strXframeConfig = "SAMEORIGIN"; //DENY: 이 사이트는 iframe 내에 출력되는 것을 허용하지 않음, SAMEORIGIN: 이 사이트는 동일 도메인 페이지 내에서만 출력 가능. ALLOW-FROM origin: 이 사이트는 origin 도메인의 페이지에서 출력하는 것을 허용 함. + /** CSP 설정 */ + List listCspConfig; + + @Override + public void postHandle( + HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) + throws Exception { + +// response.setHeader("Strict-Transport-Security","max-age=31536000 ; includeSubDomains"); +// response.setHeader("X-Content-Type-Options", "nosniff"); +// response.setHeader("X-XSS-Protection", "1; mode=block"); + + + //X-Frame 헤더 설정 + if(!( this.strXframeConfig==null || "".equals(this.strXframeConfig) )) + response.setHeader("X-Frame-Options", this.strXframeConfig); + + //CSP(콘텐츠 보안 정책) 헤더 설정 + if (XitCmmnUtil.notEmpty(this.listCspConfig)) { + StringBuffer sb = new StringBuffer(); + for(int i=0; i0) + sb.append("; "); + + sb.append(this.listCspConfig.get(i)); + } + response.setHeader("Content-Security-Policy", sb.toString()); + } + } + + + + public void setListCspConfig(List listCspConfig) { + this.listCspConfig = listCspConfig; + } + public void setStrXframeConfig(String strXframeConfig) { + this.strXframeConfig = strXframeConfig; + } + + + + +} diff --git a/src/main/java/kr/xit/framework/core/message/XitMessageSource.java b/src/main/java/kr/xit/framework/core/message/XitMessageSource.java new file mode 100644 index 00000000..99b47f67 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/message/XitMessageSource.java @@ -0,0 +1,65 @@ +package kr.xit.framework.core.message; + +import java.util.Locale; + +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; + +/** + * + * @업무그룹명: 메시지 리소스 클래스 + * @설명: 메시지 리소스 사용을 위한 MessageSource 인터페이스 및 ReloadableResourceBundleMessageSource 클래스의 구현체 + * @최초작성일: 2020. 3. 26. 오후 5:13:31 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMessageSource 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) { + /* ======================================================================= + * 2020.10.23. 박민규 + * DefaultLocale 설정 변경 + * -사유: Spring LocalResolver 설정과 무관하게 WAS서버의 OS Locale 설정을 따르게 되어 + * front의 와 getMessage()로 출력한 언어가 다르게 출력 될 수 있음 + * -수정내용: LocaleResolver에 설정된 locale로 메시지 출력하도록 변경 함 + * Locale.getDefault() -> LocaleContextHolder.getLocale() + ======================================================================= */ + //2020.10.23 주석처리 +// return getReloadableResourceBundleMessageSource().getMessage(code, null, Locale.getDefault()); + try { + return getReloadableResourceBundleMessageSource().getMessage(code, null, LocaleContextHolder.getLocale()); + } catch (Exception e) { + return getReloadableResourceBundleMessageSource().getMessage(code, null, Locale.getDefault()); + } + } +} + + diff --git a/src/main/java/kr/xit/framework/core/model/BaseVO.java b/src/main/java/kr/xit/framework/core/model/BaseVO.java new file mode 100644 index 00000000..26ec4a9f --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/BaseVO.java @@ -0,0 +1,535 @@ +package kr.xit.framework.core.model; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @업무그룹명: BaseVO 클래스 + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:40:28 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class BaseVO implements Serializable{ + private static final Logger logger = LoggerFactory.getLogger(BaseVO.class); + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 966032273162649197L; + + + private int tot_cnt; + public int getTot_cnt() { + return tot_cnt; + } + public void setTot_cnt(int tot_cnt) { + this.tot_cnt = tot_cnt; + } + + +// /** +// * toString +// */ +// public String toString() { +// StringBuffer buffer = new StringBuffer(); +//// buffer.append("\n◁▶FIELD BEGIN◀▷ ◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"); +// buffer.append("\n◁▶"+this.getClass().getName()+"◀▷ ◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"); +// +// Field[] fields = null; +// Field[] fields1 = this.getClass().getDeclaredFields(); // this 객체의 fields +// Field[] fields2 = this.getClass().getSuperclass().getDeclaredFields(); // super 객체의 fields +// +// // 두 객체의 fields를 합침. +// fields = new Field[fields1.length + fields2.length]; +// System.arraycopy(fields1, 0, fields, 0, fields1.length); +// System.arraycopy(fields2, 0, fields, fields1.length, fields2.length); +// +// try { +// Method _method = null; // getter +// String _methodName = null; // getter name +// for (int i = 0; i < fields.length; i++) { +// // field의 getter name을 작성 +// _methodName = "get" + fields[i].getName().substring(0, 1).toUpperCase() + fields[i].getName().substring(1); +// +// try { +// // getter를 가져옴 +// _method = this.getClass().getMethod(_methodName, (Class[])null); +// +// if (_method != null) { +// // 출력문자열 작성 +// buffer.append("\n").append(fields[i].getName()).append("=").append(_method.invoke(this, (Object[])null)); +// +// // 가독성을 위해 컬럼 사이에 ', '를 넣음 +// if (i < fields.length - 1) buffer.append(", "); +// } +// } catch (Exception e) { +//// LOGGER.debug(fields[i].getName() + " 속성의 getter method가 존재하지 않거나 접근할 수 없어 출력 문자열에서 누락됩니다.[" + e.getMessage() + "]"); +// } +// } +// } catch (Exception e) { +// logger.error(e.getMessage(), e); +// +// return super.toString(); +// } +//// buffer.append("\n◁▶FIELD END◀▷ ◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"); +// return buffer.toString(); +// } + + /** + * toString + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + + + /** + *

메소드 설명: Map을 Object(VO)로 변환하여 반환
+ * @param map + * @return Object 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 4. 24. + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Object convertMapToObject(Map map){ + + Iterator itr = map.keySet().iterator(); + while (itr.hasNext()) { + String key = (String) itr.next(); + String _methodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); + + Method[] _methods1 = this.getClass().getDeclaredMethods(); //this 객체의 methods + Method[] _methods2 = this.getClass().getSuperclass().getDeclaredMethods(); //super 객체의 methods + + //this와 super의 methods 병합 + Method[] _methods = new Method[_methods1.length+_methods2.length]; + System.arraycopy(_methods1, 0, _methods, 0, _methods1.length); + System.arraycopy(_methods2, 0, _methods, _methods1.length, _methods2.length); + + //param set + try { + for(Method method : _methods){ + if(_methodName.equals(method.getName())){ + method.invoke(this, map.get(key)); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + } + + + return this; + } + + + /** + *
메소드 설명: JSONObject을 현재객체(VO)로 변환하여 반환
+ * @param jsonObj JSONObject + * @return Object 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 6. 4. + */ + public Object convertJSONObjectToObject(Object jsonObj){ +// if(jsonObj instanceof framework.egov.comext.jfile.org.json.JSONObject) { +// return this.convertJSONObjectToObject((framework.egov.comext.jfile.org.json.JSONObject)jsonObj); +// }else if(jsonObj instanceof org.json.simple.JSONObject) { +// return this.convertJSONObjectToObject((org.json.simple.JSONObject)jsonObj); +// }else { +// LOGGER.debug("유효하지 않은 변환 요청"); +// } + +// return this; + + + if(jsonObj instanceof org.json.simple.JSONObject) { + return this.convertJSONObjectToObject((org.json.simple.JSONObject)jsonObj); + }else { + logger.debug("유효하지 않은 변환 요청"); + } + + return this; + } + @SuppressWarnings("unchecked") + private Object convertJSONObjectToObject(org.json.simple.JSONObject jsonObj){ + Iterator itr = jsonObj.keySet().iterator(); + while (itr.hasNext()) { + String key = (String) itr.next(); + String _methodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); + + Method[] _methods1 = this.getClass().getDeclaredMethods(); //this 객체의 methods + Method[] _methods2 = this.getClass().getSuperclass().getDeclaredMethods(); //super 객체의 methods + + //this와 super의 methods 병합 + Method[] _methods = new Method[_methods1.length+_methods2.length]; + System.arraycopy(_methods1, 0, _methods, 0, _methods1.length); + System.arraycopy(_methods2, 0, _methods, _methods1.length, _methods2.length); + + //param set + try { + for(Method method : _methods){ + if(_methodName.equals(method.getName())){ + method.invoke(this, jsonObj.get(key)); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + } + + return this; + } +// private Object convertJSONObjectToObject(framework.egov.comext.jfile.org.json.JSONObject jsonObj){ +// Iterator itr = jsonObj.keys(); +// while (itr.hasNext()) { +// String key = (String) itr.next(); +// String _methodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); +// +// Method[] _methods1 = this.getClass().getDeclaredMethods(); //this 객체의 methods +// Method[] _methods2 = this.getClass().getSuperclass().getDeclaredMethods(); //super 객체의 methods +// +// //this와 super의 methods 병합 +// Method[] _methods = new Method[_methods1.length+_methods2.length]; +// System.arraycopy(_methods1, 0, _methods, 0, _methods1.length); +// System.arraycopy(_methods2, 0, _methods, _methods1.length, _methods2.length); +// +// //param set +// try { +// for(Method method : _methods){ +// if(_methodName.equals(method.getName())){ +// method.invoke(this, jsonObj.get(key)); +// } +// } +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } catch (IllegalArgumentException e) { +// e.printStackTrace(); +// } catch (InvocationTargetException e) { +// e.printStackTrace(); +// } catch (JSONException e) { +// e.printStackTrace(); +// } +// +// } +// +// return this; +// } + + + /** + *
메소드 설명: Object(VO)간 동일 필드 매핑 후 반환
+ * @param fromClass + * @return Object 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 6. 4. + */ + public Object convertObjectToObject(Object fromClass) { + + //this객체 Field 설정 + Field[] fields = null; + Field[] fields1 = this.getClass().getDeclaredFields(); // this 객체의 fields + Field[] fields2 = this.getClass().getSuperclass().getDeclaredFields(); // super 객체의 fields + fields = new Field[fields1.length + fields2.length]; + System.arraycopy(fields1, 0, fields, 0, fields1.length); + System.arraycopy(fields2, 0, fields, fields1.length, fields2.length); + + + + for(Field field : fields) { + String key = field.getName(); + String _getterMethodName = "get" + key.substring(0,1).toUpperCase() + key.substring(1); + String _setterMethodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); + + + //fromClass의 메소드 취합 + Method[] _methods1 = fromClass.getClass().getDeclaredMethods(); //this 객체의 methods + Method[] _methods2 = fromClass.getClass().getSuperclass().getDeclaredMethods(); //super 객체의 methods + Map _mMethods = new HashMap<>(); + for(Method method : _methods1) + _mMethods.put(method.getName(), method.getName()); + for(Method method : _methods2) + _mMethods.put(method.getName(), method.getName()); + + //param set + if(_mMethods.get(_getterMethodName)!=null) { + try { + Field fromField = fromClass.getClass().getDeclaredField(key); + Object value = null; + fromField.setAccessible(true); + value = fromField.get(fromClass); + fromField.setAccessible(false); + + Method method = this.getClass().getMethod(_setterMethodName, String.class); + method.invoke(this, value); + + }catch (SecurityException | NoSuchMethodException e) { +// e.printStackTrace(); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { +// e.printStackTrace(); + } catch (NoSuchFieldException e) { +// e.printStackTrace(); + } + } + + } + + + + return this; + } + + + /** + *
메소드 설명: 부모객체를 자식객체로 캐스팅 후 반환한다.
+ * @param toClass + * @return Object 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 9. + */ + public Object downCast(Object toClass) { + return this.convertToObject(toClass); + } +// /** +// *
메소드 설명: 현재 객체를 대상객체(toClass)로 필드매핑하여 반환
+// * @param toClass +// * @return Object 요청처리 후 응답객체 +// * @author: 박민규 +// * @date: 2019. 8. 9. +// */ +// public Object convertToObject(Object toClass) { +// +// //this객체 Field 설정 +// Field[] fields = null; +// Field[] fields1 = toClass.getClass().getDeclaredFields(); // this 객체의 fields +// Field[] fields2 = toClass.getClass().getSuperclass().getDeclaredFields(); // super 객체의 fields +// fields = new Field[fields1.length + fields2.length]; +// System.arraycopy(fields1, 0, fields, 0, fields1.length); +// System.arraycopy(fields2, 0, fields, fields1.length, fields2.length); +// +// +// +// for(Field field : fields) { +// String key = field.getName(); +// String _getterMethodName = "get" + key.substring(0,1).toUpperCase() + key.substring(1); +// String _setterMethodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); +// +// +// //fromClass의 메소드 취합 +// Method[] _methods1 = this.getClass().getDeclaredMethods(); //this 객체의 methods +// Method[] _methods2 = this.getClass().getSuperclass().getDeclaredMethods(); //super 객체의 methods +// Map _mMethods = new HashMap<>(); +// for(Method method : _methods1) +// _mMethods.put(method.getName(), method.getName()); +// for(Method method : _methods2) +// _mMethods.put(method.getName(), method.getName()); +// +// //param set +// if(_mMethods.get(_getterMethodName)!=null) { +// try { +// Field fromField = this.getClass().getDeclaredField(key); +// Object value = null; +// fromField.setAccessible(true); +// value = fromField.get(this); +// fromField.setAccessible(false); +// +//// Method method = toClass.getClass().getMethod(_setterMethodName, String.class); +// Method method = toClass.getClass().getMethod(_setterMethodName, this.getClass().getDeclaredField(key).getType()); +// method.invoke(toClass, value); +// +// }catch (SecurityException | NoSuchMethodException e) { +// e.printStackTrace(); +// } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { +// e.printStackTrace(); +// } catch (NoSuchFieldException e) { +// e.printStackTrace(); +// } +// } +// +// } +// +// +// +// return toClass; +// } + /** + *
메소드 설명: 현재 객체를 대상객체(toClass)로 필드매핑하여 반환
+ * @param toClass + * @return Object 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 9. + */ + public Object convertToObject(Object toClass) { + + //toClass 전체 필드 get + int _cntToFields = 0; + Class _tmpToClass = toClass.getClass(); + while(true) { + Field[] fields = _tmpToClass.getDeclaredFields(); + _cntToFields += fields.length; + + _tmpToClass = _tmpToClass.getSuperclass(); + if(_tmpToClass==null) + break; + } + //toClass 전체 필드 set + Field[] toFields = new Field[_cntToFields]; + _tmpToClass = toClass.getClass(); + int idx = 0; + while(true) { + Field[] flds = _tmpToClass.getDeclaredFields(); + + System.arraycopy(flds, 0, toFields, idx, flds.length); + idx += flds.length; + + + _tmpToClass = _tmpToClass.getSuperclass(); + if(_tmpToClass==null) + break; + } + //fromClass 전체 메소드 set + Class _tmpFromClass = this.getClass(); + Map _mMethods = new HashMap<>(); + while(true) { + Method[] _methods = _tmpFromClass.getDeclaredMethods(); + for(Method method : _methods) + _mMethods.put(method.getName(), method.getName()); + + _tmpFromClass = _tmpFromClass.getSuperclass(); + if(_tmpFromClass==null) + break; + } + + + for(Field field : toFields) { + String key = field.getName(); + String _getterMethodName = "get" + key.substring(0,1).toUpperCase() + key.substring(1); +// String _setterMethodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); + + + //param set + if(_mMethods.get(_getterMethodName)!=null) { + try { + //value get + Field _fromField = null; + _tmpFromClass = this.getClass(); + while(true) { + try { + _fromField = _tmpFromClass.getDeclaredField(key); + break; + } catch (NoSuchFieldException e) { +// e.printStackTrace(); + } + + _tmpFromClass = _tmpFromClass.getSuperclass(); + if(_tmpFromClass==null) + break; + } + _fromField.setAccessible(true); + Object value = _fromField.get(this); + + + //value set + _tmpToClass = toClass.getClass(); + Field toField = null; + while(true) { + try { + toField = _tmpToClass.getDeclaredField(key); + toField.setAccessible(true); + toField.set(toClass, value); + break; + } catch (NoSuchFieldException e) { +// e.printStackTrace(); + } + + _tmpToClass = _tmpToClass.getSuperclass(); + if(_tmpToClass==null) + break; + } + + + + }catch (SecurityException e) { + e.printStackTrace(); + } catch (IllegalAccessException | IllegalArgumentException e) { + e.printStackTrace(); + } + } + + } + + + + return toClass; + } + + + + /** + *
메소드 설명: Map을 Object(VO)로 변환하여 반환
+ * @param map + * @param objClass + * @return Object 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 4. 24. + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Object convertMapToObject(Map map, Object objClass){ + + Iterator itr = map.keySet().iterator(); + while (itr.hasNext()) { + String key = (String) itr.next(); + String _methodName = "set" + key.substring(0,1).toUpperCase() + key.substring(1); + + Method[] _methods1 = objClass.getClass().getDeclaredMethods(); //this 객체의 methods + Method[] _methods2 = objClass.getClass().getSuperclass().getDeclaredMethods(); //super 객체의 methods + + //this와 super의 methods 병합 + Method[] _methods = new Method[_methods1.length+_methods2.length]; + System.arraycopy(_methods1, 0, _methods, 0, _methods1.length); + System.arraycopy(_methods2, 0, _methods, _methods1.length, _methods2.length); + + //param set + try { + for(Method method : _methods){ + if(_methodName.equals(method.getName())){ + method.invoke(objClass, map.get(key)); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + } + + + return objClass; + } +} diff --git a/src/main/java/kr/xit/framework/core/model/ErrorResponse.java b/src/main/java/kr/xit/framework/core/model/ErrorResponse.java new file mode 100644 index 00000000..75201450 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/ErrorResponse.java @@ -0,0 +1,93 @@ +package kr.xit.framework.core.model; + +//import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import kr.xit.framework.core.constants.ErrorCode; +import kr.xit.framework.core.exception.CustomBaseException; +import kr.xit.framework.core.utils.Checks; +import lombok.*; +import lombok.extern.slf4j.Slf4j; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +//@JacksonXmlRootElement(localName = "result") +@Slf4j +@Getter +@Builder +@ToString +public class ErrorResponse implements IResponse, Serializable { + private static final long SerialVersionUID = 1L; + + private final boolean result = false; + + @JsonIgnore + private final LocalDateTime timestamp = LocalDateTime.now(); + + private final int status; + + private final String error; + + private final String code; + + @Setter + private String message; + + public static ErrorResponse of(ErrorCode errorCode) { + ErrorResponse errorResponse = getErrorResponse(errorCode); + printErrorResponse(errorResponse); + + return errorResponse; + } + + public static ErrorResponse of(CustomBaseException cbe) { + ErrorResponse errorResponse = null; + + if (Checks.isNotEmpty(cbe.getErrorCode())) { + errorResponse = getErrorResponse(cbe.getErrorCode()); + return ErrorResponse.of(cbe.getErrorCode()); + + } else { + errorResponse = ErrorResponse.builder() + .status(cbe.getHttpStatus().value()) + .error(cbe.getHttpStatus().name()) + .code(Checks.isNotEmpty(cbe.getCode()) ? cbe.getCode() : StringUtils.EMPTY) + .message(Checks.isNotEmpty(cbe.getLocalizedMessage()) ? cbe.getLocalizedMessage() : cbe.getLocalizedMessage()) + .build(); + } + printErrorResponse(errorResponse); + + return errorResponse; + } + + public static ErrorResponse of(String code, String message) { + ErrorResponse errorResponse = ErrorResponse.builder() + .status(HttpStatus.BAD_REQUEST.value()) + .error(HttpStatus.BAD_REQUEST.name()) + .code(code) + .message(message) + .build(); + printErrorResponse(errorResponse); + + return errorResponse; + } + + public static ErrorResponse getErrorResponse(ErrorCode errorCode) { + return ErrorResponse.builder() + .status(errorCode.getHttpStatus().value()) + .error(errorCode.getHttpStatus().name()) + .code(errorCode.name()) + .message(errorCode.getMessage()) + .build(); + } + + private static void printErrorResponse(ErrorResponse errorResponse) { + log.error("##############################################################################################"); + log.error("{}", errorResponse); + log.error("##############################################################################################"); + } +} diff --git a/src/main/java/kr/xit/framework/core/model/IResponse.java b/src/main/java/kr/xit/framework/core/model/IResponse.java new file mode 100644 index 00000000..7d8e3d58 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/IResponse.java @@ -0,0 +1,4 @@ +package kr.xit.framework.core.model; + +public interface IResponse { +} diff --git a/src/main/java/kr/xit/framework/core/model/ResultMessage.java b/src/main/java/kr/xit/framework/core/model/ResultMessage.java new file mode 100644 index 00000000..d72de9c9 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/ResultMessage.java @@ -0,0 +1,17 @@ +package kr.xit.framework.core.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Lim, Jong Uk (minuk926) + * @since 2021-11-11 + */ +@Setter +@Getter +@AllArgsConstructor +public class ResultMessage { + private String code; + private String message; +} diff --git a/src/main/java/kr/xit/framework/core/model/ResultResponse.java b/src/main/java/kr/xit/framework/core/model/ResultResponse.java new file mode 100644 index 00000000..bcbde0cc --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/ResultResponse.java @@ -0,0 +1,170 @@ +package kr.xit.framework.core.model; + +//import com.fasterxml.jackson.dataformat.xml.XmlMapper; +//import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.google.gson.GsonBuilder; + +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.core.utils.json.ConvertHelper; +import lombok.Getter; +import lombok.Setter; + +import org.springframework.web.servlet.ModelAndView; + +import java.io.Serializable; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +@Getter @Setter +@JacksonXmlRootElement(localName = "result") +@SuppressWarnings("rawtypes") +public class ResultResponse implements IResponse, Serializable { + private static final long SerialVersionUID = 1L; + + private final static String SUCCESS = "200"; + private final static String NOT_FOUND = "400"; + private final static String FAILED = "500"; + private final static String SUCCESS_MESSAGE = "정상 처리 되었습니다."; + private final static String NOT_FOUND_MESSAGE = "NOT FOUND"; + private final static String FAILED_MESSAGE = "서버에서 오류가 발생하였습니다."; + + //private boolean success = true; + + //private int count; + + //private ResultMessage message; + + //private T data; + + //private Paginator paginator; + + //private ModelAndView mav; + + private ResultResponse() { + + } + + private ResultResponse(T data) { + ModelAndView mav = new ModelAndView(FrameworkConstants.JSON_VIEW); + mav.addObject("result", true); + mav.addObject("message", SUCCESS_MESSAGE); + mav.addObject("data", data); + + if(data == null){ + mav.addObject("count", 0); + + }else { + // Pageing 처리 + + if (Collection.class.isAssignableFrom(data.getClass())) { + mav.addObject("count", (((Collection) data).size())); + + } else { + mav.addObject("count", 1); + } + } + } + + /** + *
+     * return ModelAndView (Grid data)
+     *  {
+     *   result - true / false
+     *   message
+     *   data: {
+     *    contents - 실행결과 데이타
+     *    pagination - 페이징 요청 처리시
+     *   }
+     *   count - 목록의 수(페이징 요청 처리시는 현재 페이지 목록수)
+     *  }
+     * 
+ * @param data + * @return + * @param + */ + public static ModelAndView of(T data){ + ModelAndView mav = new ModelAndView(FrameworkConstants.JSON_VIEW); + + mav.addObject("result", true); + mav.addObject("message", SUCCESS_MESSAGE); + + Map map = new HashMap<>(); + map.put("contents", data); + mav.addObject("data", map); + + if(data == null){ + mav.addObject("count", 0); + + }else { + // Pageing 처리 + + if (Collection.class.isAssignableFrom(data.getClass())) { + mav.addObject("count", (((Collection) data).size())); + + } else { + mav.addObject("count", 1); + } + } + return mav; + } + + public static ModelAndView of(String attName, T data){ + ModelAndView mav = new ModelAndView(FrameworkConstants.JSON_VIEW); + + mav.addObject("result", true); + mav.addObject("message", SUCCESS_MESSAGE); + mav.addObject(attName, data); + + if(data == null){ + mav.addObject("count", 0); + + }else { + // Pageing 처리 + + if (Collection.class.isAssignableFrom(data.getClass())) { + mav.addObject("count", (((Collection) data).size())); + + } else { + mav.addObject("count", 1); + } + } + return mav; + } + + // public static ResponseEntity of(HttpStatus httpStatus){ + // ResultResponse result = new ResultResponse(); + // result.message = new ResultMessage(SUCCESS, SUCCESS_MESSAGE); + // return new ResponseEntity<>(result, httpStatus); + // } + + @Override + public String toString() { + GsonBuilder builder = new GsonBuilder().serializeNulls(); // value가 null값인 경우도 생성 + builder.disableHtmlEscaping(); + return builder.setPrettyPrinting().create().toJson(this); + } + + public String convertToJson() { + return ConvertHelper.jsonToObject(this); + } + + public String asToString(ResultResponse t) { + GsonBuilder builder = new GsonBuilder().serializeNulls(); // value가 null값인 경우도 생성 + builder.disableHtmlEscaping(); + return builder.setPrettyPrinting().create().toJson(t); + } + + // public Map toMap(ObjectMapper mapper){ + // if(mapper == null) mapper = JsonMapper.getMapper(); + // + // if(mapper instanceof XmlMapper){ + // Map xmlMap = new HashMap<>(); + // xmlMap.put("result", this); + // return xmlMap; + // } + // + // return mapper.convertValue(this, Map.class); + // } +} diff --git a/src/main/java/kr/xit/framework/core/model/ResultResponse2.java b/src/main/java/kr/xit/framework/core/model/ResultResponse2.java new file mode 100644 index 00000000..341ffb21 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/ResultResponse2.java @@ -0,0 +1,111 @@ +package kr.xit.framework.core.model; + +import java.io.Serializable; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +//import com.fasterxml.jackson.dataformat.xml.XmlMapper; +//import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.google.gson.GsonBuilder; + +import lombok.Getter; +import lombok.Setter; +import kr.xit.framework.core.utils.json.ConvertHelper; +import kr.xit.framework.support.mybatis.paging.domain.Paginator; + +@Getter @Setter +@JacksonXmlRootElement(localName = "result") +@SuppressWarnings("rawtypes") +public class ResultResponse2 implements IResponse, Serializable { + private static final long SerialVersionUID = 1L; + + private final static String SUCCESS = "200"; + private final static String NOT_FOUND = "400"; + private final static String FAILED = "500"; + private final static String SUCCESS_MESSAGE = "SUCCESS"; + private final static String NOT_FOUND_MESSAGE = "NOT FOUND"; + private final static String FAILED_MESSAGE = "서버에서 오류가 발생하였습니다."; + + private boolean success = true; + + private int count; + + private ResultMessage message; + + private T data; + + private Paginator paginator; + + private ResultResponse2() { + + } + + private ResultResponse2(T data) { + this.message = new ResultMessage(SUCCESS, SUCCESS_MESSAGE); + this.data = data; + + if(data == null){ + this.count = 0; + + }else { + // Pageing 처리 + + if (Collection.class.isAssignableFrom(data.getClass())) { + this.count = (((Collection) data).size()); + + } else { + this.count = 1; + } + } + } + + public static ResponseEntity of(T data){ + return ResponseEntity.ok().body(new ResultResponse2<>(data)); + } + + public static ResponseEntity of(String name, T data){ + Map map = new HashMap<>(); + map.put(name, data); + return ResponseEntity.ok().body(new ResultResponse2<>(map)); + } + + public static ResponseEntity of(HttpStatus httpStatus){ + ResultResponse2 result = new ResultResponse2(); + result.message = new ResultMessage(SUCCESS, SUCCESS_MESSAGE); + return new ResponseEntity<>(result, httpStatus); + } + + @Override + public String toString() { + GsonBuilder builder = new GsonBuilder().serializeNulls(); // value가 null값인 경우도 생성 + builder.disableHtmlEscaping(); + return builder.setPrettyPrinting().create().toJson(this); + } + + public String convertToJson() { + return ConvertHelper.jsonToObject(this); + } + + public String asToString(ResultResponse2 t) { + GsonBuilder builder = new GsonBuilder().serializeNulls(); // value가 null값인 경우도 생성 + builder.disableHtmlEscaping(); + return builder.setPrettyPrinting().create().toJson(t); + } + + // public Map toMap(ObjectMapper mapper){ + // if(mapper == null) mapper = JsonMapper.getMapper(); + // + // if(mapper instanceof XmlMapper){ + // Map xmlMap = new HashMap<>(); + // xmlMap.put("result", this); + // return xmlMap; + // } + // + // return mapper.convertValue(this, Map.class); + // } +} diff --git a/src/main/java/kr/xit/framework/core/model/XitAttachFileRespVO.java b/src/main/java/kr/xit/framework/core/model/XitAttachFileRespVO.java new file mode 100644 index 00000000..8531c20a --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/XitAttachFileRespVO.java @@ -0,0 +1,32 @@ +package kr.xit.framework.core.model; + +import java.util.List; + +import kr.xit.framework.biz.cmm.model.XitFileDetailInfoVO; + +/** + * + * @업무그룹명: 첨부파일에 대한 처리 결과 VO + * @설명: 첨부파일 목록 DB 등록(XitFrameUnitService.addAttachFileInfo) 서비스의 처리결과 응답 VO + * @최초작성일: 2020. 5. 11. 오후 6:05:11 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAttachFileRespVO extends XitFileDetailInfoVO{ + /** + * serialVersionUID + */ + private static final long serialVersionUID = -7580534222030605959L; + + protected List listAttachFileVO; + + public List getListAttachFileVO() { + return listAttachFileVO; + } + public void setListAttachFileVO(List listAttachFileVO) { + this.listAttachFileVO = listAttachFileVO; + } + +} diff --git a/src/main/java/kr/xit/framework/core/model/XitBaseSearchVO.java b/src/main/java/kr/xit/framework/core/model/XitBaseSearchVO.java new file mode 100644 index 00000000..a29dd8bb --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/XitBaseSearchVO.java @@ -0,0 +1,239 @@ +package kr.xit.framework.core.model; + +import java.io.Serializable; + +import org.apache.commons.lang3.builder.ToStringBuilder; + + +/** + * + * @업무그룹명: BaseSearchVO 클래스 + * @설명: + * @최초작성일: 2020. 3. 26. 오전 10:40:28 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBaseSearchVO implements Serializable { + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1825279179578340953L; + /** 검색구분(list: 페이징 적용, 그외: 페이징 미적용 */ + private String searchGubun = "list"; + + /** 검색조건-회원상태 (0, A, D, P)*/ + private String sbscrbSttus = "0"; + + /** 검색조건 */ + 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 = ""; + + + + + + /* ************************* + * tui Grid Paging 필드 + ************************* */ + /** 현재 페이지 */ + private int page = -1; + /** 한 페이지에 표현되는 로우(row)의 개수 */ + private int perPage = -1; + /** 로우들의 순서를 결정하는 컬럼의 이름 */ + private String sortColumn; + /** 로우 정렬 방법(true: ASC/오름차순, false: DESC/내림차순) */ + private String sortAscending; + /* ************************* + * //tui Grid Paging 필드 + ************************* */ + + + + public String getSbscrbSttus() { + return sbscrbSttus; + } + + public void setSbscrbSttus(String sbscrbSttus) { + this.sbscrbSttus = sbscrbSttus; + } + + public String getSearchGubun() { + return searchGubun; + } + + public void setSearchGubun(String searchGubun) { + this.searchGubun = searchGubun; + } + + 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 int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getPerPage() { + return perPage; + } + + public void setPerPage(int perPage) { + this.perPage = perPage; + } + + public String getSortColumn() { + return sortColumn; + } + + public void setSortColumn(String sortColumn) { + this.sortColumn = sortColumn; + } + + public String getSortAscending() { + return sortAscending; + } + + public void setSortAscending(String sortAscending) { + this.sortAscending = sortAscending; + } +} diff --git a/src/main/java/kr/xit/framework/core/model/XitCodeVO.java b/src/main/java/kr/xit/framework/core/model/XitCodeVO.java new file mode 100644 index 00000000..f9f07d9d --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/XitCodeVO.java @@ -0,0 +1,75 @@ +package kr.xit.framework.core.model; + +public class XitCodeVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + /** 분류코드ID */ + private String clCode; + /** 분류코드명 */ + private String clCodeNm; + /** 분류코드 설명 */ + private String clCodeDc; + /** 코드ID */ + private String codeId; + /** 코드ID명 */ + private String codeIdNm; + /** 코드 */ + private String code; + /** 코드명 */ + private String codeNm; + /** 코드 설명 */ + private String codeDc; + public String getClCode() { + return clCode; + } + public void setClCode(String clCode) { + this.clCode = clCode; + } + public String getClCodeNm() { + return clCodeNm; + } + public void setClCodeNm(String clCodeNm) { + this.clCodeNm = clCodeNm; + } + public String getClCodeDc() { + return clCodeDc; + } + public void setClCodeDc(String clCodeDc) { + this.clCodeDc = clCodeDc; + } + public String getCodeId() { + return codeId; + } + public void setCodeId(String codeId) { + this.codeId = codeId; + } + public String getCodeIdNm() { + return codeIdNm; + } + public void setCodeIdNm(String codeIdNm) { + this.codeIdNm = codeIdNm; + } + public String getCode() { + return code; + } + public void setCode(String code) { + this.code = code; + } + public String getCodeNm() { + return codeNm; + } + public void setCodeNm(String codeNm) { + this.codeNm = codeNm; + } + public String getCodeDc() { + return codeDc; + } + public void setCodeDc(String codeDc) { + this.codeDc = codeDc; + } + +} diff --git a/src/main/java/kr/xit/framework/core/model/XitMenuManageVO.java b/src/main/java/kr/xit/framework/core/model/XitMenuManageVO.java new file mode 100644 index 00000000..16bdcdb5 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/XitMenuManageVO.java @@ -0,0 +1,372 @@ +package kr.xit.framework.core.model; + +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * + * @업무그룹명: 메뉴목록관리VO + * @설명: 화면의 상단/좌측 메뉴목록을 처리하기 위한 VO + * @최초작성일: 2 + * 020. 3. 24. 오전 11:28:19 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMenuManageVO { + + /** 메뉴정보 */ + /** 메뉴번호 */ + private int menuNo; + /** 메뉴순서 */ + private int menuOrdr; + /** 메뉴명 */ + private String menuNm; + /** 상위메뉴번호 */ + private int upperMenuId; + /** 메뉴설명 */ + private String menuDc; + /** 관련이미지경로 */ + private String relateImagePath; + /** 관련이미지명 */ + private String relateImageNm; + /** 프로그램파일명 */ + private String progrmFileNm; + /** URL */ + private String chkURL; + + /** 사이트맵 */ + /** 생성자ID **/ + private String creatPersonId; + + /** 권한정보설정 */ + /** 권한코드 */ + private String authorCode; + + /** 기타VO변수 */ + private String tempValue; + private int tempInt; + + + /** Login 메뉴관련 VO변수 */ + /** tmp_Id */ + private String tmp_Id; + /** tmp_Password */ + private String tmp_Password; + /** tmp_Name */ + private String tmp_Name; + /** tmp_UserSe */ + private String tmp_UserSe; + /** tmp_Email */ + private String tmp_Email; + /** tmp_OrgnztId */ + private String tmp_OrgnztId; + /** tmp_UniqId */ + private String tmp_UniqId; + /** tmp_Cmd */ + private String tmp_Cmd; + + /** + * menuNo attribute를 리턴한다. + * @return int + */ + public int getMenuNo() { + return menuNo; + } + /** + * menuNo attribute 값을 설정한다. + * @param menuNo int + */ + public void setMenuNo(int menuNo) { + this.menuNo = menuNo; + } + /** + * menuOrdr attribute를 리턴한다. + * @return int + */ + public int getMenuOrdr() { + return menuOrdr; + } + /** + * menuOrdr attribute 값을 설정한다. + * @param menuOrdr int + */ + public void setMenuOrdr(int menuOrdr) { + this.menuOrdr = menuOrdr; + } + /** + * menuNm attribute를 리턴한다. + * @return String + */ + public String getMenuNm() { + return menuNm; + } + /** + * menuNm attribute 값을 설정한다. + * @param menuNm String + */ + public void setMenuNm(String menuNm) { + this.menuNm = menuNm; + } + /** + * upperMenuId attribute를 리턴한다. + * @return int + */ + public int getUpperMenuId() { + return upperMenuId; + } + /** + * upperMenuId attribute 값을 설정한다. + * @param upperMenuId int + */ + public void setUpperMenuId(int upperMenuId) { + this.upperMenuId = upperMenuId; + } + /** + * menuDc attribute를 리턴한다. + * @return String + */ + public String getMenuDc() { + return menuDc; + } + /** + * menuDc attribute 값을 설정한다. + * @param menuDc String + */ + public void setMenuDc(String menuDc) { + this.menuDc = menuDc; + } + /** + * relateImagePath attribute를 리턴한다. + * @return String + */ + public String getRelateImagePath() { + return relateImagePath; + } + /** + * relateImagePath attribute 값을 설정한다. + * @param relateImagePath String + */ + public void setRelateImagePath(String relateImagePath) { + this.relateImagePath = relateImagePath; + } + /** + * relateImageNm attribute를 리턴한다. + * @return String + */ + public String getRelateImageNm() { + return relateImageNm; + } + /** + * relateImageNm attribute 값을 설정한다. + * @param relateImageNm String + */ + public void setRelateImageNm(String relateImageNm) { + this.relateImageNm = relateImageNm; + } + /** + * progrmFileNm attribute를 리턴한다. + * @return String + */ + public String getProgrmFileNm() { + return progrmFileNm; + } + /** + * progrmFileNm attribute 값을 설정한다. + * @param progrmFileNm String + */ + public void setProgrmFileNm(String progrmFileNm) { + this.progrmFileNm = progrmFileNm; + } + /** + * chkURL attribute를 리턴한다. + * @return String + */ + public String getChkURL() { + return chkURL; + } + /** + * chkURL attribute 값을 설정한다. + * @param chkURL String + */ + public void setChkURL(String chkURL) { + this.chkURL = chkURL; + } + /** + * creatPersonId attribute를 리턴한다. + * @return String + */ + public String getCreatPersonId() { + return creatPersonId; + } + /** + * creatPersonId attribute 값을 설정한다. + * @param creatPersonId String + */ + public void setCreatPersonId(String creatPersonId) { + this.creatPersonId = creatPersonId; + } + /** + * authorCode attribute를 리턴한다. + * @return String + */ + public String getAuthorCode() { + return authorCode; + } + /** + * authorCode attribute 값을 설정한다. + * @param authorCode String + */ + public void setAuthorCode(String authorCode) { + this.authorCode = authorCode; + } + + /** + * tmp_Id attribute를 리턴한다. + * @return String + */ + public String getTmp_Id() { + return tmp_Id; + } + /** + * tmp_Id attribute 값을 설정한다. + * @param tmp_Id String + */ + public void setTmp_Id(String tmp_Id) { + this.tmp_Id = tmp_Id; + } + /** + * tmp_Password attribute를 리턴한다. + * @return String + */ + public String getTmp_Password() { + return tmp_Password; + } + /** + * tmp_Password attribute 값을 설정한다. + * @param tmp_Password String + */ + public void setTmp_Password(String tmp_Password) { + this.tmp_Password = tmp_Password; + } + /** + * tmp_Name attribute를 리턴한다. + * @return String + */ + public String getTmp_Name() { + return tmp_Name; + } + /** + * tmp_Name attribute 값을 설정한다. + * @param tmp_Name String + */ + public void setTmp_Name(String tmp_Name) { + this.tmp_Name = tmp_Name; + } + /** + * tmp_UserSe attribute를 리턴한다. + * @return String + */ + public String getTmp_UserSe() { + return tmp_UserSe; + } + /** + * tmp_UserSe attribute 값을 설정한다. + * @param tmp_UserSe String + */ + public void setTmp_UserSe(String tmp_UserSe) { + this.tmp_UserSe = tmp_UserSe; + } + /** + * tmp_Email attribute를 리턴한다. + * @return String + */ + public String getTmp_Email() { + return tmp_Email; + } + /** + * tmp_Email attribute 값을 설정한다. + * @param tmp_Email String + */ + public void setTmp_Email(String tmp_Email) { + this.tmp_Email = tmp_Email; + } + /** + * tmp_OrgnztId attribute를 리턴한다. + * @return String + */ + public String getTmp_OrgnztId() { + return tmp_OrgnztId; + } + /** + * tmp_OrgnztId attribute 값을 설정한다. + * @param tmp_OrgnztId String + */ + public void setTmp_OrgnztId(String tmp_OrgnztId) { + this.tmp_OrgnztId = tmp_OrgnztId; + } + /** + * tmp_UniqId attribute를 리턴한다. + * @return String + */ + public String getTmp_UniqId() { + return tmp_UniqId; + } + /** + * tmp_UniqId attribute 값을 설정한다. + * @param tmp_UniqId String + */ + public void setTmp_UniqId(String tmp_UniqId) { + this.tmp_UniqId = tmp_UniqId; + } + /** + * tmp_Cmd attribute를 리턴한다. + * @return String + */ + public String getTmp_Cmd() { + return tmp_Cmd; + } + /** + * tmp_Cmd attribute 값을 설정한다. + * @param tmp_Cmd String + */ + public void setTmp_Cmd(String tmp_Cmd) { + this.tmp_Cmd = tmp_Cmd; + } + + /** + * tempValue attribute를 리턴한다. + * @return String + */ + public String getTempValue() { + return tempValue; + } + /** + * tempValue attribute 값을 설정한다. + * @param tempValue String + */ + public void setTempValue(String tempValue) { + this.tempValue = tempValue; + } + /** + * tempInt attribute를 리턴한다. + * @return int + */ + public int getTempInt() { + return tempInt; + } + /** + * tempInt attribute 값을 설정한다. + * @param tempInt int + */ + public void setTempInt(int tempInt) { + this.tempInt = tempInt; + } + /** + * toString 메소드를 대치한다. + */ + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + +} diff --git a/src/main/java/kr/xit/framework/core/model/XitRollingNotiVO.java b/src/main/java/kr/xit/framework/core/model/XitRollingNotiVO.java new file mode 100644 index 00000000..c1070889 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/model/XitRollingNotiVO.java @@ -0,0 +1,74 @@ +package kr.xit.framework.core.model; + +import java.util.List; + +import kr.xit.framework.biz.cmm.model.XitBbsVO; + +/** + * + * @업무그룹명: 롤링 공지사항 VO + * @설명: 불필요한 메모리 할당을 지양하기 위해 Singletone 패턴을 이용하여 생성된 객체로 공지사항 목록을 제공 한다. + * @최초작성일: 2020. 10. 13. 오후 2:21:53 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitRollingNotiVO { + + /* ================================ + * 2020.10.14. 박민규 + * 싱글톤 설정 방식 변경으로 인한 주석 처리 + * -사유: java 싱글턴 패턴 사용 시 객체 공유범위가 프로세스 단위로 동작. + * 추후 범용성을 위해서라도 Spring 싱글턴 패턴 방식으로 변경 + * ex) java 싱글톤 -> 클래스로더 기준으로 객체 공유. war 파일 한개당 클래스 로더 1:1 배치되기 때문에 다른 war에서 참조 불가 + * spring 싱글톤 -> ApplicationContext 기준으로 객체 공유. web.xml의 root 하나와 servlet context 여러개 등록 시에도 참조 가능. + * -작업내용: + * 1)기존 singleton 객체 생성 메서드 주석처리 및 spring bean 등록 + * 2)객체 취득 시 getInstance() 대신 @Resource로 주입받아 사용 하도록 관련 코드 수정 + ================================ */ + //2020.10.14. 주석처리 + /* + private XitRollingNotiVO() {} + private static class BillPughSingleton{ + //BillPugh의 Singletone 패턴(Lazy Initialization. LazyHolder. Thread-safe) + private static final XitRollingNotiVO instance = new XitRollingNotiVO(); + } + public static XitRollingNotiVO getInstance() { + return BillPughSingleton.instance; + } + */ + + private List list; //게시글 목록 + private String bbsId; //게시판 id + private String parntsSntncNo; //부모 글 번호 + private String useAt; //사용 여부 + + + public List getList() { + return list; + } + public void setList(List list) { + this.list = list; + } + public String getBbsId() { + return bbsId; + } + public void setBbsId(String bbsId) { + this.bbsId = bbsId; + } + public String getParntsSntncNo() { + return parntsSntncNo; + } + public void setParntsSntncNo(String parntsSntncNo) { + this.parntsSntncNo = parntsSntncNo; + } + public String getUseAt() { + return useAt; + } + public void setUseAt(String useAt) { + this.useAt = useAt; + } + + +} diff --git a/src/main/java/kr/xit/framework/core/resolver/XitExcelViewResolver.java b/src/main/java/kr/xit/framework/core/resolver/XitExcelViewResolver.java new file mode 100644 index 00000000..6e854bd9 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/resolver/XitExcelViewResolver.java @@ -0,0 +1,184 @@ +package kr.xit.framework.core.resolver; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFDataFormat; +import org.apache.poi.hssf.util.CellReference; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONObject; +import org.springframework.web.servlet.view.AbstractView; + +public class XitExcelViewResolver extends AbstractView { + + + /** The content type for an Excel response */ + private static final String CONTENT_TYPE = "application/vnd.ms-excel"; + + public XitExcelViewResolver() { + setContentType(CONTENT_TYPE); + } + + /* (non-Javadoc) + * @see org.springframework.web.servlet.view.AbstractView#renderMergedOutputModel(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + protected void renderMergedOutputModel(Map model, HttpServletRequest request, + HttpServletResponse response) throws Exception { + // TODO Auto-generated method stub + try { + + Workbook workbook = new SXSSFWorkbook(1000); + Sheet sheet = workbook.createSheet(); + + List list = (List)model.get("contents"); + String columns = (String)model.get("header"); + JSONObject jsnobject = new JSONObject("{\"columns\":"+columns+"}"); + JSONArray jsonArray = jsnobject.getJSONArray("columns"); + + String[] numberCheck = new String[jsonArray.length()]; + + Row row = null; + int rowCount = 0; + row = sheet.createRow(rowCount++); + + //일반 스타일 + CellStyle cellStyleTitle = row.getSheet().getWorkbook().createCellStyle(); + cellStyleTitle.setAlignment(CellStyle.ALIGN_CENTER); + cellStyleTitle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); //색 설정 + cellStyleTitle.setFillPattern(CellStyle.SOLID_FOREGROUND); //색 패턴 설정 + //cellStyleTitle.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + //cellStyleTitle.setFillPattern(CellStyle.SOLID_FOREGROUND); + + //금액 스타일 + CellStyle cellStyleAmt = workbook.createCellStyle(); + cellStyleAmt.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); //금액 + + //합계 스타일 설정 + CellStyle sumCellStyle = workbook.createCellStyle(); + sumCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); //테두리 라인 + sumCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); //테두리 라인 + sumCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //테두리 라인 + sumCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //테두리 라인 + sumCellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); //배경색 + sumCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //배경색 + sumCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); //금액 + + /* ==================== + * 헤더(head) 출력 + ==================== */ + for ( int i=0; i < jsonArray.length(); i++ ) { + //S로 초기화 + numberCheck[i] = "S"; + + Cell cell = row.createCell(i); + cell.setCellStyle(cellStyleTitle); + cell.setCellValue(jsonArray.getJSONObject(i).getString("title")); + } + + /* ==================== + * 바디(body) 출력 + ==================== */ + for ( Object rowData : list ) { + System.out.println("데이터 생성오류 row:" + rowCount); + row = sheet.createRow(rowCount++); + // manually control how rows are flushed to disk + if (rowCount % 500 == 0) { + ((SXSSFSheet) sheet).flushRows(500); // retain 100 last rows and flush all others + } + + for ( int i=0; i map = (Map) rowData; + obj = map.get(id_txt); + }else { + String _getterMethodName = "get" + id_txt.substring(0, 1).toUpperCase() + id_txt.substring(1); + Method _getterMethod = rowData.getClass().getMethod(_getterMethodName, (Class[])null); + obj = _getterMethod.invoke(rowData, (Object[])null); + } + + //data type별 Cell 출력 + if(obj instanceof Number){ + String title_txt = jsonArray.getJSONObject(i).getString("title"); //컬럼명 + if(!title_txt.equals("NO")){ + //숫자스타일 적용 + cell.setCellStyle(cellStyleAmt); + numberCheck[i] = "N"; + } + + Double data = Double.valueOf(String.valueOf(obj)); + cell.setCellType(Cell.CELL_TYPE_NUMERIC); + cell.setCellValue(("null").equals(data)?0:data); + + } else { + String data = String.valueOf(obj); + if ( data.length() == 8 && ( id_txt.matches(".*_DE") || id_txt.matches(".*BIRTH") ) ){ + data = data.substring(0, 4) + "-" + data.substring(4, 6) + "-" + data.substring(6, 8); + } + cell.setCellValue(("null").equals(data)?"":data); + } + + sheet.autoSizeColumn(i); + sheet.setColumnWidth(i, (sheet.getColumnWidth(i)) + 512 ); + } + } + + + /* ==================== + * 푸터(footer) 출력 + ==================== */ + //합계 + int firstRow = 1; + row = sheet.createRow(rowCount++); + for ( int i=0; i < jsonArray.length(); i++ ) { + Cell cell = row.createCell(i); + cell.setCellStyle(sumCellStyle); + + String title_txt = jsonArray.getJSONObject(i).getString("title"); + //title이 "NO"일 경우 합계제외 + if(!title_txt.equals("NO")) + continue; + //첫줄이 숫자형식일 경우만 formula 적용 + if(numberCheck[i].equals("N")){ + // Cell Reference + CellReference cellRef1 = new CellReference(firstRow, cell.getColumnIndex()); + String fromStr = cellRef1.formatAsString(); + CellReference cellRef2 = new CellReference(row.getRowNum()-1, cell.getColumnIndex()); + String toStr = cellRef2.formatAsString(); + + cell.setCellType(Cell.CELL_TYPE_NUMERIC); + cell.setCellFormula("SUM(" + fromStr + ":" + toStr + ")"); + } + } + + ServletOutputStream out = response.getOutputStream(); + workbook.write(out); + + if (out != null) out.close(); + } catch (Exception e) { + throw e; + } + + } +} diff --git a/src/main/java/kr/xit/framework/core/resolver/XitExceptionResolver.java b/src/main/java/kr/xit/framework/core/resolver/XitExceptionResolver.java new file mode 100644 index 00000000..c2cbfa76 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/resolver/XitExceptionResolver.java @@ -0,0 +1,75 @@ +package kr.xit.framework.core.resolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; + +import kr.xit.framework.core.message.XitMessageSource; + +/** + * + * @업무그룹명: 예외처리 resolver 클래스 + * @설명: 서비스 호출방식(submit, ajax)에 따라 exception을 handling 한다. + * @최초작성일: 2020. 3. 20. 오후 2:56:55 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitExceptionResolver extends SimpleMappingExceptionResolver{ + private static final Logger logger = LoggerFactory.getLogger(XitExceptionResolver.class); + private String ajaxErrorView; + private XitMessageSource xitMessageSource; + + @Override + protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, + Object handler, Exception ex) { + StackTraceElement[] stackElement = ex.getStackTrace(); + if(stackElement.length>0){ + logger.error(String.format("[ERROR Package] %s" , stackElement[0].getClassName() )); + logger.error(String.format("[ERROR Point] Class->%s:%s Method->%s", stackElement[0].getFileName(), stackElement[0].getLineNumber(), stackElement[0].getMethodName())); + } + logger.error("[ERROR PrintStackTrace]:::", ex); + + try { + if(ex.getMessage().indexOf("java.sql.SQLSyntaxErrorException")>-1) + ex = new RuntimeException("SQL 구문 오류가 발생 했습니다."); + else if(ex.getMessage().indexOf("java.sql.SQL")>-1) + ex = new RuntimeException("SQL 오류가 발생 했습니다."); + else if(ex.getMessage().indexOf("org.apache.ibatis.reflection.ReflectionException: There is no getter for property named")>-1) + ex = new RuntimeException("SQL 바인딩 변수의 getter가 없습니다."); + + if(ex instanceof AccessDeniedException) + ex = new RuntimeException(xitMessageSource.getMessage("custom.fail.accessDenied"), ex); + } catch (Exception e) {} + + String isAJAX = request.getHeader("AJAX")==null?"false":request.getHeader("AJAX"); + if("true".equals(isAJAX)){ + String viewName = ajaxErrorView; + applyStatusCodeIfPossible(request, response, 500); + return getModelAndView(viewName, ex, request); + }else{ + return super.doResolveException(request, response, handler, ex); + } + } + + public String getAjaxErrorView() { + return ajaxErrorView; + } + + public void setAjaxErrorView(String ajaxErrorView) { + this.ajaxErrorView = ajaxErrorView; + } + + public void setXitMessageSource(XitMessageSource xitMessageSource) { + this.xitMessageSource = xitMessageSource; + } + + + +} diff --git a/src/main/java/kr/xit/framework/core/resolver/XitMultipartResolver.java b/src/main/java/kr/xit/framework/core/resolver/XitMultipartResolver.java new file mode 100644 index 00000000..5c00080a --- /dev/null +++ b/src/main/java/kr/xit/framework/core/resolver/XitMultipartResolver.java @@ -0,0 +1,131 @@ +package kr.xit.framework.core.resolver; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the ";License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS"; BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import org.apache.commons.fileupload.FileItem; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartException; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + +/** + * + * @업무그룹명: 파일업로드 처리를 위한 클래스 + * @설명: CommonsMultipartResolver.parseFileItems를 오버라이딩 하여 다음 내용 개선 + *
-<input type="file".../> 선언 후 파일 미첨부 시 servlet에서 제외 + *
-다중파일 업로드 시 <input type="file".../>의 name 속성이 중복되어도 정상적으로 첨부 가능 + * @최초작성일: 2020. 5. 15. 오후 4:51:29 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMultipartResolver extends CommonsMultipartResolver { + + private static final Logger LOGGER = LoggerFactory.getLogger(XitMultipartResolver.class); + + public XitMultipartResolver() { + } + + /** + * 첨부파일 처리를 위한 multipart resolver를 생성한다. + * + * @param servletContext + */ + public XitMultipartResolver(ServletContext servletContext) { + super(servletContext); + } + + /** + * multipart에 대한 parsing을 처리한다. + */ + @SuppressWarnings("rawtypes") + @Override + protected MultipartParsingResult parseFileItems(List fileItems, String encoding) { + + MultiValueMap multipartFiles = new LinkedMultiValueMap(); + Map multipartParameters = new HashMap(); + + for (Iterator it = fileItems.iterator(); it.hasNext();) { + FileItem fileItem = (FileItem) it.next(); + + /** + * 처리 분기 + * -필드(field) or 첨부파일 여부에 따라 처리를 분기한다. + * -필드(field) 목록은 Map, 첨부파일은 MultipartFile로 parsing 후 List Collection에 담아 wrapping 처리 한다. + */ + if (fileItem.isFormField()) { + + /* ============================ + * field 정보를 Map에 담는다 + ============================ */ + String value = null; + if (encoding != null) { + try { + value = fileItem.getString(encoding); + } catch (UnsupportedEncodingException ex) { + LOGGER.warn("Could not decode multipart item '{}' with encoding '{}': using platform default", fileItem.getFieldName(), encoding); + value = fileItem.getString(); + } + } else { + value = fileItem.getString(); + } + String[] curParam = multipartParameters.get(fileItem.getFieldName()); + if (curParam == null) { + multipartParameters.put(fileItem.getFieldName(), new String[] { value }); + } else { + String[] newParam = StringUtils.addStringToArray(curParam, value); + multipartParameters.put(fileItem.getFieldName(), newParam); + } + } else { + /* ============================ + * 첨부파일 정보를 List에 담는다 + * -파일사이즈가 0인 경우 제외 한다. + ============================ */ + if (fileItem.getSize() > 0) { + CommonsMultipartFile file = new CommonsMultipartFile(fileItem); + + List fileList = new ArrayList(); + fileList.add(file); + + if (multipartFiles.put(fileItem.getName(), fileList) != null) { + throw new MultipartException("Multiple files for field name [" + file.getName() + "] found - not supported by MultipartResolver"); + } + LOGGER.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize() + " bytes with original filename [" + file.getOriginalFilename() + + "], stored " + file.getStorageDescription()); + + } + + } + } + + return new MultipartParsingResult(multipartFiles, multipartParameters, null); + } +} diff --git a/src/main/java/kr/xit/framework/core/resolver/vo/DataVO.java b/src/main/java/kr/xit/framework/core/resolver/vo/DataVO.java new file mode 100644 index 00000000..4b1da856 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/resolver/vo/DataVO.java @@ -0,0 +1,40 @@ +package kr.xit.framework.core.resolver.vo; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +@XmlRootElement(name = "result") +@XmlType(name="Data", namespace="kr.xit.framework.core.resolver.vo.Data", propOrder={"key", "value"}) +public class DataVO { + + String key; + String value; + + public String getKey() { + return key; + } + + @XmlElement(name="key") + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + @XmlElement(name="value") + public void setValue(String value) { + this.value = value; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append(getKey()); + sb.append("__"); + sb.append(getValue()); + return sb.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/core/resolver/vo/Result.java b/src/main/java/kr/xit/framework/core/resolver/vo/Result.java new file mode 100644 index 00000000..8e87f646 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/resolver/vo/Result.java @@ -0,0 +1,81 @@ +package kr.xit.framework.core.resolver.vo; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlElementRefs; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +@XmlRootElement(name="result") +@XmlType(name="Result", namespace="kr.xit.framework.core.resolver.vo.Result", propOrder={"code", "message", "recordset"}) +public class Result { + + String code = ""; // 작업 결과 코드 + String message = ""; // 작업 결과 메시지 + + List recordset; // 결과셋 + + public Result(){ + + } + + public String getCode() { + return code; + } + + @XmlElement(name="code") + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + @XmlElement(name="message") + public void setMessage(String message) { + this.message = message; + } + + @XmlElementWrapper(name="recordset") + @XmlElementRefs({ + @XmlElementRef(name="record", type=DataVO.class) + }) + public List getRecordset() { + return recordset; + } + + public void setRecordset(List recordset) { + this.recordset = recordset; + } + + @Override + public String toString() { + StringBuffer result = new StringBuffer(); + result.append(code); + result.append("__"); + result.append(message); + + if(recordset != null){ + if(recordset.size() != 0){ + StringBuffer record = new StringBuffer(); + record.append("_^"); + boolean start = true; + for(T item : recordset){ + if(start){ + start = false; + }else{ + record.append("#!"); + } + record.append(item); + } + result.append(record.toString()); + } + } + + return result.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/Checks.java b/src/main/java/kr/xit/framework/core/utils/Checks.java new file mode 100644 index 00000000..60ca312b --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/Checks.java @@ -0,0 +1,144 @@ +package kr.xit.framework.core.utils; + +import java.util.Iterator; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Checks { + /** + * val이 null이 아니면 그대로 리턴, 아니면 defVal + * + * @param val T + * @param defVal T + * @return T + */ + public static < T > T checkVal( T val, T defVal ) { + return ( isNotNull( val ) ? val : defVal ); + } + + /** + * val이 Empty가 아니면 그대로 리턴, 아니면 defVal (Empty는 배열이나 Map도 가능) + * + * @param val T + * @param defVal T + * @return T + */ + public static < T > T checkEmptyVal( T val, T defVal ) { + return ( isNotEmpty( val ) ? val : defVal ); + } + + /** + * expression이 true이면 val, 아니면 defVal + * + * @param expression boolean + * @param tVal T + * @param fVal T + * @return T + */ + public static < T > T checkVal( boolean expression, T tVal, T fVal ) { + return ( expression ? tVal : fVal ); + } + + + public static boolean isNull( Object checkValue ) { + return !isNotNull(checkValue); + } + + public static boolean isNotNull( Object checkValue ) { + return checkValue != null; + } + + public static boolean isEmpty( Object checkValue ) { + return !isNotEmpty(checkValue); + } + + public static boolean isNotEmpty( Object checkValue ) { + if ( isNotNull( checkValue ) ) { + + if ( checkValue instanceof String ) { + return !( ( String ) checkValue ).isEmpty(); + } + else if ( checkValue instanceof Iterator< ? > ) { + return ( ( Iterator< ? > ) checkValue ).hasNext(); + } + else if ( checkValue instanceof Iterable< ? > ) { + return ( ( Iterable< ? > ) checkValue ).iterator().hasNext(); + } + else if ( checkValue instanceof Map< ?, ? > ) { + return !( ( Map< ?, ? > ) checkValue ).isEmpty(); + } +// else if ( checkValue instanceof DataSetMap ) { +// return !( ( DataSetMap ) checkValue ).isEmpty(); +// } + + if ( checkValue.getClass().isArray() ) { + return ( ( Object[] ) checkValue ).length != 0; + } + else { + // 체크하는 항목이 아니면서 not null 이면 not empty로 간주한다. + return true; + } + } + + return false; + } + + public static boolean isNumeric( String str ) + { + if ( Checks.isEmpty( str ) ) + return false; + + return str.matches( "-?\\d+(.\\d+)?" ); + } + + public static boolean isInstance( Object checkValue, Class< ? >... classes ) { + if ( isNotNull( checkValue ) ) { + for ( Class< ? > clazz : classes ) { + if ( clazz.isInstance( checkValue ) ) { + return true; + } + } + } + + return false; + } + + /** + * email형식 체크 + * + * @메소드 : isCheckEmail + * + * @param str + * @return + */ + public static boolean isCheckEmail( String str ) { + if ( Checks.isEmpty( str ) ) + return false; + + String regex = "^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$"; + Pattern pattern = Pattern.compile( regex, Pattern.CASE_INSENSITIVE ); + + Matcher matcher = pattern.matcher( str ); + return matcher.find(); + } + + /** + * 전화형식 체크 + * + * @메소드 : isCheckTel + * + * @param str + * @return + */ + public static boolean isCheckTel( String str ) { + if ( Checks.isEmpty( str ) ) + return false; + + String regex = "^\\d[\\d-]+\\d$"; + Pattern pattern = Pattern.compile( regex, Pattern.MULTILINE ); + + Matcher matcher = pattern.matcher( str ); + return matcher.find(); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/JsonUtil.java b/src/main/java/kr/xit/framework/core/utils/JsonUtil.java new file mode 100644 index 00000000..ef1084f0 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/JsonUtil.java @@ -0,0 +1,162 @@ +package kr.xit.framework.core.utils; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * JSON Util Class + */ +public class JsonUtil { + + /** + * Object 를 json string으로 변환 + * @return String + * @param obj Object + */ + public static String toJson(Object obj) throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(Include.NON_NULL); +// mapper.setSerializationInclusion(Include.NON_EMPTY); + return obj != null ? mapper.writeValueAsString(obj) : null; + } + + /** + * Json string을 지정된 class로 변환 + * @return T + * @param str String + * @param cls Class + */ + public static T toObject(String str, Class cls) throws IOException { + ObjectMapper om = new ObjectMapper(); + om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return str != null ? om.readValue(str, cls) : null; + } + + /** + * Json string을 지정된 class로 변환 + * @param obj Object + * @param cls Class + * @return T + */ + public static T toObjByObj(Object obj, Class cls) throws IOException { + String str = toJson(obj); + ObjectMapper om = new ObjectMapper(); + om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return str != null ? om.readValue(str, cls) : null; + } + + /** + * Json string을 지정된 class list로 변환 + * @return T + * @param str + * @param cls + * @throws IOException + */ + public static List toObjectList(String str, Class cls) throws IOException { + ObjectMapper om = new ObjectMapper(); + om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + if(str != null){ + return om.readValue(str, om.getTypeFactory().constructCollectionType(List.class, cls)); + }else { + return null; + } + } + + /** + * JSON 문자열을 Map 구조체로 변환 + * @param str String str + * @return Map + */ + public static Map toMap(String str) throws IOException{ + Map map = null; + ObjectMapper om = new ObjectMapper(); + map = om.readValue(str, new TypeReference>(){}); + return map; + } + + /** + * Json 데이터 보기 좋게 변환. + * @param obj Object json + * @return String + */ + public static String jsonEnterConvert(Object obj) { + String rltStr; + + try { + rltStr = jsonEnterConvert((JsonUtil.toJson(obj))); + } catch(Exception e) { + rltStr = ""; + } + + return rltStr; + } + + /** + * Json 데이터 보기 좋게 변환. + * @param json String json + * @return String + */ + private static String jsonEnterConvert(String json) { + + if( json == null || json.length() < 2 ) + return json; + + final int len = json.length(); + final StringBuilder sb = new StringBuilder(); + char c; + String tab = ""; + boolean beginEnd = true; + for( int i=0 ; i 0 ) + sb.insert(0, '\n'); + return sb.toString(); + } +} + diff --git a/src/main/java/kr/xit/framework/core/utils/XitCmmnUtil.java b/src/main/java/kr/xit/framework/core/utils/XitCmmnUtil.java new file mode 100644 index 00000000..3a91664c --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitCmmnUtil.java @@ -0,0 +1,1146 @@ +package kr.xit.framework.core.utils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.json.simple.JSONObject; +import org.springframework.ui.Model; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import kr.xit.framework.biz.login.model.XitLoginVO; + +/** + * + * @업무그룹명: 공통 도구 + * @설명: framework에서 제공하는 공통 기능을 기술 한다. + * 기능 추가 및 수정을 하지 않는 것을 원칙으로 하며 + * 추가적인 기능이 필요할 경우 클래스를 생성 후 해당 클래스를 상속받아 사용하도록 한다. + * @최초작성일: 2018. 7. 1. 오후 12:26:49 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitCmmnUtil { + /** + * OS환경이 Window일 경우 C드라이브로 변경된 경로를 리턴한다. + * @param path + * @return + */ + public static String setOsPath(String path){ + if(System.getProperty("os.name").contains("Window")){ + path="C:"+path; + } + return path; + } + + /** + *
메소드 설명: 객체가 빈(empty)값인지 확인
+	 *  -비어있으면 true 반환
+	 *  -비어있지 않으면 false 반환
+ * @param value Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 1. + */ + public static boolean isEmpty(Object value){ + if(value instanceof String){ + return value==null || value.toString().isEmpty(); + }else if(value instanceof List){ + return value==null || ((List)value).isEmpty(); + }else if(value instanceof Map){ + return value==null || ((Map)value).isEmpty(); + }else{ + return value==null; + } + } + + /** + *
메소드 설명: 객체가 빈(empty)값이 아닌지 확인
+	 *  -비어있지 않으면 true 반환
+	 *  -비어있으면 false 반환
+ * @param value Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 1. + */ + public static boolean notEmpty(Object value){ + return !isEmpty(value); + } + /** + *
메소드 설명: 객체가 빈(empty)값이 아닌지 확인
+	 * 	-비어있지 않으면 true 반환
+	 * 	-비어있으면 false 반환
+	 *  ※기본적으로 notEmpty()와 동일하나 String 타입인 경우 
+	 *  	->value가 공백("")이면 true 반환
+	 *  	->value가 null이면 false 반환
+	 *  
+ * @param value Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 2. 15. + */ + public static boolean notBlank(Object value){ + if(value instanceof String){ + return !(value==null); + }else{ + return !isEmpty(value); + } + } + + /** + *
메소드 설명: 객체의 길이(사이즈)와 동일한지 확인
+	 * 	-동일하면 true 반환
+	 * 	-동일하지 않으면 false 반환
+	 * 
+ * @param value Object + * @param length 객체의 예상 길이(사이즈) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 11. 7. + */ + public static boolean isLength(Object value, int length) { + return length(value)==length; + } + /** + *
메소드 설명: 객체의 길이(사이즈)와 다른지 확인
+	 * 	-동일하면 false 반환
+	 * 	-동일하지 않으면 true 반환
+	 * 
+ * @param value Object + * @param length 객체의 예상 길이(사이즈) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 11. 7. + */ + public static boolean isNotLength(Object value, int length) { + return !isLength(value, length); + } + + /** + *
메소드 설명: 객체의 길이(사이즈)를 반환한다.
+ * @param value Object + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 11. 7. + */ + public static int length(Object value) { + if(isEmpty(value)) + return 0; + + + if(value instanceof String){ + return ((String) value).length(); + }else if(value instanceof List){ + return ((List)value).size(); + }else if(value instanceof String[]){ + return ((String[]) value).length; + }else{ + return 0; + } + + } + + /** + *
메소드 설명: 객체가 숫자(number) 타입인지 확인
+	 *   -숫자이면 true 반환
+	 *   -숫자가 아니면 false 반환
+ * @param value + * @param regex 제거할 문자or정규식 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 17. + */ + public static boolean isNumber(Object value, String regex){ + if(value instanceof String) + return isNumber(((String) value).replaceAll(regex, "")); + + return isNumber(value); + } + /** + *
메소드 설명: 객체가 숫자(number) 타입인지 확인
+	 *   -숫자이면 true 반환
+	 *   -숫자가 아니면 false 반환
+ * @param value + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 17. + */ + public static boolean isNumber(Object value){ + try { + if(value instanceof Integer || value instanceof Long ){ + return true; + }else if(value instanceof Float){ + return true; + }else if(value instanceof String){ + try { + Long.parseLong((String) value); + return true; + } catch (Exception e) { + Float.parseFloat((String) value); + return true; + } + }else{ + return false; + } + } catch (Exception e) { + return false; + } + } + + + /** + *
메소드 설명: 문자열이 금액 인지 확인
+	 *   -문자열이 금액이면 true 반환
+	 *   -문자열이 금액이 아니면 false 반환
+	 * 
+ * @param value String + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 1. 15. + */ + public static boolean isAmount(String value){ + try { + Pattern pattern = Pattern.compile("^[0-9]{1,3}(,[0-9]{3})*$"); + Matcher matcher = pattern.matcher(value); + boolean result = matcher.find(); + return result; + } catch (Exception e) { + return false; + } + } + + + /** + *
메소드 설명: 날짜 유효성 확인
+	 *  -입력값이 날짜타입(yyyyMMdd)인지 확인한다.
+	 *  
+ * @param value + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 20. + */ + public static boolean isDate(Object value){ + return isDate(value, null); + } + /** + *
메소드 설명: 날짜 유효성 확인
+	 *  -입력값이 날짜타입인지 확인한다.
+	 *  -pattern 인자를 통해 날짜 타입을 설정 할 수 있다.
+	 *  
+ * @param value + * @param pattern + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 12. 31. + */ + public static boolean isDate(Object value, String pattern){ + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + try { + String regex = "[^0-9]"; + value = String.valueOf(value).replaceAll(regex, ""); + String strDate = simpleDateFormat.format(simpleDateFormat.parse(String.valueOf(value))); + if(!strDate.equals(value)) + return false; + } catch (Exception e) { + return false; + } + return true; + } + /** + *
메소드 설명: 날짜 유효성 확인
+	 *  -입력값이 날짜타입(yyyyMMdd)인지 확인한다.
+	 *  -입력값에 구분자(/,-,.)가 포함되어 있을 경우 delimiter에 입력한다.
+	 *  -delimiter를 설정하지 않을 경우 default는 하이픈(-)으로 설정된다.
+ * @param value + * @param delimiter + * @param pattern + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 12. 31. + */ + public static boolean isDate(Object value, String delimiter, String pattern){ + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + try { + value = String.valueOf(value).replace(isEmpty(delimiter)?"-":delimiter,""); + String strDate = simpleDateFormat.format(simpleDateFormat.parse(String.valueOf(value))); + if(!strDate.equals(value)) + return false; + } catch (Exception e) { + return false; + } + return true; + } + + + /** + *
메소드 설명: 시간 유효성 확인
+	 *  -입력값이 24시간(HHmm, 0~23)타입인지 확인한다.
+	 *  -입력값에 구분자(:,.)가 포함되어 있을 경우 delimiter에 입력한다
+	 *  -delimiter를 설정하지 않을 경우 default는 콜론(:)으로 설정된다.
+	 *  
+ * @param value + * @param delimiter + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 20. + */ + public static boolean isTime(Object value, String delimiter){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmm"); + try { + value = String.valueOf(value).replace(isEmpty(delimiter)?":":delimiter,""); + String strTime = simpleDateFormat.format(simpleDateFormat.parse(String.valueOf(value))); + if(!strTime.equals(value)) + return false; + } catch (Exception e) { + return false; + } + return true; + } + + /** + *
메소드 설명: 오늘 날짜를 반환한다.
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 7. 23. + */ + public static String getToDate(String pattern){ + return getToDate(pattern, Locale.KOREA); + } + /** + *
메소드 설명: 오늘 날짜를 반환한다.
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param locale Locale + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 8. 16. + */ + public static String getToDate(String pattern, Locale locale){ + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, locale); + return dateFormat.format((new Date())); + } + /** + *
메소드 설명: 문자열 타입의 날짜 데이터를 Date객체로 반환한다.
+ * @param day 날짜 + * @param pattern 날짜 패턴(default: yyyyMMdd) + * @return Date 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 21. + */ + public static Date parseDate(String day, String pattern) { + return parseDate(day, pattern, Locale.KOREA); + } + /** + *
메소드 설명: 문자열 타입의 날짜 데이터를 Date객체로 반환한다.
+ * @param day 날짜 + * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param locale Locale + * @return Date 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 21. + */ + public static Date parseDate(String day, String pattern, Locale locale) { + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, locale); + Date result = null; + try { + result = dateFormat.parse(day); + } catch (ParseException e) { + throw new RuntimeException("날짜변환 실패",e); + } + return result; + } + + + + /** + *
메소드 설명: 기준날짜에 대한 연산 결과를 돌려준다.
+	 *	기준날짜에 일(day) 단위 연산이 가능하다.
+	 * 		ex> 기준날짜: 20181205, 더할날짜: 1 이면 "20181206" 반환 
+	 * 		ex> 기준날짜: 20181205, 더할날짜: -1 이면 "20181204" 반환 
+	 * 
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param date 기준날짜(ex: 20181205) + * @param addDay 더할 날짜 + * @return + * @throws ParseException String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 12. 5. + */ + public static String getDateToAddDay(String pattern, String date, int addDay){ + return getDateToAddDay(pattern, date, addDay, null); + } + /** + *
메소드 설명: 기준날짜에 대한 연산 결과를 돌려준다.
+	 *	기준날짜에 일(day) 단위 연산이 가능하다.
+	 * 		ex> 기준날짜: 20181205, 더할날짜: 1 이면 "20181206" 반환 
+	 * 		ex> 기준날짜: 20181205, 더할날짜: -1 이면 "20181204" 반환 
+	 * 
+ * @param pattern 날짜 패턴(default: yyyyMMdd) + * @param date 기준날짜(ex: 20181205) + * @param addDay 더할 날짜 + * @param rsPattern 리턴받을 날짜 패턴 ex:yyyy-MM-dd(default: yyyyMMdd) + * @return + * @throws ParseException String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String getDateToAddDay(String pattern, String date, int addDay, String rsPattern){ + if(XitCmmnUtil.isEmpty(date)) + return date; + + pattern = isEmpty(pattern)?"yyyyMMdd":pattern; + rsPattern = isEmpty(rsPattern)?"yyyyMMdd":rsPattern; + + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); + Calendar cal = Calendar.getInstance(); + try { + cal.setTime(dateFormat.parse(date)); + } catch (ParseException e) { + throw new RuntimeException("(날짜연산)날짜변환 실패. 날짜 값이 유효하지 않습니다.",e); + } + cal.add(Calendar.DATE, addDay); + + SimpleDateFormat rsSateFormat = new SimpleDateFormat(rsPattern); + return rsSateFormat.format(cal.getTime()); + } + + + /** + *
메소드 설명: 두 날짜간 일수를 반환한다.
+	 * 	ex)201901003(aDe)-20191001(bDe) = 2
+	 * 
+ * @param aDe 시작일(yyyyMMdd) + * @param bDe 종료일(yyyyMMdd) + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 10. 4. + */ + public static int getDateBetweenAandB(String aDe, String bDe) { + int result = 0; + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + try { + Date aDate = format.parse(aDe); + Date bDate = format.parse(bDe); + + + long calcDate = aDate.getTime() - bDate.getTime(); + long cntDay = calcDate / (24*60*60*1000); + + result = (int) Math.abs(cntDay); + } catch (ParseException e) { + throw new RuntimeException("(날짜간일수)날짜변환 실패. 날짜 값이 유효하지 않습니다.", e); + } + + return result; + } + + + + /** + *
메소드 설명: 숫자만 남도록 치환 후 반환한다.
+ * @param str + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2018. 10. 12. + */ + public static String replaceToNumber(String str){ + if(isEmpty(str)) + return str; + + String regex = "[^0-9]"; + str = str.replaceAll(regex, ""); + + return str; + } + /** + *
메소드 설명: 숫자만 남도록 치환 후 int형으로 반환한다.
+ * @param str + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 26. + */ + public static int parseInt(String str) { + str = replaceToNumber(str); + int result = isEmpty(str)?0:Integer.parseInt(str); + return result; + } + + /** + *
메소드 설명: 금액만 남도록 치환 후 int형으로 반환한다.
+ * @param str + * @return int 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 26. + */ + public static int parseAmount(String str) { + if(str == null) + return 0; + + String regex = "[^0-9\\.]"; + str = str.replaceAll(regex, ""); + + int result = (int) (isEmpty(str)?0:Math.floor(Integer.parseInt(str))); + return result; + } + + + /** + *
메소드 설명: value의 값이 str로 시작하면 true 반환, 아니면 false 반환
+ * @param str + * @param value + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 1. + */ + public static boolean isStartWith(String str, String value) { + return value.startsWith(str); + } + + + + /** + *
메소드 설명: 주민등록번호 유효성 검증
+ * @param juminNo 주민번호 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 8. 16. + */ + public static boolean isJuminNo(String juminNo){ + try{ + /** + * 필수값 확인 + */ + if (isEmpty(juminNo)) + return false; + + + String strJuminNo = juminNo.replace("-", "").trim(); + /** + * 유효성 확인 + */ +// //주민번호가 숫자이면 정상 +// if(CommonUtil.isNumber(strJuminNo)) +// return false; + //주민번호가 13자리가 아닌 경우 + if (strJuminNo.length() != 13 ) + return false; + //월이 1~12월이 아닌 경우 + if (Integer.parseInt(strJuminNo.substring(2, 4)) <= 0 || Integer.parseInt(strJuminNo.substring(2, 4)) > 12) + return false; + //일이 1~31일이 아닌 경우 + if (Integer.parseInt(strJuminNo.substring(4, 6)) <= 0 || Integer.parseInt(strJuminNo.substring(4, 6)) > 31) + return false; + //주민번호 앞자리가 1, 2, 3, 4이 아닌 경우 + if (Integer.parseInt(strJuminNo.substring(6, 7)) != 1 && Integer.parseInt(strJuminNo.substring(6, 7)) != 2 && Integer.parseInt(strJuminNo.substring(6, 7)) != 3 && Integer.parseInt(strJuminNo.substring(6, 7)) != 4) + return false; + //법인번호인 경우 + if (strJuminNo.startsWith("110111")) + return false; + + + //모든 체크 로직을 통과 하면 Validate = true임 + return true; + + +// /*========================================================================= +// * [주민등록번호 검증방법] +// * -주민등록번호 예: 640713-1018433 +// * 우선 주민등록번호 마지막자리수만 제외하고, +// * 각각의 자리수마다 다음과 같은 수를 곱하여 전체를 더한다. +// * +// * 6 4 0 7 1 3 1 0 1 8 4 3 +// * x x x x x x x x x x x x +// * 2 3 4 5 6 7 8 9 2 3 4 5 +// * ----------------------- +// * + + + + + + + + + + + + +// * 즉, (6*2)+(4*3)+(0*4)+(7*5)+(1*6)+(3*7)+(1*8)+(0*9)+(1*2)+(8*3)+(4*4)+(3*5) = 151 +// * 그러면 151 이란 수가 나온다. 이 151을 매직키인 11로 나누어 나머지만 취한다. +// * 151 / 11 = 몫: 13 <-- 버림 +// * 나머지: 8 +// * 마지막 단계로 매직키인 11에서 나머지 8을 빼면 3이란 수가 나오는데, +// * 이숫자가 주민등록번호 마지막 자리의 숫자와 일치하면 대한민국 국민이다. +// * +// * 11 - 8 = 3 --> 정상적인 주민등록번호임 +// * +// =========================================================================*/ +// //Enc Digest +// String salt = "234567892345"; +// int sumDt = 0; +// for(int i=0; i<12; i++) { +// sumDt += Integer.parseInt(strJuminNo.substring(i, i+1)) * Integer.parseInt(salt.substring(i, i+1)); +// } +// +// //마지막자리와 암호화 값 비교 +// int ckDisit = 11 - (sumDt % 11); +// if (Integer.parseInt(strJuminNo.substring(12, 13)) != ckDisit) +// return false; + }catch (Exception e){ + throw new RuntimeException("주민번호 검증에 실패하였습니다.", e); + } + + } + + + /** + *
메소드 설명: 서울지역 택시 유무를 반환 한다.
+     * 	#반환 정보
+     * 	 -서울지역 택시인 경우 true 반환
+     * 	 -서울지역 택시가 아닌 경우 false 반환
+     * 	#판별 기준 
+     *	 -개인택시 : 31(바,사,아,자), 32(바,사,아,자), 35(바,사,아), 36(바)  
+     *	 -법인택시 : 33(바,사,아,자), 34(바,사,아,자), 37(바)             
+     * 
+ * @param vhcle_no 차량번호 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 10. 4. + */ + public static boolean isTaxiOfSeoul(String vhcle_no) + { + Map mTaxi = new HashMap(); + mTaxi.put("서울31바", ""); + mTaxi.put("서울31사", ""); + mTaxi.put("서울31아", ""); + mTaxi.put("서울31자", ""); + mTaxi.put("서울32바", ""); + mTaxi.put("서울32사", ""); + mTaxi.put("서울32아", ""); + mTaxi.put("서울32자", ""); + mTaxi.put("서울35바", ""); + mTaxi.put("서울35사", ""); + mTaxi.put("서울35아", ""); + mTaxi.put("서울36바", ""); + mTaxi.put("서울33바", ""); + mTaxi.put("서울33사", ""); + mTaxi.put("서울33아", ""); + mTaxi.put("서울33자", ""); + mTaxi.put("서울34바", ""); + mTaxi.put("서울34사", ""); + mTaxi.put("서울34아", ""); + mTaxi.put("서울34자", ""); + mTaxi.put("서울37바", ""); + + + try{ + //지역 확인 + if (!vhcle_no.startsWith("서울")) + return false; + + //차량번호 길이 확인 + if (vhcle_no.length() != 9) + return false; + + //차량번호 유효성 확인 + if (mTaxi.containsKey(vhcle_no.substring(0,5))) + return true; + + return false; + }catch (Exception e) { + throw e; + } + } + + + + + /** + *
메소드 설명: 우편번호 포맷에 맞추어 반환한다.
+     * 	-지번(구주소) 우편번호인 경우 ex)123456 -> 123-456
+     * 	-도로명(새주소) 우편번호인 경우 ex)12345 -> 12345
+     * 
+ * @param zip 우편번호 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String fmtZip(String zip) { + if(XitCmmnUtil.isEmpty(zip)) + return zip; + + + if(zip.length()==6) + return String.format("%s-%s", zip.substring(0,3), zip.substring(3)); + + return zip; + } + /** + *
메소드 설명: 소유자번호를 유형별 포맷에 맞추어 반환한다.
+     * 	-주민번호
+     * 	 ex)1234561234567 -> 123456-1234567
+     * 	    또는 1234561234567 -> 123456-*******
+     * 	-사업자번호
+     * 	 ex)1231212345 -> 123-12-12345
+     * 
+ * @param owner_no 소유자번호 + * @param isHidden 뒷자리숨김 여부(주민번호만 해당) + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String fmtOwnerNo(String owner_no, boolean isHidden) { + if(isEmpty(owner_no)) + return owner_no; + + owner_no = owner_no.replace("-", "").replace(" ", ""); + switch (owner_no.length()) { + case 10: //사업자번호 + owner_no = String.format("%s-%s-%s", owner_no.substring(0,3), owner_no.substring(3,5), owner_no.substring(5)); + break; + case 13: //주민번호 + if(isHidden) + owner_no = String.format("%s-*******", owner_no.substring(0,6)); + else + owner_no = String.format("%s-%s", owner_no.substring(0,6), owner_no.substring(6)); + break; + default: + break; + } + + return owner_no; + } + + /** + *
메소드 설명: 가상계좌번호를 포맷에 맞추어 반환한다.
+     * 	-가상계좌번호
+     * 	 ex)61573982518679 -> 615-739825-18-679
+     * 
+ * @param accountNo 가상계좌번호 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 19. + */ + public static String fmtVirtualAccount(String accountNo) { + if(isEmpty(accountNo)) + return accountNo; + + accountNo = accountNo.replace("-", "").replace(" ", ""); + if(accountNo.length()==14) + accountNo = String.format("%s-%s-%s-%s", accountNo.substring(0,3) + ,accountNo.substring(3,9) + ,accountNo.substring(9,11) + ,accountNo.substring(11)); + + + return accountNo; + } + + + + /** + *
메소드 설명: Map에 담긴 모든 key,value를 Json 포맷 문자열로 변환 후 반환 한다.
+     * 	ex) Map map = new HashMap
+     * 		map.put("key1", "value1");
+     * 		map.put("key2", "value2");
+     * 		map.put("key3", "value3");
+     *    -> {"key1":"value1","key2":"value2","key3":"value3"}
+     * 
+ * @param map Map<String, String> + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 12. 16. + */ + public static String convertJsonFmtStrFromMap(Map map) { + /** + * json 포맷 문자열로 변환 + */ + StringBuffer sb = new StringBuffer(); + Iterator it = map.keySet().iterator(); + sb.append("{"); + int i=0; + while(it.hasNext()) { + String key = it.next(); + Object value = map.get(key); + if(i>0) + sb.append(","); + try { + if(value instanceof String) { + sb.append(String.format("\"%s\":\"%s\"", key, + XitCmmnUtil.isEmpty(value) ? "" : URLEncoder.encode(String.valueOf(value), "UTF-8"))); + }else{ + sb.append(key + ":" + (XitCmmnUtil.isEmpty(value) ? null : value)); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + i++; + } + sb.append("}"); + + return sb.toString(); + } + + /** + *
메소드 설명: Model에 담긴 모든 key,value를 Json 포맷 문자열로 변환 후 반환 한다.
+     * 	ex) Model model = new HashMap
+     * 		model.put("key1", "value1");
+     * 		model.put("key2", "value2");
+     * 		model.put("key3", "value3");
+     *    -> {"key1":"value1","key2":"value2","key3":"value3"}
+     * 
+ * @param model Model; + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 12. 16. + */ + @SuppressWarnings("unchecked") + public static String convertJsonFmtStrFromModel(Model model) { + + Map map = model.asMap(); + + JSONObject json = new JSONObject(); + + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + + // json.addProperty(key, value); + + json.put(key, value); + + } + + return json.toString(); + + /** + * json 포맷 문자열로 변환 + */ +// StringBuffer sb = new StringBuffer(); +// Iterator it = map.keySet().iterator(); +// sb.append("{"); +// int i=0; +// while(it.hasNext()) { +// String key = it.next(); +// String value = String.valueOf(map.get(key)); +// if(i>0) +// sb.append(","); +//// try { +//// sb.append( String.format("\"%s\":\"%s\"", key, XitCmmnUtil.isEmpty(value)?"":URLEncoder.encode(value, "UTF-8") ) ); +//// } catch (UnsupportedEncodingException e) { +//// e.printStackTrace(); +//// } +// sb.append( String.format("\"%s\":\"%s\"", key, XitCmmnUtil.isEmpty(value)?"":value) ); +// i++; +// } +// sb.append("}"); +// +// return sb.toString(); + } + + + + + /** + *
메소드 설명: 세션 객체를 반환한다.
+ * @param req HttpServletRequest + * @return XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 21. + */ + public static XitLoginVO getSession(HttpServletRequest req){ + HttpSession session = req.getSession(); + return (XitLoginVO)session.getAttribute("XitLoginSession"); + } + + /** + *
메소드 설명: 로그인 사용자ID를 반환한다.
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 21. + */ + public static String getUserId(){ + XitLoginVO loginVO = getUserInfo(); + return loginVO.getId(); + } + + /** + *
메소드 설명: 로그인 사용자 고유ID를 반환한다.
+	 * 	-고유ID란? 사용자/기업/일반 회원 테이블의 모든 사용자를 대상으로 하는 식별자를 의미 한다.
+	 * 
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 21. + */ + public static String getUserUniqId(){ + XitLoginVO loginVO = getUserInfo(); + return loginVO.getUniqId(); + } + + /** + *
메소드 설명: 인증된 사용자정보 객체를 반환한다.
+ * @return XitLoginVO 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 21. + */ + public static XitLoginVO getUserInfo() { + return (XitLoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + } + + + /** + *
메소드 설명: Object를 String으로 변환
+	 * 	-Object가 null 일 경우 공백("") 변환 후 반환 한다.
+	 * 
+ * @param obj + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 21. + */ + public static String nvl(Object obj){ + return nvl(obj, ""); + } + /** + *
메소드 설명: Object를 String으로 변환
+	 * 	-Object가 null 일 경우 defaultStr로 변환 후 반환 한다.
+	 * 
+ * @param obj + * @param defaultStr + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 21. + */ + public static String nvl(Object obj, String defaultStr){ + String result = defaultStr; + if(obj != null && !"".equals(obj)){ + if(!"".equals(String.valueOf(obj))){ + result = String.valueOf(obj); + } + } + return result.trim(); + } + + + + + /** + *
메소드 설명: 서버 호출방식이 Ajax 통신인지 확인
+	 * 	-ajax 통신이면 true 아니면 false 반환
+	 * 
+ * @param req ServletRequest + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 10. + */ + public static boolean isAjaxRequest(ServletRequest req) { + return "true".equalsIgnoreCase(((HttpServletRequest) req).getHeader("AJAX")); + } + + + + + /** + *
메소드 설명: 요청 타입별 forward 처리
+	 * 	-submit 호출인 경우 resultData를 요청 URL로 forward 하여 응답처리
+	 * 	-ajax 호출인 경우 resultData를 json 데이터 타입으로 응답처리
+	 * 	-isNoParentKey 값을 true로 설정 시json 응답 데이터의 최상위 key에 "resp" 추가되지 않으며, 최상위 key는 resultData key값이 유지된다.
+	 * 	-isNoParentKey 값을 false로 설정 시json 응답 데이터의 최상위 key는 "resp"이며, 해당 key 안에 resultData가 담겨있다.
+	 * 
+ * @param request HttpServletRequest + * @param response HttpServletResponse + * @param requestUrl 요청경로(submit 호출인 경우 필수 입력) + * @param resultData Map<String, Object> + * @param isNoParentKey 상위 키(key) 여부(true: "resp"키를 추가하지 않음, false: 최상위 키 값을 "resp"로 설정) + * @return void 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws ServletException + * @date: 2020. 9. 14. + */ + private static void forwardByRequestType(HttpServletRequest request, HttpServletResponse response, String requestUrl, Map resultData, boolean isNoParentKey) throws ServletException, IOException { + boolean isAjaxRequest = isAjaxRequest(request); + XitRequestWrapper requestWrapper = new XitRequestWrapper(request); //필요 시 setParameter 사용 가능 + /** + * 요청 타입별 응답데이터 설정 + */ + if(isAjaxRequest) { + requestUrl = "/_cmmn_/util/responseJson.do"; //json 데이터로 response 하도록 처리하는 서비스 경로 + if(isNoParentKey) { + Iterator keys = resultData.keySet().iterator(); + while(keys.hasNext()) { + String key = keys.next(); + Object value = resultData.get(key); + requestWrapper.setAttribute(key, value); + } + requestWrapper.setAttribute("isNoParentKey", isNoParentKey); + }else { + requestWrapper.setAttribute("resp", resultData); //key명칭은 반드시 "resp"로 설정하도록 한다. + requestWrapper.setAttribute("isNoParentKey", isNoParentKey); + } + }else { + if(isEmpty(requestUrl)) + throw new RuntimeException("요청URL(은)는 필수조건 입니다."); + for(String key : resultData.keySet()) + requestWrapper.setAttribute(key, resultData.get(key)); + } + + + /** + * 처리 + */ + //응답(response) 처리 + if(isAjaxRequest){ //ajax 요청시 + requestWrapper.forward(requestUrl, response); + }else { //submit 요청 시 + requestWrapper.forward(requestUrl.replace("forward:", ""), response); + } + } + /** + *
메소드 설명: ajax 요청에 대한 포워딩(forward) 처리
+	 * 	-resultData를 json 타입으로 응답처리 한다.
+	 * 	-응답된 json 데이터의 key는 "resp"이며, 해당 key 안에 resultData가 담겨있다.
+	 * 
+ * @param request + * @param response + * @param resultData + * @throws ServletException + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 14. + */ + public static void forwardForAjaxRequest(HttpServletRequest request, HttpServletResponse response, Map resultData) throws ServletException, IOException { + forwardByRequestType(request, response, null, resultData, false); + } + /** + *
메소드 설명: ajax 요청에 대한 포워딩(forward) 처리
+	 * 	-resultData를 json 타입으로 응답처리 한다.
+	 * 	-isNoParentKey 값을 true로 설정 시json 응답 데이터의 최상위 key에 "resp" 추가되지 않으며, 최상위 key는 resultData key값이 유지된다.
+	 * 	-isNoParentKey 값을 false로 설정 시json 응답 데이터의 최상위 key는 "resp"이며, 해당 key 안에 resultData가 담겨있다.
+	 * 
+ * @param request + * @param response + * @param resultData + * @param isNoParentKey 상위 키(key) 여부(true: "resp"키를 추가하지 않음, false: 최상위 키 값을 "resp"로 설정) + * @throws ServletException + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 14. + */ + public static void forwardForAjaxRequest(HttpServletRequest request, HttpServletResponse response, Map resultData, boolean isNoParentKey) throws ServletException, IOException { + forwardByRequestType(request, response, null, resultData, isNoParentKey); + } + /** + *
메소드 설명: submit 요청에 대한 포워딩(forward) 처리
+	 * 	-resultData를 servlet의 attribute에 담아 요청경로(requestUrl)로 forward 처리 한다.
+	 * 
+ * @param request + * @param response + * @param requestUrl + * @param resultData + * @throws ServletException + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 14. + */ + public static void forwardForSubmitRequest(HttpServletRequest request, HttpServletResponse response, String requestUrl, Map resultData) throws ServletException, IOException { + forwardByRequestType(request, response, requestUrl, resultData, true); + } + + + /** + *
메소드 설명: 클라이언트의 IP정보를 가져온다.
+	 * 	-L4스위치나 프록시 서버 등이 개입되면서 request.getRemoteAdder()의 내용이 변조되기 시작한다.
+	 * 	-대신 추가적인 header가 생기면서(X-Forwarded-For, WL-Proxy-Client-IP 등) 원래의 정보는 그곳에 저장 된다.
+	 * 	-아래 메서드는 그 헤더를 추출하여 클라이언트의 아이피를 정확하게 얻고자 하는 방법 이다.
+	 * 	출처: https://nine01223.tistory.com/302 [스프링연구소(spring-lab)]
+	 * 
+ * @param request + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 16. + */ + public static String getClientIpAddr(HttpServletRequest request) { + String ip = request.getHeader("X-Forwarded-For"); + + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return ip; + } + + + + /** + *
메소드 설명: 다운로드를 위한 파일명 처리
+	 * 	-.브라우저에 따라 언어셋을 인코딩 하여 한글이 깨지지 않도록 처리 한다.
+	 * 
+ * @param request + * @param filename + * @return + * @throws Exception String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2021. 9. 24. + */ + public static String getFileNameForDownload(HttpServletRequest request, String filename) throws Exception { + + String userAgent = request.getHeader("User-Agent"); + + if ( userAgent.indexOf("MSIE") > -1 ){ + + filename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "\\ "); + + } else if ( userAgent.indexOf("Trident") > -1 ) { //MS IE 11 + + filename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "\\ "); + + } else if ( userAgent.indexOf("Chrome") > -1 ) { + + StringBuffer sb = new StringBuffer(); + for ( int i = 0; i < filename.length(); i++ ) { + char c = filename.charAt(i); + if ( c > '~' ) { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + filename = sb.toString(); + + } else if ( userAgent.indexOf("Opera") > -1 ) { + filename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if ( userAgent.indexOf("Firefox") > -1 ) { + filename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else { + filename = new String(filename.getBytes("utf-8"), "iso-8859-1"); + } + + return filename; + + } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitCommandExecutor.java b/src/main/java/kr/xit/framework/core/utils/XitCommandExecutor.java new file mode 100644 index 00000000..eabcf336 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitCommandExecutor.java @@ -0,0 +1,111 @@ +package kr.xit.framework.core.utils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class XitCommandExecutor { + + public static void main(String[] args) { + // 실행 + XitCommandExecutor.execute("ipconfig"); + } + + /** + * cmd 명령어 실행 + * + * @param cmd + */ + @SuppressWarnings("finally") + public static String execute(String cmd) { + + String charset = System.getProperty("sun.jnu.encoding"); + + Process process = null; + Runtime runtime = Runtime.getRuntime(); + StringBuffer successOutput = new StringBuffer(); // 성공 스트링 버퍼 + StringBuffer errorOutput = new StringBuffer(); // 오류 스트링 버퍼 + StringBuffer sbResult = new StringBuffer(); // 처리 결과 + BufferedReader successBufferReader = null; // 성공 버퍼 + BufferedReader errorBufferReader = null; // 오류 버퍼 + String msg = null; // 메시지 + + + /** + * 커맨드 설정 + * -운영체제에 따라 커맨드를 설정 한다. + * -windows가 아니면 모두 linux로 설정 한다. + */ + String[] cmdarray; + if (System.getProperty("os.name").indexOf("Windows") > -1) { //운영체제(OS)가 Windows이면 + cmdarray = new String[]{"cmd", "/c", cmd}; + } else { //운영체제(OS)가 Windows가 아니면 + cmdarray = new String[]{"/bin/sh", "-c", cmd}; + } + + + /** + * 커맨드 실행 + */ + try { + + // 명령어 실행 + process = runtime.exec(cmdarray); + + // shell 실행이 정상 동작했을 경우 + successBufferReader = new BufferedReader(new InputStreamReader(process.getInputStream(), charset)); + + while ((msg = successBufferReader.readLine()) != null) { + successOutput.append(msg + System.getProperty("line.separator")); + } + + // shell 실행시 에러가 발생했을 경우 + errorBufferReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), charset)); + while ((msg = errorBufferReader.readLine()) != null) { + errorOutput.append(msg + System.getProperty("line.separator")); + } + + // 프로세스의 수행이 끝날때까지 대기 + process.waitFor(); + + // shell 실행이 정상 종료되었을 경우 + if (process.exitValue() == 0) { + System.out.println("성공"); + System.out.println(successOutput.toString()); + + sbResult = successOutput; + } else { + // shell 실행이 비정상 종료되었을 경우 + System.out.println("비정상 종료"); + System.out.println(successOutput.toString()); + + sbResult = successOutput; + } + + // shell 실행시 에러가 발생 + if (XitCmmnUtil.notEmpty(errorOutput.toString())) { + // shell 실행이 비정상 종료되었을 경우 + System.out.println("오류"); + System.out.println(errorOutput.toString()); + + sbResult = errorOutput; + } + + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + try { + process.destroy(); + if (successBufferReader != null) successBufferReader.close(); + if (errorBufferReader != null) errorBufferReader.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + + return sbResult.toString(); + } + } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitCommandExecutor2.java b/src/main/java/kr/xit/framework/core/utils/XitCommandExecutor2.java new file mode 100644 index 00000000..df198411 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitCommandExecutor2.java @@ -0,0 +1,103 @@ +package kr.xit.framework.core.utils; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.Scanner; +import java.util.concurrent.Executors; + +public class XitCommandExecutor2 { + + public static void main(String[] args) { + // 실행 + XitCommandExecutor2.execute("ipconfig"); + } + + /** + * cmd 명령어 실행 + * + * @param cmd + */ + public static void execute(String cmd) { + try { + + //Linux의 경우는 /bin/bash + //Process process = Runtime.getRuntime().exec("/bin/bash"); + Process process = Runtime.getRuntime().exec("cmd"); + //Process의 각 stream을 받는다. + //process의 입력 stream + OutputStream stdin = process.getOutputStream(); + //process의 에러 stream + InputStream stderr = process.getErrorStream(); + //process의 출력 stream + InputStream stdout = process.getInputStream(); + + + //쓰레드 풀을 이용해서 3개의 stream을 대기시킨다. + + + //출력 stream을 BufferedReader로 받아서 라인 변경이 있을 경우 console 화면에 출력시킨다. + Executors.newCachedThreadPool().execute(() -> { + // 문자 깨짐이 발생할 경우 InputStreamReader(stdout)에 인코딩 타입을 넣는다. ex) InputStreamReader(stdout, "euc-kr") + // try (BufferedReader reader = new BufferedReader(new InputStreamReader(stdout, "euc-kr"))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(stdout))) { + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + + + //에러 stream을 BufferedReader로 받아서 에러가 발생할 경우 console 화면에 출력시킨다. + Executors.newCachedThreadPool().execute(() -> { + // 문자 깨짐이 발생할 경우 InputStreamReader(stdout)에 인코딩 타입을 넣는다. ex) InputStreamReader(stdout, "euc-kr") + // try (BufferedReader reader = new BufferedReader(new InputStreamReader(stderr, "euc-kr"))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(stderr))) { + String line; + while ((line = reader.readLine()) != null) { + System.out.println("err " + line); + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + + + //입력 stream을 BufferedWriter로 받아서 콘솔로부터 받은 입력을 Process 클래스로 실행시킨다. + Executors.newCachedThreadPool().execute(() -> { + // Scanner 클래스는 콘솔로 부터 입력을 받기 위한 클래스 입니다. + try (Scanner scan = new Scanner(System.in)) { + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin))) { + while (true) { + // 콘솔로 부터 엔터가 포함되면 input String 변수로 값이 입력됩니다. + String input = scan.nextLine(); + // 콘솔에서 \n가 포함되어야 실행된다.(엔터의 의미인듯 싶습니다.) + input += "\n"; + writer.write(input); + // Process로 명령어 입력 + writer.flush(); + // exit 명령어가 들어올 경우에는 프로그램을 종료합니다. + if ("exit\n".equals(input)) { + System.exit(0); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } catch (Throwable e) { + e.printStackTrace(); + } + + } + + +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitEmailUtil.java b/src/main/java/kr/xit/framework/core/utils/XitEmailUtil.java new file mode 100644 index 00000000..59cb47d8 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitEmailUtil.java @@ -0,0 +1,123 @@ +package kr.xit.framework.core.utils; + +import java.io.Serializable; + +import org.apache.commons.mail.DefaultAuthenticator; +import org.apache.commons.mail.EmailAttachment; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.MultiPartEmail; + +/** + * + *
    + *
  • 업무 그룹명: 메일발송 도구
  • + *
  • 설 명: 메일발송 서비스를 기술한다
  • + *
  • 작성일: 2018. 8. 29. 오후 2:03:26 + *
+ * + * @author 박민규 + * + */ + +public class XitEmailUtil 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(); + } + + public String send(String addTo, String subject, String msg) throws EmailException { + return send(addTo, subject, msg, null); + } + + public String send(String addTo, String subject, String msg, EmailAttachment attachment) 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); + email.addTo(addTo); + email.setSubject(subject); + email.setMsg(msg); + + if (attachment != null) { + email.attach(attachment); + } + + return email.send(); + + } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitExcelZipMapping.java b/src/main/java/kr/xit/framework/core/utils/XitExcelZipMapping.java new file mode 100644 index 00000000..62639550 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitExcelZipMapping.java @@ -0,0 +1,52 @@ +package kr.xit.framework.core.utils; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; + +import egovframework.rte.fdl.excel.EgovExcelMapping; +import egovframework.rte.fdl.excel.util.EgovExcelUtil; +import kr.xit.framework.biz.cmm.model.XitZipVO; + +/** + * + * @업무그룹명: 우편번호 매핑 클래스 + * @설명: 전자정부프레임웍에서 제공하는 EgovExcelService 클래스를 이용하여 우편번호 일괄 등록을 위한 매핑 클래스 + * egovframework.rte.fdl.excel.impl.EgovExcelServiceImpl + * @최초작성일: 2020. 4. 21. 오전 10:42:29 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitExcelZipMapping extends EgovExcelMapping { + + /** + * 우편번호 엑셀파일 맵핑 + */ + @Override + public Object mappingColumn(Row row) { + Cell cell0 = row.getCell((short) 0); + Cell cell1 = row.getCell((short) 1); + Cell cell2 = row.getCell((short) 2); + Cell cell3 = row.getCell((short) 3); + Cell cell4 = row.getCell((short) 4); + Cell cell5 = row.getCell((short) 5); + Cell cell6 = row.getCell((short) 6); + Cell cell7 = row.getCell((short) 7); + + XitZipVO vo = new XitZipVO(); + + vo.setZip (EgovExcelUtil.getValue(cell0)); + vo.setSn (EgovExcelUtil.getValue(cell1)); + vo.setCtprvn_nm (EgovExcelUtil.getValue(cell2)); + vo.setSigngu_nm (EgovExcelUtil.getValue(cell3)); + vo.setEmd_nm (EgovExcelUtil.getValue(cell4)); + vo.setFrst_register_id(EgovExcelUtil.getValue(cell7)); + + if (cell5 != null) {vo.setLi_buld_nm (EgovExcelUtil.getValue(cell5));} + if (cell6 != null) {vo.setLnbr_dong_ho(EgovExcelUtil.getValue(cell6));} + + + return vo; + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitFileLineWatcher.java b/src/main/java/kr/xit/framework/core/utils/XitFileLineWatcher.java new file mode 100644 index 00000000..28c8b73d --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitFileLineWatcher.java @@ -0,0 +1,89 @@ +package kr.xit.framework.core.utils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +/** + * + * @업무그룹명: + * @설명: + * @최초작성일: 2020. 10. 8. 오후 2:07:40 + * @최초작성자: mk1126sj + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitFileLineWatcher implements Runnable{ + + private static final int DELAY_MILLIS = 1000; + + private boolean isRun; + + //대상 파일 + private final File file; + + + + public XitFileLineWatcher(File file) { + this.file = file; + } + + + + @Override + public void run() { + System.out.println("Start to tail a file - " + file.getName()); + + + isRun = true; + if (!file.exists()) { + System.out.println("Failed to find a file - " + file.getPath()); + } + + //try 문에서 Stream을 열면 블럭이 끝났을 때 close를 해줌 + try (BufferedReader br = + new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { + while (isRun) { + //readLine(): 파일의 한 line을 읽어오는 메소드 + final String line = br.readLine(); + if (line != null) { + System.out.println("New line added - " + line); + } else { + Thread.sleep(DELAY_MILLIS); + } + } + } catch (Exception e) { + System.out.println("Failed to tail a file - " + file.getPath()); + } + + System.out.println("Stop to tail a file - " + file.getName()); + + } + + + /** + * 스레드 중지 기능. + */ + public void stop() { + isRun = false; + } + + + + + /* + * [ 사용 방법 ] + * File file = new File(pathname); + XitFileLineWatcher watcher = new XitFileLineWatcher(file); + Thread thread = new Thread(watcher); + thread.setDaemon(true); + thread.start(); + + //만약 종료하고 싶다면 + watcher.stop(); + * + */ +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitHttpRequestHelper.java b/src/main/java/kr/xit/framework/core/utils/XitHttpRequestHelper.java new file mode 100644 index 00000000..be1820c2 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitHttpRequestHelper.java @@ -0,0 +1,72 @@ +package kr.xit.framework.core.utils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +/** + * + * @업무그룹명: XitHttpRequestHelper + * @설명: HTTP Request 정보를 취득 한다. + * @최초작성일: 2020. 9. 16. 오후 4:23:03 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitHttpRequestHelper { + + public static boolean isInHttpRequest() { + try { + getCurrentRequest(); + } catch (IllegalStateException ise) { + return false; + } + + return true; + } + + /** + *
메소드 설명: 현재 HttpServletRequest를 반환 한다.
+ * @return HttpServletRequest 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 16. + */ + public static HttpServletRequest getCurrentRequest() { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); + + return sra.getRequest(); + } + + /** + *
메소드 설명: request의 Client IP 정보를 반환 한다.
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 16. + */ + public static String getRequestIp() { + return getCurrentRequest().getRemoteAddr(); + } + + /** + *
메소드 설명: request의 요청 URL 정보를 반환 한다.
+ * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 16. + */ + public static String getRequestURI() { + return getCurrentRequest().getRequestURI(); + } + + /** + *
메소드 설명: request의 session을 반환 한다.
+ * @return HttpSession 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 16. + */ + public static HttpSession getCurrentSession() { + return getCurrentRequest().getSession(); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitMap.java b/src/main/java/kr/xit/framework/core/utils/XitMap.java new file mode 100644 index 00000000..5fff9893 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitMap.java @@ -0,0 +1,25 @@ +package kr.xit.framework.core.utils; + +import org.apache.commons.collections.map.ListOrderedMap; + +/** + * + * @업무그룹명: XIT Map + * @설명: key 값을 lower case로 변환하여 저장 한다. + * @최초작성일: 2020. 3. 20. 오후 6:25:31 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitMap extends ListOrderedMap { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -1818046954215731861L; + + public Object put(Object key, Object value){ + return super.put(((String)key).toLowerCase(), value); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitProperties.java b/src/main/java/kr/xit/framework/core/utils/XitProperties.java new file mode 100644 index 00000000..8456a4d7 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitProperties.java @@ -0,0 +1,241 @@ +package kr.xit.framework.core.utils; + +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 lombok.extern.slf4j.Slf4j; + +//TODO : 제거하도록 .... + +/** + * + * @업무그룹명: Properties + * @설명: properties값들을 파일로부터 읽어와 Globals클래스의 정적변수로 로드시켜주는 클래스로 문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 한다. + * @최초작성일: 2020. 4. 28. 오후 2:40:57 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +@Slf4j +public class XitProperties{ + + //프로퍼티값 로드시 에러발생하면 반환되는 에러문자열 + public static final String ERR_CODE =" EXCEPTION OCCURRED"; + public static final String ERR_CODE_FNFE =" EXCEPTION(FNFE) OCCURRED"; + public static final String ERR_CODE_IOE =" EXCEPTION(IOE) OCCURRED"; + + //파일구분자 + static final char FILE_SEPARATOR = File.separatorChar; + + //프로퍼티 파일의 물리적 위치 + /*public static final String GLOBALS_PROPERTIES_FILE + = System.getProperty("user.home") + System.getProperty("file.separator") + "egovProps" + + System.getProperty("file.separator") + "globals.properties";*/ + + public static final String RELATIVE_PATH_PREFIX = XitProperties.class.getClassLoader().getResource("xitProps").getPath(); + //+ System.getProperty("file.separator") + ".." + System.getProperty("file.separator") + //+ ".." + System.getProperty("file.separator") + ".." + System.getProperty("file.separator"); + + public static final String GLOBALS_PROPERTIES_FILE + //= RELATIVE_PATH_PREFIX + "xitProps" + System.getProperty("file.separator") + "globals.properties"; + = RELATIVE_PATH_PREFIX + "globals.properties"; + + + + /** + * 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용) + * @param keyName String + * @return String + + public static String getPathProperty(String keyName){ + String value = ERR_CODE; + value="99"; + debug(GLOBALS_PROPERTIES_FILE + " : " + keyName); + FileInputStream fis = null; + try{ + Properties props = new Properties(); + fis = new FileInputStream(GLOBALS_PROPERTIES_FILE); + props.load(new java.io.BufferedInputStream(fis)); + value = props.getProperty(keyName).trim(); + value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; + }catch(FileNotFoundException fne){ + debug(fne); + }catch(IOException ioe){ + debug(ioe); + }catch(Exception e){ + debug(e); + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + + } + return value; + } +*/ + + /** + * 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용) + * @param keyName String + * @return String + */ + public static String getProperty(String keyName){ + String value = ERR_CODE; + value="99"; + debug(GLOBALS_PROPERTIES_FILE + " : " + keyName); + FileInputStream fis = null; + try{ + Properties props = new Properties(); + fis = new FileInputStream(GLOBALS_PROPERTIES_FILE); + props.load(new java.io.BufferedInputStream(fis)); + value = props.getProperty(keyName).trim(); + }catch(FileNotFoundException fne){ + debug(fne); + }catch(IOException ioe){ + debug(ioe); + }catch(Exception e){ + debug(e); + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + + } + return value; + } + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다 + * @param fileName String + * @param key String + * @return String + + public static String getPathProperty(String fileName, String key){ + FileInputStream fis = null; + try{ + java.util.Properties props = new java.util.Properties(); + fis = new FileInputStream(fileName); + props.load(new java.io.BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; + return value; + }catch(java.io.FileNotFoundException fne){ + return ERR_CODE_FNFE; + }catch(java.io.IOException ioe){ + return ERR_CODE_IOE; + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + */ + + /** + * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다 + * @param fileName String + * @param key String + * @return String + + public static String getProperty(String fileName, String key){ + FileInputStream fis = null; + try{ + java.util.Properties props = new java.util.Properties(); + fis = new FileInputStream(fileName); + props.load(new java.io.BufferedInputStream(fis)); + fis.close(); + + String value = props.getProperty(key); + return value; + }catch(java.io.FileNotFoundException fne){ + return ERR_CODE_FNFE; + }catch(java.io.IOException ioe){ + return ERR_CODE_IOE; + }finally{ + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + */ + /** + * 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다. + * @param property String + * @return ArrayList + */ + @SuppressWarnings("unused") + public static ArrayList> loadPropertyFile(String property){ + + // key - value 형태로 된 배열 결과 + ArrayList> keyList = new ArrayList>(); + + String src = property.replace('\\', FILE_SEPARATOR).replace('/', FILE_SEPARATOR); + FileInputStream fis = null; + try + { + + File srcFile = new File(src); + if (srcFile.exists()) { + + java.util.Properties props = new java.util.Properties(); + fis = new FileInputStream(src); + props.load(new java.io.BufferedInputStream(fis)); + fis.close(); + + int i = 0; + Enumeration plist = props.propertyNames(); + if (plist != null) { + while (plist.hasMoreElements()) { + Map map = new HashMap(); + String key = (String)plist.nextElement(); + map.put(key, props.getProperty(key)); + keyList.add(map); + } + } + } + } catch (Exception ex){ + debug("EX:"+ex); + } finally { + try { + if (fis != null) fis.close(); + } catch (Exception ex) { + debug("EX:"+ex);//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 보안점검 후속조치 + log.debug("IGNORED: {}", ((Exception)obj).getMessage()); + } + } +} + diff --git a/src/main/java/kr/xit/framework/core/utils/XitRefreshableSqlSessionFactoryBean.java b/src/main/java/kr/xit/framework/core/utils/XitRefreshableSqlSessionFactoryBean.java new file mode 100644 index 00000000..44e2cfaf --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitRefreshableSqlSessionFactoryBean.java @@ -0,0 +1,244 @@ +package kr.xit.framework.core.utils; + +import java.io.IOException; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.core.io.Resource; + + +/** + * + * @업무그룹명: Mybatis mapper 자동 반영 + * @설명: mybatis mapper 자동 감지 후 서버 재시작 필요 없이 반영 된다. + * 사전조건은 JDK 1.5 이상, Spring, mybatis, spring-mybatis 라이브러리가 설치되어 있는 환경이어야 한다. + * + * 출처: https://sbcoba.tistory.com/16 [홍이의 개발 노트] + * + * + * [문제 발생] + * -.적용 후 질의문 파일을 수정 해도 반영되지 않는 다면 Tomcat의 경우 다음과 같이 처리 한다. + * -> Publising 옵션이 "Never publish automatically" 으로 되어 있는지 확인 + * -> Publising 옵션을 "Automatically publish when resources change " 또는 "Automatically publish after a build event" 으로 변경 + * @최초작성일: 2020. 10. 14. 오후 3:50:56 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitRefreshableSqlSessionFactoryBean extends SqlSessionFactoryBean implements DisposableBean{ + private static final Log log = LogFactory.getLog(XitRefreshableSqlSessionFactoryBean.class); + + + private SqlSessionFactory proxy; + private int interval = 500; + + private Timer timer; + private TimerTask task; + + private Resource[] mapperLocations; + + + /** + * 파일 감시 쓰레드가 실행중인지 여부. + */ + private boolean running = false; + + + private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); + private final Lock rl = rwl.readLock(); + private final Lock wl = rwl.writeLock(); + + + + + + public void setMapperLocations(Resource[] mapperLocations) { + super.setMapperLocations(mapperLocations); + this.mapperLocations = mapperLocations; + } + + + public void setInterval(int interval) { + this.interval = interval; + } + + + /** + * @throws Exception + */ + public void refresh() throws Exception { + if (log.isInfoEnabled()) { + log.info("refreshing sqlMapClient."); + } + + wl.lock(); + + try { + super.afterPropertiesSet(); + + } finally { + wl.unlock(); + } + } + + + /** + * 싱글톤 멤버로 SqlMapClient 원본 대신 프록시로 설정하도록 오버라이드. + */ + public void afterPropertiesSet() throws Exception { + super.afterPropertiesSet(); + setRefreshable(); + } + + + private void setRefreshable() { + proxy = (SqlSessionFactory) Proxy.newProxyInstance( + SqlSessionFactory.class.getClassLoader() + , new Class[]{SqlSessionFactory.class} + , new InvocationHandler() { + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + // log.debug("method.getName() : " + method.getName()); + return method.invoke(getParentObject(), args); + } + }); + + task = new TimerTask() { + private Map map = new HashMap(); + + public void run() { + if (isModified()) { + try { + refresh(); + } catch (Exception e) { + log.error("caught exception", e); + } + } + } + + + private boolean isModified() { + + boolean retVal = false; + + if (mapperLocations != null) { + for (int i = 0; i < mapperLocations.length; i++) { + Resource mappingLocation = mapperLocations[i]; + retVal |= findModifiedResource(mappingLocation); + } + } + + return retVal; + } + + + private boolean findModifiedResource(Resource resource) { + boolean retVal = false; + + List modifiedResources = new ArrayList(); + try { + long modified = resource.lastModified(); + if (map.containsKey(resource)) { + long lastModified = ((Long) map.get(resource)) .longValue(); + if (lastModified != modified) { + map.put(resource, new Long(modified)); + modifiedResources.add(resource.getDescription()); + retVal = true; + + } + } else { + map.put(resource, new Long(modified)); + } + } catch (IOException e) { + log.error("caught exception", e); + } + + + if (retVal) { + if (log.isInfoEnabled()) { + log.info("modified files : " + modifiedResources); + } + } + + + return retVal; + } + }; + + + timer = new Timer(true); + + resetInterval(); + + } + + + private Object getParentObject() throws Exception { + rl.lock(); + try { + return super.getObject(); + } finally { + rl.unlock(); + } + } + + + + public SqlSessionFactory getObject() { + return this.proxy; + } + + + + public Class getObjectType() { + return (this.proxy != null ? this.proxy.getClass() : SqlSessionFactory.class); + } + + + + public boolean isSingleton() { + return true; + } + + + public void setCheckInterval(int ms) { + interval = ms; + + if (timer != null) { + resetInterval(); + } + } + + + private void resetInterval() { + if (running) { + timer.cancel(); running = false; + } + + if (interval > 0) { + timer.schedule(task, 0, interval); running = true; + } + } + + + public void destroy() throws Exception { + timer.cancel(); + } + + + +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitRequestWrapper.java b/src/main/java/kr/xit/framework/core/utils/XitRequestWrapper.java new file mode 100644 index 00000000..14b4f446 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitRequestWrapper.java @@ -0,0 +1,123 @@ +package kr.xit.framework.core.utils; + +import java.io.IOException; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; + + +/* ************************************** +* request Wrapping을 이용한 forward 방법 +* @author 박민규 +************************************** */ +//RequestDispatcher rd = req.getRequestDispatcher("/example/CallUrl.do"); +//try { +// XitRequestWrapper reqWrap = new XitRequestWrapper(req); +// reqWrap.setParameter("param1", "abc"); +// reqWrap.setParameter("param2", "123"); +// rd.forward(reqWrap, resp); +//} catch (ServletException e1) { +// e1.printStackTrace(); +//} catch (IOException e1) { +// e1.printStackTrace(); +//} + + + + +/** + * + *
    + *
  • 업무 그룹명: HttpServletRequest Wrapper 클래스
  • + *
  • 설 명:
  • + *
  • 작성일: 2018. 9. 6. 오후 4:45:16 + *
+ * + * @author 박민규 + * + */ +public class XitRequestWrapper extends HttpServletRequestWrapper{ + HashMap params; + + public XitRequestWrapper(HttpServletRequest request) { + super(request); + this.params = new HashMap(request.getParameterMap()); + } + + public String getParameter(String name){ + String returnValue = null; + String[] paramArray = getParameterValues(name); + if (paramArray != null && paramArray.length > 0){ + returnValue = paramArray[0]; + } + return returnValue; + } + + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Map getParameterMap() { + return Collections.unmodifiableMap(params); + } + + + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Enumeration getParameterNames() { + return Collections.enumeration(params.keySet()); + } + + + + public String[] getParameterValues(String name) { + String[] result = null; + String[] temp = (String[])params.get(name); + if (temp != null){ + result = new String[temp.length]; + System.arraycopy(temp, 0, result, 0, temp.length); + } + return result; + } + + + + + public void setParameter(String name, String value){ + String[] oneParam = {value}; + setParameter(name, oneParam); + } + + public void setParameter(String name, Map value){ + for(String key : value.keySet()) + setParameter(name, value.get(key)); + } + + public void setParameter(String name, String[] value){ + params.put(name, value); + } + + + + /** + *
메소드 설명: 요청경로로 포워딩 처리 한다.
+ * @param url 포워딩 경로 + * @param response HttpServletResponse + * @throws ServletException + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 10. + */ + public void forward(String url, HttpServletResponse response) throws ServletException, IOException { + RequestDispatcher dispatcher = this.getRequestDispatcher(url); + dispatcher.forward(this, response); + } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitScrtyUtil.java b/src/main/java/kr/xit/framework/core/utils/XitScrtyUtil.java new file mode 100644 index 00000000..69668b7b --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitScrtyUtil.java @@ -0,0 +1,45 @@ +package kr.xit.framework.core.utils; + +import java.security.MessageDigest; + +import org.apache.commons.codec.binary.Base64; + +/** + * + * @업무그룹명: 보안 도구 + * @설명: + * @최초작성일: 2020. 4. 9. 오전 10:20:06 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitScrtyUtil { + /** + *
메소드 설명: 비밀번호 암호화
+	 * 	-단방향 암호화(복호화 불가)를 위해 SHA-256 인코딩 방식 적용
+ * @param password 암호화할 패스워드 + * @param salt salt로 사용할 문자열 + * @return + * @throws Exception String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 9. + */ + public static String encryptPassword(String password, String salt) throws Exception { + + if (password == null) { + return ""; + } + + byte[] hashValue = null; // 해쉬값 + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + + md.reset(); + md.update(salt.getBytes()); + + hashValue = md.digest(password.getBytes()); + + return new String(Base64.encodeBase64(hashValue)); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/XitSftpUtil.java b/src/main/java/kr/xit/framework/core/utils/XitSftpUtil.java new file mode 100644 index 00000000..f8efd5a9 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/XitSftpUtil.java @@ -0,0 +1,348 @@ +package kr.xit.framework.core.utils; + +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.OutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import com.jcraft.jsch.Channel; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.ChannelSftp.LsEntry; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpException; + + +/** + * + *
    + *
  • 업무 그룹명: SFTP 도구
  • + *
  • 설 명:
  • + *
  • 작성일: 2019. 9. 30. 오후 6:41:26 + *
+ * + * @author 박민규 + * + */ +public class XitSftpUtil { + private Session session = null; + private JSch jsch; + private Channel channel; + private ChannelSftp sftpChannel; + private String user; + private String host; + private int port; + private String password; + + public XitSftpUtil(String host, int port, String user, String password) { + this.host = host; + this.port = port; + this.user = user; + this.password = password; + } + + /** + *
메소드 설명: SFTP 접속 연결
+ * @throws JSchException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 30. + */ + private void connect() throws JSchException { + System.out.println("connecting..."+host); + // 1. JSch 객체를 생성한다. + jsch = new JSch(); + // 2. 세션 객체를 생성한다(사용자 이름, 접속할 호스트, 포트를 인자로 전달한다.) + session = jsch.getSession(user, host,port); + // 4. 세션과 관련된 정보를 설정한다. + session.setConfig("StrictHostKeyChecking", "no"); + // 4. 패스워드를 설정한다. + session.setPassword(password); + // 5. 접속한다. + session.connect(); + // 6. sftp 채널을 연다. + channel = session.openChannel("sftp"); + // 7. 채널에 연결한다. + channel.connect(); + // 8. 채널을 SFTP용 채널 객체로 캐스팅한다. + sftpChannel = (ChannelSftp) channel; + } + + /** + *
메소드 설명: SFTP 접속 해제
+ * void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 30. + */ + private void disconnect() { + if(session.isConnected()){ + System.out.println("disconnecting..."); + sftpChannel.disconnect(); + channel.disconnect(); + session.disconnect(); + } + } + + + /** + *
메소드 설명: 파일 업로드
+ * @param localPathName 업로드 파일 로컬 경로(파일명 포함) + * @param remoteDirPath 원격지 디렉토리 경로 + * @throws Exception void 요청처리 후 응답객체 + * @author: 박민규 + * @throws Exception + * @date: 2019. 9. 30. + */ + public void upload(String localPathName, String remoteDirPath) throws Exception { + FileInputStream fis = null; + // 앞서 만든 접속 메서드를 사용해 접속한다. + connect(); + try { + // Change to output directory + sftpChannel.cd(remoteDirPath); + + // Upload file + File file = new File(localPathName); + // 입력 파일을 가져온다. + fis = new FileInputStream(file); + // 파일을 업로드한다. + sftpChannel.put(fis, file.getName()); + + fis.close(); + System.out.println("File uploaded successfully - "+ file.getAbsolutePath()); + } catch (SftpException e) { + throw e; + } catch (FileNotFoundException e) { + throw e; + } catch (IOException e) { + throw e; + } finally { + disconnect(); + } + } + + + /** + *
메소드 설명: 파일 다운로드
+ * @param remotePathName 원격지 파일 경로(파일명 포함) + * @param localDirPath 로컬 다운로드 경로 + * @throws Exception void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 30. + */ + public void download(String remotePathName, String localDirPath) throws Exception { + byte[] buffer = new byte[1024]; + BufferedInputStream bis; + connect(); + try { + // Change to output directory + String cdDir = remotePathName.substring(0, remotePathName.lastIndexOf("/") + 1); + sftpChannel.cd(cdDir); + + File file = new File(remotePathName); + bis = new BufferedInputStream(sftpChannel.get(file.getName())); + + File newFile = new File(localDirPath + "/" + file.getName()); + + // Download file + OutputStream os = new FileOutputStream(newFile); + BufferedOutputStream bos = new BufferedOutputStream(os); + int readCount; + while ((readCount = bis.read(buffer)) > 0) { + bos.write(buffer, 0, readCount); + } + bis.close(); + bos.close(); + System.out.println("File downloaded successfully - "+ file.getAbsolutePath()); + + } catch (SftpException e) { + throw e; + } catch (FileNotFoundException e) { + throw e; + } catch (IOException e) { + throw e; + } finally { + disconnect(); + } + + } + + + + /** + *
메소드 설명: 파일 목록 다운로드
+ * @param remotePathName 원격지 파일 경로(파일명 포함) + * @param localDirPath 로컬 다운로드 경로 + * @throws Exception void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2019. 9. 30. + */ + @SuppressWarnings("unchecked") + public void downloads(String remotePathName, String localDirPath, String startsWithFileName, String endsWithFileName) throws Exception { + byte[] buffer = new byte[1024]; + BufferedInputStream bis; + connect(); + try { + // Change to output directory + String cdDir = remotePathName.substring(0, remotePathName.lastIndexOf("/") + 1); + sftpChannel.cd(cdDir); + + // File List + List arrFile = new ArrayList(); + Vector vector = sftpChannel.ls(remotePathName); +// LsEntrySelector selector = new lsen +// Vector vector = sftpChannel.ls(remotePathName, startsWithFileName); +// String cmd = String.format("%s | grep %s", remotePathName, startsWithFileName); +// System.out.println(cmd); + for(LsEntry lsEntry : vector) { + System.out.println(lsEntry.getFilename()); + if(lsEntry.getFilename().startsWith(startsWithFileName)&&lsEntry.getFilename().endsWith(endsWithFileName)) + arrFile.add(new File(remotePathName+lsEntry.getFilename())); + } + + for(File file : arrFile) { + bis = new BufferedInputStream(sftpChannel.get(file.getName())); + File newFile = new File(localDirPath + "/" + file.getName()); + + // Download file + OutputStream os = new FileOutputStream(newFile); + BufferedOutputStream bos = new BufferedOutputStream(os); + int readCount; + while ((readCount = bis.read(buffer)) > 0) { + bos.write(buffer, 0, readCount); + } + bis.close(); + bos.close(); + System.out.println("File downloaded successfully - "+ file.getAbsolutePath()); + } + + } catch (SftpException e) { + throw e; + } catch (FileNotFoundException e) { + throw e; + } catch (IOException e) { + throw e; + } finally { + disconnect(); + } + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// private Session session = null; +// private Channel channel = null; +// private ChannelSftp channelSftp = null; +// +// public void init(){ +// String url = "..."; +// String user = "..."; +// String password = "..."; +// +// System.out.println(url); +// //JSch 객체 생성 +// JSch jsch = new JSch(); +// try { +// //세션객체 생성 ( user , host, port ) +// session = jsch.getSession(user, url); +// +// //password 설정 +// session.setPassword(password); +// +// //세션관련 설정정보 설정 +// java.util.Properties config = new java.util.Properties(); +// +// //호스트 정보 검사하지 않는다. +// config.put("StrictHostKeyChecking", "no"); +// session.setConfig(config); +// +// //접속 +// session.connect(); +// +// //sftp 채널 접속 +// channel = session.openChannel("sftp"); +// channel.connect(); +// +// } catch (JSchException e) { +// e.printStackTrace(); +// } +// channelSftp = (ChannelSftp) channel; +// +// } +// +// // 단일 파일 업로드 +// public void upload( String dir , File file){ +// FileInputStream in = null; +// +// try{ //파일을 가져와서 inputStream에 넣고 저장경로를 찾아 put +// in = new FileInputStream(file); +// channelSftp.cd(dir); +// channelSftp.put(in,file.getName()); +// }catch(SftpException e){ +// e.printStackTrace(); +// }catch(FileNotFoundException e){ +// e.printStackTrace(); +// }finally{ +// try{ +// in.close(); +// } catch(IOException ioe){ +// ioe.printStackTrace(); +// } +// } +// } +// +// // 단일 파일 다운로드 +// public InputStream download(String dir, String fileNm){ +// InputStream in = null; +// String path = "..."; +// try{ //경로탐색후 inputStream에 데이터를 넣음 +// channelSftp.cd(path+dir); +// in = channelSftp.get(fileNm); +// +// }catch(SftpException se){ +// se.printStackTrace(); +// } +// +// return in; +// } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/attachfile/XitAttachFileOptionVO.java b/src/main/java/kr/xit/framework/core/utils/attachfile/XitAttachFileOptionVO.java new file mode 100644 index 00000000..29c36a50 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/attachfile/XitAttachFileOptionVO.java @@ -0,0 +1,138 @@ +package kr.xit.framework.core.utils.attachfile; + +import kr.xit.framework.core.model.BaseVO; + +/** + * + * @업무그룹명: 첨부파일 Option VO + * @설명: 첨부파일의 유효성 옵션을 설정 한다. + * @최초작성일: 2020. 4. 27. 오후 3:39:55 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAttachFileOptionVO extends BaseVO { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -3894421453610087328L; + + + public XitAttachFileOptionVO() { + this.fileNmLength = 99; + String[] arrFileExt = new String[10]; + arrFileExt[0] = "xlsx"; + arrFileExt[1] = "xls"; + arrFileExt[2] = "pdf"; + arrFileExt[3] = "hwp"; + arrFileExt[4] = "doc"; + arrFileExt[5] = "zip"; + arrFileExt[6] = "jpg"; + arrFileExt[7] = "jpeg"; + arrFileExt[8] = "gif"; + arrFileExt[9] = "png"; + this.arrFileExt = arrFileExt; + this.fileSize = 5; + this.fileNmMaskPrefix = ""; + } + + + + /** 파일명 마스킹 여부 */ + private boolean isFileNmMask = true; + /** 파일명 마스킹 prefix 명칭 */ + private String fileNmMaskPrefix; + /** 파일명 길이 제한 여부 */ + private boolean isLimitFileNmLength = true; + /** 파일명 길이 */ + private int fileNmLength = 0; + /** 파일 확장자 제한 여부 */ + private boolean isLimitFileExt = true; + /** 파일 확장자 */ + private String[] arrFileExt = null; + /** 파일 사이즈 제한 여부 */ + private boolean isLimitFileSize = true; + /** 파일 사이즈(MB) */ + private int fileSize = 0; + /** 날짜별 디렉토리 생성 여부(ex: ~/yyyymm/dd/) */ + private boolean isMakeDirByDate = true; + + + /** 파일명 마스킹 여부를 가져온다 */ + public boolean isFileNmMask() { + return isFileNmMask; + } + /** 파일명 마스킹 여부를 설정 한다 */ + public void setFileNmMask(boolean isFileNmMask) { + this.isFileNmMask = isFileNmMask; + } + /** 파일명 마스킹 prefix 명칭을 가져온다 */ + public String getFileNmMaskPrefix() { + return fileNmMaskPrefix; + } + /** 파일명 마스킹 prefix 명칭을 설정 한다 */ + public void setFileNmMaskPrefix(String fileNmMaskPrefix) { + this.fileNmMaskPrefix = fileNmMaskPrefix; + } + /** 파일명 길이 제한 여부를 가져온다 */ + public boolean isLimitFileNmLength() { + return isLimitFileNmLength; + } + /** 파일명 길이 제한 여부를 설정 한다 */ + public void setLimitFileNmLength(boolean isLimitFileNmLength) { + this.isLimitFileNmLength = isLimitFileNmLength; + } + /** 파일명 길이를 가져온다 */ + public int getFileNmLength() { + return fileNmLength; + } + /** 파일명 길이를 설정 한다 */ + public void setFileNmLength(int fileNmLength) { + this.fileNmLength = fileNmLength; + } + /** 파일 확장자 제한 여부를 가져온다 */ + public boolean isLimitFileExt() { + return isLimitFileExt; + } + /** 파일 확장자 제한 여부를 설정 한다 */ + public void setLimitFileExt(boolean isLimitFileExt) { + this.isLimitFileExt = isLimitFileExt; + } + /** 파일 확장자 목록을 가져온다 */ + public String[] getArrFileExt() { + return arrFileExt; + } + /** 파일 확장자 목록을 설정 한다 */ + public void setArrFileExt(String[] arrFileExt) { + this.arrFileExt = arrFileExt; + } + /** 파일 사이즈 제한 여부를 가져온다 */ + public boolean isLimitFileSize() { + return isLimitFileSize; + } + /** 파일 사이즈 제한 여부를 설정 한다 */ + public void setLimitFileSize(boolean isLimitFileSize) { + this.isLimitFileSize = isLimitFileSize; + } + /** 파일 사이즈를 가져온다 */ + public int getFileSize() { + return fileSize; + } + /** 파일 사이즈를 설정 한다 */ + public void setFileSize(int fileSize) { + this.fileSize = fileSize; + } + /** 날짜별 디렉토리 생성 여부를 가져온다 */ + public boolean isMakeDirByDate() { + return isMakeDirByDate; + } + /** 날짜별 디렉토리 생성 여부를 설정 한다 */ + public void setMakeDirByDate(boolean isMakeDirByDate) { + this.isMakeDirByDate = isMakeDirByDate; + } + + + +} diff --git a/src/main/java/kr/xit/framework/core/utils/attachfile/XitAttachFileUtil.java b/src/main/java/kr/xit/framework/core/utils/attachfile/XitAttachFileUtil.java new file mode 100644 index 00000000..34c361cc --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/attachfile/XitAttachFileUtil.java @@ -0,0 +1,762 @@ +package kr.xit.framework.core.utils.attachfile; + + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest; + +import kr.xit.framework.core.utils.XitCmmnUtil; + +/** + * + * @업무그룹명: 첨부파일 처리 Util + * @설명: "multipart/form-data" 요청에 대한 첨부파일을 처리 한다. + * @최초작성일: 2020. 3. 13. 오후 5:29:18 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitAttachFileUtil { + + /** + *
메소드 설명: 모든파일 업로드
+ * @param request + * @param uploadPath 업로드 경로 + * @param isMaskFileNm 업로드 시 파일명 마스킹 여부 + * @param isLimitSize 파일크기 최대 사이즈 + * @return List 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @throws RuntimeException + * @date: 2020. 3. 13. + */ + public static List fileUpload(HttpServletRequest request, String uploadPath, boolean isMaskFileNm, int isLimitSize) throws RuntimeException, IOException{ + + String[] arrFileExt = new String[10]; + arrFileExt[0] = "xlsx"; + arrFileExt[1] = "xls"; + arrFileExt[2] = "pdf"; + arrFileExt[3] = "hwp"; + arrFileExt[4] = "doc"; + arrFileExt[5] = "zip"; + arrFileExt[6] = "jpg"; + arrFileExt[7] = "jpeg"; + arrFileExt[8] = "gif"; + arrFileExt[9] = "png"; + + + XitAttachFileOptionVO optionVO = new XitAttachFileOptionVO(); + optionVO.setFileNmMask(isMaskFileNm); + optionVO.setLimitFileExt(true); + optionVO.setArrFileExt(arrFileExt); + optionVO.setLimitFileSize(true); + optionVO.setFileSize(isLimitSize); + + return fileUpload(request, uploadPath, optionVO); + } + + /** + *
메소드 설명: 지정한 저장소로 파일을 업로드 한다.
+ * @param request + * @param uploadPath 업로드 경로 + * @param optionVO 파일업로드 옵션 + * @return + * @throws RuntimeException + * @throws IOException List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 4. 27. + */ + public static List fileUpload(HttpServletRequest request, String uploadPath, XitAttachFileOptionVO optionVO) throws RuntimeException, IOException{ + if(!(request instanceof DefaultMultipartHttpServletRequest)) + return null; + + /** + * MultipartServlet으로 cast + */ + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; + + + /** + * 유효성 확인 + */ + //파일경로에 경로순회 문자 포함 여부 확인 + if(isExistsDirTraversalChar(uploadPath)) { + throw new RuntimeException("path 정보에 경로순회 문자가 포함되어 있습니다."); + } + //첨부파일 유무 확인 + if(!isExistsAttachFile(multiRequest)) + return null; + Collection multipartFiles = multiRequest.getFileMap().values(); + Iterator it = multipartFiles.iterator(); + while(it.hasNext()){ + MultipartFile multipartFile = it.next(); + + //파일명 길이 확인 + if(optionVO.isLimitFileNmLength()) { + if (!isLimitFileNameLength(multipartFile, optionVO.getFileNmLength())) + throw new RuntimeException(String.format("파일명은 %s자 이하여야 합니다.", optionVO.getFileNmLength())); + } + //파일 확장자 확인 + if(optionVO.isLimitFileExt()) { + if(!isLimitFileExt(multipartFile, optionVO.getArrFileExt())){ + StringBuffer sb = new StringBuffer(); + for(String ext : optionVO.getArrFileExt()) { + if(sb.length()==0) { + sb.append(ext); + } else { + sb.append(", "); + sb.append(ext); + } + } + + throw new RuntimeException(String.format("%s 확장자의 파일만 첨부 가능합니다.", sb.toString())); + } + } + //파일 사이즈 확인 + if(optionVO.isLimitFileSize()) { + if(!isLimitFileSize(multipartFile, optionVO.getFileSize())) + throw new RuntimeException(String.format("%s MB를 초과하는 파일은 첨부 할 수 없습니다.", optionVO.getFileSize())); + } + //파일명에 경로순회 문자 포함 여부 확인 + if(isExistsDirTraversalChar(multipartFile)) { + throw new RuntimeException("파일명에 경로순회 문자가 포함된 파일은 첨부 할 수 없습니다."); + } + } + + + /** + * 파일업로드 경로 + * -"날짜별 디렉토리 생셩 여부" 설정값에 따라 업로드경로를 변경 한다. + */ + if(optionVO.isMakeDirByDate()) + uploadPath = getUploadPathByDate(uploadPath); + + + /** + * 업로드 + */ + List result = upload(multipartFiles, uploadPath, optionVO.isFileNmMask(), optionVO.getFileNmMaskPrefix()); + + return result; + } + + + + + + + + /** + *
메소드 설명: 첨부파일을 업로드 후 파일정보를 반환 한다.
+ * @param request + * @param uploadPath 업로드 경로 + * @param isMaskFileNm 업로드 시 파일명 마스킹 여부 + * @return + * @throws RuntimeException + * @throws IOException List 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + * + * file IO try-with-resources 적용 + */ + private static List upload(Collection multipartFiles, String uploadPath, boolean isMaskFileNm, String prefixMaskFileNm) throws RuntimeException, IOException{ + + + /** + * 파일저장 + */ + //업로드 디렉토리 생성 + File f = new File(uploadPath); + if(!f.exists()) + f.mkdirs(); + //VO객체 설정 및 upload + List arrMap = new ArrayList(); + for (final MultipartFile file : multipartFiles) { + String fileMask = null; + if(isMaskFileNm) + fileMask = prefixMaskFileNm + getFileMask(file.getOriginalFilename()); + else + fileMask = getFileRename(file.getOriginalFilename(), uploadPath); + + XitAttachFileVO attachFileVO = new XitAttachFileVO(); + attachFileVO.setFileName(file.getOriginalFilename()); //파일명 + attachFileVO.setFileSize(file.getSize()); //파일사이즈 + attachFileVO.setFileMask(fileMask); //파일마스크명 + attachFileVO.setFilePath(uploadPath); //파일 저장경로 + attachFileVO.setFileFullPath(uploadPath+"/"+fileMask); //파일 저장 전체경로 + arrMap.add(attachFileVO); + + //upload + //FileOutputStream fos = null; + //try { + // byte[] fileData = file.getBytes(); + // fos = new FileOutputStream(uploadPath+"/"+fileMask); + // fos.write(fileData); + //} catch (IOException e) { + // e.printStackTrace(); + //} finally { + // if(fos != null) fos.close(); + // + //} + + try (FileOutputStream fos = new FileOutputStream(uploadPath + "/" + fileMask)){ + byte[] fileData = file.getBytes(); + fos.write(fileData); + } catch (IOException ie){ + ie.printStackTrace(); + } finally { + + } + } + + return arrMap; + } + + + /** + *
메소드 설명: 첨부파일 유무 확인
+ * @param request + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + */ + private static boolean isExistsAttachFile(MultipartHttpServletRequest multiRequest) { + + try { + Collection values = multiRequest.getFileMap().values(); + if(values.size()==0) + throw new Exception(); + } catch (Exception e) { + return false; + } + + return true; + } + /** + *
메소드 설명: 파일명 길이 확인
+	 * 	-파일명이 지정한 길이를 초과하면 false, 이내면 true 반환(default: 99) 
+	 * 
+ * @param multipart + * @param limitLength + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + */ + private static boolean isLimitFileNameLength(MultipartFile multipart, int limitLength) { + if(limitLength<1) + limitLength = 99; + + if(multipart.getOriginalFilename().length() > limitLength) { + return false; + } + + return true; + } + /** + *
메소드 설명: 첨부파일 사이즈 제한
+ * @param multipart + * @param mbFileSize + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + */ + private static boolean isLimitFileSize(MultipartFile multipart, int mbFileSize){ + long MB = mbFileSize * (1024*1024); + long fileSize = multipart.getSize(); + if(fileSize>MB){ + return false; + } + + return true; + } + /** + *
메소드 설명: 허용하는 첨부파일 확장자
+ * @param multipart + * @param arrFileExt + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + */ + private static boolean isLimitFileExt(MultipartFile multipart, String[] arrFileExt){ + boolean result = false; + + String[] fileName = multipart.getOriginalFilename().split("\\."); + String fileExt = fileName[fileName.length-1]; + for(String ext : arrFileExt) { + if(ext.equalsIgnoreCase(fileExt)) { + result = true; + break; + } + } + + return result; + } + + + /** + *
메소드 설명: 파일명에 경로순회 문자 포함 여부를 확인 한다.
+	 * 	※경로순회 공격이란?
+	 * 	 -시큐어코딩 "경로 조작 및 자원 삽입" 항목에 해당
+	 * 	 -공격자는 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근
+	 * 	 -파라미터를 조작하여 자원의 수정, 삭제, 시스템 정보 누출, 시스템 자원 간 충돌로 인한 서비스 장애등을 유발 시킬 수 있다.
+	 * 	 -"./", "../" 등을 사용하여 상대경로 참조 방식을 이용해 디렉터리 경로를 조작하는 공격법을 경로순회(=경로추적) 공격법이라 한다.
+	 * 
+ * @param obj Object + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 11. + */ + private static boolean isExistsDirTraversalChar(Object obj) { + String str = null; + if(obj instanceof MultipartFile) { + MultipartFile multipartFile = (MultipartFile) obj; + str = multipartFile.getOriginalFilename(); + } else if(obj instanceof String) + str = (String)obj; + else + throw new RuntimeException("유효한 타입이 아닙니다."); + + + boolean result = false; + + //경로순회공격 위험이 있는 문자(.. / \) 체크 + if(str.indexOf("..")>-1) { + return true; + } + if(str.indexOf("./")>-1) { + return true; + } + if(str.indexOf("../")>-1 || str.indexOf("/..")>-1) { + return true; + } + if(str.indexOf(".\\")>-1) { + return true; + } + if(str.indexOf("..\\")>-1 || str.indexOf("\\..")>-1) { + return true; + } + + return result; + } + + /** + *
메소드 설명: 마스킹 된 파일명을 반환한다.
+ * @param filename + * @param upload + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + */ + private static String getFileMask(String filename) { + + String realRcRilenm= ""; + String mm = ""; + String dd = ""; + Calendar ca = Calendar.getInstance(); + + int year = ca.get(Calendar.YEAR); + int mon = ca.get(Calendar.MONTH) + 1; + int day = ca.get(Calendar.DATE); + int hour = ca.get(Calendar.HOUR); + int min = ca.get(Calendar.MINUTE); + int sec = ca.get(Calendar.SECOND); + int milSec = ca.get(Calendar.MILLISECOND); + + if (mon <10){ + mm = "0" + String.valueOf(mon); + }else{ + mm = String.valueOf(mon); + } + + if (day<10){ + dd = "0" + String.valueOf(day); + }else{ + dd = String.valueOf(day); + } + + realRcRilenm = String.valueOf(year)+mm+dd+String.valueOf(hour) + +String.valueOf(min)+String.valueOf(sec)+String.valueOf(milSec) + filename.substring(filename.lastIndexOf("."), filename.length()); + + return realRcRilenm; + } + + /** + *
메소드 설명: 파일 이름 변경
+	 *   -경로에 업로드파일과 동일한 파일명이 존재할 경우
+	 *   -원본 파일의 파일명 뒤에 순번을 붙여 반환 한다
+	 *     ex) 업로드 파일이 test.txt일때 이미 경로에 동일 파일명이 존재할 경우 test_1.txt를 반환 
+	 * 
+ * @param filename + * @param upload + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 3. 13. + */ + private static String getFileRename(String filename, String upload) { + int count = 1; + String tempfilename = filename; + File currentDir = new File(upload); + String[] lists = currentDir.list(); + for (int k = 0; k < lists.length; k++) { + int iidx = lists[k].lastIndexOf("/"); + if (tempfilename.equals(lists[k].substring(iidx + 1))) { + int inx = filename.lastIndexOf("."); + String strBuf = filename.substring(inx + 1); + String strTemp = filename.substring(0, inx); + tempfilename = strTemp + "_" + count + "." + strBuf; + count++; + k = 0; + continue; + } + } + return tempfilename; + } + + /** + *
메소드 설명: 날짜별 업로드 경로 반환
+	 * 	-설정한 업로드경로에 날짜별로 디렉토리를 생성 하도록 변경된 업로드경로를 반환 한다.
+	 *   ex) as-is: /app/file/upload/
+	 *       to-be: /app/file/upload/[yyyymm]/[dd]/
+	 * 
+ * @param uploadPath 파일 업로드 경로 + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + private static String getUploadPathByDate(String uploadPath) { + + /** + * 저장경로 날짜별 분류 + * ex)~/202003/1~31 + */ + String toDate = XitCmmnUtil.getToDate("yyyyMMdd"); + uploadPath += String.format("/%s/%s/", toDate.substring(0,6), toDate.substring(6)); + + return uploadPath; + } + + + + + + + + + + /** + *
메소드 설명: 파일 다운로드
+ * @param request + * @param response + * @param filePath 파일경로 + * @param fileNm 파일명 + * @param viewFileNm client가 받아볼 파일명칭 + * @throws IOException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 12. + */ + public static void fileDownload(HttpServletRequest request + , HttpServletResponse response + , String filePath + , String fileNm + , String viewFileNm + ) throws IOException, RuntimeException { + + /** + * 필수값 설정 + */ + String pathname = String.format("%s%s%s", filePath, System.getProperty("file.separator"), fileNm); + if(XitCmmnUtil.isEmpty(viewFileNm)) + viewFileNm = fileNm; + + fileDownload(request, response, pathname, viewFileNm); + } + /** + *
메소드 설명: 파일 다운로드
+ * @param request + * @param response + * @param pathname 파일경로(파일명 포함) + * @throws IOException + * @throws RuntimeException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 12. + */ + public static void fileDownload(HttpServletRequest request + , HttpServletResponse response + , String pathname + ) throws IOException, RuntimeException { + + //파일경로에 경로순회 문자 포함 여부 확인 + if(isExistsDirTraversalChar(pathname)) { + throw new RuntimeException("path 정보에 경로순회 문자가 포함되어 있습니다."); + } + + + String viewFileNm = "unknown"; + try { + File file = new File(pathname); + viewFileNm = file.getName(); + } catch (Exception e) { + } + + + fileDownload(request, response, pathname, viewFileNm); + } + /** + *
메소드 설명: 파일 다운로드
+ * @param request + * @param response + * @param pathname 파일경로(파일명 포함) + * @param viewFileNm client가 받아볼 파일명칭 + * @throws IOException + * @throws RuntimeException void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 12. + * + * file IO try-with-resource 적용 + */ + public static void fileDownload(HttpServletRequest request + , HttpServletResponse response + , String pathname + , String viewFileNm + ) throws IOException, RuntimeException { + + + + /** + * 유효성 확인 + */ + File file = new File(pathname); + if(!file.exists()) + throw new RuntimeException("파일이 존재하지 않습니다."); + if(!file.isFile()) + throw new RuntimeException("파일이 아닙니다."); + //파일경로에 경로순회 문자 포함 여부 확인 + if(isExistsDirTraversalChar(pathname)) { + throw new RuntimeException("path 정보에 경로순회 문자가 포함되어 있습니다."); + } + + + /** + * 파일 출력 + */ + response.setContentType("application/octet-stream; charset=utf-8"); + response.setContentLength((int) file.length()); + String browser = getBrowser(request); //요청 브라우저 취득 + String disposition = getDisposition(viewFileNm, browser); //브라우저별 Contents-Diposition 설정 + response.setHeader("Content-Disposition", disposition); + response.setHeader("Content-Transfer-Encoding", "binary"); + + //OutputStream os = null; + //FileInputStream fis = null; + //try { + // os = response.getOutputStream(); + // fis = new FileInputStream(file); + // FileCopyUtils.copy(fis, os); + // if (fis != null) + // fis.close(); + // os.flush(); + // os.close(); + //} catch (Exception e) { + // throw new RuntimeException("다운로드에 실패 하였습니다.", e); + //} finally { + // if(fis != null) + // fis.close(); + // if(os != null) { + // os.flush(); + // os.close(); + // } + // + //} + + try(OutputStream os = response.getOutputStream(); + FileInputStream fis = new FileInputStream(file)){ + FileCopyUtils.copy(fis, os); + os.flush(); + } catch (IOException ie){ + throw new RuntimeException("다운로드에 실패 하였습니다.", ie); + } + } + + + + /** + *
메소드 설명: 브라우저 종류를 반환한다.
+	 * 	MSIE : 인터넷 익스플로러
+	 * 	Chrome : 크롬 브라우저
+	 * 	Opera : 오페라 브라우저
+	 * 	Firefox : 파이어폭스 브라우저
+	 * 
+ * @param request + * @return String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 12. + */ + private static String getBrowser(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + if (header.indexOf("MSIE") > -1 || header.indexOf("Trident") > -1) + return "MSIE"; + else if (header.indexOf("Chrome") > -1) + return "Chrome"; + else if (header.indexOf("Opera") > -1) + return "Opera"; + return "Firefox"; + } + + /** + *
메소드 설명: 브라우저별 Content-Disposition 반환
+	 * 	-응답헤더의 Content-Dispsition에 attachment와 filename을 함께 설정해주게 되는 경우
+	 * 	-Body에 오는 값을 다운로드 받으라는 의미가 된다.
+	 * 	ex) Content-Disposition: attachment; filename="파일명.txt"
+	 * 
+ * @param filename + * @param browser + * @return + * @throws UnsupportedEncodingException String 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 12. + */ + private static String getDisposition(String filename, String browser) + throws UnsupportedEncodingException { + final String dispositionPrefix = "attachment;filename="; + String encodedFilename = null; + if (browser.equals("MSIE")) { + encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll( + "\\+", "%20"); + } else if (browser.equals("Firefox")) { + encodedFilename = "\"" + + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Opera")) { + encodedFilename = "\"" + + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; + } else if (browser.equals("Chrome")) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < filename.length(); i++) { + char c = filename.charAt(i); + if (c > '~') { + sb.append(URLEncoder.encode("" + c, "UTF-8")); + } else { + sb.append(c); + } + } + encodedFilename = sb.toString(); + } + return dispositionPrefix + encodedFilename; + } + + + + + /** + *
메소드 설명: 파일 삭제
+ * @param filePath 파일경로 + * @param fileNm 파일명 + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public static boolean fileDelete(String filePath, String fileNm) { + /** + * 필수값 설정 + */ + String pathname = String.format("%s%s%s", filePath, System.getProperty("file.separator"), fileNm); + + + return fileDelete(pathname); + } + /** + *
메소드 설명: 파일 삭제
+ * @param pathname 파일경로(파일명 포함) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public static boolean fileDelete(String pathname) { + return fileDelete(pathname, false); + } + /** + *
메소드 설명: 파일 삭제
+ * @param pathname 파일경로(파일명 포함) + * @param isForce 강제삭제 여부(true: 모두 삭제 가능, false: 파일 또는 빈(empty) 디렉토리만 삭제 가능) + * @return boolean 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public static boolean fileDelete(String pathname, boolean isForce) { + /** + * 유효성 확인 + */ + File file = new File(pathname); + if(!file.exists()) + throw new RuntimeException("파일이 존재하지 않습니다."); + //파일경로에 경로순회 문자 포함 여부 확인 + if(isExistsDirTraversalChar(pathname)) { + throw new RuntimeException("path 정보에 경로순회 문자가 포함되어 있습니다."); + } + + + /** + * 처리 + */ + boolean result = true; + try { + if(isForce) + deletes(file); + else + result = file.delete(); + } catch (Exception e) { + result = false; + } + + return result; + } + + + /** + *
메소드 설명: 하위 디렉토리 파일 삭제
+	 * 	-디렉토리의 경우 하위경로에 파일이 존재 할 경우 삭제가 되지 않으므로 재귀호출을 이용하여 삭제 처리한다.
+	 * 
+ * @param pathname void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + private static void deletes(File file) { + + if(file.isFile()) { //"파일"이면 + file.delete(); + + }else if(file.isDirectory()) { //"디렉토리"이면 + File[] fileList = file.listFiles(); + + for(int i=0; i메소드 설명: 캡차인증 이미지를 생성 한다. + * -자동로그인 방지를 위해 특정문구가 입력된 캡차 이미지를 생성 한다. + * -캡차 이미지에 입력된 문구는 요청 session의 attribute에 "captcha"란 이름으로 저장 된다. + * + * @param request + * @param response void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 9. 22. + */ + public static void getImage(HttpServletRequest request, HttpServletResponse response) { + + Captcha captcha = new Captcha.Builder(250, 50) //캡차 이미지 크기(가로,세로) + .addText() //이미지문구 생성(default: 5자리의 랜덤한 알파벳과 숫자 생성) +// .addText(new NumbersAnswerProducer()) //이미지문구 생성(5자리의 랜덤한 숫자 생성) + .addBackground(new GradiatedBackgroundProducer()) //바탕색 흰색 - Default + .addNoise() //한번 호출할 떄마다 하나의 라인이 추가된다. + .gimp() //Gradiated 백그라운드 +// .gimp(new DropShadowGimpyRenderer()) //그림자 효과 추가 + .addBorder() //검정 테두리 선 생성 + .build(); //필수 호출 함수 + + + response.setHeader("Cache-Control", "no-store"); + response.setHeader("Pragma", "no-cache"); //브라우저 캐시 설정 + response.setDateHeader("Expires", 0); + response.setContentType("image/jpeg"); //리턴 컨텐츠타입 설정 + + + //image 생성 + CaptchaServletUtil.writeImage(response, captcha.getImage()); + //image 문자 +// String captchaImgStr = captcha.getAnswer(); + + //요청세션에 저장 + request.getSession().setAttribute("captcha", captcha); + } + + +} diff --git a/src/main/java/kr/xit/framework/core/utils/egov/EgovComExcepHndlr.java b/src/main/java/kr/xit/framework/core/utils/egov/EgovComExcepHndlr.java new file mode 100644 index 00000000..ca4c843a --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/egov/EgovComExcepHndlr.java @@ -0,0 +1,35 @@ +package kr.xit.framework.core.utils.egov; + +import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Class Name : EgovComExcepHndlr.java + * @Description : 공통서비스의 exception 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- -------------------S + * 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); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/egov/EgovComOthersExcepHndlr.java b/src/main/java/kr/xit/framework/core/utils/egov/EgovComOthersExcepHndlr.java new file mode 100644 index 00000000..6a9881b2 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/egov/EgovComOthersExcepHndlr.java @@ -0,0 +1,17 @@ +package kr.xit.framework.core.utils.egov; + + +import egovframework.rte.fdl.cmmn.exception.handler.ExceptionHandler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class EgovComOthersExcepHndlr implements ExceptionHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovComOthersExcepHndlr.class); + + public void occur(Exception exception, String packageName) { + //log.debug(" EgovServiceExceptionHandler run..............."); + LOGGER.error(packageName, exception); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/egov/EgovComTraceHandler.java b/src/main/java/kr/xit/framework/core/utils/egov/EgovComTraceHandler.java new file mode 100644 index 00000000..f40ab7b5 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/egov/EgovComTraceHandler.java @@ -0,0 +1,31 @@ +package kr.xit.framework.core.utils.egov; + +import egovframework.rte.fdl.cmmn.trace.handler.TraceHandler; +import lombok.extern.slf4j.Slf4j; + +/** + * @Class Name : EgovComTraceHandler.java + * @Description : 공통서비스의 trace 처리 클래스 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- ------- ------------------- + * 2011. 09. 30. JJY + * + * @author JJY + * @since 2011. 9. 30. + * + */ +@Slf4j +public class EgovComTraceHandler implements TraceHandler { + + /** + * 발생된 메시지를 출력한다. + */ + @Override + public void todo(Class clazz, String message) { + log.debug("[TRACE]CLASS::: {}", clazz.getName()); + log.debug("[TRACE]MESSAGE::: {}", message); + //이곳에서 후속처리로 필요한 액션을 취할 수 있다. + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/egov/EgovDateUtil.java b/src/main/java/kr/xit/framework/core/utils/egov/EgovDateUtil.java new file mode 100644 index 00000000..eeddc4ed --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/egov/EgovDateUtil.java @@ -0,0 +1,855 @@ +package kr.xit.framework.core.utils.egov; + +import java.security.SecureRandom; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.TimeZone; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ibm.icu.util.ChineseCalendar; + +/** + * + * Date 에 대한 Util 클래스 + * @author 공통서비스 개발팀 이중호 + * @since 2009.02.01 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2009.02.01  이중호          최초 생성
+ *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
+ *
+ * 
+ */ +public class EgovDateUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovDateUtil.class); + + /** + *

yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년, 월, 일을 + * 증감한다. 년, 월, 일은 가감할 수를 의미하며, 음수를 입력할 경우 감한다.

+ * + *
+	 * DateUtil.addYearMonthDay("19810828", 0, 0, 19)  = "19810916"
+	 * DateUtil.addYearMonthDay("20060228", 0, 0, -10) = "20060218"
+	 * DateUtil.addYearMonthDay("20060228", 0, 0, 10)  = "20060310"
+	 * DateUtil.addYearMonthDay("20060228", 0, 0, 32)  = "20060401"
+	 * DateUtil.addYearMonthDay("20050331", 0, -1, 0)  = "20050228"
+	 * DateUtil.addYearMonthDay("20050301", 0, 2, 30)  = "20050531"
+	 * DateUtil.addYearMonthDay("20050301", 1, 2, 30)  = "20060531"
+	 * DateUtil.addYearMonthDay("20040301", 2, 0, 0)   = "20060301"
+	 * DateUtil.addYearMonthDay("20040229", 2, 0, 0)   = "20060228"
+	 * DateUtil.addYearMonthDay("20040229", 2, 0, 1)   = "20060301"
+	 * 
+ * + * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @param year 가감할 년. 0이 입력될 경우 가감이 없다 + * @param month 가감할 월. 0이 입력될 경우 가감이 없다 + * @param day 가감할 일. 0이 입력될 경우 가감이 없다 + * @return yyyyMMdd 형식의 날짜 문자열 + * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우. + * 입력 값이 null인 경우. + */ + public static String addYearMonthDay(String sDate, int year, int month, int day) { + + String dateStr = validChkDate(sDate); + + Calendar cal = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + try { + cal.setTime(sdf.parse(dateStr)); + } catch (ParseException e) { + throw new IllegalArgumentException("Invalid date format: " + dateStr); + } + + if (year != 0) + cal.add(Calendar.YEAR, year); + if (month != 0) + cal.add(Calendar.MONTH, month); + if (day != 0) + cal.add(Calendar.DATE, day); + return sdf.format(cal.getTime()); + } + + /** + *

yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 년을 + * 증감한다. year는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.

+ * + *
+	 * DateUtil.addYear("20000201", 62)  = "20620201"
+	 * DateUtil.addYear("20620201", -62) = "20000201"
+	 * DateUtil.addYear("20040229", 2)   = "20060228"
+	 * DateUtil.addYear("20060228", -2)  = "20040228"
+	 * DateUtil.addYear("19000101", 200) = "21000101"
+	 * 
+ * + * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @param year 가감할 년. 0이 입력될 경우 가감이 없다 + * @return yyyyMMdd 형식의 날짜 문자열 + * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우. + * 입력 값이 null인 경우. + */ + public static String addYear(String dateStr, int year) { + return addYearMonthDay(dateStr, year, 0, 0); + } + + /** + *

yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 월을 + * 증감한다. month는 가감할 수를 의미하며, 음수를 입력할 경우 감한다.

+ * + *
+	 * DateUtil.addMonth("20010201", 12)  = "20020201"
+	 * DateUtil.addMonth("19800229", 12)  = "19810228"
+	 * DateUtil.addMonth("20040229", 12)  = "20050228"
+	 * DateUtil.addMonth("20050228", -12) = "20040228"
+	 * DateUtil.addMonth("20060131", 1)   = "20060228"
+	 * DateUtil.addMonth("20060228", -1)  = "20060128"
+	 * 
+ * + * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @param month 가감할 월. 0이 입력될 경우 가감이 없다 + * @return yyyyMMdd 형식의 날짜 문자열 + * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우. + * 입력 값이 null인 경우. + */ + public static String addMonth(String dateStr, int month) { + return addYearMonthDay(dateStr, 0, month, 0); + } + + /** + *

yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 일(day)를 + * 증감한다. day는 가감할 수를 의미하며, 음수를 입력할 경우 감한다. + *

+ * 위에 정의된 addDays 메서드는 사용자가 ParseException을 반드시 처리해야 하는 불편함이 + * 있기 때문에 추가된 메서드이다.

+ * + *
+	 * DateUtil.addDay("19991201", 62) = "20000201"
+	 * DateUtil.addDay("20000201", -62) = "19991201"
+	 * DateUtil.addDay("20050831", 3) = "20050903"
+	 * DateUtil.addDay("20050831", 3) = "20050903"
+	 * // 2006년 6월 31일은 실제로 존재하지 않는 날짜이다 -> 20060701로 간주된다
+	 * DateUtil.addDay("20060631", 1) = "20060702"
+	 * 
+ * + * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @param day 가감할 일. 0이 입력될 경우 가감이 없다 + * @return yyyyMMdd 형식의 날짜 문자열 + * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우. + * 입력 값이 null인 경우. + */ + public static String addDay(String dateStr, int day) { + return addYearMonthDay(dateStr, 0, 0, day); + } + + /** + *

yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열 dateStr1 + * dateStr2 사이의 일 수를 구한다.
+ * dateStr2dateStr1 보다 과거 날짜일 경우에는 + * 음수를 반환한다. 동일한 경우에는 0을 반환한다.

+ * + *
+	 * DateUtil.getDaysDiff("20060228","20060310") = 10
+	 * DateUtil.getDaysDiff("20060101","20070101") = 365
+	 * DateUtil.getDaysDiff("19990228","19990131") = -28
+	 * DateUtil.getDaysDiff("20060801","20060802") = 1
+	 * DateUtil.getDaysDiff("20060801","20060801") = 0
+	 * 
+ * + * @param dateStr1 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @param dateStr2 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @return 일 수 차이. + * @throws IllegalArgumentException 날짜 포맷이 정해진 바와 다를 경우. + * 입력 값이 null인 경우. + */ + public static int getDaysDiff(String sDate1, String sDate2) { + String dateStr1 = validChkDate(sDate1); + String dateStr2 = validChkDate(sDate2); + + if (!checkDate(sDate1) || !checkDate(sDate2)) { + throw new IllegalArgumentException("Invalid date format: args[0]=" + sDate1 + " args[1]=" + sDate2); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + + Date date1 = null; + Date date2 = null; + try { + date1 = sdf.parse(dateStr1); + date2 = sdf.parse(dateStr2); + } catch (ParseException e) { + throw new IllegalArgumentException("Invalid date format: args[0]=" + dateStr1 + " args[1]=" + dateStr2); + } + int days1 = (int) ((date1.getTime() / 3600000) / 24); + int days2 = (int) ((date2.getTime() / 3600000) / 24); + + return days2 - days1; + } + + /** + *

yyyyMMdd 혹은 yyyy-MM-dd 형식의 날짜 문자열을 입력 받아 유효한 날짜인지 검사.

+ * + *
+	 * DateUtil.checkDate("1999-02-35") = false
+	 * DateUtil.checkDate("2000-13-31") = false
+	 * DateUtil.checkDate("2006-11-31") = false
+	 * DateUtil.checkDate("2006-2-28")  = false
+	 * DateUtil.checkDate("2006-2-8")   = false
+	 * DateUtil.checkDate("20060228")   = true
+	 * DateUtil.checkDate("2006-02-28") = true
+	 * 
+ * + * @param dateStr 날짜 문자열(yyyyMMdd, yyyy-MM-dd의 형식) + * @return 유효한 날짜인지 여부 + */ + public static boolean checkDate(String sDate) { + String dateStr = validChkDate(sDate); + + String year = dateStr.substring(0, 4); + String month = dateStr.substring(4, 6); + String day = dateStr.substring(6); + + return checkDate(year, month, day); + } + + /** + *

입력한 년, 월, 일이 유효한지 검사.

+ * + * @param year 연도 + * @param month 월 + * @param day 일 + * @return 유효한 날짜인지 여부 + */ + public static boolean checkDate(String year, String month, String day) { + try { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()); + + Date result = formatter.parse(year + "." + month + "." + day); + String resultStr = formatter.format(result); + if (resultStr.equalsIgnoreCase(year + "." + month + "." + day)) + return true; + else + return false; + } catch (ParseException e) { + return false; + } + } + + /** + * 날짜형태의 String의 날짜 포맷 및 TimeZone을 변경해 주는 메서드 + * + * @param strSource 바꿀 날짜 String + * @param fromDateFormat 기존의 날짜 형태 + * @param toDateFormat 원하는 날짜 형태 + * @param strTimeZone 변경할 TimeZone(""이면 변경 안함) + * @return 소스 String의 날짜 포맷을 변경한 String + */ + public static String convertDate(String strSource, String fromDateFormat, String toDateFormat, String strTimeZone) { + SimpleDateFormat simpledateformat = null; + Date date = null; + String _fromDateFormat = ""; + String _toDateFormat = ""; + + if (EgovStringUtil.isNullToString(strSource).trim().equals("")) { + return ""; + } + if (EgovStringUtil.isNullToString(fromDateFormat).trim().equals("")) + _fromDateFormat = "yyyyMMddHHmmss"; // default값 + if (EgovStringUtil.isNullToString(toDateFormat).trim().equals("")) + _toDateFormat = "yyyy-MM-dd HH:mm:ss"; // default값 + + try { + simpledateformat = new SimpleDateFormat(_fromDateFormat, Locale.getDefault()); + date = simpledateformat.parse(strSource); + if (!EgovStringUtil.isNullToString(strTimeZone).trim().equals("")) { + simpledateformat.setTimeZone(TimeZone.getTimeZone(strTimeZone)); + } + simpledateformat = new SimpleDateFormat(_toDateFormat, Locale.getDefault()); + } catch (ParseException exception) { + LOGGER.debug("{}", exception); + } + if (simpledateformat != null && simpledateformat.format(date) != null) { + return simpledateformat.format(date); + } else { + return ""; + } + + } + + /** + * yyyyMMdd 형식의 날짜문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다
+ *
+	* ex) 20030405, ch(.) -> 2003.04.05
+	* ex) 200304, ch(.) -> 2003.04
+	* ex) 20040101,ch(/) --> 2004/01/01 로 리턴
+	* 
+ * + * @param date yyyyMMdd 형식의 날짜문자열 + * @param ch 구분자 + * @return 변환된 문자열 + */ + public static String formatDate(String sDate, String ch) { + String dateStr = validChkDate(sDate); + + String str = dateStr.trim(); + String yyyy = ""; + String mm = ""; + String dd = ""; + + if (str.length() == 8) { + yyyy = str.substring(0, 4); + if (yyyy.equals("0000")) + return ""; + + mm = str.substring(4, 6); + if (mm.equals("00")) + return yyyy; + + dd = str.substring(6, 8); + if (dd.equals("00")) + return yyyy + ch + mm; + + return yyyy + ch + mm + ch + dd; + } else if (str.length() == 6) { + yyyy = str.substring(0, 4); + if (yyyy.equals("0000")) + return ""; + + mm = str.substring(4, 6); + if (mm.equals("00")) + return yyyy; + + return yyyy + ch + mm; + } else if (str.length() == 4) { + yyyy = str.substring(0, 4); + if (yyyy.equals("0000")) + return ""; + else + return yyyy; + } else + return ""; + } + + /** + * HH24MISS 형식의 시간문자열을 원하는 캐릭터(ch)로 쪼개 돌려준다
+ *
+	 *     ex) 151241, ch(/) -> 15/12/31
+	 * 
+ * + * @param str HH24MISS 형식의 시간문자열 + * @param ch 구분자 + * @return 변환된 문자열 + */ + public static String formatTime(String sTime, String ch) { + String timeStr = validChkTime(sTime); + return timeStr.substring(0, 2) + ch + timeStr.substring(2, 4) + ch + timeStr.substring(4, 6); + } + + /** + * 연도를 입력 받아 해당 연도 2월의 말일(일수)를 문자열로 반환한다. + * + * @param year + * @return 해당 연도 2월의 말일(일수) + */ + public String leapYear(int year) { + if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { + return "29"; + } + + return "28"; + } + + /** + *

입력받은 연도가 윤년인지 아닌지 검사한다.

+ * + *
+	 * DateUtil.isLeapYear(2004) = false
+	 * DateUtil.isLeapYear(2005) = true
+	 * DateUtil.isLeapYear(2006) = true
+	 * 
+ * + * @param year 연도 + * @return 윤년 여부 + */ + public static boolean isLeapYear(int year) { + if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { + return false; + } + return true; + } + + /** + * 현재(한국기준) 날짜정보를 얻는다.
+ * 표기법은 yyyy-mm-dd
+ * @return String yyyymmdd형태의 현재 한국시간.
+ */ + public static String getToday() { + return getCurrentDate(""); + } + + /** + * 현재(한국기준) 날짜정보를 얻는다.
+ * 표기법은 yyyy-mm-dd
+ * @return String yyyymmdd형태의 현재 한국시간.
+ */ + public static String getCurrentDate(String dateType) { + Calendar aCalendar = Calendar.getInstance(); + + int year = aCalendar.get(Calendar.YEAR); + int month = aCalendar.get(Calendar.MONTH) + 1; + int date = aCalendar.get(Calendar.DATE); + String strDate = Integer.toString(year) + ((month < 10) ? "0" + Integer.toString(month) : Integer.toString(month)) + + ((date < 10) ? "0" + Integer.toString(date) : Integer.toString(date)); + + if (!"".equals(dateType)) + strDate = convertDate(strDate, "yyyyMMdd", dateType); + + return strDate; + } + + /** + * 날짜형태의 String의 날짜 포맷만을 변경해 주는 메서드 + * @param sDate 날짜 + * @param sTime 시간 + * @param sFormatStr 포멧 스트링 문자열 + * @return 지정한 날짜/시간을 지정한 포맷으로 출력 + * @See Letter Date or Time Component Presentation Examples + G Era designator Text AD + y Year Year 1996; 96 + M Month in year Month July; Jul; 07 + w Week in year Number 27 + W Week in month Number 2 + D Day in year Number 189 + d Day in month Number 10 + F Day of week in month Number 2 + E Day in week Text Tuesday; Tue + a Am/pm marker Text PM + H Hour in day (0-23) Number 0 + k Hour in day (1-24) Number 24 + K Hour in am/pm (0-11) Number 0 + h Hour in am/pm (1-12) Number 12 + m Minute in hour Number 30 + s Second in minute Number 55 + S Millisecond Number 978 + z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 + Z Time zone RFC 822 time zone -0800 + + + + Date and Time Pattern Result + "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT + "EEE, MMM d, ''yy" Wed, Jul 4, '01 + "h:mm a" 12:08 PM + "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time + "K:mm a, z" 0:08 PM, PDT + "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM + "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700 + "yyMMddHHmmssZ" 010704120856-0700 + + */ + public static String convertDate(String sDate, String sTime, String sFormatStr) { + String dateStr = validChkDate(sDate); + String timeStr = validChkTime(sTime); + + Calendar cal = null; + cal = Calendar.getInstance(); + + cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4))); + cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1); + cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8))); + cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2))); + cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4))); + + SimpleDateFormat sdf = new SimpleDateFormat(sFormatStr, Locale.ENGLISH); + + return sdf.format(cal.getTime()); + } + + /** + * 입력받은 일자 사이의 임의의 일자를 반환 + * @param sDate1 시작일자 + * @param sDate2 종료일자 + * @return 임의일자 + */ + public static String getRandomDate(String sDate1, String sDate2) { + String dateStr1 = validChkDate(sDate1); + String dateStr2 = validChkDate(sDate2); + + String randomDate = null; + + int sYear, sMonth, sDay; + int eYear, eMonth, eDay; + + sYear = Integer.parseInt(dateStr1.substring(0, 4)); + sMonth = Integer.parseInt(dateStr1.substring(4, 6)); + sDay = Integer.parseInt(dateStr1.substring(6, 8)); + + eYear = Integer.parseInt(dateStr2.substring(0, 4)); + eMonth = Integer.parseInt(dateStr2.substring(4, 6)); + eDay = Integer.parseInt(dateStr2.substring(6, 8)); + + GregorianCalendar beginDate = new GregorianCalendar(sYear, sMonth - 1, sDay, 0, 0); + GregorianCalendar endDate = new GregorianCalendar(eYear, eMonth - 1, eDay, 23, 59); + + if (endDate.getTimeInMillis() < beginDate.getTimeInMillis()) { + throw new IllegalArgumentException("Invalid input date : " + sDate1 + "~" + sDate2); + } + + SecureRandom r = new SecureRandom(); + + long rand = ((r.nextLong() >>> 1) % (endDate.getTimeInMillis() - beginDate.getTimeInMillis() + 1)) + beginDate.getTimeInMillis(); + + GregorianCalendar cal = new GregorianCalendar(); + //SimpleDateFormat calformat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat calformat = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH); + cal.setTimeInMillis(rand); + randomDate = calformat.format(cal.getTime()); + + // 랜덤문자열를 리턴 + return randomDate; + } + + /** + * 입력받은 양력일자를 변환하여 음력일자로 반환 + * @param sDate 양력일자 + * @return 음력일자 + */ + public static Map toLunar(String sDate) { + String dateStr = validChkDate(sDate); + + Map hm = new HashMap(); + hm.put("day", ""); + hm.put("leap", "0"); + + if (dateStr.length() != 8) { + return hm; + } + + Calendar cal; + ChineseCalendar lcal; + + cal = Calendar.getInstance(); + lcal = new ChineseCalendar(); + + cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4))); + cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1); + cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8))); + + lcal.setTimeInMillis(cal.getTimeInMillis()); + + String year = String.valueOf(lcal.get(ChineseCalendar.EXTENDED_YEAR) - 2637); + String month = String.valueOf(lcal.get(ChineseCalendar.MONTH) + 1); + String day = String.valueOf(lcal.get(ChineseCalendar.DAY_OF_MONTH)); + String leap = String.valueOf(lcal.get(ChineseCalendar.IS_LEAP_MONTH)); + + String pad4Str = "0000"; + String pad2Str = "00"; + + String retYear = (pad4Str + year).substring(year.length()); + String retMonth = (pad2Str + month).substring(month.length()); + String retDay = (pad2Str + day).substring(day.length()); + + String SDay = retYear + retMonth + retDay; + + hm.put("day", SDay); + hm.put("leap", leap); + + return hm; + } + + /** + * 입력받은 음력일자를 변환하여 양력일자로 반환 + * @param sDate 음력일자 + * @param iLeapMonth 음력윤달여부(IS_LEAP_MONTH) + * @return 양력일자 + */ + public static String toSolar(String sDate, int iLeapMonth) { + String dateStr = validChkDate(sDate); + + Calendar cal; + ChineseCalendar lcal; + + cal = Calendar.getInstance(); + lcal = new ChineseCalendar(); + + lcal.set(ChineseCalendar.EXTENDED_YEAR, Integer.parseInt(dateStr.substring(0, 4)) + 2637); + lcal.set(ChineseCalendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1); + lcal.set(ChineseCalendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8))); + lcal.set(ChineseCalendar.IS_LEAP_MONTH, iLeapMonth); + + cal.setTimeInMillis(lcal.getTimeInMillis()); + + String year = String.valueOf(cal.get(Calendar.YEAR)); + String month = String.valueOf(cal.get(Calendar.MONTH) + 1); + String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)); + + String pad4Str = "0000"; + String pad2Str = "00"; + + String retYear = (pad4Str + year).substring(year.length()); + String retMonth = (pad2Str + month).substring(month.length()); + String retDay = (pad2Str + day).substring(day.length()); + + return retYear + retMonth + retDay; + } + + /** + * 입력받은 요일의 영문명을 국문명의 요일로 반환 + * @param sWeek 영문 요일명 + * @return 국문 요일명 + */ + public static String convertWeek(String sWeek) { + String retStr = null; + + if (sWeek.equals("SUN")) { + retStr = "일요일"; + } else if (sWeek.equals("MON")) { + retStr = "월요일"; + } else if (sWeek.equals("TUE")) { + retStr = "화요일"; + } else if (sWeek.equals("WED")) { + retStr = "수요일"; + } else if (sWeek.equals("THR")) { + retStr = "목요일"; + } else if (sWeek.equals("FRI")) { + retStr = "금요일"; + } else if (sWeek.equals("SAT")) { + retStr = "토요일"; + } + + return retStr; + } + + /** + * 입력일자의 유효 여부를 확인 + * @param sDate 일자 + * @return 유효 여부 + */ + public static boolean validDate(String sDate) { + String dateStr = validChkDate(sDate); + + Calendar cal; + boolean ret = false; + + cal = Calendar.getInstance(); + + cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4))); + cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1); + cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8))); + + String year = String.valueOf(cal.get(Calendar.YEAR)); + String month = String.valueOf(cal.get(Calendar.MONTH) + 1); + String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)); + + String pad4Str = "0000"; + String pad2Str = "00"; + + String retYear = (pad4Str + year).substring(year.length()); + String retMonth = (pad2Str + month).substring(month.length()); + String retDay = (pad2Str + day).substring(day.length()); + + String retYMD = retYear + retMonth + retDay; + + if (sDate.equals(retYMD)) { + ret = true; + } + + return ret; + } + + /** + * 입력일자, 요일의 유효 여부를 확인 + * @param sDate 일자 + * @param sWeek 요일 (DAY_OF_WEEK) + * @return 유효 여부 + */ + public static boolean validDate(String sDate, int sWeek) { + String dateStr = validChkDate(sDate); + + Calendar cal; + boolean ret = false; + + cal = Calendar.getInstance(); + + cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4))); + cal.set(Calendar.MONTH, Integer.parseInt(dateStr.substring(4, 6)) - 1); + cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStr.substring(6, 8))); + + int Week = cal.get(Calendar.DAY_OF_WEEK); + + if (validDate(sDate)) { + if (sWeek == Week) { + ret = true; + } + } + + return ret; + } + + /** + * 입력시간의 유효 여부를 확인 + * @param sTime 입력시간 + * @return 유효 여부 + */ + public static boolean validTime(String sTime) { + String timeStr = validChkTime(sTime); + + Calendar cal; + boolean ret = false; + + cal = Calendar.getInstance(); + + cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeStr.substring(0, 2))); + cal.set(Calendar.MINUTE, Integer.parseInt(timeStr.substring(2, 4))); + + String HH = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)); + String MM = String.valueOf(cal.get(Calendar.MINUTE)); + + String pad2Str = "00"; + + String retHH = (pad2Str + HH).substring(HH.length()); + String retMM = (pad2Str + MM).substring(MM.length()); + + String retTime = retHH + retMM; + + if (sTime.equals(retTime)) { + ret = true; + } + + return ret; + } + + /** + * 입력된 일자에 연, 월, 일을 가감한 날짜의 요일을 반환 + * @param sDate 날짜 + * @param year 연 + * @param month 월 + * @param day 일 + * @return 계산된 일자의 요일(DAY_OF_WEEK) + */ + public static String addYMDtoWeek(String sDate, int year, int month, int day) { + String dateStr = validChkDate(sDate); + + dateStr = addYearMonthDay(dateStr, year, month, day); + + Calendar cal = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH); + try { + cal.setTime(sdf.parse(dateStr)); + } catch (ParseException e) { + throw new IllegalArgumentException("Invalid date format: " + dateStr); + } + + SimpleDateFormat rsdf = new SimpleDateFormat("E", Locale.ENGLISH); + + return rsdf.format(cal.getTime()); + } + + /** + * 입력된 일자에 연, 월, 일, 시간, 분을 가감한 날짜, 시간을 포멧스트링 형식으로 반환 + * @param sDate 날짜 + * @param sTime 시간 + * @param year 연 + * @param month 월 + * @param day 일 + * @param hour 시간 + * @param minute 분 + * @param formatStr 포멧스트링 + * @return + */ + public static String addYMDtoDayTime(String sDate, String sTime, int year, int month, int day, int hour, int minute, String formatStr) { + String dateStr = validChkDate(sDate); + String timeStr = validChkTime(sTime); + + dateStr = addYearMonthDay(dateStr, year, month, day); + + dateStr = convertDate(dateStr, timeStr, "yyyyMMddHHmm"); + + Calendar cal = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); + + try { + cal.setTime(sdf.parse(dateStr)); + } catch (ParseException e) { + throw new IllegalArgumentException("Invalid date format: " + dateStr); + } + + if (hour != 0) { + cal.add(Calendar.HOUR, hour); + } + + if (minute != 0) { + cal.add(Calendar.MINUTE, minute); + } + + SimpleDateFormat rsdf = new SimpleDateFormat(formatStr, Locale.ENGLISH); + + return rsdf.format(cal.getTime()); + } + + /** + * 입력된 일자를 int 형으로 반환 + * @param sDate 일자 + * @return int(일자) + */ + public static int datetoInt(String sDate) { + return Integer.parseInt(convertDate(sDate, "0000", "yyyyMMdd")); + } + + /** + * 입력된 시간을 int 형으로 반환 + * @param sTime 시간 + * @return int(시간) + */ + public static int timetoInt(String sTime) { + return Integer.parseInt(convertDate("00000101", sTime, "HHmm")); + } + + /** + * 입력된 일자 문자열을 확인하고 8자리로 리턴 + * @param sDate + * @return + */ + public static String validChkDate(String dateStr) { + String _dateStr = dateStr; + + if (dateStr == null || !(dateStr.trim().length() == 8 || dateStr.trim().length() == 10)) { + throw new IllegalArgumentException("Invalid date format: " + dateStr); + } + if (dateStr.length() == 10) { + _dateStr = EgovStringUtil.removeMinusChar(dateStr); + } + return _dateStr; + } + + /** + * 입력된 일자 문자열을 확인하고 8자리로 리턴 + * @param sDate + * @return + */ + public static String validChkTime(String timeStr) { + String _timeStr = timeStr; + + if (_timeStr.length() == 5) { + _timeStr = EgovStringUtil.remove(_timeStr, ':'); + } + if (_timeStr == null || !(_timeStr.trim().length() == 4)) { + throw new IllegalArgumentException("Invalid time format: " + _timeStr); + } + + return _timeStr; + } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/egov/EgovNumberUtil.java b/src/main/java/kr/xit/framework/core/utils/egov/EgovNumberUtil.java new file mode 100644 index 00000000..1858a235 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/egov/EgovNumberUtil.java @@ -0,0 +1,238 @@ +/** + * @Class Name : EgovNumberUtil.java + * @Description : 숫자 데이터 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.02.13 이삼섭 최초 생성 + * + * @author 공통 서비스 개발팀 이삼섭 + * @since 2009. 02. 13 + * @version 1.0 + * @see + * + */ + +package kr.xit.framework.core.utils.egov; + +import java.security.SecureRandom; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +/** + * 숫자 데이터 처리 관련 유틸리티 + * @author 공통서비스개발팀 이삼섭 + * @since 2009.02.13 + * @version 1.0 + * @see + * + *
+ * << 개정이력(Modification Information) >>
+ *
+ *   수정일      수정자           수정내용
+ *  -------    --------    ---------------------------
+ *   2009.02.13  이삼섭          최초 생성
+ *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
+ *
+ * 
+ */ + +public class EgovNumberUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovNumberUtil.class); + + /** + * 특정숫자 집합에서 랜덤 숫자를 구하는 기능 시작숫자와 종료숫자 사이에서 구한 랜덤 숫자를 반환한다 + * + * @param startNum - 시작숫자 + * @param endNum - 종료숫자 + * @return 랜덤숫자 + * @see + */ + public static int getRandomNum(int startNum, int endNum) { + int randomNum = 0; + + // 랜덤 객체 생성 + SecureRandom rnd = new SecureRandom(); + + do { + // 종료숫자내에서 랜덤 숫자를 발생시킨다. + randomNum = rnd.nextInt(endNum + 1); + } while (randomNum < startNum); // 랜덤 숫자가 시작숫자보다 작을경우 다시 랜덤숫자를 발생시킨다. + + return randomNum; + } + + /** + * 특정 숫자 집합에서 특정 숫자가 있는지 체크하는 기능 12345678에서 7이 있는지 없는지 체크하는 기능을 제공함 + * + * @param sourceInt - 특정숫자집합 + * @param searchInt - 검색숫자 + * @return 존재여부 + * @see + */ + public static Boolean getNumSearchCheck(int sourceInt, int searchInt) { + String sourceStr = String.valueOf(sourceInt); + String searchStr = String.valueOf(searchInt); + + // 특정숫자가 존재하는지 하여 위치값을 리턴한다. 없을 시 -1 + if (sourceStr.indexOf(searchStr) == -1) { + return false; + } else { + return true; + } + } + + /** + * 숫자타입을 문자열로 변환하는 기능 숫자 20081212를 문자열 '20081212'로 변환하는 기능 + * + * @param srcNumber - 숫자 + * @return 문자열 + * @see + */ + public static String getNumToStrCnvr(int srcNumber) { + String rtnStr = null; + + rtnStr = String.valueOf(srcNumber); + + return rtnStr; + } + + /** + * 숫자타입을 데이트 타입으로 변환하는 기능 + * 숫자 20081212를 데이트타입 '2008-12-12'로 변환하는 기능 + * @param srcNumber - 숫자 + * @return String + * @see + */ + public static String getNumToDateCnvr(int srcNumber) { + + String pattern = null; + String cnvrStr = null; + + String srcStr = String.valueOf(srcNumber); + + // Date 형태인 8자리 및 14자리만 정상처리 + if (srcStr.length() != 8 && srcStr.length() != 14) { + throw new IllegalArgumentException("Invalid Number: " + srcStr + " Length=" + srcStr.trim().length()); + } + + if (srcStr.length() == 8) { + pattern = "yyyyMMdd"; + } else if (srcStr.length() == 14) { + pattern = "yyyyMMddhhmmss"; + } + + SimpleDateFormat dateFormatter = new SimpleDateFormat(pattern, Locale.KOREA); + + Date cnvrDate = null; + + try { + cnvrDate = dateFormatter.parse(srcStr); + } catch (ParseException e) { + LOGGER.error("ERROR parsing", e.getMessage()); + } + + cnvrStr = String.format("%1$tY-%1$tm-%1$td", cnvrDate); + + return cnvrStr; + + } + + /** + * 체크할 숫자 중에서 숫자인지 아닌지 체크하는 기능 + * 숫자이면 True, 아니면 False를 반환한다 + * @param checkStr - 체크문자열 + * @return 숫자여부 + * @see + */ + public static Boolean getNumberValidCheck(String checkStr) { + + int i; + + int checkStrLt = checkStr.length(); + + for (i = 0; i < checkStrLt; i++) { + + // 아스키코드값( '0'-> 48, '9' -> 57) + if (checkStr.charAt(i) > 47 && checkStr.charAt(i) < 58) { + continue; + } else { + return false; + } + } + + return true; + } + + /** + * 특정숫자를 다른 숫자로 치환하는 기능 숫자 12345678에서 123를 999로 변환하는 기능을 제공(99945678) + * + * @param srcNumber - 숫자집합 + * @param cnvrSrcNumber - 원래숫자 + * @param cnvrTrgtNumber - 치환숫자 + * @return 치환숫자 + * @see + */ + + public static int getNumberCnvr(int srcNumber, int cnvrSrcNumber, int cnvrTrgtNumber) { + + // 입력받은 숫자를 문자열로 변환 + String source = String.valueOf(srcNumber); + String subject = String.valueOf(cnvrSrcNumber); + String object = String.valueOf(cnvrTrgtNumber); + + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + + // 원본숫자에서 변환대상숫자의 위치를 찾는다. + while (source.indexOf(subject) >= 0) { + preStr = source.substring(0, source.indexOf(subject)); // 변환대상숫자 위치까지 숫자를 잘라낸다 + nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length()); + source = nextStr; + rtnStr.append(preStr).append(object); // 변환대상위치 숫자에 변환할 숫자를 붙여준다. + } + rtnStr.append(nextStr); // 변환대상 숫자 이후 숫자를 붙여준다. + + return Integer.parseInt(rtnStr.toString()); + } + + /** + * 특정숫자가 실수인지, 정수인지, 음수인지 체크하는 기능 123이 실수인지, 정수인지, 음수인지 체크하는 기능을 제공함 + * + * @param srcNumber - 숫자집합 + * @return -1(음수), 0(정수), 1(실수) + * @see + */ + public static int checkRlnoInteger(double srcNumber) { + + // byte 1바이트 ▶소수점이 없는 숫자로, 범위 -2^7 ~ 2^7 -1 + // short 2바이트 ▶소수점이 없는 숫자로, 범위 -2^15 ~ 2^15 -1 + // int 4바이트 ▶소수점이 없는 숫자로, 범위 -2^31 ~ 2^31 - 1 + // long 8바이트 ▶소수점이 없는 숫자로, 범위 -2^63 ~ 2^63-1 + + // float 4바이트 ▶소수점이 있는 숫자로, 끝에 F 또는 f 가 붙는 숫자 (예:3.14f) + // double 8바이트 ▶소수점이 있는 숫자로, 끝에 아무것도 붙지 않는 숫자 (예:3.14) + // ▶소수점이 있는 숫자로, 끝에 D 또는 d 가 붙는 숫자(예:3.14d) + + String cnvrString = null; + + if (srcNumber < 0) { + return -1; + } else { + cnvrString = String.valueOf(srcNumber); + + if (cnvrString.indexOf(".") == -1) { + return 0; + } else { + return 1; + } + } + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/egov/EgovStringUtil.java b/src/main/java/kr/xit/framework/core/utils/egov/EgovStringUtil.java new file mode 100644 index 00000000..6c0e7b4e --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/egov/EgovStringUtil.java @@ -0,0 +1,899 @@ +/** + * @Class Name : EgovStringUtil.java + * @Description : 문자열 데이터 처리 관련 유틸리티 + * @Modification Information + * + * 수정일 수정자 수정내용 + * ------- -------- --------------------------- + * 2009.01.13 박정규 최초 생성 + * 2009.02.13 이삼섭 내용 추가 + * + * @author 공통 서비스 개발팀 박정규 + * @since 2009. 01. 13 + * @version 1.0 + * @see + * + */ + +package kr.xit.framework.core.utils.egov; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the ";License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS"; BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.security.SecureRandom; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class EgovStringUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(EgovStringUtil.class); + + /** + * 빈 문자열 "". + */ + public static final String EMPTY = ""; + + /** + *

Padding을 할 수 있는 최대 수치

+ */ + // private static final int PAD_LIMIT = 8192; + /** + *

An array of Strings used for padding.

+ *

Used for efficient space padding. The length of each String expands as needed.

+ */ + /* + private static final String[] PADDING = new String[Character.MAX_VALUE]; + + static { + // space padding is most common, start with 64 chars + PADDING[32] = " "; + } + */ + + /** + * 문자열이 지정한 길이를 초과했을때 지정한길이에다가 해당 문자열을 붙여주는 메서드. + * @param source 원본 문자열 배열 + * @param output 더할문자열 + * @param slength 지정길이 + * @return 지정길이로 잘라서 더할분자열 합친 문자열 + */ + public static String cutString(String source, String output, int slength) { + String returnVal = null; + if (source != null) { + if (source.length() > slength) { + returnVal = source.substring(0, slength) + output; + } else + returnVal = source; + } + return returnVal; + } + + /** + * 문자열이 지정한 길이를 초과했을때 해당 문자열을 삭제하는 메서드 + * @param source 원본 문자열 배열 + * @param slength 지정길이 + * @return 지정길이로 잘라서 더할분자열 합친 문자열 + */ + public static String cutString(String source, int slength) { + String result = null; + if (source != null) { + if (source.length() > slength) { + result = source.substring(0, slength); + } else + result = source; + } + return result; + } + + /** + *

+ * String이 비었거나("") 혹은 null 인지 검증한다. + *

+ * + *
+     *  StringUtil.isEmpty(null)      = true
+     *  StringUtil.isEmpty("")        = true
+     *  StringUtil.isEmpty(" ")       = false
+     *  StringUtil.isEmpty("bob")     = false
+     *  StringUtil.isEmpty("  bob  ") = false
+     * 
+ * + * @param str - 체크 대상 스트링오브젝트이며 null을 허용함 + * @return true - 입력받은 String 이 빈 문자열 또는 null인 경우 + */ + public static boolean isEmpty(String str) { + return str == null || str.length() == 0; + } + + + /** + *

기준 문자열에 포함된 모든 대상 문자(char)를 제거한다.

+ * + *
+     * StringUtil.remove(null, *)       = null
+     * StringUtil.remove("", *)         = ""
+     * StringUtil.remove("queued", 'u') = "qeed"
+     * StringUtil.remove("queued", 'z') = "queued"
+     * 
+ * + * @param str 입력받는 기준 문자열 + * @param remove 입력받는 문자열에서 제거할 대상 문자열 + * @return 제거대상 문자열이 제거된 입력문자열. 입력문자열이 null인 경우 출력문자열은 null + */ + public static String remove(String str, char remove) { + if (isEmpty(str) || str.indexOf(remove) == -1) { + return str; + } + char[] chars = str.toCharArray(); + int pos = 0; + for (int i = 0; i < chars.length; i++) { + if (chars[i] != remove) { + chars[pos++] = chars[i]; + } + } + return new String(chars, 0, pos); + } + + /** + *

문자열 내부의 콤마 character(,)를 모두 제거한다.

+ * + *
+     * StringUtil.removeCommaChar(null)       = null
+     * StringUtil.removeCommaChar("")         = ""
+     * StringUtil.removeCommaChar("asdfg,qweqe") = "asdfgqweqe"
+     * 
+ * + * @param str 입력받는 기준 문자열 + * @return " , "가 제거된 입력문자열 + * 입력문자열이 null인 경우 출력문자열은 null + */ + public static String removeCommaChar(String str) { + return remove(str, ','); + } + + /** + *

문자열 내부의 마이너스 character(-)를 모두 제거한다.

+ * + *
+     * StringUtil.removeMinusChar(null)       = null
+     * StringUtil.removeMinusChar("")         = ""
+     * StringUtil.removeMinusChar("a-sdfg-qweqe") = "asdfgqweqe"
+     * 
+ * + * @param str 입력받는 기준 문자열 + * @return " - "가 제거된 입력문자열 + * 입력문자열이 null인 경우 출력문자열은 null + */ + public static String removeMinusChar(String str) { + return remove(str, '-'); + } + + + /** + * 원본 문자열의 포함된 특정 문자열을 새로운 문자열로 변환하는 메서드 + * @param source 원본 문자열 + * @param subject 원본 문자열에 포함된 특정 문자열 + * @param object 변환할 문자열 + * @return sb.toString() 새로운 문자열로 변환된 문자열 + */ + public static String replace(String source, String subject, String object) { + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + String srcStr = source; + + while (srcStr.indexOf(subject) >= 0) { + preStr = srcStr.substring(0, srcStr.indexOf(subject)); + nextStr = srcStr.substring(srcStr.indexOf(subject) + subject.length(), srcStr.length()); + srcStr = nextStr; + rtnStr.append(preStr).append(object); + } + rtnStr.append(nextStr); + return rtnStr.toString(); + } + + /** + * 원본 문자열의 포함된 특정 문자열 첫번째 한개만 새로운 문자열로 변환하는 메서드 + * @param source 원본 문자열 + * @param subject 원본 문자열에 포함된 특정 문자열 + * @param object 변환할 문자열 + * @return sb.toString() 새로운 문자열로 변환된 문자열 / source 특정문자열이 없는 경우 원본 문자열 + */ + public static String replaceOnce(String source, String subject, String object) { + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + if (source.indexOf(subject) >= 0) { + preStr = source.substring(0, source.indexOf(subject)); + nextStr = source.substring(source.indexOf(subject) + subject.length(), source.length()); + rtnStr.append(preStr).append(object).append(nextStr); + return rtnStr.toString(); + } else { + return source; + } + } + + /** + * subject에 포함된 각각의 문자를 object로 변환한다. + * + * @param source 원본 문자열 + * @param subject 원본 문자열에 포함된 특정 문자열 + * @param object 변환할 문자열 + * @return sb.toString() 새로운 문자열로 변환된 문자열 + */ + public static String replaceChar(String source, String subject, String object) { + StringBuffer rtnStr = new StringBuffer(); + String preStr = ""; + String nextStr = source; + String srcStr = source; + + char chA; + + for (int i = 0; i < subject.length(); i++) { + chA = subject.charAt(i); + + if (srcStr.indexOf(chA) >= 0) { + preStr = srcStr.substring(0, srcStr.indexOf(chA)); + nextStr = srcStr.substring(srcStr.indexOf(chA) + 1, srcStr.length()); + srcStr = rtnStr.append(preStr).append(object).append(nextStr).toString(); + } + } + + return srcStr; + } + + /** + *

strsearchStr의 시작(index) 위치를 반환.

+ * + *

입력값 중 null이 있을 경우 -1을 반환.

+ * + *
+     * StringUtil.indexOf(null, *)          = -1
+     * StringUtil.indexOf(*, null)          = -1
+     * StringUtil.indexOf("", "")           = 0
+     * StringUtil.indexOf("aabaabaa", "a")  = 0
+     * StringUtil.indexOf("aabaabaa", "b")  = 2
+     * StringUtil.indexOf("aabaabaa", "ab") = 1
+     * StringUtil.indexOf("aabaabaa", "")   = 0
+     * 
+ * + * @param str 검색 문자열 + * @param searchStr 검색 대상문자열 + * @return 검색 문자열 중 검색 대상문자열이 있는 시작 위치 검색대상 문자열이 없거나 null인 경우 -1 + */ + public static int indexOf(String str, String searchStr) { + if (str == null || searchStr == null) { + return -1; + } + return str.indexOf(searchStr); + } + + + /** + *

오라클의 decode 함수와 동일한 기능을 가진 메서드이다. + * sourStrcompareStr의 값이 같으면 + * returStr을 반환하며, 다르면 defaultStr을 반환한다. + *

+ * + *
+     * StringUtil.decode(null, null, "foo", "bar")= "foo"
+     * StringUtil.decode("", null, "foo", "bar") = "bar"
+     * StringUtil.decode(null, "", "foo", "bar") = "bar"
+     * StringUtil.decode("하이", "하이", null, "bar") = null
+     * StringUtil.decode("하이", "하이  ", "foo", null) = null
+     * StringUtil.decode("하이", "하이", "foo", "bar") = "foo"
+     * StringUtil.decode("하이", "하이  ", "foo", "bar") = "bar"
+     * 
+ * + * @param sourceStr 비교할 문자열 + * @param compareStr 비교 대상 문자열 + * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열 + * @param defaultStr sourceStr와 compareStr의 값이 다를 때 반환할 문자열 + * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며, + *
다르면 defaultStr을 반환한다. + */ + public static String decode(String sourceStr, String compareStr, String returnStr, String defaultStr) { + if (sourceStr == null && compareStr == null) { + return returnStr; + } + + if (sourceStr == null && compareStr != null) { + return defaultStr; + } + + if (sourceStr.trim().equals(compareStr)) { + return returnStr; + } + + return defaultStr; + } + + /** + *

오라클의 decode 함수와 동일한 기능을 가진 메서드이다. + * sourStrcompareStr의 값이 같으면 + * returStr을 반환하며, 다르면 sourceStr을 반환한다. + *

+ * + *
+     * StringUtil.decode(null, null, "foo") = "foo"
+     * StringUtil.decode("", null, "foo") = ""
+     * StringUtil.decode(null, "", "foo") = null
+     * StringUtil.decode("하이", "하이", "foo") = "foo"
+     * StringUtil.decode("하이", "하이 ", "foo") = "하이"
+     * StringUtil.decode("하이", "바이", "foo") = "하이"
+     * 
+ * + * @param sourceStr 비교할 문자열 + * @param compareStr 비교 대상 문자열 + * @param returnStr sourceStr와 compareStr의 값이 같을 때 반환할 문자열 + * @return sourceStr과 compareStr의 값이 동일(equal)할 때 returnStr을 반환하며, + *
다르면 sourceStr을 반환한다. + */ + public static String decode(String sourceStr, String compareStr, String returnStr) { + return decode(sourceStr, compareStr, returnStr, sourceStr); + } + + /** + * 객체가 null인지 확인하고 null인 경우 "" 로 바꾸는 메서드 + * @param object 원본 객체 + * @return resultVal 문자열 + */ + public static String isNullToString(Object object) { + String string = ""; + + if (object != null) { + string = object.toString().trim(); + } + + return string; + } + + /** + *
+     * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+     * @param src null값일 가능성이 있는 String 값.
+     * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+     *
+ */ + public static String nullConvert(Object src) { + //if (src != null && src.getClass().getName().equals("java.math.BigDecimal")) { + if (src != null && src instanceof java.math.BigDecimal) { + return ((BigDecimal)src).toString(); + } + + if (src == null || src.equals("null")) { + return ""; + } else { + return ((String)src).trim(); + } + } + + /** + *
+     * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+     * @param src null값일 가능성이 있는 String 값.
+     * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+     *
+ */ + public static String nullConvert(String src) { + + if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) { + return ""; + } else { + return src.trim(); + } + } + + /** + *
+     * 인자로 받은 String이 null일 경우 "0"로 리턴한다.
+     * @param src null값일 가능성이 있는 String 값.
+     * @return 만약 String이 null 값일 경우 "0"로 바꾼 String 값.
+     *
+ */ + public static int zeroConvert(Object src) { + + if (src == null || src.equals("null")) { + return 0; + } else { + return Integer.parseInt(((String)src).trim()); + } + } + + /** + *
+     * 인자로 받은 String이 null일 경우 ""로 리턴한다.
+     * @param src null값일 가능성이 있는 String 값.
+     * @return 만약 String이 null 값일 경우 ""로 바꾼 String 값.
+     *
+ */ + public static int zeroConvert(String src) { + + if (src == null || src.equals("null") || "".equals(src) || " ".equals(src)) { + return 0; + } else { + return Integer.parseInt(src.trim()); + } + } + + /** + *

문자열에서 {@link Character#isWhitespace(char)}에 정의된 + * 모든 공백문자를 제거한다.

+ * + *
+     * StringUtil.removeWhitespace(null)         = null
+     * StringUtil.removeWhitespace("")           = ""
+     * StringUtil.removeWhitespace("abc")        = "abc"
+     * StringUtil.removeWhitespace("   ab  c  ") = "abc"
+     * 
+ * + * @param str 공백문자가 제거도어야 할 문자열 + * @return the 공백문자가 제거된 문자열, null이 입력되면 null이 리턴 + */ + public static String removeWhitespace(String str) { + if (isEmpty(str)) { + return str; + } + int sz = str.length(); + char[] chs = new char[sz]; + int count = 0; + for (int i = 0; i < sz; i++) { + if (!Character.isWhitespace(str.charAt(i))) { + chs[count++] = str.charAt(i); + } + } + if (count == sz) { + return str; + } + + return new String(chs, 0, count); + } + + /** + * Html 코드가 들어간 문서를 표시할때 태그에 손상없이 보이기 위한 메서드 + * + * @param strString + * @return HTML 태그를 치환한 문자열 + */ + public static String checkHtmlView(String strString) { + String strNew = ""; + + StringBuffer strTxt = new StringBuffer(""); + + char chrBuff; + int len = strString.length(); + + for (int i = 0; i < len; i++) { + chrBuff = (char) strString.charAt(i); + + switch (chrBuff) { + case '<': + strTxt.append("<"); + break; + case '>': + strTxt.append(">"); + break; + case '"': + strTxt.append("""); + break; + case 10: + strTxt.append("
"); + break; + case ' ': + strTxt.append(" "); + break; + //case '&' : + //strTxt.append("&"); + //break; + default: + strTxt.append(chrBuff); + } + } + + strNew = strTxt.toString(); + + return strNew; + } + + + /** + * 문자열을 지정한 분리자에 의해 배열로 리턴하는 메서드. + * @param source 원본 문자열 + * @param separator 분리자 + * @return result 분리자로 나뉘어진 문자열 배열 + */ + public static String[] split(String source, String separator) throws NullPointerException { + String[] returnVal = null; + int cnt = 1; + + int index = source.indexOf(separator); + int index0 = 0; + while (index >= 0) { + cnt++; + index = source.indexOf(separator, index + 1); + } + returnVal = new String[cnt]; + cnt = 0; + index = source.indexOf(separator); + while (index >= 0) { + returnVal[cnt] = source.substring(index0, index); + index0 = index + 1; + index = source.indexOf(separator, index + 1); + cnt++; + } + returnVal[cnt] = source.substring(index0); + + return returnVal; + } + + /** + *

{@link String#toLowerCase()}를 이용하여 소문자로 변환한다.

+ * + *
+     * StringUtil.lowerCase(null)  = null
+     * StringUtil.lowerCase("")    = ""
+     * StringUtil.lowerCase("aBc") = "abc"
+     * 
+ * + * @param str 소문자로 변환되어야 할 문자열 + * @return 소문자로 변환된 문자열, null이 입력되면 null 리턴 + */ + public static String lowerCase(String str) { + if (str == null) { + return null; + } + + return str.toLowerCase(); + } + + /** + *

{@link String#toUpperCase()}를 이용하여 대문자로 변환한다.

+ * + *
+     * StringUtil.upperCase(null)  = null
+     * StringUtil.upperCase("")    = ""
+     * StringUtil.upperCase("aBc") = "ABC"
+     * 
+ * + * @param str 대문자로 변환되어야 할 문자열 + * @return 대문자로 변환된 문자열, null이 입력되면 null 리턴 + */ + public static String upperCase(String str) { + if (str == null) { + return null; + } + + return str.toUpperCase(); + } + + /** + *

입력된 String의 앞쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.

+ * + *
+     * StringUtil.stripStart(null, *)          = null
+     * StringUtil.stripStart("", *)            = ""
+     * StringUtil.stripStart("abc", "")        = "abc"
+     * StringUtil.stripStart("abc", null)      = "abc"
+     * StringUtil.stripStart("  abc", null)    = "abc"
+     * StringUtil.stripStart("abc  ", null)    = "abc  "
+     * StringUtil.stripStart(" abc ", null)    = "abc "
+     * StringUtil.stripStart("yxabc  ", "xyz") = "abc  "
+     * 
+ * + * @param str 지정된 문자가 제거되어야 할 문자열 + * @param stripChars 제거대상 문자열 + * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴 + */ + public static String stripStart(String str, String stripChars) { + int strLen; + if (str == null || (strLen = str.length()) == 0) { + return str; + } + int start = 0; + if (stripChars == null) { + while ((start != strLen) && Character.isWhitespace(str.charAt(start))) { + start++; + } + } else if (stripChars.length() == 0) { + return str; + } else { + while ((start != strLen) && (stripChars.indexOf(str.charAt(start)) != -1)) { + start++; + } + } + + return str.substring(start); + } + + + /** + *

입력된 String의 뒤쪽에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.

+ * + *
+     * StringUtil.stripEnd(null, *)          = null
+     * StringUtil.stripEnd("", *)            = ""
+     * StringUtil.stripEnd("abc", "")        = "abc"
+     * StringUtil.stripEnd("abc", null)      = "abc"
+     * StringUtil.stripEnd("  abc", null)    = "  abc"
+     * StringUtil.stripEnd("abc  ", null)    = "abc"
+     * StringUtil.stripEnd(" abc ", null)    = " abc"
+     * StringUtil.stripEnd("  abcyx", "xyz") = "  abc"
+     * 
+ * + * @param str 지정된 문자가 제거되어야 할 문자열 + * @param stripChars 제거대상 문자열 + * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴 + */ + public static String stripEnd(String str, String stripChars) { + int end; + if (str == null || (end = str.length()) == 0) { + return str; + } + + if (stripChars == null) { + while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) { + end--; + } + } else if (stripChars.length() == 0) { + return str; + } else { + while ((end != 0) && (stripChars.indexOf(str.charAt(end - 1)) != -1)) { + end--; + } + } + + return str.substring(0, end); + } + + /** + *

입력된 String의 앞, 뒤에서 두번째 인자로 전달된 문자(stripChars)를 모두 제거한다.

+ * + *
+     * StringUtil.strip(null, *)          = null
+     * StringUtil.strip("", *)            = ""
+     * StringUtil.strip("abc", null)      = "abc"
+     * StringUtil.strip("  abc", null)    = "abc"
+     * StringUtil.strip("abc  ", null)    = "abc"
+     * StringUtil.strip(" abc ", null)    = "abc"
+     * StringUtil.strip("  abcyx", "xyz") = "  abc"
+     * 
+ * + * @param str 지정된 문자가 제거되어야 할 문자열 + * @param stripChars 제거대상 문자열 + * @return 지정된 문자가 제거된 문자열, null이 입력되면 null 리턴 + */ + public static String strip(String str, String stripChars) { + if (isEmpty(str)) { + return str; + } + + String srcStr = str; + srcStr = stripStart(srcStr, stripChars); + + return stripEnd(srcStr, stripChars); + } + + /** + * 문자열을 지정한 분리자에 의해 지정된 길이의 배열로 리턴하는 메서드. + * @param source 원본 문자열 + * @param separator 분리자 + * @param arraylength 배열 길이 + * @return 분리자로 나뉘어진 문자열 배열 + */ + public static String[] split(String source, String separator, int arraylength) throws NullPointerException { + String[] returnVal = new String[arraylength]; + int cnt = 0; + int index0 = 0; + int index = source.indexOf(separator); + while (index >= 0 && cnt < (arraylength - 1)) { + returnVal[cnt] = source.substring(index0, index); + index0 = index + 1; + index = source.indexOf(separator, index + 1); + cnt++; + } + returnVal[cnt] = source.substring(index0); + if (cnt < (arraylength - 1)) { + for (int i = cnt + 1; i < arraylength; i++) { + returnVal[i] = ""; + } + } + + return returnVal; + } + + /** + * 문자열 A에서 Z사이의 랜덤 문자열을 구하는 기능을 제공 시작문자열과 종료문자열 사이의 랜덤 문자열을 구하는 기능 + * + * @param startChr + * - 첫 문자 + * @param endChr + * - 마지막문자 + * @return 랜덤문자 + * @exception MyException + * @see + */ + public static String getRandomStr(char startChr, char endChr) { + + int randomInt; + String randomStr = null; + + // 시작문자 및 종료문자를 아스키숫자로 변환한다. + int startInt = Integer.valueOf(startChr); + int endInt = Integer.valueOf(endChr); + + // 시작문자열이 종료문자열보가 클경우 + if (startInt > endInt) { + throw new IllegalArgumentException("Start String: " + startChr + " End String: " + endChr); + } + + // 랜덤 객체 생성 + SecureRandom rnd = new SecureRandom(); + + do { + // 시작문자 및 종료문자 중에서 랜덤 숫자를 발생시킨다. + randomInt = rnd.nextInt(endInt + 1); + } while (randomInt < startInt); // 입력받은 문자 'A'(65)보다 작으면 다시 랜덤 숫자 발생. + + // 랜덤 숫자를 문자로 변환 후 스트링으로 다시 변환 + randomStr = (char) randomInt + ""; + + // 랜덤문자열를 리턴 + return randomStr; + } + + /** + * 문자열을 다양한 문자셋(EUC-KR[KSC5601],UTF-8..)을 사용하여 인코딩하는 기능 역으로 디코딩하여 원래의 문자열을 + * 복원하는 기능을 제공함 String temp = new String(문자열.getBytes("바꾸기전 인코딩"),"바꿀 인코딩"); + * String temp = new String(문자열.getBytes("8859_1"),"KSC5601"); => UTF-8 에서 + * EUC-KR + * + * @param srcString + * - 문자열 + * @param srcCharsetNm + * - 원래 CharsetNm + * @param charsetNm + * - CharsetNm + * @return 인(디)코딩 문자열 + * @exception MyException + * @see + */ + public static String getEncdDcd(String srcString, String srcCharsetNm, String cnvrCharsetNm) { + + String rtnStr = null; + + if (srcString == null) + return null; + + try { + rtnStr = new String(srcString.getBytes(srcCharsetNm), cnvrCharsetNm); + } catch (UnsupportedEncodingException e) { + rtnStr = null; + } + + return rtnStr; + } + +/** + * 특수문자를 웹 브라우저에서 정상적으로 보이기 위해 특수문자를 처리('<' -> & lT)하는 기능이다 + * @param srcString - '<' + * @return 변환문자열('<' -> "<" + * @exception MyException + * @see + */ + public static String getSpclStrCnvr(String srcString) { + + String rtnStr = null; + + try { + StringBuffer strTxt = new StringBuffer(""); + + char chrBuff; + int len = srcString.length(); + + for (int i = 0; i < len; i++) { + chrBuff = (char)srcString.charAt(i); + + switch (chrBuff) { + case '<': + strTxt.append("<"); + break; + case '>': + strTxt.append(">"); + break; + case '&': + strTxt.append("&"); + break; + default: + strTxt.append(chrBuff); + } + } + + rtnStr = strTxt.toString(); + + } catch (Exception e) { + LOGGER.debug("{}", e); + } + + return rtnStr; + } + + /** + * 응용어플리케이션에서 고유값을 사용하기 위해 시스템에서17자리의TIMESTAMP값을 구하는 기능 + * + * @param + * @return Timestamp 값 + * @exception MyException + * @see + */ + public static String getTimeStamp() { + + String rtnStr = null; + + // 문자열로 변환하기 위한 패턴 설정(년도-월-일 시:분:초:초(자정이후 초)) + String pattern = "yyyyMMddhhmmssSSS"; + + SimpleDateFormat sdfCurrent = new SimpleDateFormat(pattern, Locale.KOREA); + Timestamp ts = new Timestamp(System.currentTimeMillis()); + + rtnStr = sdfCurrent.format(ts.getTime()); + + return rtnStr; + } + + /** + * html의 특수문자를 표현하기 위해 + * + * @param srcString + * @return String + * @exception Exception + * @see + */ + public static String getHtmlStrCnvr(String srcString) { + + String tmpString = srcString; + + tmpString = tmpString.replaceAll("<", "<"); + tmpString = tmpString.replaceAll(">", ">"); + tmpString = tmpString.replaceAll("&", "&"); + tmpString = tmpString.replaceAll(" ", " "); + tmpString = tmpString.replaceAll("'", "\'"); + tmpString = tmpString.replaceAll(""", "\""); + + return tmpString; + + } + + /** + *

날짜 형식의 문자열 내부에 마이너스 character(-)를 추가한다.

+ * + *
+     *   StringUtil.addMinusChar("20100901") = "2010-09-01"
+     * 
+ * + * @param date 입력받는 문자열 + * @return " - "가 추가된 입력문자열 + */ + public static String addMinusChar(String date) { + if(date.length() == 8) + return date.substring(0,4).concat("-").concat(date.substring(4,6)).concat("-").concat(date.substring(6,8)); + else return ""; + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/fileExplorer/FileExplorer.java b/src/main/java/kr/xit/framework/core/utils/fileExplorer/FileExplorer.java new file mode 100644 index 00000000..296b820c --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/fileExplorer/FileExplorer.java @@ -0,0 +1,28 @@ +package kr.xit.framework.core.utils.fileExplorer; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * + * @업무그룹명: 파일 탐색 + * @설명: 파일 탐색 기능을 정의 한다 + * @최초작성일: 2020. 10. 16. 오후 11:40:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public interface FileExplorer { + + /** + *
메소드 설명: 파일 탐색결과를 반환 한다.
+	 * 
+ * @return + * @throws IOException List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public List> getList() throws IOException; +} diff --git a/src/main/java/kr/xit/framework/core/utils/fileExplorer/XitFileExplorerUtil.java b/src/main/java/kr/xit/framework/core/utils/fileExplorer/XitFileExplorerUtil.java new file mode 100644 index 00000000..7bcc503e --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/fileExplorer/XitFileExplorerUtil.java @@ -0,0 +1,36 @@ +package kr.xit.framework.core.utils.fileExplorer; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * + * @업무그룹명: 파일 탐색기 + * @설명: 탐색한 파일 목록을 반환 한다. + * @최초작성일: 2020. 10. 16. 오전 12:52:25 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitFileExplorerUtil { + + private FileExplorer function; + + public XitFileExplorerUtil(FileExplorer function) { + this.function = function; + } + + + /** + *
메소드 설명: 파일 목록을 반환 한다.
+ * @return + * @throws IOException List> 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 10. 16. + */ + public List> getList() throws IOException{ + return function.getList(); + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/fileExplorer/function/DirectorySearch.java b/src/main/java/kr/xit/framework/core/utils/fileExplorer/function/DirectorySearch.java new file mode 100644 index 00000000..742a706f --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/fileExplorer/function/DirectorySearch.java @@ -0,0 +1,143 @@ +package kr.xit.framework.core.utils.fileExplorer.function; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.FilenameUtils; + +import kr.xit.framework.core.utils.fileExplorer.FileExplorer; + + +/** + * + * @업무그룹명: 디렉토리 내 파일정보 + * @설명: 디렉토리 내 파일정보 목록을 반환 한다. + * @최초작성일: 2020. 10. 16. 오후 11:40:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class DirectorySearch implements FileExplorer{ + + private String pathname; + private File file; + + + public DirectorySearch(String pathname) { + this.pathname = pathname; + this.file = new File(pathname); + } + + @Override + public List> getList() throws IOException{ + + String[] arrFile = file.list(); + + + //Set Parent Directory + List> list = new ArrayList>(); + Map mPrevDir = this.getPrevDirInfo(); + if(mPrevDir!=null) + list.add(mPrevDir); + + //Set Files Info + if(arrFile.length>0) + for(int i=0; i mFileInfo = this.getFileInfo(); + list.add(mFileInfo); + } + + + return list; + } + + + + /** + *
메소드 설명: 이전 디렉토리 정보를 반환 한다.
+ * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @date: 2020. 10. 16. + */ + private Map getPrevDirInfo() { + if(file.getParent()==null) + return null; + + + Map mInfo = new HashMap(); + mInfo.put("pathname" , file.getParent()); //파일 경로(파일명 포함) + mInfo.put("filePath" , file.getParent()); //파일 경로 + mInfo.put("fileNm" , ".."); //파일 명 + mInfo.put("fileSize" , ""); //파일 사이즈 + mInfo.put("lastModified", ""); //최종 수정일 + mInfo.put("isDir" , "Y"); //폴더 여부 + mInfo.put("isFile" , "N"); //파일 여부 + mInfo.put("fileType" , ""); //파일 타입 + mInfo.put("fileOwner" , ""); //파일 소유자 + mInfo.put("isWriteable" , ""); //쓰기 가능여부 + mInfo.put("isReadable" , ""); //읽기 가능여부 + mInfo.put("isHide" , ""); //파일 숨김여부 + mInfo.put("fileAuth" , ""); //파일 권한 + + + + return mInfo; + } + /** + *
메소드 설명: 파일 정보를 반환 한다.
+ * @return Map 요청처리 후 응답객체 + * @author: 박민규 + * @throws IOException + * @date: 2020. 10. 16. + */ + private Map getFileInfo() throws IOException { + Path path = Paths.get(file.getAbsolutePath()); + boolean isDir = Files.isDirectory(path); + boolean isFile = Files.isRegularFile(path); + String filePath = file.getAbsolutePath(); + if(isFile) filePath = filePath.substring(0, filePath.lastIndexOf(file.getName())-1); + StringBuffer fileAuth = new StringBuffer(); + fileAuth.append(Files.isReadable(path) ?"r":"-"); + fileAuth.append(Files.isWritable(path) ?"w":"-"); + fileAuth.append(Files.isExecutable(path)?"x":"-"); + + Map mInfo = new HashMap(); + mInfo.put("pathname" , file.getAbsolutePath()); //파일 경로(파일명 포함) + mInfo.put("filePath" , filePath); //파일 경로 + mInfo.put("fileNm" , file.getName()); //파일 명 + mInfo.put("fileSize" , isDir?"":String.valueOf(Files.size(path))); //파일 사이즈 + mInfo.put("lastModified", Files.getLastModifiedTime(path).toString()); //최종 수정일 + mInfo.put("isDir" , isDir?"Y":"N"); //폴더 여부 + mInfo.put("isFile" , isFile?"Y":"N"); //파일 여부 + mInfo.put("fileType" , isDir?"파일 폴더":FilenameUtils.getExtension(file.getName()) ); //파일 타입 + try { + mInfo.put("fileOwner" , Files.getOwner(path).getName()); //파일 소유자 + } catch (Exception e) { + //FileSystemException 다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다. + mInfo.put("fileOwner" , "Access is not available"); //파일 소유자 + } + mInfo.put("isReadable" , Files.isReadable(path)?"Y":"N"); //읽기 가능여부 + mInfo.put("isWriteable" , Files.isWritable(path)?"Y":"N"); //쓰기 가능여부 + mInfo.put("isExecutable", Files.isExecutable(path)?"Y":"N"); //실행 가능여부 + mInfo.put("isHide" , Files.isHidden(path)?"Y":"N"); //파일 숨김여부 + mInfo.put("fileAuth" , fileAuth.toString()); //파일 권한 + + + + return mInfo; + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/fileExplorer/function/FileSearch.java b/src/main/java/kr/xit/framework/core/utils/fileExplorer/function/FileSearch.java new file mode 100644 index 00000000..4e03394a --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/fileExplorer/function/FileSearch.java @@ -0,0 +1,27 @@ +package kr.xit.framework.core.utils.fileExplorer.function; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import kr.xit.framework.core.utils.fileExplorer.FileExplorer; + +/** + * + * @업무그룹명: 파일 검색 + * @설명: 현재 경로를 기준으로 하위디렉토리를 탐색하여 일치하는 파일 목록을 반환 한다. + * @최초작성일: 2020. 10. 16. 오후 11:40:08 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class FileSearch implements FileExplorer{ + + @Override + public List> getList() throws IOException { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/kr/xit/framework/core/utils/json/ConvertHelper.java b/src/main/java/kr/xit/framework/core/utils/json/ConvertHelper.java new file mode 100644 index 00000000..110248c9 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/json/ConvertHelper.java @@ -0,0 +1,52 @@ +package kr.xit.framework.core.utils.json; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.joda.JodaModule; +import lombok.NoArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.StringWriter; + +@NoArgsConstructor +public class ConvertHelper{ + private static final Logger log = LoggerFactory.getLogger(ConvertHelper.class); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final JsonFactory JSON_FACTORY = new JsonFactory(); + + public static String jsonToObject(Object o){ + JsonGenerator generator = null; + StringWriter writer = new StringWriter(); + + try{ + OBJECT_MAPPER.registerModule(new JodaModule()); + generator = JSON_FACTORY.createGenerator(writer); + OBJECT_MAPPER.writeValue(generator, o); + generator.flush(); + return writer.toString(); + }catch(Exception e){ + e.printStackTrace(); + return null; + }finally{ + if(generator != null){ + try{ + generator.close(); + }catch(Exception e){ + log.error("InternalServerError: {}", e.getLocalizedMessage()); + } + } + } + } + + public static Object objectToJson(String json, Class clazz){ + try{ + OBJECT_MAPPER.registerModule(new JodaModule()); + return OBJECT_MAPPER.readValue(json, clazz); + }catch(Exception e){ + e.printStackTrace(); + return null; + } + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/json/JsonMapper.java b/src/main/java/kr/xit/framework/core/utils/json/JsonMapper.java new file mode 100644 index 00000000..9553fa84 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/json/JsonMapper.java @@ -0,0 +1,49 @@ +package kr.xit.framework.core.utils.json; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.module.afterburner.AfterburnerModule; + +public class JsonMapper{ + private static final ObjectMapper mapper = new ObjectMapper(); + + /** + * ex : Map map = getMapper().convertValue(Object o, Map.class); + * @return + */ + public static ObjectMapper getMapper(){ + return setDefaultOptionOnMapper(); + } + + public static ObjectReader getReader(Class T){ + return setDefaultOptionOnMapper().readerFor(T); + } + + public static ObjectReader getReader(JavaType T){ + return setDefaultOptionOnMapper().readerFor(T); + } + + public static ObjectReader getReader(TypeReference type){ + return setDefaultOptionOnMapper().readerFor(type); + } + + public static ObjectWriter getWriter(Class T){ + return setDefaultOptionOnMapper().writerFor(T); + } + + public static ObjectWriter getWriter(JavaType T){ + return setDefaultOptionOnMapper().writerFor(T); + } + + public static ObjectWriter getWriter(TypeReference T){ + return setDefaultOptionOnMapper().writerFor(T); + } + + + private static ObjectMapper setDefaultOptionOnMapper(){ + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + mapper.registerModule(new AfterburnerModule()); + return mapper; + } +} diff --git a/src/main/java/kr/xit/framework/core/utils/pagination/XitPaginationInfo.java b/src/main/java/kr/xit/framework/core/utils/pagination/XitPaginationInfo.java new file mode 100644 index 00000000..535d46c7 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/pagination/XitPaginationInfo.java @@ -0,0 +1,51 @@ +package kr.xit.framework.core.utils.pagination; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; + +/** + * + * @업무그룹명: paging 처리를 위한 VO + * @설명: Grid 컴포넌트 및 기존 코드를 병행 활용하기 위해 PaginationInfo 클래스를 상속 받아 사용한ㄷ. + * @최초작성일: 2020. 5. 26. 오전 9:11:58 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitPaginationInfo extends PaginationInfo{ + + /* ************************* + * tui Grid Paging 필드 + ************************* */ + /** 현재 페이지 */ + private int page = -1; + /** 모든 로우들의 개수(=조회 총 건수) */ + private int totalCount = -1; + /* ************************* + * //tui Grid Paging 필드 + ************************* */ + + + /** [tui Grid] 현재 페이지를 반환 한다. */ + public int getPage() { + return page; + } + /** [tui Grid] 현재 페이지를 설정 한다. */ + public void setPage(int page) { + this.page = page; + super.setCurrentPageNo(page); + } + /** [tui Grid] 조회 총 건수를 설정 한다. */ + public int getTotalCount() { + return totalCount; + } + /** [tui Grid] 조회 총 건수를 반환 한다. */ + public void setTotalCount(int totalCount) { + this.totalCount = totalCount; + super.setTotalRecordCount(totalCount); + } + + + + +} diff --git a/src/main/java/kr/xit/framework/core/utils/pagination/XitPaginationRenderer.java b/src/main/java/kr/xit/framework/core/utils/pagination/XitPaginationRenderer.java new file mode 100644 index 00000000..eb1ea053 --- /dev/null +++ b/src/main/java/kr/xit/framework/core/utils/pagination/XitPaginationRenderer.java @@ -0,0 +1,82 @@ +package kr.xit.framework.core.utils.pagination; + +import javax.servlet.ServletContext; + +import org.springframework.web.context.ServletContextAware; + +import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer; + +/** + * + * @업무그룹명: Page Rendedrer 클래스 + * @설명: + * @최초작성일: 2020. 4. 28. 오후 1:10:13 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitPaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{ + + private ServletContext servletContext; + + String type ; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public XitPaginationRenderer() { + // no-op + } + + public void initVariables(){ + firstPageLabel = "처음페이지"; + previousPageLabel = "이전페이지"; + currentPageLabel = "{0}"; + otherPageLabel = "{2}"; + nextPageLabel = "다음페이지"; + lastPageLabel = "마지막페이지"; + + /* 처음페이지 + 이전페이지 + {0} + {2} + 다음페이지 + 마지막페이지 + */ +/*//이미지 방식 + firstPageLabel = "" + + "첫페이지 "; + previousPageLabel = "" + + "이전페이지 "; + currentPageLabel = "{0} "; + otherPageLabel = "{2} "; + nextPageLabel = "" + + "다음페이지 "; + lastPageLabel = "" + + "마지막페이지 "; + +*/ + /* + firstPageLabel = "\"처음\" "; + previousPageLabel = "\"이전\" "; + currentPageLabel = "{0} "; + otherPageLabel = "{2} "; + nextPageLabel = "\"다음\" "; + lastPageLabel = "\"마지막\" "; + */ + } + + @Override + public void setServletContext(ServletContext servletContext) { + this.servletContext = servletContext; + initVariables(); + } + +} diff --git a/src/main/java/kr/xit/framework/core/validation/XitBeanValidator.java b/src/main/java/kr/xit/framework/core/validation/XitBeanValidator.java new file mode 100644 index 00000000..8d2a580b --- /dev/null +++ b/src/main/java/kr/xit/framework/core/validation/XitBeanValidator.java @@ -0,0 +1,62 @@ +package kr.xit.framework.core.validation; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.validator.Validator; +import org.apache.commons.validator.ValidatorException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.Errors; +import org.springmodules.validation.commons.DefaultBeanValidator; +import org.springmodules.validation.commons.DefaultValidatorFactory; + +/** + * + * @업무그룹명: Bean Validator 클래스 + * @설명: Spring Framework DefaultBeanValidator의 확장 기능을 제공 한다. + * @최초작성일: 2020. 11. 24. 오후 4:45:10 + * @최초작성자: 박민규 + * @author (주)엑스아이티 개발팀 + * @since 2002. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +public class XitBeanValidator extends DefaultBeanValidator { + private static final Log log = LogFactory.getLog(XitBeanValidator.class); + + @Autowired + DefaultValidatorFactory defaultValidatorFactory; + + /** + *
메소드 설명: DefaultBeanValidator의 validate(Object obj, Errors errors)의 확장 기능.
+     * 		-DefaultBeanValidator.validate의 경우 Bean 클래스 명칭을 form name으로 사용하기에 원칙적으로 "formName==BeanClassName"(이)가 성립하는 경우에만 validate 체크가 수행 된다. 
+     * 		-본 메서드는 DefaultBeanValidator의 validate(Object obj, Errors errors) 메서드의 기능과 동일하나 form name을 직접 입력 받아 validate 체크를 수행 하기에
+     * 		-"formName!=BeanClassName"(이)가 성립하는 경우 본 메서드를 활용 할 수 있다.
+     * 
+ * @param formName form-validation에 기술한 form name + * @param obj bean(==VO)객체 + * @param errors void 요청처리 후 응답객체 + * @author: 박민규 + * @date: 2020. 11. 24. + */ + public void validate(String formName, Object obj, Errors errors) { + org.apache.commons.validator.Validator commonsValidator = this.getValidator(formName, obj, errors); + initValidator(commonsValidator); + try { + commonsValidator.validate(); + } + catch (ValidatorException e) { + log.error("Exception while validating object " + obj, e); + } finally { + cleanupValidator(commonsValidator); + } + } + + + private Validator getValidator(String beanName, Object bean, Errors errors) { + Validator validator = new Validator(defaultValidatorFactory.getValidatorResources(), beanName); + validator.setParameter(DefaultValidatorFactory.ERRORS_KEY, errors); + validator.setParameter(Validator.BEAN_PARAM, bean); + return validator; + } + + +} diff --git a/src/main/java/kr/xit/framework/support/CamelCaseLinkedMap.java b/src/main/java/kr/xit/framework/support/CamelCaseLinkedMap.java new file mode 100644 index 00000000..ba419b06 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/CamelCaseLinkedMap.java @@ -0,0 +1,16 @@ +package kr.xit.framework.support; + +import org.springframework.jdbc.support.JdbcUtils; + +import java.util.LinkedHashMap; +import java.util.Map; + +@SuppressWarnings("rawtypes") +public class CamelCaseLinkedMap extends LinkedHashMap { + + @Override + public Object put(Object key, Object value){ + if(key != null && key.toString().contains("_")) return super.put(JdbcUtils.convertUnderscoreNameToPropertyName((String)key), value); + else return super.put(key, value); + } +} diff --git a/src/main/java/kr/xit/framework/support/CamelCaseMap.java b/src/main/java/kr/xit/framework/support/CamelCaseMap.java new file mode 100644 index 00000000..6fcfdca6 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/CamelCaseMap.java @@ -0,0 +1,15 @@ +package kr.xit.framework.support; + +import org.springframework.jdbc.support.JdbcUtils; + +import java.util.HashMap; + +@SuppressWarnings("ALL") +public class CamelCaseMap extends HashMap { + + @Override + public Object put(Object key, Object value){ + if(key != null && key.toString().contains("_")) return super.put(JdbcUtils.convertUnderscoreNameToPropertyName((String)key), value); + else return super.put(key, value); + } +} diff --git a/src/main/java/kr/xit/framework/support/CustomMultipartResolver.java b/src/main/java/kr/xit/framework/support/CustomMultipartResolver.java new file mode 100644 index 00000000..0f59744f --- /dev/null +++ b/src/main/java/kr/xit/framework/support/CustomMultipartResolver.java @@ -0,0 +1,90 @@ +package kr.xit.framework.support; + +import kr.xit.framework.core.utils.Checks; +import lombok.Setter; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUpload; +import org.apache.commons.fileupload.FileUploadBase; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.springframework.web.multipart.MultipartException; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; + +public class CustomMultipartResolver extends CommonsMultipartResolver { + + @Setter + private String allowUploadFileTypes; + + @Override + protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException { + String encoding = determineEncoding(request); + FileUpload fileUpload = prepareFileUpload(encoding); + try { + List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request); + + // 정해진 확장자만 사용이 가능하도록 처리 + List notAllowFileTypes = new ArrayList(); + String [] allowFileTypes = allowUploadFileTypes.split("[|]"); + + Iterator it = fileItems.iterator(); + if (it.hasNext()) { + do { + FileItem fileItem = it.next(); + String fileName = fileItem.getName(); + + if (Checks.isNotEmpty(fileName)) { + String extension = ""; + int i = fileName.lastIndexOf('.'); + if (i >= 0) { + extension = fileName.substring(i + 1); + extension = extension.toLowerCase(); + } + + boolean isAllowFile = false; + for (String ext : allowFileTypes) { + if (Objects.equals(StringUtils.EMPTY, extension) || Objects.equals(extension, ext)) { + isAllowFile = true; + break; + } + } + + if (!isAllowFile) { + notAllowFileTypes.add(extension); + } + } + } while (it.hasNext()); + } + + if (notAllowFileTypes.size() > 0) { + throw new NotAllowContentTypeException(notAllowFileTypes); + } + + return parseFileItems(fileItems, encoding); + } + catch (FileUploadBase.SizeLimitExceededException ex) { + throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex); + } + catch (FileUploadException ex) { + throw new MultipartException("Could not parse multipart servlet request", ex); + } + } +} + +/* + + + + + + + + + */ diff --git a/src/main/java/kr/xit/framework/support/LoggerHelper.java b/src/main/java/kr/xit/framework/support/LoggerHelper.java new file mode 100644 index 00000000..82d07e76 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/LoggerHelper.java @@ -0,0 +1,25 @@ +package kr.xit.framework.support; + +//import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class LoggerHelper { + + /** + * Returns a org.slf4j.Logger logger configured as the calling class. This ensures + * copy-paste safe code to get a logger instance, an ensures the logger is + * always fetched in a consistent manner. + * usage: + * private final static Logger log = LoggerHelper.getLogger(); + * + * Since the logger is found by accessing the call stack it is important, + * that references are static. + * @return Logger Logger + */ + public static Logger getLogger() { + final Throwable t = new Throwable(); + t.fillInStackTrace(); + return LoggerFactory.getLogger(t.getStackTrace()[1].getClassName()); + } +} diff --git a/src/main/java/kr/xit/framework/support/NotAllowContentTypeException.java b/src/main/java/kr/xit/framework/support/NotAllowContentTypeException.java new file mode 100644 index 00000000..e48611c7 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/NotAllowContentTypeException.java @@ -0,0 +1,34 @@ +package kr.xit.framework.support; + +import org.springframework.web.multipart.MultipartException; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +@SuppressWarnings("serial") +public class NotAllowContentTypeException extends MultipartException { + + private final List notAllowFileTypeList; + + public NotAllowContentTypeException(List notAllowFileType) { + this(notAllowFileType, null); + } + + public NotAllowContentTypeException(List notAllowFileType, Throwable cause) { + super("허용되지 않은 파일 타입"+notAllowFileType.toString()+"이 존재합니다.", cause); + notAllowFileTypeList = notAllowFileType; + } + + public List getNotAllowFileTypeList () { + List list = null; + if (this.notAllowFileTypeList != null) { + list = new ArrayList(); + Iterator it = this.notAllowFileTypeList.iterator(); + while(it.hasNext()) { + list.add(it.next()); + } + } + return list; + } +} diff --git a/src/main/java/kr/xit/framework/support/RestTemplateLoggingRequestInterceptor.java b/src/main/java/kr/xit/framework/support/RestTemplateLoggingRequestInterceptor.java new file mode 100644 index 00000000..d0dd59e5 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/RestTemplateLoggingRequestInterceptor.java @@ -0,0 +1,60 @@ +package kr.xit.framework.support; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.StreamUtils; + +import java.io.IOException; +import java.nio.charset.Charset; + +/** + * Restful Logging + * 반드시 RestTemplate의 Factory 변경 필요 + * + */ +@Slf4j +public class RestTemplateLoggingRequestInterceptor implements ClientHttpRequestInterceptor { + + /** + * RestTemplate 로깅 Interceptor + * + * @param request HttpRequest + * @param body Request Body + * @param execution ClientHttpRequestExecution + * @return ClientHttpResponse + */ + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + logRequest(request, body); + ClientHttpResponse response = execution.execute(request, body); + logResponse(response); + return response; + } + + private void logRequest(HttpRequest request, byte[] body) throws IOException { + log.debug( + "===========================request begin================================================"); + log.debug("URI : {}", request.getURI()); + log.debug("Method : {}", request.getMethod()); + log.debug("Headers : {}", request.getHeaders()); + log.debug("Request body: {}", new String(body, Charset.defaultCharset())); + log.debug( + "==========================request end================================================"); + } + + private void logResponse(ClientHttpResponse response) throws IOException { + log.debug( + "============================response begin=========================================="); + log.debug("Status code : {}", response.getStatusCode()); + log.debug("Status text : {}", response.getStatusText()); + log.debug("Headers : {}", response.getHeaders()); + log.debug("Response body: {}", + StreamUtils.copyToString(response.getBody(), Charset.defaultCharset())); + log.debug( + "=======================response end================================================="); + } +} + diff --git a/src/main/java/kr/xit/framework/support/captcha/SimpleCaptchaUtil.java b/src/main/java/kr/xit/framework/support/captcha/SimpleCaptchaUtil.java new file mode 100644 index 00000000..50516c16 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/captcha/SimpleCaptchaUtil.java @@ -0,0 +1,229 @@ +package kr.xit.framework.support.captcha; + +import kr.xit.framework.core.utils.Checks; +import nl.captcha.Captcha; +import nl.captcha.audio.AudioCaptcha; +import nl.captcha.backgrounds.GradiatedBackgroundProducer; +import nl.captcha.servlet.CaptchaServletUtil; +import nl.captcha.text.producer.TextProducer; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @author Lim, Jong Uk (minuk926) + * @since 2021-11-30 + */ +public class SimpleCaptchaUtil { + + private static final int WIDTH = 100; + private static final int HEIGHT = 30; + private static final int FONT_SIZE = 20; + + + /** + * + * @param req + * @param res + */ + public static void getImgCaptcha(final HttpServletRequest req, final HttpServletResponse res) { + int width = Objects.isNull(req.getParameter("width"))? WIDTH : Integer.parseInt(req.getParameter("width")); + int height = Objects.isNull(req.getParameter("height"))? HEIGHT : Integer.parseInt(req.getParameter("height")); + + List fonts = Arrays.asList( + new Font("", Font.HANGING_BASELINE, FONT_SIZE), + new Font("Courier", Font.ITALIC, FONT_SIZE), + new Font("", Font.PLAIN, FONT_SIZE) + ); + List colors = Collections.singletonList(Color.BLACK); + + Captcha captcha = + new Captcha.Builder(150, 50) + .addText() + //new Captcha.Builder(width, height) + //.addText(new NumbersAnswerProducer(5), new DefaultWordRenderer(colors, fonts)) + // 호출될때마다 라인 추가 + .addNoise() + .gimp() + // black border 생성 + .addBorder() + .addBackground(new GradiatedBackgroundProducer()) + .build(); +/* + res.setHeader("Cache-Control", "no-cache"); + res.setDateHeader("Expires", 0); + res.setHeader("Pragma", "no-cache"); + res.setDateHeader("Max-Age", 0); + res.setContentType("image/png"); + */ + CaptchaServletUtil.writeImage(res, captcha.getImage()); + req.getSession().setAttribute(Captcha.NAME, captcha); + //req.getSession().setAttribute("captcha", captcha.getAnswer());// 값 저장 + } + + /** + * + * @param req + * @param res + * @param answer + */ + public static void getAudioCaptcha(final HttpServletRequest req, final HttpServletResponse res, String answer) { + + if(Checks.isEmpty(answer)){ + Captcha captcha = (Captcha) req.getSession().getAttribute(Captcha.NAME); + answer = captcha.getAnswer(); + } + + AudioCaptcha audioCaptcha = new AudioCaptcha.Builder() + .addAnswer(new SetTextProducer(answer)) + .addNoise() + .build(); + + CaptchaServletUtil.writeAudio(res, audioCaptcha.getChallenge()); + } + + /** + * + * @param req + * @param res + * @param ans + * @return + */ + public static boolean isCorrect(final HttpServletRequest req, final HttpServletResponse res, String ans) { + + if(Checks.isEmpty(ans)) return false; + + Captcha captcha = (Captcha) req.getSession().getAttribute(Captcha.NAME); + if(captcha != null && captcha.isCorrect(ans)){ + req.getSession().removeAttribute(Captcha.NAME); + return true; + } + return false; +/* + String answer = (String)req.getSession().getAttribute("captcha"); + if(Objects.equals(ans, answer)) { + req.getSession().removeAttribute("captcha"); + return true; + } + return false; +*/ + + } + + public static class SetTextProducer implements TextProducer { + private final String str; + + public SetTextProducer(String answer){ + this.str = answer; + } + + @Override + public String getText(){ + return this.str; + } + } +} + + +/* + + + @RequestMapping(method = RequestMethod.GET, value = "/captcha/image") + public void getCaptchaImage(final HttpServletRequest req, final HttpServletResponse res) { + SimpleCaptchaUtil + .getImgCaptcha(req, res); + + + } + + @RequestMapping(method = RequestMethod.GET, value = "/captcha/audio") + public void getCaptchaAudio(final HttpServletRequest req, final HttpServletResponse res) { + SimpleCaptchaUtil.getAudioCaptcha(req, res, null); + + + } + + @RequestMapping(method = RequestMethod.POST, value = "/captcha/check") + @ResponseBody + public String isCorrect(final HttpServletRequest req, final HttpServletResponse res, String answer) { + //modelMap.addAttribute("OK", new SimpleCaptchaUtil().isCorrect(req, res, req.getParameter("answer"))); + + Gson gson = new GsonBuilder().create(); + return gson.toJson(SimpleCaptchaUtil.isCorrect(req, res, req.getParameter("answer"))); + } + + + + + 필수입력* + + 보안문자를 입력해 주세요. + + + + + + + + + + + this.captchaReload = function(){ + const rand = Math.random(); + const url = '${wwwHost}/support/captcha/image?rand='+rand; + document.querySelector('#captchaImg').setAttribute('src', url); + + } + + this.audio = function(){ + const rand = Math.random(); + const uAgent = navigator.userAgent; + + const url = '${wwwHost}/support/captcha/audio?rand='+rand; + + // IE + if(uAgent.indexOf('Trident') > -1 || uAgent.indexOf('MISE') > -1){ + document.querySelector('#ccaudio').innerHTML = ''; + + // Chrome + }else if(!!document.createElement('audio').canPlayType){ + try{ + new Audio(url).play() + }catch (e){ + document.querySelector('#ccaudio').innerHTML = ''; + } + }else{ + window.open(url, '', 'width=1,height=1'); + } + } + this.captchaConfirm = function(){ + const ans = document.querySelector('#captchaAns').value; + if(!ans){ + alert("보안문자를 입력해 주세요."); + return true; + } + + $http({ + method: 'POST', + url: '${wwwHost}/support/captcha/check', + data: {answer: ans} + }).success(function (data, status, headers, config) { + if(data){ + + }else{ + alert('보안문자가 일치하지 않습니다.\n다시 입력해 주세요'); + captchaReload(); + } + + }).error(function (data, status, headers, config) { + alert(data.message); + }); + + } + + */ diff --git a/src/main/java/kr/xit/framework/support/converter/HTMLCharacterEscapes.java b/src/main/java/kr/xit/framework/support/converter/HTMLCharacterEscapes.java new file mode 100644 index 00000000..4545111d --- /dev/null +++ b/src/main/java/kr/xit/framework/support/converter/HTMLCharacterEscapes.java @@ -0,0 +1,85 @@ +package kr.xit.framework.support.converter; + +import com.fasterxml.jackson.core.SerializableString; +import com.fasterxml.jackson.core.io.CharacterEscapes; +import com.fasterxml.jackson.core.io.SerializedString; +import org.apache.commons.lang3.StringEscapeUtils; + +/** + * Xss 방어 + */ +public class HTMLCharacterEscapes extends CharacterEscapes { + + private final int[] asciiEscapes; + + //private final CharSequenceTranslator translator; + + public HTMLCharacterEscapes() { + + // 1. XSS 방지 처리할 특수 문자 지정 + asciiEscapes = CharacterEscapes.standardAsciiEscapesForJSON(); + asciiEscapes['<'] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes['>'] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes['&'] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes['\"'] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes['('] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes[')'] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes['#'] = CharacterEscapes.ESCAPE_CUSTOM; + asciiEscapes['\''] = CharacterEscapes.ESCAPE_CUSTOM; + + // 2. XSS 방지 처리 특수 문자 인코딩 값 지정 +// translator = new AggregateTranslator( +// new LookupTranslator(EntityArrays.BASIC_ESCAPE()), // <, >, &, " 는 여기에 포함됨 +// new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE()), +// new LookupTranslator(EntityArrays.HTML40_EXTENDED_ESCAPE()), +// // 여기에서 커스터마이징 가능 +// new LookupTranslator( +// new String[][]{ +// {"(", "("}, +// {")", ")"}, +// {"#", "#"}, +// {"\'", "'"} +// } +// ) +// ); + } + + @Override + public int[] getEscapeCodesForAscii() { + return asciiEscapes; + } + + // 윈도우 이모지 관련하여 파싱 중에 에러 해결 + @Override + public SerializableString getEscapeSequence(int ch) { + SerializedString serializedString; + char charAt = (char) ch; + if (Character.isHighSurrogate(charAt) || Character.isLowSurrogate(charAt)) { + StringBuilder sb = new StringBuilder(); + sb.append("\\u"); + sb.append(String.format("%04x", ch)); + serializedString = new SerializedString(sb.toString()); + } else { + serializedString = new SerializedString(StringEscapeUtils.escapeHtml4(Character.toString(charAt))); + } + return serializedString; + } + +// @Override +// public SerializableString getEscapeSequence(int ch) { +// //return new SerializedString(translator.translate(Character.toString((char) ch))); +// +// // 참고 - 커스터마이징이 필요없다면 아래와 같이 Apache Commons Lang3에서 제공하는 메서드를 써도 된다. +// return new SerializedString(StringEscapeUtils.escapeHtml4(Character.toString((char) ch))); +// } +} + +/* + @Bean + public MappingJackson2HttpMessageConverter jsonEscapeConverter() { + // MappingJackson2HttpMessageConverter Default ObjectMapper 설정 및 ObjectMapper Config 설정 + ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build(); + objectMapper.getFactory().setCharacterEscapes(new HTMLCharacterEscapes()); + return new MappingJackson2HttpMessageConverter(objectMapper); + } + */ diff --git a/src/main/java/kr/xit/framework/support/jpa/JpaUtil.java b/src/main/java/kr/xit/framework/support/jpa/JpaUtil.java new file mode 100644 index 00000000..18d1b01a --- /dev/null +++ b/src/main/java/kr/xit/framework/support/jpa/JpaUtil.java @@ -0,0 +1,50 @@ +// package kr.xit.framework.support.jpa; +// +// import framework.xitfamework.xit.cmmn.utils.Checks; +// import org.springframework.data.domain.PageRequest; +// import org.springframework.data.domain.Pageable; +// import org.springframework.data.domain.Sort; +// import org.springframework.data.jpa.repository.JpaRepository; +// +// import java.util.Objects; +// +// +// public class JpaUtil { +// private static final int pageNumber = 0; +// private static final int pageSize = 20; +// +// public static Pageable getPagingInfo(Pageable pageable){ +// if(Checks.isEmpty(pageable)){ +// return PageRequest.of(pageNumber, pageSize); +// } +// int page = Checks.isEmpty(pageable.getPageNumber())? pageNumber: pageable.getPageNumber(); +// int limit = Checks.isEmpty(pageable.getPageSize())? pageSize: pageable.getPageSize(); +// Sort sort = Checks.isEmpty(pageable.getSort())? null: pageable.getSort(); +// if(Checks.isEmpty(sort)) return PageRequest.of(page, limit); +// else return PageRequest.of(page, limit, Objects.requireNonNull(sort)); +// // if(Checks.isEmpty(sort)) return PageRequest.of(limit*(page-1), limit); +// // else return PageRequest.of(limit*(page-1), limit, Objects.requireNonNull(sort)); +// } +// +// /** +// * 신규인 경우 저장 처리 +// * @param id Long +// * @param repository JpaRepository +// * @param entity Object +// */ +// @SuppressWarnings({"unchecked", "rawtypes"}) +// public static void saveIfNullId(Long id, JpaRepository repository, Object entity) { +// if(id == null) repository.save(entity); +// } +// +// /** +// * 신규인 경우 저장 처리 +// * @param id Long +// * @param repository JpaRepository +// * @param entity Object +// */ +// @SuppressWarnings({"unchecked", "rawtypes"}) +// public static void saveIfNullId(String id, JpaRepository repository, Object entity) { +// if(id == null) repository.save(entity); +// } +// } diff --git a/src/main/java/kr/xit/framework/support/jpa/Paginator.java b/src/main/java/kr/xit/framework/support/jpa/Paginator.java new file mode 100644 index 00000000..9b594674 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/jpa/Paginator.java @@ -0,0 +1,144 @@ +package kr.xit.framework.support.jpa; + +import kr.xit.framework.support.mybatis.PagingConstants; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import java.io.Serializable; + +public class Paginator implements Serializable { + private static final long serialVersionUID = 1L; + + private final int limit; + private int page = 1; + private final int totalCount; + + public Paginator(int page, int limit, int totalCount) { + super(); + this.limit = limit; + this.totalCount = totalCount; + this.page = computePageNo(page); + } + + public void setSessionPagination(Paginator paginator){ + RequestContextHolder.currentRequestAttributes().setAttribute(PagingConstants.Session.PAGE_INFO.getCode(), paginator, RequestAttributes.SCOPE_REQUEST); + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getLimit() { + return limit; + } + + public int getTotalCount() { + return totalCount; + } + + public boolean isFirstPage() { + return page <= 1; + } + + public boolean isLastPage() { + return page >= getTotalPages(); + } + + public int getPrePage() { + if (isHasPrePage()) { + return page - 1; + } else { + return page; + } + } + + public int getNextPage() { + if (isHasNextPage()) { + return page + 1; + } else { + return page; + } + } + + public boolean isDisabledPage(int page) { + return ((page < 1) || (page > getTotalPages()) || (page == this.page)); + } + + public boolean isHasPrePage() { + return (page - 1 >= 1); + } + + public boolean isHasNextPage() { + return (page + 1 <= getTotalPages()); + } + + public int getStartRow() { + if (getLimit() <= 0 || totalCount <= 0) + return 0; + return page > 0 ? (page - 1) * getLimit() + 1 : 0; + } + + public int getEndRow() { + return page > 0 ? Math.min(limit * page, getTotalCount()) : 0; + } + + public int getOffset() { + return page > 0 ? (page - 1) * getLimit() : 0; + } + + public int getTotalPages() { + if (totalCount <= 0) { + return 0; + } + if (limit <= 0) { + return 0; + } + + int count = totalCount / limit; + if (totalCount % limit > 0) { + count++; + } + return count; + } + + protected int computePageNo(int page) { + return computePageNumber(page, limit, totalCount); + } + + private static int computeLastPageNumber(int totalItems, int pageSize) { + if (pageSize <= 0) + return 1; + int result = (int) (totalItems % pageSize == 0 ? totalItems / pageSize + : totalItems / pageSize + 1); + if (result <= 1) + result = 1; + return result; + } + + private static int computePageNumber(int page, int pageSize, int totalItems) { + if (page <= 1) { + return 1; + } + if (Integer.MAX_VALUE == page + || page > computeLastPageNumber(totalItems, pageSize)) { // last + // page + return computeLastPageNumber(totalItems, pageSize); + } + return page; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder(); + sb.append("Paginator"); + sb.append("{page=").append(page); + sb.append(", limit=").append(limit); + sb.append(", totalCount=").append(totalCount); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/support/listener/SessionListener.java b/src/main/java/kr/xit/framework/support/listener/SessionListener.java new file mode 100644 index 00000000..67ea699a --- /dev/null +++ b/src/main/java/kr/xit/framework/support/listener/SessionListener.java @@ -0,0 +1,175 @@ +package kr.xit.framework.support.listener; + +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; +import java.io.InputStream; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; + +/** + * 동시 접속자 세션관리 HttpListener + * /WEB-INF/classes/session.properties 설정파일을 참조 + * 동시접속자 허용수를 setting 할 수 있도록 함. (제한접속자 수를 늘려야 할 경우 클래스 Compile없이 사용하도록) + * Site 접속시점 세션생성 + * Site 로그인시점 세션생성을 분리하여 접속자 수 Counting! + * + */ +public class SessionListener implements HttpSessionListener { + public static SessionListener sessionManager = null; + public static Hashtable sessionMonitor; + public static Hashtable loginSessionMonitor; + public static int maxSessionValidCount; + + public SessionListener() { + if (sessionMonitor == null) sessionMonitor = new Hashtable(); + if (loginSessionMonitor == null) loginSessionMonitor = new Hashtable(); + sessionManager = this; + + Properties prop = new Properties(); + try { + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("session.properties"); + prop.load(inputStream); + } catch (Exception e) { + maxSessionValidCount = 300; + e.printStackTrace(); + } + + maxSessionValidCount = Integer.parseInt((String) prop.get("maxSessionValidCount")); +// System.out.println(" ########################### maxSessionValidCount : " + maxSessionValidCount); + } + + public static synchronized SessionListener getInstance() { + if (sessionManager == null) + sessionManager = new SessionListener(); + return sessionManager; + } + + /** 현재 활성화 된 session의 수를 반환한다. + * + * @return int int + */ + public int getActiveSessionCount() { + return sessionMonitor.size(); + } + + /** 현재 등록된 session의 id목록을 반환한다. + * @return Enumeration Enumeration + */ + public Enumeration getIds() { + return sessionMonitor.keys(); + } + + /** 전체 세션갯수를 측정하여 로그인(대기)상태 메세지 창 호출 + * @return boolean boolean + */ + public boolean isMaxLoginSessions() { + return maxSessionValidCount <= getActiveLoginSessionCount(); +} + + /** 현재 활성화 된 session의 수를 반환한다. + * @return int int + */ + public int getActiveLoginSessionCount() { + return loginSessionMonitor.size(); + } + + /** + * 로그인한 Session Put + * @param session session + */ + public void setLoginSession(HttpSession session) { + synchronized (loginSessionMonitor) { + loginSessionMonitor.put(session.getId(), session); + + System.out.println(" ############################################################################### "); + System.out.println(" # 접속자 (로그인 허용인원수) : " + maxSessionValidCount + " 명#"); + System.out.println(" # 접속자 (사이트 접속자수) : " + getActiveSessionCount() + " 명#"); + System.out.println(" # 접속자 (로그인 사용자수) : " + getActiveLoginSessionCount() + " 명#"); + System.out.println(" ############################################################################### "); + } + } + + /** + * 로그아웃한 Session Remove + * @param session session + */ + public void setLogoutSession(HttpSession session) { + synchronized (loginSessionMonitor) { + loginSessionMonitor.remove(session.getId()); + } + } + + /** + * 현재 등록된 session중 현재 접속된 사용자 정보와 중복 여부 확인 후 중복 접속 이면 이전의 세션을 소멸 시킨다. + */ + /*public boolean checkDuplicationLogin(String sessionId, String userEeno) { + boolean ret = false; + Enumeration eNum = sessionMonitor.elements(); + System.out.println("session count : " + getActiveSessionCount()); + while (eNum.hasMoreElements()) { + HttpSession sh_session = null; + try { + sh_session = (HttpSession) eNum.nextElement(); + } catch (Exception e) { + continue; + } + UserModel baseModel = sh_session.getAttribute("UserInfo"); + if (baseModel != null) { + if (userEeno.equals(baseModel.getUserId_()) + && !sessionId.equals(sh_session.getId())) { + // 전달 받은 사번과(userEeno) 기존 세션값 중 사번이 중복 되면 + // 기존 세션을 소멸 시킨다. + // 사용자 로그아웃 이력(중복접속)을 저장한다. + try { + HashMap param = new HashMap(); + param.put("usrId", baseModel.getUserId_()); + param.put("ipAddr", baseModel.getRemoteIp_()); + param.put("logKind", "LOGOUT"); + param.put("logRsn", "DUPLICATE"); + // DB 처리 + xxxxxxxx.insertLoginLog(param); + + } catch (Exception e) { + e.printStackTrace(); + } + // 해당 세션 무효화 + sh_session.invalidate(); + ret = true; + break; + } + } + } + return ret; + }*/ + + /** 세션 생성시 이벤트 처리 **/ + public void sessionCreated(HttpSessionEvent event) { + HttpSession session = event.getSession(); + synchronized (sessionMonitor) { + sessionMonitor.put(session.getId(), session); + + System.out.println(" ############################################################################### "); + System.out.println(" # 접속자 (로그인 허용인원수) : " + maxSessionValidCount + " 명#"); + System.out.println(" # 접속자 (사이트 접속자수) : " + getActiveSessionCount() + " 명#"); + System.out.println(" # 접속자 (로그인 사용자수) : " + getActiveLoginSessionCount() + " 명#"); + System.out.println(" ############################################################################### "); + } + } + + /** 세션 소멸(종료)시 이벤트 처리 **/ + public void sessionDestroyed(HttpSessionEvent event) { + HttpSession session = event.getSession(); + synchronized (sessionMonitor) { + sessionMonitor.remove(session.getId()); + loginSessionMonitor.remove(session.getId()); + + System.out.println(" ############################################################################### "); + System.out.println(" # 접속자 (로그인 허용인원수) : " + maxSessionValidCount + " 명#"); + System.out.println(" # 접속자 (사이트 접속자수) : " + getActiveSessionCount() + " 명#"); + System.out.println(" # 접속자 (로그인 사용자수) : " + getActiveLoginSessionCount() + " 명#"); + System.out.println(" ############################################################################### "); + } + } +} diff --git a/src/main/java/kr/xit/framework/support/listener/StartupListener.java b/src/main/java/kr/xit/framework/support/listener/StartupListener.java new file mode 100644 index 00000000..018fca7e --- /dev/null +++ b/src/main/java/kr/xit/framework/support/listener/StartupListener.java @@ -0,0 +1,34 @@ +package kr.xit.framework.support.listener; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +import org.slf4j.Logger; + +import kr.xit.framework.support.LoggerHelper; +import kr.xit.framework.support.mybatis.PagingConstants; + +/** + *

+ * Framework Starting globals Configuration + *

+ */ +public class StartupListener implements ServletContextListener { + private final static Logger log = LoggerHelper.getLogger(); + + public void contextInitialized(ServletContextEvent event) { + log.debug("###########################################Simple Java Framework StartupListener##########################################################"); + log.debug("Initializing context..."); + // Operating mode + if(System.getProperty(PagingConstants.KEY_OP_MODE) == null) System.setProperty(PagingConstants.KEY_OP_MODE, PagingConstants.OP_MODE_DEFAULT); + log.debug("{} :: [{}]", PagingConstants.KEY_OP_MODE, System.getProperty(PagingConstants.KEY_OP_MODE)); + log.debug("Database DataSoure Connection :: [{}]", PagingConstants.OP_MODE_DEFAULT.equals(System.getProperty(PagingConstants.KEY_OP_MODE))? "jdbc":"jndi"); + log.debug("##########################################################################################################################################"); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + + } + +} diff --git a/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java b/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java new file mode 100644 index 00000000..b1032a46 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/listener/ThreadPoolContextLoaderListener.java @@ -0,0 +1,134 @@ +package kr.xit.framework.support.listener; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * web.xml에 등록하여야 사용 할 수 있다 + * @author Administrator + * + */ +public class ThreadPoolContextLoaderListener implements ServletContextListener { + + private static final int NUMBER_OF_THREADS = 30; + public static final String THREADPOOL_ALIAS = "threadPoolAlias"; + + @Override + public void contextInitialized(ServletContextEvent event) { + final ExecutorService threadPool = Executors.newFixedThreadPool(NUMBER_OF_THREADS); // starts thread pool + final ServletContext servletContext = event.getServletContext(); + servletContext.setAttribute(THREADPOOL_ALIAS, threadPool); + } + + @Override + public void contextDestroyed(ServletContextEvent event) { + + final ExecutorService threadPool = (ExecutorService) event.getServletContext().getAttribute(THREADPOOL_ALIAS); + threadPool.shutdownNow(); + } +} + + +/* + +package com.gsshop.base.jfile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.PrintWriter; +import java.util.List; +import java.util.concurrent.ExecutorService; + +import jwork.web.modules.jfile.service.FileUploadCompletedEventListener; + +import org.apache.commons.net.PrintCommandListener; +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPReply; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; +import org.springframework.web.context.ContextLoader; + +import com.gsshop.base.listener.ThreadPoolContextLoaderListener; +import com.gsshop.common.Globals; + +public abstract class AbstractFTPUploadTemplate implements FileUploadCompletedEventListener { + + Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + public void uploadCompleted(final String fileId, final String sourceRepositoryPath, + final String savedFileName, final String originalFileName, final String beanId, + final String etc01, final String etc02, final String etc03, final String etc04, final String etc05) { + + logger.debug("fileId : {}", fileId); + logger.debug("sourceRepositoryPath : {}", sourceRepositoryPath); + logger.debug("maskingFileName : {}", savedFileName); + logger.debug("originalFileName : {}", originalFileName); + logger.debug("beanId : {}", beanId); + + ExecutorService threadPool = (ExecutorService)ContextLoader.getCurrentWebApplicationContext().getServletContext().getAttribute(ThreadPoolContextLoaderListener.THREADPOOL_ALIAS); + + threadPool.execute(new Runnable() { + @Override + public void run() { + + FTPClient ftp = new FTPClient(); + ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); + + try { + ftp.connect(Globals.PRD_FTP_WEBSERVER_IP); + int reply = ftp.getReplyCode(); + if (FTPReply.isPositiveCompletion(reply)) { + ftp.login(Globals.PRD_FTP_WEBSERVER_USER, Globals.PRD_FTP_WEBSERVER_PASSWORD); + if(logger.isDebugEnabled()) { + logger.debug(Globals.PRD_FTP_WEBSERVER_IP+" connect success !!! "); + } + ftp.setFileType(FTP.BINARY_FILE_TYPE); + + ftp.changeWorkingDirectory(Globals.PRD_FTP_WEBSERVER_UPLOAD_PATH); + + if(StringUtils.hasText(etc01)) { + String[] tokens = etc01.split("\\/"); + + String tempWorkingDirectory = Globals.PRD_FTP_WEBSERVER_UPLOAD_PATH; + for(String token : tokens) { + tempWorkingDirectory = tempWorkingDirectory+"/"+token; + ftp.makeDirectory(tempWorkingDirectory); + ftp.changeWorkingDirectory(tempWorkingDirectory); + } + } + + List list = getFTPUploadFileVO(fileId, sourceRepositoryPath,savedFileName, originalFileName, beanId,etc01, etc02, etc03, etc04, etc05); + if(list != null) { + for(FTPUploadFileVO vo : list) { + ftp.storeFile(vo.getRemoteFileName(), new FileInputStream(new File(sourceRepositoryPath+"/"+vo.getLocalFileName()))); + } + } + + if(logger.isDebugEnabled()) {logger.debug(" ftp transfer success !!! ");} + } + else { + ftp.disconnect(); + } + if(ftp.isConnected()) { + ftp.logout(); + ftp.disconnect(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + abstract public List getFTPUploadFileVO(String fileId, final String sourceRepositoryPath, + final String savedFileName, String originalFileName, String beanId, + String etc01, String etc02, String etc03, String etc04, String etc05); + +} +*/ diff --git a/src/main/java/kr/xit/framework/support/listener/UserDupCheckListener.java b/src/main/java/kr/xit/framework/support/listener/UserDupCheckListener.java new file mode 100644 index 00000000..15be0f65 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/listener/UserDupCheckListener.java @@ -0,0 +1,71 @@ +package kr.xit.framework.support.listener; + +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Set; + +@Slf4j +public class UserDupCheckListener implements HttpSessionListener { + private static UserDupCheckListener userDupCheckListener; + private static HashMap sessionMap; + + public UserDupCheckListener() { + if (sessionMap == null) sessionMap = new HashMap(); + userDupCheckListener = this; + } + + public static synchronized UserDupCheckListener getInstance() { + if (userDupCheckListener == null) userDupCheckListener = new UserDupCheckListener(); + return userDupCheckListener; + } + + public boolean isLogin(String sessionId, String userId) { +System.out.printf("Login Check :: userId:%s\n", userId); + if(sessionMap.containsValue(userId)){ +System.out.print("&&&&&&&&&&&&& Login User!!!\n"); + return true; + + }else{ + sessionMap.put(sessionId, userId); +System.out.printf("++++++++++++++Not Login User Session add :: %s=%s\n", sessionId, sessionMap.get(sessionId)); + return false; + } + } + + /** 세션 생성시 이벤트 처리 */ + public void sessionCreated(HttpSessionEvent event) { +System.out.printf("=====>>>>>sessionCreated : %s\n", event.getSession().getId()); + synchronized (sessionMap) { + sessionMap.put(event.getSession().getId(), "non-login"); +log(); + } + } + + /** 세션 소멸(logout, sessionTimeout)시 이벤트 처리 */ + public void sessionDestroyed(HttpSessionEvent event) { +System.out.printf("=====>>>>>sessionDestroyed:%s\n", event.getSession().getId()); + synchronized (sessionMap) { + sessionMap.remove(event.getSession().getId()); +log(); + } + } + + + + +private void log(){ + Set set = sessionMap.keySet(); + Iterator it = set.iterator(); +System.out.print("================================================\n"); + while (it.hasNext()) { + String key = it.next(); + System.out.printf("%s=%s\n", key, sessionMap.get(key)); + } +System.out.print("================================================\n"); +} + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/MybatisLanguageDriver.java b/src/main/java/kr/xit/framework/support/mybatis/MybatisLanguageDriver.java new file mode 100644 index 00000000..0ec4580d --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/MybatisLanguageDriver.java @@ -0,0 +1,77 @@ +package kr.xit.framework.support.mybatis; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.parameter.ParameterHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.parsing.XNode; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.lang.reflect.Field; +import java.util.List; + +/** + *
+ * Mybatis sql logging
+ * mybatis.configuration.default-scripting-language=com.xit.core.support.mybatis.MybatisLanguageDriver
+ * 
+ */ +@Slf4j +public class MybatisLanguageDriver extends XMLLanguageDriver { + public MybatisLanguageDriver() { + } + + @Override + public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) { + addDebuggingComment(boundSql); + return super.createParameterHandler(mappedStatement, parameterObject, boundSql); + } + + @Override + public SqlSource createSqlSource(Configuration configuration, XNode script, Class parameterType) { + return super.createSqlSource(configuration, script, parameterType); + } + + @Override + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + return super.createSqlSource(configuration, script, parameterType); + } + + @SneakyThrows + private void addDebuggingComment(BoundSql boundSql) { + Field sqlField = BoundSql.class.getDeclaredField("sql"); + sqlField.setAccessible(true); + + String sql = (String) sqlField.get(boundSql); + List parameterMappings = boundSql.getParameterMappings(); + sql = addParameterComment(sql, parameterMappings); + + sqlField.set(boundSql, sql); + } + + private String addParameterComment(String sql, List parameters) { + StringBuilder sqlInternalStringBuilder = new StringBuilder(sql); + + int paramReverseIndex = parameters.size() - 1; + for (int idx = sql.length() - 1; idx > 0; idx--) { + char c = sql.charAt(idx); + if (c == '?') { + String commentedString = toCommentString(parameters.get(paramReverseIndex).getProperty()); + + sqlInternalStringBuilder.insert(idx + 1, commentedString); + paramReverseIndex = paramReverseIndex - 1; + } + } + + return sqlInternalStringBuilder.toString(); + } + + private String toCommentString(String comment) { + return " /*" + comment + "*/ "; + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/MybatisUtils.java b/src/main/java/kr/xit/framework/support/mybatis/MybatisUtils.java new file mode 100644 index 00000000..30fc05de --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/MybatisUtils.java @@ -0,0 +1,77 @@ +package kr.xit.framework.support.mybatis; + +import kr.xit.framework.support.mybatis.paging.domain.Order; +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import kr.xit.framework.core.utils.Checks; +import org.apache.ibatis.session.RowBounds; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +public class MybatisUtils{ + public static RowBounds getPagingInfo(Map map){ + if(Checks.isEmpty(map)){ + return new PageBounds(1, 10); + } + int page = Checks.isEmpty(map.get("page"))? 1: Integer.parseInt(String.valueOf(map.get("page"))); + int limit = Checks.isEmpty(map.get("perPage"))? 20: Integer.parseInt(String.valueOf(map.get("perPage"))); + // 정렬필드명.direction,정렬필드명.direction,... 형태(정렬필드,정렬필드.desc) + String sort = Checks.isEmpty(map.get("sidx"))? "": String.valueOf(map.get("sidx")); + return new PageBounds(page, limit , Order.formString(sort)); + } + + public static RowBounds getPagingInfo(Object cls){ + int page = 0; + int limit = 0; + int pageSize = 0; + if(Checks.isNull(cls)){ + return new PageBounds(1, 10); + } + try { + Method pageMethod = cls.getClass().getMethod("getPage"); + page = (Integer)pageMethod.invoke(cls, null); + + Method limitMethod = cls.getClass().getMethod("getPerPage"); + limit = (Integer)limitMethod.invoke(cls, null); + } catch (IllegalAccessException ex) { + throw new RuntimeException(ex); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + page = page == 0? 1: page; + limit = limit == 0? 20: limit; + // 정렬필드명.direction,정렬필드명.direction,... 형태(정렬필드,정렬필드.desc) + //String sort = Checks.isEmpty(map.get("sidx"))? "": String.valueOf(map.get("sidx")); + //return new RowBounds(page == 1? 1: (page-1)*limit, limit); + return new PageBounds(page, limit); + } + + public static RowBounds getPagingInfo(final int page, final int limit){ + return new PageBounds(page, limit); + } + + +// public static RowBounds getPagingInfo(PagableVo bean){ +// if(bean == null){ +// return new PageBounds(1, 10 , Order.formString("")); +// } +// int page = Checks.isEmpty(bean.getPage()) ? 1: Integer.parseInt(bean.getPage()); +// int limit = Checks.isEmpty(bean.getPerPage())? 20: Integer.parseInt(String.valueOf(bean.getPerPage())); +// String sort = Checks.isEmpty(bean.getSidx())? "": String.valueOf(bean.getSidx()); +// return new PageBounds(page, limit , Order.formString(sort)); +// } + + public static RowBounds getPagingInfo(int page, int row, String sort){ + + return new PageBounds(page, row, Order.formString(sort)); + } + +// public static interface PagableVo { +// public String getPage(); +// public String getPerPage(); +// public String getSidx(); +// } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/ObjectTypeHandler.java b/src/main/java/kr/xit/framework/support/mybatis/ObjectTypeHandler.java new file mode 100644 index 00000000..b73566ec --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/ObjectTypeHandler.java @@ -0,0 +1,78 @@ +package kr.xit.framework.support.mybatis; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.*; +import java.util.Date; + +public class ObjectTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) + throws SQLException { + ps.setObject(i, parameter); + } + + @Override + public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { + Object value = ""; + Object object = rs.getObject(columnName); + value = object; + if(object instanceof Clob) { + + Clob clob = (Clob) object; + + if (clob != null) { + try { + int size = (int) clob.length(); + value = clob.getSubString(1, size); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + else if (object instanceof java.sql.Date ) { + Timestamp sqlTimestamp = rs.getTimestamp(columnName); + if (sqlTimestamp != null) { + value = new Date(sqlTimestamp.getTime()); + } + } + + return value; + } + + @Override + public Object getNullableResult(ResultSet rs, int columnIndex) + throws SQLException { + Object value = ""; + Object object = rs.getObject(columnIndex); + value = object; + if(object instanceof Clob) { + + Clob clob = (Clob) object; + + if (clob != null) { + try { + int size = (int) clob.length(); + value = clob.getSubString(1, size); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + else if (object instanceof java.sql.Date ) { + Timestamp sqlTimestamp = rs.getTimestamp(columnIndex); + if (sqlTimestamp != null) { + value = new Date(sqlTimestamp.getTime()); + } + } + return value; + } + + @Override + public Object getNullableResult(CallableStatement cs, int columnIndex) + throws SQLException { + return cs.getObject(columnIndex); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/PagingConstants.java b/src/main/java/kr/xit/framework/support/mybatis/PagingConstants.java new file mode 100644 index 00000000..b858b642 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/PagingConstants.java @@ -0,0 +1,208 @@ +package kr.xit.framework.support.mybatis; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.apache.ibatis.plugin.Invocation; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class PagingConstants { + + public static final String KEY_OP_MODE = "spring.profiles.active"; + public static final String OP_MODE_DEFAULT = "local"; + + // RestTemplate 상수 + public static final int CONNECT_TIMEOUT = 30 * 1000; // 30초 + public static final int READ_TIMEOUT = 60 * 1000 * 3; // 3분 + public static final Charset CHARSET = StandardCharsets.UTF_8; + public static final String DEFAULT_VIEW = ViewName.JSON_VIEW.getCode(); + + /** + * CustomCommonsRequestLoggingFilter에서 로깅을 제외할 url 패턴 정의 + */ + public static final String EXCLUDE_LOGGING_URL_PATTERN = "^(/webjars/|/swagger-ui/|/swagger-resources|/v2/api-docs|/h2-console)"; // "^(/webjars/|/sample/|/web/)" + + public enum ActiveProfile { + LOCAL("local"), + DEV("dev"), + STG("stg"), + PROD("prod"), + TEST("test"); + + private final String code; + + ActiveProfile(String code) { + this.code = code; + } + + public String getCode() { + return this.code; + } + } + + /** + * 인증정보 저장 방식 + * + */ + public enum AuthSaveType { + SECURITY("security"), // SessionCreationPolicy.STATELESS인 경우는 SecurityContext 사용불가 + SESSION("session"), // TOKEN도 사용 가능은 하지만... + HEADER("header"); // TOKEN + + private final String code; + + AuthSaveType(String code) { + this.code = code; + } + + public String getCode() { + return this.code; + } + } + + public enum JwtToken { + // 토큰헤더명, + HEADER_NAME("Authorization"), + GRANT_TYPE("Bearer"), + ACCESS_TOKEN_NAME("accessToken"), + REFRESH_TOKEN_NAME("refreshToken"), + AUTHORITIES_KEY("role"), + TOKEN_USER_NAME("userName"), + TOKEN_USER_MAIL("userEmail"), + TOKEN_USER_ID("userId"); + + private final String code; + + JwtToken(String code) { + this.code = code; + } + + public String getCode() { + return this.code; + } + } + + /** + * JWT Token 통신 방식 지정 + * COOKIE : accessToken - header, refreshToken - cookie + * HEADER : accessToken - header, refreshToken - DTO + * DTO : accessToken - header, refreshToken - DTO + */ + public enum JwtTokenParamType { + COOKIE, + HEADER, + DTO + } + + public enum ViewName{ + JSON_VIEW("mappingJackson2JsonView") + ; + private String code; + + ViewName(String code) { + this.code = code; + } + public String getCode() { + return this.code; + } + } + + /** + * mybatis paging 처리시 return list root attribute name + * @see kr.xit.framework.support.mybatis.paging.jackson2.PageListJsonSerializer#serialize(PageList, JsonGenerator, SerializerProvider) + */ + public static final String RSLT_ATTR_NAME = "_item_"; + + /** + * Maybatis / jpa 페이지 정보 저장 + * @see kr.xit.framework.support.mybatis.paging.OffsetLimitInterceptor#intercept(Invocation) + * @see kr.xit.framework.support.mybatis.paging.domain.Paginator#setSessionPagination(Paginator) + * @see kr.xit.framework.support.jpa.Paginator#setSessionPagination(com.xit.core.support.jpa.Paginator) + */ + public enum Session { + PAGE_INFO("_pageInfo_"), +// DATASET_NAME("gds_pageInfo"), + /** 세션에 저장되는 인증유저 객체 attribute name */ + AuthentSessionObject("AUTH_SS_OBJECT"), + /** 세션에 저장되는 인증유저 권한종류 attribute name */ + AuthentSessionAuthority("AUTH_SS_AUTHORITY"), + ; + + private String code; + + Session( String code ) { + this.code = code; + } + + public String getCode() { + return this.code; + } + } + + public enum LoginType { + SSO, + Login, + Unknown + } + + public enum CharsetType { + Default("default"), + Utf8( "UTF-8" ), + EucKr( "EUC-KR" ), + Iso8859("8859_1"); + + private String code; + + CharsetType( String code) { + this.code = code; + } + public String getCode() { + return this.code; + } + + public Charset getCharset() { + if ( this == Default ) + return Charset.defaultCharset(); + + return Charset.forName( this.code); + } + + public byte[] getBytes( String str ) { + return str.getBytes( this.getCharset() ); + } + + public String getString( byte[] bytes ) { + return new String( bytes, this.getCharset() ); + } + } + + /** + * String pad처리 시 추가문자 지정타입 + * @타입 : PadType + */ + public enum PadType { + /** 문자열 왼쪽 */ + Left, + /** 문자열 오른쪽 */ + Right + } + + public enum PageNavigator { + DIV_ID("pager"), + CLASS_NAME("pager"), + FIRST_SYMBOLIC(" ◀ "), + PREV_SYMBOLIC(" ◁ "), + NEXT_SYMBOLIC(" ▷ "), + LAST_SYMBOLIC(" ▶ "); + + private String code; + + PageNavigator(String code) { + this.code = code; + } + public String getCode() { + return this.code; + } + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/RefreshableSqlSessionFactoryBean.java b/src/main/java/kr/xit/framework/support/mybatis/RefreshableSqlSessionFactoryBean.java new file mode 100644 index 00000000..4033b8a8 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/RefreshableSqlSessionFactoryBean.java @@ -0,0 +1,171 @@ +package kr.xit.framework.support.mybatis; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.core.io.Resource; + +import java.io.IOException; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.*; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * mybatis mapper 자동 감지 후 자동으로 서버 재시작이 필요 없이 반영 + */ +public class RefreshableSqlSessionFactoryBean extends SqlSessionFactoryBean implements DisposableBean { + private static final Log log = LogFactory.getLog(RefreshableSqlSessionFactoryBean.class); + private SqlSessionFactory proxy; + private int interval = 500; + private Timer timer; + private TimerTask task; + private Resource[] mapperLocations; + /** + * 파일 감시 쓰레드가 실행중인지 여부. + */ + private boolean running = false; + private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); + private final Lock r = rwl.readLock(); + private final Lock w = rwl.writeLock(); + + public void setMapperLocations(Resource[] mapperLocations) { + super.setMapperLocations(mapperLocations); + this.mapperLocations = mapperLocations; + } + + public void setInterval(int interval) { + this.interval = interval; + } + + /** + * @throws Exception + */ + public void refresh() throws Exception { + if (log.isInfoEnabled()) { + log.info("refreshing sqlMapClient."); + } + w.lock(); + try { + super.afterPropertiesSet(); + } finally { + w.unlock(); + } + } + + /** + * 싱글톤 멤버로 SqlMapClient 원본 대신 프록시로 설정하도록 오버라이드. + */ + public void afterPropertiesSet() throws Exception { + super.afterPropertiesSet(); + setRefreshable(); + } + + private void setRefreshable() { + proxy = (SqlSessionFactory) Proxy.newProxyInstance(SqlSessionFactory.class.getClassLoader(), new Class[] { SqlSessionFactory.class }, new InvocationHandler() { + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + // log.debug("method.getName() : " + method.getName()); + return method.invoke(getParentObject(), args); + } + }); + task = new TimerTask() { + private final Map map = new HashMap<>(); + + public void run() { + if (isModified()) { + try { + refresh(); + } catch (Exception e) { + log.error("caught exception", e); + } + } + } + + private boolean isModified() { + boolean retVal = false; + if (mapperLocations != null) { + for (int i = 0; i < mapperLocations.length; i++) { + Resource mappingLocation = mapperLocations[i]; + retVal |= findModifiedResource(mappingLocation); + } + } + return retVal; + } + + private boolean findModifiedResource(Resource resource) { + boolean retVal = false; + List modifiedResources = new ArrayList(); + try { + long modified = resource.lastModified(); + if (map.containsKey(resource)) { + long lastModified = (Long) map.get(resource); + if (lastModified != modified) { + map.put(resource, modified); + modifiedResources.add(resource.getDescription()); + retVal = true; + } + } else { + map.put(resource, modified); + } + } catch (IOException e) { + log.error("caught exception", e); + } + if (retVal) { + if (log.isInfoEnabled()) { + log.info("modified files : " + modifiedResources); + } + } + return retVal; + } + }; + timer = new Timer(true); + resetInterval(); + } + + private Object getParentObject() throws Exception { + r.lock(); + try { + return super.getObject(); + } finally { + r.unlock(); + } + } + + public SqlSessionFactory getObject() { + return this.proxy; + } + + public Class getObjectType() { + return (this.proxy != null ? this.proxy.getClass() : SqlSessionFactory.class); + } + + public boolean isSingleton() { + return true; + } + + public void setCheckInterval(int ms) { + interval = ms; + if (timer != null) { + resetInterval(); + } + } + + private void resetInterval() { + if (running) { + timer.cancel(); + running = false; + } + if (interval > 0) { + timer.schedule(task, 0, interval); + running = true; + } + } + + public void destroy() throws Exception { + timer.cancel(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/CleanupMybatisPaginatorListener.java b/src/main/java/kr/xit/framework/support/mybatis/paging/CleanupMybatisPaginatorListener.java new file mode 100644 index 00000000..c92674d9 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/CleanupMybatisPaginatorListener.java @@ -0,0 +1,14 @@ +package kr.xit.framework.support.mybatis.paging; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +public class CleanupMybatisPaginatorListener implements ServletContextListener { + public void contextInitialized(ServletContextEvent servletContextEvent) { + + } + + public void contextDestroyed(ServletContextEvent servletContextEvent) { + OffsetLimitInterceptor.Pool.shutdownNow(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/OffsetLimitInterceptor.java b/src/main/java/kr/xit/framework/support/mybatis/paging/OffsetLimitInterceptor.java new file mode 100644 index 00000000..444653c0 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/OffsetLimitInterceptor.java @@ -0,0 +1,216 @@ +package kr.xit.framework.support.mybatis.paging; + +import kr.xit.framework.support.mybatis.PagingConstants; +import kr.xit.framework.support.mybatis.paging.dialect.Dialect; +import kr.xit.framework.support.LoggerHelper; +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import kr.xit.framework.support.mybatis.paging.domain.Paginator; +import kr.xit.framework.support.mybatis.paging.support.PropertiesHelper; +import kr.xit.framework.support.mybatis.paging.support.SQLHelp; +import kr.xit.framework.core.utils.Checks; +import org.apache.ibatis.cache.Cache; +import org.apache.ibatis.cache.CacheKey; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.MappedStatement.Builder; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.plugin.*; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; +import org.slf4j.Logger; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import java.lang.reflect.Constructor; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.*; + +/** + * Paging 정보 - Paginator(page, limit, totalcount)- 획득, 추가 + */ +@Intercepts({ @Signature(type = Executor.class, + method = "query", + args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }) }) +public class OffsetLimitInterceptor implements Interceptor { + private final Logger log = LoggerHelper.getLogger(); + static int MAPPED_STATEMENT_INDEX = 0; + static int PARAMETER_INDEX = 1; + static int ROWBOUNDS_INDEX = 2; + //static int RESULT_HANDLER_INDEX = 3; + static ExecutorService Pool; + String dialectClass; + boolean asyncTotalCount = false; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public Object intercept(final Invocation invocation) throws Throwable { + final Executor executor = (Executor) invocation.getTarget(); + final Object[] queryArgs = invocation.getArgs(); + final MappedStatement ms = (MappedStatement) queryArgs[MAPPED_STATEMENT_INDEX]; + final Object parameter = queryArgs[PARAMETER_INDEX]; + final RowBounds rowBounds = (RowBounds) queryArgs[ROWBOUNDS_INDEX]; + final PageBounds pageBounds = new PageBounds(rowBounds); + if (pageBounds.getOffset() == RowBounds.NO_ROW_OFFSET && pageBounds.getLimit() == RowBounds.NO_ROW_LIMIT && pageBounds.getOrders().isEmpty()) { + return invocation.proceed(); + } + + final Dialect dialect; + try { + Class clazz = Class.forName(dialectClass); + Constructor constructor = clazz.getConstructor(MappedStatement.class, Object.class, PageBounds.class); + dialect = (Dialect) constructor.newInstance(new Object[] { ms, parameter, pageBounds }); + } catch (Exception e) { + throw new ClassNotFoundException("Cannot create dialect instance: " + dialectClass, e); + } + + final BoundSql boundSql = ms.getBoundSql(parameter); + + queryArgs[MAPPED_STATEMENT_INDEX] = copyFromNewSql(ms, boundSql, dialect.getPageSQL(), dialect.getParameterMappings(), dialect.getParameterObject()); + queryArgs[PARAMETER_INDEX] = dialect.getParameterObject(); + queryArgs[ROWBOUNDS_INDEX] = new RowBounds(RowBounds.NO_ROW_OFFSET, RowBounds.NO_ROW_LIMIT); + + boolean async = pageBounds.getAsyncTotalCount() == null ? asyncTotalCount : pageBounds.getAsyncTotalCount(); + Future listFuture = call((Callable) () -> (List) invocation.proceed(), async); + + if (pageBounds.isContainsTotalCount()) { + Callable countTask = (Callable) () -> { + Paginator paginator; + Integer count; + Cache cache = ms.getCache(); + if (cache != null && ms.isUseCache() && ms.getConfiguration().isCacheEnabled()) { + CacheKey cacheKey = executor.createCacheKey( + ms, + parameter, + new PageBounds(), + copyFromBoundSql(ms, boundSql, dialect.getCountSQL(), boundSql.getParameterMappings(), boundSql.getParameterObject())); + count = (Integer) cache.getObject(cacheKey); + if (count == null) { + count = SQLHelp.getCount(ms, parameter, boundSql, dialect); + cache.putObject(cacheKey, count); + } + } else { + count = SQLHelp.getCount(ms, parameter, boundSql, dialect); + } + paginator = new Paginator(pageBounds.getPage(), pageBounds.getLimit(), count); + return paginator; + }; + Future countFutrue = call(countTask, async); +// PageList pageList = new PageList(listFuture.get(), countFutrue.get()); + +// log.debug("###################################################################################"); +// log.debug("OffsetLimitInterceptor Page information ThreadLocal save::{} - {}", FEnum.Session.PAGE_INFO.getValue(), countFutrue.get()); +// log.debug("###################################################################################"); + RequestContextHolder.currentRequestAttributes().setAttribute(PagingConstants.Session.PAGE_INFO.getCode(), countFutrue.get(), RequestAttributes.SCOPE_REQUEST); +// ContextThreadLocalHolder.setPageListThreadLocal(pageList); +// return pageList; return new PageList(listFuture.get(), countFutrue.get()); + } + return listFuture.get(); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private Future call(Callable callable, boolean async) { + if (async) { + return Pool.submit(callable); + } else { + FutureTask future = new FutureTask(callable); + future.run(); + return future; + } + } + + private MappedStatement copyFromNewSql(MappedStatement ms, BoundSql boundSql, String sql, List parameterMappings, Object parameter) { + BoundSql newBoundSql = copyFromBoundSql(ms, boundSql, sql, parameterMappings, parameter); + return copyFromMappedStatement(ms, new BoundSqlSqlSource(newBoundSql)); + } + + private BoundSql copyFromBoundSql(MappedStatement ms, BoundSql boundSql, String sql, List parameterMappings, Object parameter) { + BoundSql newBoundSql = new BoundSql(ms.getConfiguration(), sql, parameterMappings, parameter); + for (ParameterMapping mapping : boundSql.getParameterMappings()) { + String prop = mapping.getProperty(); + if (boundSql.hasAdditionalParameter(prop)) { + newBoundSql.setAdditionalParameter(prop, boundSql.getAdditionalParameter(prop)); + } + } + return newBoundSql; + } + + // see: MapperBuilderAssistant + private MappedStatement copyFromMappedStatement(MappedStatement ms, SqlSource newSqlSource) { + Builder builder = new Builder(ms.getConfiguration(), ms.getId(), newSqlSource, ms.getSqlCommandType()); + builder.resource(ms.getResource()); + builder.fetchSize(ms.getFetchSize()); + builder.statementType(ms.getStatementType()); + builder.keyGenerator(ms.getKeyGenerator()); + if (Checks.isNotEmpty(ms.getKeyProperties())) { + StringBuilder keyProperties = new StringBuilder(); + for (String keyProperty : ms.getKeyProperties()) { + keyProperties.append(keyProperty).append(","); + } + keyProperties.delete(keyProperties.length() - 1, keyProperties.length()); + builder.keyProperty(keyProperties.toString()); + } + + // setStatementTimeout() + builder.timeout(ms.getTimeout()); + + // setStatementResultMap() + builder.parameterMap(ms.getParameterMap()); + + // setStatementResultMap() + builder.resultMaps(ms.getResultMaps()); + builder.resultSetType(ms.getResultSetType()); + + // setStatementCache() + builder.cache(ms.getCache()); + builder.flushCacheRequired(ms.isFlushCacheRequired()); + builder.useCache(ms.isUseCache()); + + return builder.build(); + } + + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + public void setProperties(Properties properties) { + PropertiesHelper propertiesHelper = new PropertiesHelper(properties); + String dialectClass = propertiesHelper.getRequiredString("dialectClass"); + setDialectClass(dialectClass); + setAsyncTotalCount(propertiesHelper.getBoolean("asyncTotalCount", false)); + setPoolMaxSize(propertiesHelper.getInt("poolMaxSize", 0)); + } + + public static class BoundSqlSqlSource implements SqlSource { + BoundSql boundSql; + + public BoundSqlSqlSource(BoundSql boundSql) { + this.boundSql = boundSql; + } + + public BoundSql getBoundSql(Object parameterObject) { + return boundSql; + } + } + + public void setDialectClass(String dialectClass) { + //logger.debug("dialectClass: {} ", dialectClass); + this.dialectClass = dialectClass; + } + + public void setAsyncTotalCount(boolean asyncTotalCount) { + //logger.debug("asyncTotalCount: {} ", asyncTotalCount); + this.asyncTotalCount = asyncTotalCount; + } + + public void setPoolMaxSize(int poolMaxSize) { + + if (poolMaxSize > 0) { + log.debug("poolMaxSize: {} ", poolMaxSize); + Pool = Executors.newFixedThreadPool(poolMaxSize); + } else { + Pool = Executors.newCachedThreadPool(); + } + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/DB2Dialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/DB2Dialect.java new file mode 100644 index 00000000..19b25641 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/DB2Dialect.java @@ -0,0 +1,67 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +public class DB2Dialect extends Dialect { + + public DB2Dialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + private static String getRowNumber(String sql) { + StringBuilder rownumber = new StringBuilder(50) + .append("rownumber() over("); + + int orderByIndex = sql.toLowerCase().indexOf("order by"); + + if (orderByIndex > 0 && !hasDistinct(sql)) { + rownumber.append(sql.substring(orderByIndex)); + } + + rownumber.append(") as rownumber_,"); + + return rownumber.toString(); + } + + private static boolean hasDistinct(String sql) { + return sql.toLowerCase().contains("select distinct"); + } + + protected String getLimitString(String sql, String offsetName, int offset, + String limitName, int limit) { + int startOfSelect = sql.toLowerCase().indexOf("select"); + + StringBuilder pagingSelect = new StringBuilder(sql.length() + 100) + .append(sql.substring(0, startOfSelect)) // add the comment + .append("select * from ( select ") // nest the main query in an + // outer select + .append(getRowNumber(sql)); // add the rownnumber bit into the + // outer query select list + + if (hasDistinct(sql)) { + pagingSelect.append(" row_.* from ( ") // add another (inner) nested + // select + .append(sql.substring(startOfSelect)) // add the main query + .append(" ) as row_"); // close off the inner nested select + } else { + pagingSelect.append(sql.substring(startOfSelect + 6)); // add the + // main + // query + } + + pagingSelect.append(" ) as temp_ where rownumber_ "); + + // add the restriction to the outer select + if (offset > 0) { + pagingSelect.append("between ?+1 and ?"); + setPageParameter(offsetName, offset, Integer.class); + setPageParameter("__offsetEnd", offset + limit, Integer.class); + } else { + pagingSelect.append("<= ?"); + setPageParameter(limitName, limit, Integer.class); + } + + return pagingSelect.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/DerbyDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/DerbyDialect.java new file mode 100644 index 00000000..aa2f162b --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/DerbyDialect.java @@ -0,0 +1,31 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + + +public class DerbyDialect extends Dialect { + + public DerbyDialect(MappedStatement mappedStatement, + Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + public boolean supportsLimit() { + return true; + } + + public boolean supportsLimitOffset() { + return true; + } + + public String getLimitString(String sql, int offset, + String offsetPlaceholder, int limit, String limitPlaceholder) { + + return sql + + " offset " + offsetPlaceholder + " rows fetch next " + + limitPlaceholder + " rows only"; + + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/Dialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/Dialect.java new file mode 100644 index 00000000..232120d0 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/Dialect.java @@ -0,0 +1,134 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.LoggerHelper; +import kr.xit.framework.support.mybatis.paging.domain.Order; +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.session.RowBounds; +import org.slf4j.Logger; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Dialect { + @SuppressWarnings("unused") + private static final Logger log = LoggerHelper.getLogger(); + + protected MappedStatement mappedStatement; + protected PageBounds pageBounds; + protected Object parameterObject; + protected BoundSql boundSql; + protected List parameterMappings; + protected Map pageParameters = new HashMap(); + + private String pageSQL; + private String countSQL; + + public Dialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + this.mappedStatement = mappedStatement; + this.parameterObject = parameterObject; + this.pageBounds = pageBounds; + init(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + protected void init() { + boundSql = mappedStatement.getBoundSql(parameterObject); + parameterMappings = new ArrayList(boundSql.getParameterMappings()); + if (parameterObject instanceof Map) { + pageParameters.putAll((Map) parameterObject); + } else { + for (ParameterMapping parameterMapping : parameterMappings) { + pageParameters.put(parameterMapping.getProperty(), parameterObject); + } + } + + StringBuilder bufferSql = new StringBuilder(boundSql.getSql().trim()); + if (bufferSql.lastIndexOf(";") == bufferSql.length() - 1) { + bufferSql.deleteCharAt(bufferSql.length() - 1); + } + String sql = bufferSql.toString(); + pageSQL = sql; + if (pageBounds.getOrders() != null && !pageBounds.getOrders().isEmpty()) { + pageSQL = getSortString(sql, pageBounds.getOrders()); + } +//log.debug("$$$$$$$$$$$$$$$ page::{}, offset::{}", pageBounds.getPage(), pageBounds.getOffset()); + if (pageBounds.getOffset() != RowBounds.NO_ROW_OFFSET || pageBounds.getLimit() != RowBounds.NO_ROW_LIMIT) { + pageSQL = getLimitString(pageSQL, "__offset", pageBounds.getOffset(), "__limit", pageBounds.getLimit()); + } + countSQL = getCountString(sql); + } + + public List getParameterMappings() { + return parameterMappings; + } + + public Object getParameterObject() { + return pageParameters; + } + + public String getPageSQL() { + return pageSQL; + } + + @SuppressWarnings("rawtypes") + protected void setPageParameter(String name, Object value, Class type) { + ParameterMapping parameterMapping = new ParameterMapping.Builder(mappedStatement.getConfiguration(), name, type).build(); + parameterMappings.add(parameterMapping); + pageParameters.put(name, value); + } + + public String getCountSQL() { + return countSQL; + } + + /** + * page query make + * + * @param sql sql + * @param offsetName offsetName + * @param offset offset + * @param limitName limitName + * @param limit limit + * @return String query + */ + protected String getLimitString(String sql, String offsetName, int offset, String limitName, int limit) { + throw new UnsupportedOperationException("paged queries not supported"); + } + + /** + * get total count SQL + * + * @param sql SQL + * @return String count sql + */ + protected String getCountString(String sql) { + return "select count(1) from (\n" + sql + "\n) tmp_count"; + } + + /** + * ordered sql + * + * @param sql SQL + * @param orders ordered field List + * @return 정렬구문까지 포함된 sql + */ + protected String getSortString(String sql, List orders) { + if (orders == null || orders.isEmpty()) { + return sql; + } + + StringBuilder buffer = new StringBuilder("select * from (\n").append(sql).append("\n) temp_order order by "); + for (Order order : orders) { + if (order != null) { + buffer.append(order.toString()).append(", "); + } + } + buffer.delete(buffer.length() - 2, buffer.length()); + return buffer.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/H2Dialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/H2Dialect.java new file mode 100644 index 00000000..19f6eb65 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/H2Dialect.java @@ -0,0 +1,19 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +public class H2Dialect extends Dialect { + + public H2Dialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + protected String getLimitString(String sql, String offsetName,int offset, String limitName, int limit) { + return sql + + ((offset > 0) ? " limit " + String.valueOf(limit) + " offset " + String.valueOf(offset) : " limit " + String.valueOf(limit)); + } + + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/HSQLDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/HSQLDialect.java new file mode 100644 index 00000000..4f661781 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/HSQLDialect.java @@ -0,0 +1,24 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.LoggerHelper; +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; +import org.slf4j.Logger; + +public class HSQLDialect extends Dialect { + @SuppressWarnings("unused") + private static final Logger log = LoggerHelper.getLogger(); + + public HSQLDialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + protected String getLimitString(String sql, String offsetName, int offset, String limitName, int limit) { +// log.debug("$$$$$$$$$$$$$$$ offset::{}, limit::{}", offset, limit); + boolean hasOffset = offset > 0; + return new StringBuffer(sql.length() + 10) + .append(sql) + .insert(sql.toLowerCase().indexOf("select") + 6, + hasOffset ? " limit " + String.valueOf(offset) + " " + String.valueOf(limit) : " top " + String.valueOf(limit)).toString(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/MySQLDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/MySQLDialect.java new file mode 100644 index 00000000..5678ca46 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/MySQLDialect.java @@ -0,0 +1,25 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +public class MySQLDialect extends Dialect { + + public MySQLDialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + protected String getLimitString(String sql, String offsetName, int offset, String limitName, int limit) { + StringBuilder buffer = new StringBuilder(sql.length() + 20).append(sql); + if (offset > 0) { + buffer.append("\n limit ?, ?"); + setPageParameter(offsetName, offset, Integer.class); + setPageParameter(limitName, limit, Integer.class); + } else { + buffer.append("\n limit ?"); + setPageParameter(limitName, limit, Integer.class); + } + return buffer.toString(); + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/OracleDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/OracleDialect.java new file mode 100644 index 00000000..5f3212aa --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/OracleDialect.java @@ -0,0 +1,43 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +public class OracleDialect extends Dialect { + + public OracleDialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + protected String getLimitString(String sql, String offsetName, int offset, String limitName, int limit) { + sql = sql.trim(); + boolean isForUpdate = false; + if (sql.toLowerCase().endsWith(" for update")) { + sql = sql.substring(0, sql.length() - 11); + isForUpdate = true; + } + + StringBuilder pagingSelect = new StringBuilder(sql.length() + 100); + if (offset > 0) { + pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( "); + } else { + pagingSelect.append("select * from ( "); + } + pagingSelect.append(sql); + if (offset > 0) { + pagingSelect.append(" ) row_ ) where rownum_ <= ? and rownum_ > ?"); + setPageParameter("__offsetEnd", offset + limit, Integer.class); + setPageParameter(offsetName, offset, Integer.class); + } else { + pagingSelect.append(" ) where rownum <= ?"); + setPageParameter(limitName, limit, Integer.class); + } + + if (isForUpdate) { + pagingSelect.append(" for update"); + } + + return pagingSelect.toString(); + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/PostgreSQLDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/PostgreSQLDialect.java new file mode 100644 index 00000000..2a80e006 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/PostgreSQLDialect.java @@ -0,0 +1,29 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +/** + * @author badqiu + * @author miemiedev + */ +public class PostgreSQLDialect extends Dialect{ + + public PostgreSQLDialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + protected String getLimitString(String sql, String offsetName,int offset, String limitName, int limit) { + StringBuilder buffer = new StringBuilder( sql.length()+20 ).append(sql); + if(offset > 0){ + buffer.append(" limit ? offset ?"); + setPageParameter(limitName, limit, Integer.class); + setPageParameter(offsetName, offset, Integer.class); + + }else{ + buffer.append(" limit ?"); + setPageParameter(limitName, limit, Integer.class); + } + return buffer.toString(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SQLServer2005Dialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SQLServer2005Dialect.java new file mode 100644 index 00000000..9eb63e6a --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SQLServer2005Dialect.java @@ -0,0 +1,74 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +// Hibernate BUG: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2655 +// SQLServer2005Dialect +public class SQLServer2005Dialect extends Dialect{ + + public SQLServer2005Dialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + + /** + * Add a LIMIT clause to the given SQL SELECT + * The LIMIT SQL will look like: + * WITH query AS (SELECT TOP 100 percent ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __row_number__, * from table_name) + * SELECT * FROM query WHERE __row_number__ BETWEEN :offset and :lastRows ORDER BY __row_number__ + * + * @param sql The SQL statement to base the limit query off of. + * @param offset Offset of the first row to be returned by the query (zero-based) + * @param limit Maximum number of rows to be returned by the query + * @return A new SQL statement with the LIMIT clause applied. + */ + protected String getLimitString(String sql, String offsetName,int offset, String limitName, int limit) { + StringBuilder pagingBuilder = new StringBuilder(); + String orderby = getOrderByPart(sql); + String distinctStr = ""; + + String loweredString = sql.toLowerCase(); + String sqlPartString = sql; + if (loweredString.trim().startsWith("select")) { + int index = 6; + if (loweredString.startsWith("select distinct")) { + distinctStr = "DISTINCT "; + index = 15; + } + sqlPartString = sqlPartString.substring(index); + } + pagingBuilder.append(sqlPartString); + + // if no ORDER BY is specified use fake ORDER BY field to avoid errors + if (orderby == null || orderby.length() == 0) { + orderby = "ORDER BY CURRENT_TIMESTAMP"; + } + + StringBuilder result = new StringBuilder(); + result.append("WITH query AS (SELECT ") + .append(distinctStr) + .append("TOP 100 PERCENT ") + .append(" ROW_NUMBER() OVER (") + .append(orderby) + .append(") as __row_number__, ") + .append(pagingBuilder) + .append(") SELECT * FROM query WHERE __row_number__ > ? AND __row_number__ <= ?") + .append(" ORDER BY __row_number__"); + setPageParameter(offsetName,offset,Integer.class); + setPageParameter("__offsetEnd",offset+limit,Integer.class); + return result.toString(); + } + + static String getOrderByPart(String sql) { + String loweredString = sql.toLowerCase(); + int orderByIndex = loweredString.indexOf("order by"); + if (orderByIndex != -1) { + // if we find a new "order by" then we need to ignore + // the previous one since it was probably used for a subquery + return sql.substring(orderByIndex); + } else { + return ""; + } + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SQLServerDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SQLServerDialect.java new file mode 100644 index 00000000..4eee5489 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SQLServerDialect.java @@ -0,0 +1,27 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +public class SQLServerDialect extends Dialect{ + + public SQLServerDialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + + static int getAfterSelectInsertPoint(String sql) { + int selectIndex = sql.toLowerCase().indexOf( "select" ); + final int selectDistinctIndex = sql.toLowerCase().indexOf( "select distinct" ); + return selectIndex + ( selectDistinctIndex == selectIndex ? 15 : 6 ); + } + + + protected String getLimitString(String sql, String offsetName,int offset, String limitName, int limit) { + if ( offset > 0 ) { + throw new UnsupportedOperationException( "sql server has no offset" ); + } + setPageParameter(limitName, limit, Integer.class); + return new StringBuffer( sql.length() + 8 ).append( sql ).insert( getAfterSelectInsertPoint( sql ), " top " + limit ).toString(); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SybaseDialect.java b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SybaseDialect.java new file mode 100644 index 00000000..47b9d14d --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/dialect/SybaseDialect.java @@ -0,0 +1,17 @@ +package kr.xit.framework.support.mybatis.paging.dialect; + +import kr.xit.framework.support.mybatis.paging.domain.PageBounds; +import org.apache.ibatis.mapping.MappedStatement; + +public class SybaseDialect extends Dialect{ + + public SybaseDialect(MappedStatement mappedStatement, Object parameterObject, PageBounds pageBounds) { + super(mappedStatement, parameterObject, pageBounds); + } + + + protected String getLimitString(String sql, String offsetName,int offset, String limitName, int limit) { + throw new UnsupportedOperationException( "paged queries not supported" ); + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/domain/Order.java b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/Order.java new file mode 100644 index 00000000..2c51ee77 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/Order.java @@ -0,0 +1,152 @@ +package kr.xit.framework.support.mybatis.paging.domain; + +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.regex.Pattern; + +public class Order implements Serializable { + private static final long serialVersionUID = 1L; + + private Direction direction; + private String property; + private String orderExpr; + + public Order(String property, Direction direction, String orderExpr) { + this.direction = direction; + this.property = property; + this.orderExpr = orderExpr; + } + + public Direction getDirection() { + return direction; + } + + public String getProperty() { + return property; + } + + public String getOrderExpr() { + return orderExpr; + } + + public void setDirection(Direction direction) { + this.direction = direction; + } + + public void setProperty(String property) { + this.property = property; + } + + public void setOrderExpr(String orderExpr) { + this.orderExpr = orderExpr; + } + + public static boolean isSQLInjection(String str) { + String INJECTION_REGEX = "[A-Za-z0-9\\_\\-\\+\\.]+"; + return !Pattern.matches(INJECTION_REGEX, str); + } + + @Override + public String toString() { + if (isSQLInjection(property)) { + throw new IllegalArgumentException("SQLInjection property: " + property); + } + if (orderExpr != null && orderExpr.contains("?")) { + String[] exprs = orderExpr.split("\\?"); + if (exprs.length == 2) { + return String.format(orderExpr.replaceAll("\\?", "%s"), property) + (direction == null ? "" : " " + direction.name()); + } + return String.format(orderExpr.replaceAll("\\?", "%s"), property, direction == null ? "" : " " + direction.name()); + } + return property + (direction == null ? "" : " " + direction.name()); + } + + public static List formString(String orderSegment) { + return formString(orderSegment, null); + } + + /** + * @param orderSegment String + * ex: "id.asc,code.desc" or "code.desc" + * @param orderExpr String + * @return List List + */ + public static List formString(String orderSegment, String orderExpr) { + if (Objects.isNull(orderSegment) || Objects.equals(StringUtils.EMPTY, orderSegment.trim())) { + return new ArrayList(0); + } + + List results = new ArrayList(); + String[] orderSegments = orderSegment.trim().split(","); + for (int i = 0; i < orderSegments.length; i++) { + String sortSegment = orderSegments[i]; + Order order = _formString(sortSegment, orderExpr); + if (order != null) { + results.add(order); + } + } + return results; + } + + private static Order _formString(String orderSegment, String orderExpr) { + + if (Objects.isNull(orderSegment) || Objects.equals(StringUtils.EMPTY, orderSegment.trim()) + || orderSegment.startsWith("null.") + || orderSegment.startsWith(".")) { + return null; + } + + String[] array = orderSegment.trim().split("\\."); + if (array.length != 1 && array.length != 2) { + throw new IllegalArgumentException( + "orderSegment pattern must be {property}.{direction}, input is: " + orderSegment); + } + + return create(array[0], array.length == 2 ? array[1] : "asc", orderExpr); + } + + public static Order create(String property, String direction) { + return create(property, direction, null); + } + + /** + *
+	 * @param property property
+	 * @param direction direction
+	 * @param orderExpr
+	 *        Oracle query에 특정 column의 대소문자 구분없이 정렬 방법 (case-insensitive sort)
+	 *        placeholder is "?", in oracle like:
+	 *        "nlssort( ? ,'NLS_SORT=SCHINESE_PINYIN_M')". Warning: you must
+	 *        prevent orderExpr SQL injection.
+	 *        Oracle session level에서 "nls_sort"의 값을 다음과 같이 설정함으로서 "nlssort"함수를 번번히 사용할 필요는 없습니다. 
+	 *        SQL: alter session set nls_sort=generic_m_ai;
+	 *             Session altered.
+	 * @return Order Order
+	 * 
+ */ + public static Order create(String property, String direction, String orderExpr) { + return new Order(property, Direction.fromString(direction), orderExpr); + } + + /** + * PropertyPath implements the pairing of an {@link Direction} and a + * property. It is used to provide input for + * + * @author Oliver Gierke + */ + public static enum Direction { + ASC, DESC; + public static Direction fromString(String value) { + try { + return Direction.valueOf(value.toUpperCase(Locale.US)); + } catch (Exception e) { + return ASC; + } + } + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/domain/PageBounds.java b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/PageBounds.java new file mode 100644 index 00000000..23a3af26 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/PageBounds.java @@ -0,0 +1,159 @@ +package kr.xit.framework.support.mybatis.paging.domain; + +import org.apache.ibatis.session.RowBounds; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * + *
+ * TODO 프로젝트에 맞춰 페이지 정보 내용 define
+ * new PageBounds(limit)
+ * new PageBounds(page, limit)
+ * new PageBounds("field, field")
+ * new PageBounds(page, limit, "field, field.desc")
+ * new PageBounds(page, limit, "field.asc, filed.desc") 
+ * @author minuk
+ * 
+ * + */ +public class PageBounds extends RowBounds implements Serializable { + private static final long serialVersionUID = 1L; + + public final static int NO_PAGE = 1; + protected int page = NO_PAGE; + protected int limit = NO_ROW_LIMIT; + protected List orders = new ArrayList(); + protected boolean containsTotalCount; + protected Boolean asyncTotalCount; + + public PageBounds() { + containsTotalCount = false; + } + + public PageBounds(RowBounds rowBounds) { + if (rowBounds instanceof PageBounds) { + PageBounds pageBounds = (PageBounds) rowBounds; + this.page = pageBounds.page; + this.limit = pageBounds.limit; + this.orders = pageBounds.orders; + this.containsTotalCount = pageBounds.containsTotalCount; + this.asyncTotalCount = pageBounds.asyncTotalCount; + } else { + this.page = (rowBounds.getOffset() / rowBounds.getLimit()) + 1; + this.limit = rowBounds.getLimit(); + } + + } + + /** + * Query TOP N, default containsTotalCount = false + * @param limit limit + */ + public PageBounds(int limit) { + this.limit = limit; + this.containsTotalCount = false; + } + + public PageBounds(int page, int limit) { + this(page, limit, new ArrayList(), true); + } + + public PageBounds(int page, int limit, boolean containsTotalCount) { + this(page, limit, new ArrayList(), containsTotalCount); + } + + /** + * Just sorting, default containsTotalCount = false + * @param orders orders + */ + public PageBounds(List orders) { + this(NO_PAGE, NO_ROW_LIMIT, orders, false); + } + + /** + * Just sorting, default containsTotalCount = false + * @param order order + */ + public PageBounds(Order... order) { + this(NO_PAGE, NO_ROW_LIMIT, order); + this.containsTotalCount = false; + } + + public PageBounds(int page, int limit, Order... order) { + this(page, limit, Arrays.asList(order), true); + } + + public PageBounds(int page, int limit, List orders) { + this(page, limit, orders, true); + } + + public PageBounds(int page, int limit, List orders, + boolean containsTotalCount) { + this.page = page; + this.limit = limit; + this.orders = orders; + this.containsTotalCount = containsTotalCount; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getLimit() { + return limit; + } + + public void setLimit(int limit) { + this.limit = limit; + } + + public boolean isContainsTotalCount() { + return containsTotalCount; + } + + public void setContainsTotalCount(boolean containsTotalCount) { + this.containsTotalCount = containsTotalCount; + } + + public List getOrders() { + return orders; + } + + public void setOrders(List orders) { + this.orders = orders; + } + + public Boolean getAsyncTotalCount() { + return asyncTotalCount; + } + + public void setAsyncTotalCount(Boolean asyncTotalCount) { + this.asyncTotalCount = asyncTotalCount; + } + + @Override + public int getOffset() { + if (page >= 1) { + return (page - 1) * limit; + } + return 0; + } + + @Override + public String toString() { + return "PageBounds{" + "page=" + page + + ", limit=" + limit + + ", orders=" + orders + + ", containsTotalCount=" + containsTotalCount + + ", asyncTotalCount=" + asyncTotalCount + + '}'; + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/domain/PageList.java b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/PageList.java new file mode 100644 index 00000000..e6023f4e --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/PageList.java @@ -0,0 +1,31 @@ +package kr.xit.framework.support.mybatis.paging.domain; + +import java.util.ArrayList; +import java.util.Collection; + +public class PageList extends ArrayList { + private static final long serialVersionUID = 1412759446332294208L; + + private Paginator paginator; + + public PageList() { + } + + public PageList(Collection c) { + super(c); + } + + public PageList(Collection c, Paginator p) { + super(c); + this.paginator = p; + } + + public PageList(Paginator p) { + this.paginator = p; + } + + public Paginator getPaginator() { + return paginator; + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/domain/Paginator.java b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/Paginator.java new file mode 100644 index 00000000..2786d41d --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/domain/Paginator.java @@ -0,0 +1,142 @@ +package kr.xit.framework.support.mybatis.paging.domain; + +import kr.xit.framework.support.mybatis.PagingConstants; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import java.io.Serializable; + +public class Paginator implements Serializable { + private static final long serialVersionUID = 1L; + + private final int limit; + private int page = 1; + private final int totalCount; + + public Paginator(int page, int limit, int totalCount) { + super(); + this.limit = limit; + this.totalCount = totalCount; + this.page = computePageNo(page); + } + + public void setSessionPagination(Paginator paginator){ + RequestContextHolder.currentRequestAttributes().setAttribute(PagingConstants.Session.PAGE_INFO.getCode(), paginator, RequestAttributes.SCOPE_REQUEST); + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public int getLimit() { + return limit; + } + + public int getTotalCount() { + return totalCount; + } + + public boolean isFirstPage() { + return page <= 1; + } + + public boolean isLastPage() { + return page >= getTotalPages(); + } + + public int getPrePage() { + if (isHasPrePage()) { + return page - 1; + } else { + return page; + } + } + + public int getNextPage() { + if (isHasNextPage()) { + return page + 1; + } else { + return page; + } + } + + public boolean isDisabledPage(int page) { + return ((page < 1) || (page > getTotalPages()) || (page == this.page)); + } + + public boolean isHasPrePage() { + return (page - 1 >= 1); + } + + public boolean isHasNextPage() { + return (page + 1 <= getTotalPages()); + } + + public int getStartRow() { + if (getLimit() <= 0 || totalCount <= 0) + return 0; + return page > 0 ? (page - 1) * getLimit() + 1 : 0; + } + + public int getEndRow() { + return page > 0 ? Math.min(limit * page, getTotalCount()) : 0; + } + + public int getOffset() { + return page > 0 ? (page - 1) * getLimit() : 0; + } + + public int getTotalPages() { + if (totalCount <= 0) { + return 0; + } + if (limit <= 0) { + return 0; + } + + int count = totalCount / limit; + if (totalCount % limit > 0) { + count++; + } + return count; + } + + protected int computePageNo(int page) { + return computePageNumber(page, limit, totalCount); + } + + private static int computeLastPageNumber(int totalItems, int pageSize) { + if (pageSize <= 0) + return 1; + int result = (int) (totalItems % pageSize == 0 ? totalItems / pageSize + : totalItems / pageSize + 1); + if (result <= 1) + result = 1; + return result; + } + + private static int computePageNumber(int page, int pageSize, int totalItems) { + if (page <= 1) { + return 1; + } + if (Integer.MAX_VALUE == page + || page > computeLastPageNumber(totalItems, pageSize)) { // last + // page + return computeLastPageNumber(totalItems, pageSize); + } + return page; + } + + @Override + public String toString() { + return "Paginator" + + "{page=" + page + + ", limit=" + limit + + ", totalCount=" + totalCount + + '}'; + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/jackson2/PageListJsonMapper.java b/src/main/java/kr/xit/framework/support/mybatis/paging/jackson2/PageListJsonMapper.java new file mode 100644 index 00000000..64c99aaa --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/jackson2/PageListJsonMapper.java @@ -0,0 +1,31 @@ +package kr.xit.framework.support.mybatis.paging.jackson2; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import kr.xit.framework.support.mybatis.paging.domain.PageList; + +/** + *
+ * Converter의 ObjectMapper 확장 
+ * ResponseBody 사용시 호출
+ * Converter 실행시 Paging 정보 추가 return 
+ * page, limit(row/page), totalCount, offset(쿼리조회시작row), startRow, prePage, nextPage, endRow, totalPages
+ * boolean 값 : firstPage, lastPage, hasPrePage, hasNextPage
+ * 
+ * @author minuk + * + */ +@SuppressWarnings("serial") +public class PageListJsonMapper extends ObjectMapper{ + + public PageListJsonMapper() { + //JSON data pretty 정렬 + enable(SerializationFeature.INDENT_OUTPUT); + SimpleModule module = new SimpleModule("PageListJSONModule", new Version(1, 0, 0, null, null, null)); + //module.addSerializer(PageList.class, new PageListJsonSerializer(this)); + module.addSerializer(PageList.class, new PageListJsonSerializer()); + registerModule(module); + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/jackson2/PageListJsonSerializer.java b/src/main/java/kr/xit/framework/support/mybatis/paging/jackson2/PageListJsonSerializer.java new file mode 100644 index 00000000..b5b21f61 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/jackson2/PageListJsonSerializer.java @@ -0,0 +1,53 @@ +package kr.xit.framework.support.mybatis.paging.jackson2; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import kr.xit.framework.support.mybatis.PagingConstants; +import kr.xit.framework.support.LoggerHelper; +import kr.xit.framework.support.mybatis.paging.domain.PageList; +import kr.xit.framework.support.mybatis.paging.domain.Paginator; +import org.slf4j.Logger; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +//TODO PageListJsonSerializer - Converting시 data attribute name 정의 - property에서 읽어 온다 +@SuppressWarnings("rawtypes") +public class PageListJsonSerializer extends JsonSerializer{ + private final Logger log = LoggerHelper.getLogger(); + + @SuppressWarnings("unchecked") + @Override + public void serialize(PageList value, JsonGenerator jgen, SerializerProvider provider) throws IOException { + Paginator paginator = value.getPaginator(); + + Map map = new HashMap<>(); + map.put("totalCount", paginator.getTotalCount()); + map.put("totalPages", paginator.getTotalPages()); + map.put("page", paginator.getPage()); + map.put("limit", paginator.getLimit()); + // Query Data + map.put(PagingConstants.RSLT_ATTR_NAME, new ArrayList(value)); +// map.put(DEFAULT_RESPONSE_BODY_DATA_NAME, new ArrayList(value)); + map.put("startRow", paginator.getStartRow()); + map.put("endRow", paginator.getEndRow()); + map.put("offset", paginator.getOffset()); +// map.put("slider", paginator.getSlider()); + map.put("prePage", paginator.getPrePage()); + map.put("nextPage", paginator.getNextPage()); + map.put("firstPage", paginator.isFirstPage()); + map.put("hasNextPage", paginator.isHasNextPage()); + map.put("hasPrePage", paginator.isHasPrePage()); + map.put("lastPage", paginator.isLastPage()); + +// mapper.writeValue(jgen, map); + jgen.writeObject(map); + log.debug("#########################################Paging infomation##########################################################"); + log.debug("{}", map); + log.debug("###################################################################################################"); + + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/springmvc/PageListAttrHandlerInterceptor.java b/src/main/java/kr/xit/framework/support/mybatis/paging/springmvc/PageListAttrHandlerInterceptor.java new file mode 100644 index 00000000..1b407e81 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/springmvc/PageListAttrHandlerInterceptor.java @@ -0,0 +1,80 @@ +package kr.xit.framework.support.mybatis.paging.springmvc; + +import org.slf4j.Logger; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import kr.xit.framework.support.mybatis.PagingConstants.Session; +import kr.xit.framework.support.mybatis.paging.domain.Paginator; +import kr.xit.framework.support.LoggerHelper; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.util.HashMap; +import java.util.Map; + +/** + * name+Paginator + * ex) ModelAndView.addObject("data", Object) ==> dataPaginator + * ResponseBody 형태의 call이 아닌경우 Paging 정보를 추가하여 return + * TODO PageListAttrHandlerInterceptor - @ResponseBody 형태의 call인 경우는 정보 추가 불가 - 필요시 이 부분 처리 필요 + * TODO PageListAttrHandlerInterceptor - 페이지 정보 setting name 정의 - - property에서 읽어 온다 + */ +public class PageListAttrHandlerInterceptor extends HandlerInterceptorAdapter { + @SuppressWarnings("unused") + private final Logger log = LoggerHelper.getLogger(); +// @Value(("#{conf['page.info']}")) +// private String DEFAULT_PAGE_INFO_NAME; + + public boolean preHandle(HttpServletRequest request, + HttpServletResponse httpServletResponse, Object o) throws Exception { + return true; + } + + public void postHandle(HttpServletRequest request, HttpServletResponse httpServletResponse, Object handler, ModelAndView mav) throws Exception { + + Object pageObject = RequestContextHolder.getRequestAttributes().getAttribute(Session.PAGE_INFO.getCode(), RequestAttributes.SCOPE_REQUEST); + + if(pageObject != null){ + Paginator paginator = (Paginator)pageObject; + + if(mav == null) { + request.setAttribute(Session.PAGE_INFO.getCode(), getPageInfoMap(paginator)); + return; + + }else{ + mav.addObject(Session.PAGE_INFO.getCode(), getPageInfoMap(paginator)); + return; + } + } + } + + public void afterCompletion(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, Exception e) + throws Exception { + } + + private Map getPageInfoMap(Paginator paginator){ + Map map = new HashMap(); + + map.put("totalCount", paginator.getTotalCount()); + map.put("totalPages", paginator.getTotalPages()); + map.put("page", paginator.getPage()); + map.put("limit", paginator.getLimit()); + // Query Data : Paging 정보만 set 하면 되므로 필요 없다 + //map.put(FwConstants.DEFAULT_RESPONSE_BODY_DATA_NAME, new ArrayList(pageList)); + map.put("startRow", paginator.getStartRow()); + map.put("endRow", paginator.getEndRow()); + map.put("offset", paginator.getOffset()); + //map.put("slider", paginator.getSlider()); + map.put("prePage", paginator.getPrePage()); + map.put("nextPage", paginator.getNextPage()); + map.put("firstPage", paginator.isFirstPage()); + map.put("hasNextPage", paginator.isHasNextPage()); + map.put("hasPrePage", paginator.isHasPrePage()); + map.put("lastPage", paginator.isLastPage()); + return map; + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/support/DefaultParameterHandler.java b/src/main/java/kr/xit/framework/support/mybatis/paging/support/DefaultParameterHandler.java new file mode 100644 index 00000000..3fe7f971 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/support/DefaultParameterHandler.java @@ -0,0 +1,92 @@ +/* + * Copyright 2009-2012 The MyBatis Team + * + * 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 kr.xit.framework.support.mybatis.paging.support; + +import org.apache.ibatis.executor.ErrorContext; +import org.apache.ibatis.executor.ExecutorException; +import org.apache.ibatis.executor.parameter.ParameterHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.mapping.ParameterMode; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.session.Configuration; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.TypeHandler; +import org.apache.ibatis.type.TypeHandlerRegistry; + +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; + +public class DefaultParameterHandler implements ParameterHandler { + + private final TypeHandlerRegistry typeHandlerRegistry; + + private final MappedStatement mappedStatement; + private final Object parameterObject; + private BoundSql boundSql; + private Configuration configuration; + + public DefaultParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) { + this.mappedStatement = mappedStatement; + this.configuration = mappedStatement.getConfiguration(); + this.typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry(); + this.parameterObject = parameterObject; + this.boundSql = boundSql; + } + + public Object getParameterObject() { + return parameterObject; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void setParameters(PreparedStatement ps) throws SQLException { + ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId()); + List parameterMappings = boundSql.getParameterMappings(); + if (parameterMappings != null) { + MetaObject metaObject = parameterObject == null ? null : configuration.newMetaObject(parameterObject); + for (int i = 0; i < parameterMappings.size(); i++) { + ParameterMapping parameterMapping = parameterMappings.get(i); + if (parameterMapping.getMode() != ParameterMode.OUT) { + Object value; + String propertyName = parameterMapping.getProperty(); + if (boundSql.hasAdditionalParameter(propertyName)) { // issue #448 ask first for additional params + value = boundSql.getAdditionalParameter(propertyName); + } else if (parameterObject == null) { + value = null; + } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) { + value = parameterObject; + } else { + value = metaObject == null ? null : metaObject.getValue(propertyName); + } + TypeHandler typeHandler = parameterMapping.getTypeHandler(); + if (typeHandler == null) { + throw new ExecutorException( + "There was no TypeHandler found for parameter " + + propertyName + " of statement " + + mappedStatement.getId()); + } + JdbcType jdbcType = parameterMapping.getJdbcType(); + if (value == null && jdbcType == null) + jdbcType = configuration.getJdbcTypeForNull(); + typeHandler.setParameter(ps, i + 1, value, jdbcType); + } + } + } + } + +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/support/PropertiesHelper.java b/src/main/java/kr/xit/framework/support/mybatis/paging/support/PropertiesHelper.java new file mode 100644 index 00000000..96c22b7b --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/support/PropertiesHelper.java @@ -0,0 +1,409 @@ +package kr.xit.framework.support.mybatis.paging.support; + +import kr.xit.framework.core.utils.Checks; +import org.apache.commons.lang3.StringUtils; + +import java.io.*; +import java.util.*; +import java.util.Map.Entry; + +/** + *
+ * used :
+ * public class ConnectionUtils {
+ *     static Properties properties = new Properties(); 
+ *     // ... do load properties 
+ *     
+ *     // delegate to properties
+ * 	   static PropertiesHelper props = new PropertiesHelper(properties);
+ *     public static Connection getConnection() {
+ *     		// use getRequiredProperty() 
+ *     		DriverManager.getConnection(props.getRequiredString("jdbc.url"));
+ *     }
+ * }
+ * new PropertiesHelper(properties,PropertiesHelper.SYSTEM_PROPERTIES_MODE_OVERRIDE)
+ * 
+ */ +public class PropertiesHelper { + /** Never check system properties. */ + public static final int SYSTEM_PROPERTIES_MODE_NEVER = 0; + + /** + * Check system properties if not resolvable in the specified properties. + * This is the default. + */ + public static final int SYSTEM_PROPERTIES_MODE_FALLBACK = 1; + + /** + * Check system properties first, before trying the specified properties. + * This allows system properties to override any other property source. + */ + public static final int SYSTEM_PROPERTIES_MODE_OVERRIDE = 2; + + private int systemPropertiesMode = SYSTEM_PROPERTIES_MODE_NEVER; + private Properties p; + + public PropertiesHelper(Properties p) { + setProperties(p); + } + + public PropertiesHelper(Properties p, int systemPropertiesMode) { + setProperties(p); + if(systemPropertiesMode != SYSTEM_PROPERTIES_MODE_NEVER && systemPropertiesMode != SYSTEM_PROPERTIES_MODE_FALLBACK && systemPropertiesMode != SYSTEM_PROPERTIES_MODE_OVERRIDE) { + throw new IllegalArgumentException("error systemPropertiesMode mode:"+systemPropertiesMode); + } + this.systemPropertiesMode = systemPropertiesMode; + } + + public Properties getProperties() { + return p; + } + + public void setProperties(Properties props) { + if(props == null) throw new IllegalArgumentException("properties must be not null"); + this.p = props; + } + + public String getRequiredString(String key) { + String value = getProperty(key); + if(isBlankString(value)) { + throw new IllegalStateException("required property is blank by key="+key); + } + return value; + } + + public String getNullIfBlank(String key) { + String value = getProperty(key); + if(isBlankString(value)) { + return null; + } + return value; + } + + public String getNullIfEmpty(String key) { + String value = getProperty(key); + if(Checks.isEmpty(value)) { + return null; + } + return value; + } + + /** + * System.getProperty(key) System.getenv(key) + * @param key key + * @return String + */ + public String getAndTryFromSystem(String key) { + String value = getProperty(key); + if(isBlankString(value)) { + value = getSystemProperty(key); + } + return value; + } + + private String getSystemProperty(String key) { + String value; + value = System.getProperty(key); + if(isBlankString(value)) { + value = System.getenv(key); + } + return value; + } + + public Integer getInteger(String key) { + String v = getProperty(key); + if(v == null){ + return null; + } + return Integer.parseInt(v); + } + + public int getInt(String key,int defaultValue) { + if(getProperty(key) == null) { + return defaultValue; + } + return Integer.parseInt(getRequiredString(key)); + } + + public int getRequiredInt(String key) { + return Integer.parseInt(getRequiredString(key)); + } + + public Long getLong(String key) { + if(getProperty(key) == null) { + return null; + } + return Long.parseLong(getRequiredString(key)); + } + + public long getLong(String key,long defaultValue) { + if(getProperty(key) == null) { + return defaultValue; + } + return Long.parseLong(getRequiredString(key)); + } + + public Long getRequiredLong(String key) { + return Long.parseLong(getRequiredString(key)); + } + + public Boolean getBoolean(String key) { + if(getProperty(key) == null) { + return null; + } + return Boolean.parseBoolean(getRequiredString(key)); + } + + public boolean getBoolean(String key,boolean defaultValue) { + if(getProperty(key) == null) { + return defaultValue; + } + return Boolean.parseBoolean(getRequiredString(key)); + } + + public boolean getRequiredBoolean(String key) { + return Boolean.parseBoolean(getRequiredString(key)); + } + + public Float getFloat(String key) { + if(getProperty(key) == null) { + return null; + } + return Float.parseFloat(getRequiredString(key)); + } + + public float getFloat(String key,float defaultValue) { + if(getProperty(key) == null) { + return defaultValue; + } + return Float.parseFloat(getRequiredString(key)); + } + + public Float getRequiredFloat(String key) { + return Float.parseFloat(getRequiredString(key)); + } + + public Double getDouble(String key) { + if(getProperty(key) == null) { + return null; + } + return Double.parseDouble(getRequiredString(key)); + } + + public double getDouble(String key,double defaultValue) { + if(getProperty(key) == null) { + return defaultValue; + } + return Double.parseDouble(getRequiredString(key)); + } + + public Double getRequiredDouble(String key) { + return Double.parseDouble(getRequiredString(key)); + } + + //---------- setProperty(String key,int value) ... start ---------------// + public Object setProperty(String key,int value) { + return setProperty(key, String.valueOf(value)); + } + + public Object setProperty(String key,long value) { + return setProperty(key, String.valueOf(value)); + } + + public Object setProperty(String key,float value) { + return setProperty(key, String.valueOf(value)); + } + + public Object setProperty(String key,double value) { + return setProperty(key, String.valueOf(value)); + } + + public Object setProperty(String key,boolean value) { + return setProperty(key, String.valueOf(value)); + } + + public String[] getStringArray(String key) { + String v = getProperty(key); + if(v == null) { + return new String[0]; + }else { + return tokenizeToStringArray(v, ", \t\n\r\f"); + } + } + + public int[] getIntArray(String key) { + return toIntArray(getStringArray(key)); + } + + public Properties getStartsWithProperties(String prefix) { + if(prefix == null) throw new IllegalArgumentException("'prefix' must be not null"); + + Properties props = getProperties(); + Properties result = new Properties(); + for(Entry entry : props.entrySet()) { + String key = (String)entry.getKey(); + if(key != null && key.startsWith(prefix)) { + result.put(key.substring(prefix.length()), entry.getValue()); + } + } + return result; + } + + //--------- delegate method start ---// + public String getProperty(String key, String defaultValue) { + String value = getProperty(key); + if(isBlankString(value)) { + return defaultValue; + } + return value; + } + + public String getProperty(String key) { + String propVal = null; + if (systemPropertiesMode == SYSTEM_PROPERTIES_MODE_OVERRIDE) { + propVal = getSystemProperty(key); + } + if (propVal == null) { + propVal = p.getProperty(key); + } + if (propVal == null && systemPropertiesMode == SYSTEM_PROPERTIES_MODE_FALLBACK) { + propVal = getSystemProperty(key); + } + return propVal; + } + + public Object setProperty(String key,String value) { + return p.setProperty(key, value); + } + + public void clear() { + p.clear(); + } + + public Set> entrySet() { + return p.entrySet(); + } + + public Enumeration propertyNames() { + return p.propertyNames(); + } + + public boolean contains(Object value) { + return p.contains(value); + } + + public boolean containsKey(Object key) { + return p.containsKey(key); + } + + public boolean containsValue(Object value) { + return p.containsValue(value); + } + + public Enumeration elements() { + return p.elements(); + } + + public Object get(Object key) { + return p.get(key); + } + + public boolean isEmpty() { + return p.isEmpty(); + } + + public Enumeration keys() { + return p.keys(); + } + + public Set keySet() { + return p.keySet(); + } + + public void list(PrintStream out) { + p.list(out); + } + + public void list(PrintWriter out) { + p.list(out); + } + + public void load(InputStream inStream) throws IOException { + p.load(inStream); + } + + public void loadFromXML(InputStream in) throws IOException, + InvalidPropertiesFormatException { + p.loadFromXML(in); + } + + public Object put(Object key, Object value) { + return p.put(key, value); + } + + public void putAll(Map t) { + p.putAll(t); + } + + public Object remove(Object key) { + return p.remove(key); + } + + /**@deprecated + * @param out out + * @param comments comments + */ + @Deprecated + public void save(OutputStream out, String comments) { + p.save(out, comments); + } + + public int size() { + return p.size(); + } + + public void store(OutputStream out, String comments) throws IOException { + p.store(out, comments); + } + + public void storeToXML(OutputStream os, String comment, String encoding) + throws IOException { + p.storeToXML(os, comment, encoding); + } + + public void storeToXML(OutputStream os, String comment) throws IOException { + p.storeToXML(os, comment); + } + + public Collection values() { + return p.values(); + } + + public String toString() { + return p.toString(); + } + + private static boolean isBlankString(String value) { + return Objects.isNull(value) || Objects.equals(StringUtils.EMPTY, value.trim()); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private static String[] tokenizeToStringArray(String str, String sep) { + StringTokenizer st = new StringTokenizer(str, sep); + List result = new ArrayList(); + + while(st.hasMoreElements()) { + Object o = st.nextElement(); + result.add(o); + } + return (String[])result.toArray(new String[result.size()]); + } + + private static int[] toIntArray(String[] array) { + int[] result = new int[array.length]; + for(int i = 0; i < array.length; i++) { + result[i] = Integer.parseInt(array[i]); + } + return result; + } +} diff --git a/src/main/java/kr/xit/framework/support/mybatis/paging/support/SQLHelp.java b/src/main/java/kr/xit/framework/support/mybatis/paging/support/SQLHelp.java new file mode 100644 index 00000000..1247f26b --- /dev/null +++ b/src/main/java/kr/xit/framework/support/mybatis/paging/support/SQLHelp.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012-2013, Poplar Yfyang 杨友峰 (poplar1123@gmail.com). + * + * 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 kr.xit.framework.support.mybatis.paging.support; + +import kr.xit.framework.support.mybatis.paging.dialect.Dialect; +import kr.xit.framework.support.LoggerHelper; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.slf4j.Logger; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class SQLHelp { + private static final Logger log = LoggerHelper.getLogger(); + + /** + * query record total count + * + * @param mappedStatement mapped + * @param parameterObject parameter + * @param boundSql boundSql + * @param dialect database dialect + * @return int + * @throws SQLException SQLException + */ + public static int getCount(final MappedStatement mappedStatement, final Object parameterObject, final BoundSql boundSql, Dialect dialect) throws SQLException { + final String count_sql = dialect.getCountSQL(); + + Connection connection = null; + PreparedStatement countStmt = null; + ResultSet rs = null; + try { + connection = mappedStatement.getConfiguration().getEnvironment().getDataSource().getConnection(); + countStmt = connection.prepareStatement(count_sql); + DefaultParameterHandler handler = new DefaultParameterHandler(mappedStatement, parameterObject, boundSql); + handler.setParameters(countStmt); + rs = countStmt.executeQuery(); + int count = 0; + + if (rs.next()) count = rs.getInt(1); +// log.debug("Total count:{}, SQL:{}, parameters:{}", count, count_sql, parameterObject); + return count; + + } finally { + try { + if (rs != null) rs.close(); + } finally { + try { + if (countStmt != null) countStmt.close(); + } finally { + if (connection != null && !connection.isClosed()) connection.close(); + } + } + } + } + +} diff --git a/src/main/java/kr/xit/framework/support/valid/EnumNamePattern.java b/src/main/java/kr/xit/framework/support/valid/EnumNamePattern.java new file mode 100644 index 00000000..77251326 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/valid/EnumNamePattern.java @@ -0,0 +1,89 @@ +package kr.xit.framework.support.valid; + +import kr.xit.framework.core.utils.Checks; + +import javax.validation.Constraint; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + *
+ * Enum validation check annotaion
+ * ADMIN("ROLE_ADMIN") or USER("ROLE_USER", "일잔사용자") 형태의 enum
+ * 해당 Enum 타입 클래스에 반드시 Serialized, Deserialized 메소드 구현 필요
+ *     @JsonCreator
+ *     public static RoleType fromString(String symbol){
+ *         return stringToEnum.get(symbol);
+ *     }
+ *
+ *     @JsonValue
+ *     public String getCode(){
+ *         return code;
+ *     }
+ *
+ *     private static final Map stringToEnum = Stream.of(values())
+ *             .collect(toMap(Objects::toString, e -> e));
+ *
+ * 사용 : @Enumerated(EnumType.STRING)
+ *       @EnumNamePattern(regexp = "ADMIN|USER|GUEST", message = "{auth.user.pattern.RoleType}")
+ *
+ * 
+ */ + +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) +@Retention(RUNTIME) +@Documented +@Constraint(validatedBy = EnumNamePattern.EnumNamePatternValidator.class) +public @interface EnumNamePattern { + + /** + * @return the regular expression to match + */ + String regexp(); + + /** + * @return the error message template + */ + String message() default "must match \"{regexp}\""; + + /** + * @return the groups the constraint belongs to + */ + Class[] groups() default {}; + + /** + * @return the payload associated to the constraint + */ + Class[] payload() default {}; + + public class EnumNamePatternValidator implements ConstraintValidator> { + private Pattern pattern; + + @Override + public void initialize(EnumNamePattern constraintAnnotation) { + try { + pattern = Pattern.compile(constraintAnnotation.regexp()); + } catch (PatternSyntaxException e) { + throw new IllegalArgumentException("EnumNamePatternValidator.initialize Error :: ", e); + } + } + + @Override + public boolean isValid(Enum value, ConstraintValidatorContext context) { + if (Checks.isEmpty(value)) return false; + + Matcher m = pattern.matcher(value.name()); + return m.matches(); + } + } +} diff --git a/src/main/java/kr/xit/framework/support/valid/Enums.java b/src/main/java/kr/xit/framework/support/valid/Enums.java new file mode 100644 index 00000000..1d9e8518 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/valid/Enums.java @@ -0,0 +1,73 @@ +package kr.xit.framework.support.valid; + +import kr.xit.framework.core.utils.Checks; + +import javax.validation.Constraint; +import javax.validation.Payload; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *
+ * Enum validation check annotaion
+ * GOOGLE, KAKAO; 형태의 enum
+ * 해당 Enum 타입 클래스에 반드시 Serialized 메소드 구현 필요
+ *     @JsonCreator
+ *     public static ProviderType from(String s) {
+ *         try{
+ *             return ProviderType.valueOf(s);
+ *         }catch (IllegalArgumentException iae){
+ *             return null;
+ *         }
+ *     }
+ *
+ * 사용 : @Enumerated(EnumType.STRING)
+ *       @Enums(enumClass = ProviderType.class, ignoreCase = false, message = "{auth.user.pattern.ProviderType}")
+ * 
+ */ +/* 해당 annotation이 실행 할 ConstraintValidator 구현체를 `EnumValidator`로 지정합니다. */ +@Constraint(validatedBy = {Enums.EnumValidator.class}) +/* 해당 annotation은 메소드, 필드, 파라미터에 적용 할 수 있습니다. */ +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) +/* annotation을 Runtime까지 유지합니다. */ +@Retention(RetentionPolicy.RUNTIME) +public @interface Enums { + String message() default "Invalid value. This is not permitted."; + Class[] groups() default {}; + Class[] payload() default {}; + Class> enumClass(); + boolean ignoreCase() default false; + + public class EnumValidator implements ConstraintValidator { + + private Enums annotation; + + @Override + public void initialize(Enums constraintAnnotation) { + this.annotation = constraintAnnotation; + } + + @Override + public boolean isValid(Enum value, ConstraintValidatorContext context) { + if(Checks.isEmpty(value)) return false; + + boolean result = false; + Object[] enumValues = this.annotation.enumClass().getEnumConstants(); + if (enumValues != null) { + for (Object enumValue : enumValues) { + if (value.name().equals(enumValue.toString()) + || (this.annotation.ignoreCase() && value.name().equalsIgnoreCase(enumValue.toString()))) { + result = true; + break; + } + } + } + return result; + } + + } +} diff --git a/src/main/java/kr/xit/framework/support/valid/FromToTimeCheck.java b/src/main/java/kr/xit/framework/support/valid/FromToTimeCheck.java new file mode 100644 index 00000000..40275ef4 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/valid/FromToTimeCheck.java @@ -0,0 +1,84 @@ +package kr.xit.framework.support.valid; + +import javax.validation.Constraint; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Field; +import java.time.LocalDateTime; + +/** + *
+ * 시작 ~ 종료시간 체크가 필요한 DTO 클래스에 annotation 정의
+ * startDate - 시작 필드 명, endDate - 종료 필드 명
+ * @FromToTimeCheck(startDate = "reservationStart", endDate = "reservationEnd")
+ * 
+ */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = FromToTimeCheck.FromToTimeCheckValidator.class) +public @interface FromToTimeCheck { + + String message() default "시작 시간이 종료 시간 보다 늦을 수 없습니다."; + + Class[] groups() default {}; + + Class[] payload() default {}; + + String startDate(); // 대상 객체의 시작시간 필드 이름 + + String endDate(); // 대상 객체의 종료시간 필드 이름 + + public class FromToTimeCheckValidator implements ConstraintValidator { + private String message; + private String startDate; + private String endDate; + + @Override + public void initialize(FromToTimeCheck constraintAnnotation) { + message = constraintAnnotation.message(); // 메세지 + startDate = constraintAnnotation.startDate(); // 시작시점 필드 + endDate = constraintAnnotation.endDate(); // 종료시점 필드 + } + + @Override + public boolean isValid(Object o, ConstraintValidatorContext context) { + try { + LocalDateTime reservationStart = (LocalDateTime) getFieldValue(o, startDate); + LocalDateTime reservationEnd = (LocalDateTime) getFieldValue(o, endDate); + + // 검증오류시 오류메세지와 대상 필드 set + if (reservationStart.isAfter(reservationEnd)) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(message) + .addPropertyNode(startDate) + .addConstraintViolation(); + return false; + } + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + /** + * 정의한 필드명으로 해당 값 GET + * + * @param object Object + * @param fieldName String + * @return Object + * @throws Exception Exception + */ + private Object getFieldValue(Object object, String fieldName) throws Exception { + Class clazz = object.getClass(); // + Field dateField = clazz.getDeclaredField(fieldName); + dateField.setAccessible(true); + return dateField.get(object); + } + } +} diff --git a/src/main/resources/log4jdbc.log4j2.properties b/src/main/resources/log4jdbc.log4j2.properties new file mode 100644 index 00000000..45c36497 --- /dev/null +++ b/src/main/resources/log4jdbc.log4j2.properties @@ -0,0 +1,6 @@ +log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator +# \uB85C\uADF8\uB97C \uD45C\uC2DC\uD560 \uC904\uC758 \uC81C\uD55C, 0\uC740 \uBB34\uC81C\uD55C +log4jdbc.dump.sql.maxlinelength=0 +# log4jdbc\uC758 \uB4DC\uB77C\uC774\uBE0C \uD074\uB798\uC2A4 \uC124\uC815 +log4jdbc.drivers=org.mariadb.jdbc.Driver +log4jdbc.auto.load.popular.drivers=false diff --git a/src/main/resources/logback-dev.xml b/src/main/resources/logback-dev.xml new file mode 100644 index 00000000..f5801d32 --- /dev/null +++ b/src/main/resources/logback-dev.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${LOG_PATH}/fims-be.log + + + [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n + + + ${LOG_PATH}/backup/fims-be_%d{yyyy-MM-dd}.%i.log.gz + + 30MB + + 50 + + + + + + + DEBUG + + + + + + + + + + ${LOG_PATH}/fims-be-error.log + + + [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n + + + ${LOG_PATH}/backup/xit-framework-error_%d{yyyy-MM-dd}.%i.log.gz + + 30MB + + 50 + + + + + + + ERROR + + + + + + + + + + + [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n + + ${SLACK_WEBHOOK_URI} + xit-framework + :stuck_out_tongue_winking_eye: + true + + + + + ERROR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logback-local.xml b/src/main/resources/logback-local.xml new file mode 100644 index 00000000..2ececd59 --- /dev/null +++ b/src/main/resources/logback-local.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + ${LOG_PATTERN} + + + + + + + + ${LOG_PATH}/fims-be.log + + + ${LOG_PATTERN} + + + ${LOG_PATH}/backup/fims-be_%d{yyyy-MM-dd}.%i.log.gz + + 30MB + + 50 + + + + + + + DEBUG + + + + + + + + + + ${LOG_PATH}/fims-be-error.log + + + ${LOG_PATTERN} + + + ${LOG_PATH}/backup/xit-framework-error_%d{yyyy-MM-dd}.%i.log.gz + + 30MB + + 50 + + + + + + + ERROR + + + + + + + + + + + ${LOG_PATTERN} + + ${SLACK_WEBHOOK_URI} + xit-framework + :stuck_out_tongue_winking_eye: + true + + + + + ERROR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + return message.contains("Preparing"); + + + NEUTRAL + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/message/category/mng/batch/message_en.properties b/src/main/resources/message/category/mng/batch/message_en.properties new file mode 100644 index 00000000..99736ee3 --- /dev/null +++ b/src/main/resources/message/category/mng/batch/message_en.properties @@ -0,0 +1,155 @@ +comSymBat.batchOpertList.title=View Batch Job Management List +comSymBat.batchOpertList.pageTop.title=Batch Job Management List +comSymBat.batchOpertList.batchOpertId=Batch Job ID +comSymBat.batchOpertList.batchOpertNm=Batch Job Name +comSymBat.batchOpertList.batchProgrm=Batch Program +comSymBat.batchOpertList.paramtr=Parameter +comSymBat.batchOpertList.validate.searchKeyword=Please select a search condition. +comSymBat.batchOpertList.searchKeyword=Search Keyword + + +comSymBat.batchOpertDetail.title=View Batch Job Details +comSymBat.BatchOpertDetail.pageTop.title=View Batch Job Details +comSymBat.batchOpertDetail.batchOpertId=Batch Job ID +comSymBat.batchOpertDetail.batchOpertNm=Batch Job Name +comSymBat.batchOpertDetail.batchProgrm=Batch Program +comSymBat.batchOpertDetail.paramtr=Parameter + + +comSymBat.batchOpertUpdt.title=Edit Batch Job +comSymBat.batchOpertUpdt.pageTop.title=Edit Batch Job +comSymBat.batchOpertUpdt.batchOpertId=Batch Job ID +comSymBat.batchOpertUpdt.batchOpertNm=Batch Job Name +comSymBat.batchOpertUpdt.batchProgrm=Batch Program +comSymBat.batchOpertUpdt.paramtr=Parameter + + +comSymBat.batchOpertRegist.title=Registration of Batch Jobs +comSymBat.batchOpertRegist.pageTop.title=Registration of Batch Jobs +comSymBat.batchOpertRegist.batchOpertNm=Batch Job Name +comSymBat.batchOpertRegist.batchProgrm=Batch Program +comSymBat.batchOpertRegist.paramtr=Parameter + + +comSymBat.batchResultList.title=View Batch Result Management List +comSymBat.batchResultList.pageTop.title=Batch Result List +comSymBat.batchResultList.searchCondition=Search Condition +comSymBat.batchResultList.sttus.value00=All +comSymBat.batchResultList.sttus.value01=Normal +comSymBat.batchResultList.sttus.value02=Abnormal +comSymBat.batchResultList.sttus.value03=Performing +comSymBat.batchResultList.batchResultId=Batch Result ID +comSymBat.batchResultList.batchSchdulId=Batch Schedule ID +comSymBat.batchResultList.batchOpertNm=Batch Job Name +comSymBat.batchResultList.sttusNm=Condition +comSymBat.batchResultList.executBeginTime=Execution Start Time +comSymBat.batchResultList.executEndTime=Execution End time +comSymBat.batchResultList.validate.searchCondition=Please select a search condition. +comSymBat.batchResultList.validate.inputSearchStartDate=Please enter search start date. +comSymBat.batchResultList.validate.inputSearchEndDate=Please enter search end date. +comSymBat.batchResultList.validate.searchStartDate=Start date +comSymBat.batchResultList.validate.searchEndDate=End date +comSymBat.batchResultList.validate.strTmpFromDate=The date format is invalid. +comSymBat.batchResultList.validate.strTmpFromEndDate=Start date can not be greater than end date. +comSymBat.batchResultList.searchKeyword=Search Keyword +comSymBat.batchResultList.searchStartDate=Search Start Date +comSymBat.batchResultList.searchEndDate=Search End Date + + +comSymBat.batchResultDetail.title=Detailed View Of Batch Result +comSymBat.batchResultDetail.pageTop.title=Detailed View Of Batch Result +comSymBat.batchResultDetail.batchResultId=Batch Result ID +comSymBat.batchResultDetail.batchSchdulId=Batch Schedule ID +comSymBat.batchResultDetail.batchOpertId=Batch Job ID +comSymBat.batchResultDetail.batchOpertNm=Batch Job Name +comSymBat.batchResultDetail.batchProgrm=Batch Program +comSymBat.batchResultDetail.paramtr=Parameter +comSymBat.batchResultDetail.sttusNm=Condition +comSymBat.batchResultDetail.errorInfo=Error information +comSymBat.batchResultDetail.executBeginTime=Start Execution Time +comSymBat.batchResultDetail.executEndTime=Execution End Time + + +comSymBat.batchSchdulList.title=Batch Schedule Management List +comSymBat.batchSchdulList.pageTop.title=Batch Schedule Management List +comSymBat.batchSchdulList.batchSchdulId=Batch Schedule ID +comSymBat.batchSchdulList.batchOpertNm=Batch Job Name +comSymBat.batchSchdulList.batchProgrm=Batch Program +comSymBat.batchSchdulList.executCycleNm=Execution Cycle +comSymBat.batchSchdulList.executSchdul=Execution Schedule +comSymBat.batchSchdulList.searchCondition=Search Condition +comSymBat.batchSchdulList.searchKeyword=Search Keyword + + +comSymBat.batchSchdulDetail.title=Batch Schedule Detailed View +comSymBat.batchSchdulDetail.pageTop.title=Batch Schedule Detailed View +comSymBat.batchSchdulDetail.batchSchdulId=Batch Schedule ID +comSymBat.batchSchdulDetail.batchOpertId=Batch Job ID +comSymBat.batchSchdulDetail.batchOpertNm=Batch Job Name +comSymBat.batchSchdulDetail.executCycleNm=Execution Cycle + + +comSymBat.batchSchdulUpdt.title=Modify Batch Schedule +comSymBat.batchSchdulUpdt.pageTop.title=Modify Batch Schedule +comSymBat.batchSchdulUpdt.validate.executSchdulDfkSes.length=The weekday is the required input value when the execution cycle is selected as weekly. +comSymBat.batchSchdulUpdt.validate.cycleMonth.executSchdulDay=When the execution cycle is monthly, the execution schedule (days) is a required input value. +comSymBat.batchSchdulUpdt.validate.cycleYear.executSchdulMonth=When the execution cycle is annually, the execution schedule (month) is a required input value. +comSymBat.batchSchdulUpdt.validate.cycleYear.executSchdulDay=When the execution cycle is annually, the execution schedule (days) is a mandatory input value. +comSymBat.batchSchdulUpdt.validate.checkDate=The execution schedule (month / day) is not valid. +comSymBat.batchSchdulUpdt.validate.executSchdulDeNm=The execution schedule (date) is a required input value when the execution cycle is only once. +comSymBat.batchSchdulUpdt.validate.executSchdulDeNm.isDate=The execution schedule (date) is invalid. +comSymBat.batchSchdulUpdt.batchSchdulId=Batch Schedule ID +comSymBat.batchSchdulUpdt.batchOpertId=Batch Job ID +comSymBat.batchSchdulUpdt.batchOpertNm=Batch Job Name +comSymBat.batchSchdulUpdt.executCycleNm=Execution Cycle +comSymBat.batchSchdulUpdt.executSchdulDeNm=Execution schedule(Date) +comSymBat.batchSchdulUpdt.executSchdulMonth=Execution schedule(Month) +comSymBat.batchSchdulUpdt.executSchdulDay=Execution schedule(Day) +comSymBat.batchSchdulUpdt.executSchdulHour=Execution schedule(Hour) +comSymBat.batchSchdulUpdt.executSchdulMnt=Execution schedule(Minute) +comSymBat.batchSchdulUpdt.executSchdulSecnd=Execution schedule(Second) +comSymBat.batchSchdulUpdt.spnMonth=Month +comSymBat.batchSchdulUpdt.spnDay=Day +comSymBat.batchSchdulUpdt.spnHH=Hour +comSymBat.batchSchdulUpdt.spnMM=Minute +comSymBat.batchSchdulUpdt.spnSS=Second + + +comSymBat.batchSchdulRegist.title=Registration Of Batch Schedule +comSymBat.batchSchdulRegist.pageTop.title=Registration Of Batch Schedule +comSymBat.batchSchdulRegist.validate.executSchdulDfkSes.length=The weekday is the required input value when the execution cycle is selected as weekly. +comSymBat.batchSchdulRegist.validate.cycleMonth.executSchdulDay=When the execution cycle is monthly, the execution schedule (days) is a required input value. +comSymBat.batchSchdulRegist.validate.cycleYear.executSchdulMonth=When the execution cycle is annually, the execution schedule (month) is a required input value. +comSymBat.batchSchdulRegist.validate.cycleYear.executSchdulDay=When the execution cycle is annually, the execution schedule (days) is a mandatory input value. +comSymBat.batchSchdulRegist.validate.checkDate=The execution schedule (month / day) is not valid. +comSymBat.batchSchdulRegist.validate.executSchdulDeNm=The execution schedule (date) is a required input value when the execution cycle is only once. +comSymBat.batchSchdulRegist.validate.executSchdulDeNm.isDate=The execution schedule (date) is invalid. +comSymBat.batchSchdulRegist.batchSchdulId=Batch Schedule ID +comSymBat.batchSchdulRegist.batchOpertId=Batch Job ID +comSymBat.batchSchdulRegist.batchOpertNm=Batch Job Name +comSymBat.batchSchdulRegist.executCycleNm=Execution Cycle +comSymBat.batchSchdulRegist.executSchdulDeNm=Execution schedule(Date) +comSymBat.batchSchdulRegist.executSchdulMonth=Execution schedule(Month) +comSymBat.batchSchdulRegist.executSchdulDay=Execution schedule(Day) +comSymBat.batchSchdulRegist.executSchdulHour=Execution schedule(Hour) +comSymBat.batchSchdulRegist.executSchdulMnt=Execution schedule(Minute) +comSymBat.batchSchdulRegist.executSchdulSecnd=Execution schedule(Second) +comSymBat.batchSchdulRegist.spnMonth=Month +comSymBat.batchSchdulRegist.spnDay=Day +comSymBat.batchSchdulRegist.spnHH=Hour +comSymBat.batchSchdulRegist.spnMM=Minute +comSymBat.batchSchdulRegist.spnSS=Second + + +comSymBat.batchOpertListPopup.title=View Batch Jobs +comSymBat.batchOpertListPopup.pageTop.title=View Batch Jobs +comSymBat.batchOpertListPopup.validate.searchKeyword=Please select a search condition. +comSymBat.batchOpertListPopup.searchCondition=Search Condition +comSymBat.batchOpertListPopup.batchOpertId=Batch Job ID +comSymBat.batchOpertListPopup.batchOpertNm=Batch Job Name +comSymBat.batchOpertListPopup.batchProgrm=Batch Program +comSymBat.batchOpertListPopup.paramtr=Parameter + + + + diff --git a/src/main/resources/message/category/mng/batch/message_ko.properties b/src/main/resources/message/category/mng/batch/message_ko.properties new file mode 100644 index 00000000..4109ace8 --- /dev/null +++ b/src/main/resources/message/category/mng/batch/message_ko.properties @@ -0,0 +1,156 @@ +comSymBat.batchOpertList.title=\ubc30\uce58\uc791\uc5c5\uad00\ub9ac \ubaa9\ub85d\uc870\ud68c +comSymBat.batchOpertList.pageTop.title=\ubc30\uce58\uc791\uc5c5\uad00\ub9ac \ubaa9\ub85d +comSymBat.batchOpertList.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchOpertList.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchOpertList.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchOpertList.paramtr=\ud30c\ub77c\ubbf8\ud130 +comSymBat.batchOpertList.validate.searchKeyword=\uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud558\uc138\uc694. +comSymBat.batchOpertList.searchKeyword=\uac80\uc0c9\ud0a4\uc6cc\ub4dc + + +comSymBat.batchOpertDetail.title=\ubc30\uce58\uc791\uc5c5 \uc0c1\uc138\uc870\ud68c +comSymBat.BatchOpertDetail.pageTop.title=\ubc30\uce58\uc791\uc5c5 \uc0c1\uc138\uc870\ud68c +comSymBat.batchOpertDetail.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchOpertDetail.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchOpertDetail.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchOpertDetail.paramtr=\ud30c\ub77c\ubbf8\ud130 + + +comSymBat.batchOpertUpdt.title=\ubc30\uce58\uc791\uc5c5 \uc218\uc815 +comSymBat.batchOpertUpdt.pageTop.title=\ubc30\uce58\uc791\uc5c5 \uc218\uc815 +comSymBat.batchOpertUpdt.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchOpertUpdt.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchOpertUpdt.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchOpertUpdt.paramtr=\ud30c\ub77c\ubbf8\ud130 + + +comSymBat.batchOpertRegist.title=\ubc30\uce58\uc791\uc5c5\ub4f1\ub85d +comSymBat.batchOpertRegist.pageTop.title=\ubc30\uce58\uc791\uc5c5 \ub4f1\ub85d +comSymBat.batchOpertRegist.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchOpertRegist.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchOpertRegist.paramtr=\ud30c\ub77c\ubbf8\ud130 + + +comSymBat.batchResultList.title=\ubc30\uce58\uacb0\uacfc\uad00\ub9ac \ubaa9\ub85d\uc870\ud68c +comSymBat.batchResultList.pageTop.title=\ubc30\uce58\uacb0\uacfc \ubaa9\ub85d +comSymBat.batchResultList.searchCondition=\uac80\uc0c9\uc870\uac74\uad6c\ubd84 +comSymBat.batchResultList.sttus.value00=\uc804\uccb4 +comSymBat.batchResultList.sttus.value01=\uc815\uc0c1 +comSymBat.batchResultList.sttus.value02=\ube44\uc815\uc0c1 +comSymBat.batchResultList.sttus.value03=\uc218\ud589\uc911 +comSymBat.batchResultList.batchResultId=\ubc30\uce58\uacb0\uacfcID +comSymBat.batchResultList.batchSchdulId=\ubc30\uce58\uc2a4\ucf00\uc904ID +comSymBat.batchResultList.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchResultList.sttusNm=\uc0c1\ud0dc +comSymBat.batchResultList.executBeginTime=\uc2e4\ud589\uc2dc\uc791\uc2dc\uac01 +comSymBat.batchResultList.executEndTime=\uc2e4\ud589\uc885\ub8cc\uc2dc\uac01 +comSymBat.batchResultList.validate.searchCondition=\uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud558\uc138\uc694. +comSymBat.batchResultList.validate.inputSearchStartDate=\uac80\uc0c9\uc2dc\uc791\uc77c\uc790\ub97c \uc785\ub825\ud558\uc138\uc694. +comSymBat.batchResultList.validate.inputSearchEndDate=\uac80\uc0c9\uc885\ub8cc\uc77c\uc790\ub97c \uc785\ub825\ud558\uc138\uc694. +comSymBat.batchResultList.validate.searchStartDate=\uc870\ud68c\uc2dc\uc791\uc77c\uc790 +comSymBat.batchResultList.validate.searchEndDate=\uc870\ud68c\uc885\ub8cc\uc77c\uc790 +comSymBat.batchResultList.validate.strTmpFromDate=\ub0a0\uc9dc \ud615\uc2dd\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +comSymBat.batchResultList.validate.strTmpFromEndDate=\uc2dc\uc791\uc77c\uc790\ub294 \uc885\ub8cc\uc77c\uc790\ubcf4\ub2e4 \ud074 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +comSymBat.batchResultList.searchKeyword=\uac80\uc0c9\ud0a4\uc6cc\ub4dc +comSymBat.batchResultList.searchStartDate=\uac80\uc0c9\uc2dc\uc791\uc77c\uc790 +comSymBat.batchResultList.searchEndDate=\uac80\uc0c9\uc885\ub8cc\uc77c\uc790 + + +comSymBat.batchResultDetail.title=\ubc30\uce58\uacb0\uacfc \uc0c1\uc138\uc870\ud68c +comSymBat.batchResultDetail.pageTop.title=\ubc30\uce58\uacb0\uacfc \uc0c1\uc138\uc870\ud68c +comSymBat.batchResultDetail.batchResultId=\ubc30\uce58\uacb0\uacfcID +comSymBat.batchResultDetail.batchSchdulId=\ubc30\uce58\uc2a4\ucf00\uc904ID +comSymBat.batchResultDetail.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchResultDetail.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchResultDetail.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchResultDetail.paramtr=\ud30c\ub77c\ubbf8\ud130 +comSymBat.batchResultDetail.sttusNm=\uc0c1\ud0dc +comSymBat.batchResultDetail.errorInfo=\uc5d0\ub7ec\uc815\ubcf4 +comSymBat.batchResultDetail.executBeginTime=\uc2e4\ud589\uc2dc\uc791\uc2dc\uac01 +comSymBat.batchResultDetail.executEndTime=\uc2e4\ud589\uc885\ub8cc\uc2dc\uac01 + + +comSymBat.batchSchdulList.title=\ubc30\uce58\uc2a4\ucf00\uc904\uad00\ub9ac \ubaa9\ub85d\uc870\ud68c +comSymBat.batchSchdulList.pageTop.title=\ubc30\uce58\uc2a4\ucf00\uc904\uad00\ub9ac \ubaa9\ub85d +comSymBat.batchSchdulList.batchSchdulId=\ubc30\uce58\uc2a4\ucf00\uc904ID +comSymBat.batchSchdulList.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchSchdulList.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchSchdulList.executCycleNm=\uc2e4\ud589\uc8fc\uae30 +comSymBat.batchSchdulList.executSchdul=\uc2e4\ud589\uc2a4\ucf00\uc904 +comSymBat.batchSchdulList.searchCondition=\uac80\uc0c9\uc870\uac74\uad6c\ubd84 +comSymBat.batchSchdulList.searchKeyword=\uac80\uc0c9\ud0a4\uc6cc\ub4dc + + +comSymBat.batchSchdulDetail.title=\ubc30\uce58\uc2a4\ucf00\uc904 \uc0c1\uc138\uc870\ud68c +comSymBat.batchSchdulDetail.pageTop.title=\ubc30\uce58\uc2a4\ucf00\uc904 \uc0c1\uc138\uc870\ud68c +comSymBat.batchSchdulDetail.batchSchdulId=\ubc30\uce58\uc2a4\ucf00\uc904ID +comSymBat.batchSchdulDetail.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchSchdulDetail.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchSchdulDetail.executCycleNm=\uc2e4\ud589\uc8fc\uae30 + + +comSymBat.batchSchdulUpdt.title=\ubc30\uce58\uc2a4\ucf00\uc904 \uc218\uc815 +comSymBat.batchSchdulUpdt.pageTop.title=\ubc30\uce58\uc2a4\ucf00\uc904 \uc218\uc815 +comSymBat.batchSchdulUpdt.validate.executSchdulDfkSes.length=\uc2e4\ud589\uc8fc\uae30\ub97c \ub9e4\uc8fc\ub85c \uc120\ud0dd\ud588\uc744 \ub54c \uc694\uc77c\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.validate.cycleMonth.executSchdulDay=\uc2e4\ud589\uc8fc\uae30\uac00 \ub9e4\uc6d4\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c)\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.validate.cycleYear.executSchdulMonth=\uc2e4\ud589\uc8fc\uae30\uac00 \ub9e4\ub144\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc6d4)\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.validate.cycleYear.executSchdulDay=\uc2e4\ud589\uc8fc\uae30\uac00 \ub9e4\ub144\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c)\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.validate.checkDate=\uc2e4\ud589\uc2a4\ucf00\uc904 (\uc6d4/\uc77c)\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.validate.executSchdulDeNm=\uc2e4\ud589\uc8fc\uae30\uac00 \ud55c\ubc88\ub9cc\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c\uc790)\ub294 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.validate.executSchdulDeNm.isDate=\uc2e4\ud589\uc2a4\ucf00\uc904 (\uc77c\uc790)\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +comSymBat.batchSchdulUpdt.batchSchdulId=\ubc30\uce58\uc2a4\ucf00\uc904ID +comSymBat.batchSchdulUpdt.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchSchdulUpdt.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchSchdulUpdt.executCycleNm=\uc2e4\ud589\uc8fc\uae30 +comSymBat.batchSchdulUpdt.executSchdulDeNm=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c\uc790) +comSymBat.batchSchdulUpdt.executSchdulMonth=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc6d4) +comSymBat.batchSchdulUpdt.executSchdulDay=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c) +comSymBat.batchSchdulUpdt.executSchdulHour=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc2dc) +comSymBat.batchSchdulUpdt.executSchdulMnt=\uc2e4\ud589\uc2a4\ucf00\uc904(\ubd84) +comSymBat.batchSchdulUpdt.executSchdulSecnd=\uc2e4\ud589\uc2a4\ucf00\uc904(\ucd08) +comSymBat.batchSchdulUpdt.spnMonth=\uc6d4 +comSymBat.batchSchdulUpdt.spnDay=\uc77c +comSymBat.batchSchdulUpdt.spnHH=\uc2dc +comSymBat.batchSchdulUpdt.spnMM=\ubd84 +comSymBat.batchSchdulUpdt.spnSS=\ucd08 + + +comSymBat.batchSchdulRegist.title=\ubc30\uce58\uc2a4\ucf00\uc904 \ub4f1\ub85d +comSymBat.batchSchdulRegist.pageTop.title=\ubc30\uce58\uc2a4\ucf00\uc904 \ub4f1\ub85d +comSymBat.batchSchdulRegist.validate.executSchdulDfkSes.length=\uc2e4\ud589\uc8fc\uae30\ub97c \ub9e4\uc8fc\ub85c \uc120\ud0dd\ud588\uc744 \ub54c \uc694\uc77c\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.validate.cycleMonth.executSchdulDay=\uc2e4\ud589\uc8fc\uae30\uac00 \ub9e4\uc6d4\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c)\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.validate.cycleYear.executSchdulMonth=\uc2e4\ud589\uc8fc\uae30\uac00 \ub9e4\ub144\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc6d4)\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.validate.cycleYear.executSchdulDay=\uc2e4\ud589\uc8fc\uae30\uac00 \ub9e4\ub144\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c)\uc740 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.validate.checkDate=\uc2e4\ud589\uc2a4\ucf00\uc904 (\uc6d4/\uc77c)\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.validate.executSchdulDeNm=\uc2e4\ud589\uc8fc\uae30\uac00 \ud55c\ubc88\ub9cc\uc77c\ub54c \uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c\uc790)\ub294 \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.validate.executSchdulDeNm.isDate=\uc2e4\ud589\uc2a4\ucf00\uc904 (\uc77c\uc790)\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +comSymBat.batchSchdulRegist.batchSchdulId=\ubc30\uce58\uc2a4\ucf00\uc904ID +comSymBat.batchSchdulRegist.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchSchdulRegist.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchSchdulRegist.executCycleNm=\uc2e4\ud589\uc8fc\uae30 +comSymBat.batchSchdulRegist.executSchdulDeNm=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c\uc790) +comSymBat.batchSchdulRegist.executSchdulMonth=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc6d4) +comSymBat.batchSchdulRegist.executSchdulDay=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc77c) +comSymBat.batchSchdulRegist.executSchdulHour=\uc2e4\ud589\uc2a4\ucf00\uc904(\uc2dc) +comSymBat.batchSchdulRegist.executSchdulMnt=\uc2e4\ud589\uc2a4\ucf00\uc904(\ubd84) +comSymBat.batchSchdulRegist.executSchdulSecnd=\uc2e4\ud589\uc2a4\ucf00\uc904(\ucd08) +comSymBat.batchSchdulRegist.spnMonth=\uc6d4 +comSymBat.batchSchdulRegist.spnDay=\uc77c +comSymBat.batchSchdulRegist.spnHH=\uc2dc +comSymBat.batchSchdulRegist.spnMM=\ubd84 +comSymBat.batchSchdulRegist.spnSS=\ucd08 + + +comSymBat.batchOpertListPopup.title=\ubc30\uce58\uc791\uc5c5 \uc870\ud68c +comSymBat.batchOpertListPopup.pageTop.title=\ubc30\uce58\uc791\uc5c5 \uc870\ud68c +comSymBat.batchOpertListPopup.validate.searchKeyword=\uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud558\uc138\uc694. +comSymBat.batchOpertListPopup.searchCondition=\uac80\uc0c9\uc870\uac74\uad6c\ubd84 +comSymBat.batchOpertListPopup.batchOpertId=\ubc30\uce58\uc791\uc5c5ID +comSymBat.batchOpertListPopup.batchOpertNm=\ubc30\uce58\uc791\uc5c5\uba85 +comSymBat.batchOpertListPopup.batchProgrm=\ubc30\uce58\ud504\ub85c\uadf8\ub7a8 +comSymBat.batchOpertListPopup.paramtr=\ud30c\ub77c\ubbf8\ud130 + + + + + diff --git a/src/main/resources/message/category/mng/user/reg/message_en.properties b/src/main/resources/message/category/mng/user/reg/message_en.properties new file mode 100644 index 00000000..f18eaca3 --- /dev/null +++ b/src/main/resources/message/category/mng/user/reg/message_en.properties @@ -0,0 +1,148 @@ +#Login Provision Management# +comUssUmt.stplatCnfirmt.title=Provision Confirmation +comUssUmt.stplatCnfirmt.useStplatCn=Provision Contents +comUssUmt.stplatCnfirmt.infoProvdAgreCn=Informational Contents Agreement Contents + +comUssUmt.stplatCnfirmtMsg.useStplat=Agree to the Terms and Conditions of the content. +comUssUmt.stplatCnfirmtMsg.infoProvdAgre=Agree with the use of information. + +comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt=You can not sign up if you don't agree to the Provision Contents. + +comUssUmt.common.lockAt=Login authorization limit status +comUssUmt.common.lockAtBtn=Release limits for login authentication +comUssUmt.common.lockAtConfirm=Are you sure you want to disable the login limit? + +#department Management# +comUssUmt.deptManage.title=Department Management + +comUssUmt.deptManageList.deptId=Department ID +comUssUmt.deptManageList.deptName=Department Name +comUssUmt.deptManageList.deptDc=Description +comUssUmt.deptManageSearchCondition.searchKeywordText=Department Name + +comUssUmt.deptManageRegist.deptId=Department ID +comUssUmt.deptManageRegist.deptName=Department Name +comUssUmt.deptManageRegist.deptDc=Description + +#Member Management# +comUssUmt.userManage.title=Member Management + +comUssUmt.userManageSsearch.sbscrbSttusTitle=Selection to the Condition of Registration Status +comUssUmt.userManageSsearch.sbscrbSttusAll=Status(All) +comUssUmt.userManageSsearch.sbscrbSttusA=Sign Up +comUssUmt.userManageSsearch.sbscrbSttusD=Delete +comUssUmt.userManageSsearch.sbscrbSttusP=Approval +comUssUmt.userManageSsearch.searchConditioTitle=Select Condition of Inquiry +comUssUmt.userManageSsearch.searchConditionId=ID +comUssUmt.userManageSsearch.searchConditionName=Name + +comUssUmt.userManageList.id=ID +comUssUmt.userManageList.name=User Name +comUssUmt.userManageList.email=User Email +comUssUmt.userManageList.phone=Phone Number +comUssUmt.userManageList.sbscrbSttus=Registration Status + +comUssUmt.userManageRegist.id=User ID +comUssUmt.userManageRegist.name=Member User Name +comUssUmt.userManageRegist.pass=Password +comUssUmt.userManageRegist.passConfirm=Password Confirmation +comUssUmt.userManageRegist.passHit=Password Hint +comUssUmt.userManageRegist.passOk=Password Answer +comUssUmt.userManageRegist.saxTypeCode=Gender Identification Code +comUssUmt.userManageRegist.tel=Phone Number +comUssUmt.userManageRegist.fax=Fax Number +comUssUmt.userManageRegist.phone=Mobile Phone Number +comUssUmt.userManageRegist.email=Email +comUssUmt.userManageRegist.post=Postal Code +comUssUmt.userManageRegist.addr=Address +comUssUmt.userManageRegist.addrDetail=Detail Address +comUssUmt.userManageRegist.groupId=Group ID +comUssUmt.userManageRegist.status=User Status Code +comUssUmt.userManageRegistBtn.idSearch=Search Duplicate ID + +comUssUmt.userManageRegistModal.title=Confirm Duplicate ID +comUssUmt.userManageRegistModal.userIsId=Usable Id +comUssUmt.userManageRegistModal.initStatus=Result : Check for Duplicate ID. + +comUssUmt.userManageRegistModal.result=Result +comUssUmt.userManageRegistModal.useMsg=This ID can not be used. +comUssUmt.userManageRegistModal.notUseMsg=This ID is available. +comUssUmt.userManageRegistModal.noIdMsg=This ID can not be created. + +comUssUmt.userManageModifyBtn.passwordChange=Password Change + +comUssUmt.userManagePasswordUpdt.title=Password Change +comUssUmt.userManagePasswordUpdt.id=User ID +comUssUmt.userManagePasswordUpdt.oldPass=Current Password +comUssUmt.userManagePasswordUpdt.pass=Password +comUssUmt.userManagePasswordUpdt.passConfirm=Password Confirmation + + +#User Management# +comUssUmt.deptUserManage.title=User Management + +comUssUmt.deptUserManageRegist.id=User ID +comUssUmt.deptUserManageRegist.name=User Name +comUssUmt.deptUserManageRegist.pass=Password +comUssUmt.deptUserManageRegist.passConfirm=Password Confirmation +comUssUmt.deptUserManageRegist.passHit=Password Hint +comUssUmt.deptUserManageRegist.passOk=Password Answer +comUssUmt.deptUserManageRegist.saxTypeCode=Gender Identification Code +comUssUmt.deptUserManageRegist.tel=Phone Number +comUssUmt.deptUserManageRegist.fax=Fax Number +comUssUmt.deptUserManageRegist.phone=Mobile Phone Number +comUssUmt.deptUserManageRegist.email=Email +comUssUmt.deptUserManageRegist.post=Postal Code +comUssUmt.deptUserManageRegist.addr=Address +comUssUmt.deptUserManageRegist.addrDetail=Detail Address +comUssUmt.deptUserManageRegist.groupId=Group ID +comUssUmt.deptUserManageRegist.status=User Status Code +comUssUmt.deptUserManageRegistBtn.idSearch=Search Duplicate ID +comUssUmt.deptUserManageRegist.subDn=User DN + +comUssUmt.deptUserManageRegist.insttCode=Organization Code +comUssUmt.deptUserManageRegist.orgnztId=Organization ID +comUssUmt.deptUserManageRegist.ofcps=Position +comUssUmt.deptUserManageRegist.emplNum=Employee Number +comUssUmt.deptUserManageRegist.brth=Birthday +comUssUmt.deptUserManageRegist.areaNo=Home Phone Number +comUssUmt.deptUserManageRegist.offmTelno=Office Phone Number +comUssUmt.deptUserManageRegist.fxNum=Fax Number +comUssUmt.deptUserManageRegist.emailAdres=Email +comUssUmt.deptUserManageRegistBtn.Search=Search + +#Corporate Member Management# +comUssUmt.entrprsUserManage.title=Corporate Member Management +comUssUmt.entrprsUserManageList.id=Corporate Member ID +comUssUmt.entrprsUserManageList.company=Corporate Name +comUssUmt.entrprsUserManageList.name=User Name +comUssUmt.entrprsUserManageList.regName=Registration Name +comUssUmt.entrprsUserManageList.regMail=Registration Email +comUssUmt.entrprsUserManageList.email=Email +comUssUmt.entrprsUserManageList.phone=Phone Number +comUssUmt.entrprsUserManageList.sbscrbSttus=Registration Status + +comUssUmt.entrprsUserManageRegist.id=Corporate Member ID +comUssUmt.entrprsUserManageRegist.name=Corporate Name +comUssUmt.entrprsUserManageRegist.pass=Password +comUssUmt.entrprsUserManageRegist.passConfirm=Password Confirmation +comUssUmt.entrprsUserManageRegist.passHit=Password Hint +comUssUmt.entrprsUserManageRegist.passOk=Password Answer +comUssUmt.entrprsUserManageRegist.tel=Corprate Phone Number +comUssUmt.entrprsUserManageRegist.fax=Fax Number +comUssUmt.entrprsUserManageRegist.post=Postal Code +comUssUmt.entrprsUserManageRegist.addr=Address +comUssUmt.entrprsUserManageRegist.addrDetail=Detail Address +comUssUmt.entrprsUserManageRegist.groupId=Group ID +comUssUmt.entrprsUserManageRegist.status=Corporate Member Status Code +comUssUmt.entrprsUserManageRegist.subDn=Corporate Member DN + +comUssUmt.entrprsUserManageRegist.indutyCode=Business Field +comUssUmt.entrprsUserManageRegist.entrprsSeCode=Corporate Category +comUssUmt.entrprsUserManageRegist.cxfc=CEO Name +comUssUmt.entrprsUserManageRegist.bizrno=Business Registration Number +comUssUmt.entrprsUserManageRegist.jurirno=Corporate Registration Number + +comUssUmt.entrprsUserManageRegistBtn.idSearch=Search Duplicate ID +comUssUmt.entrprsUserManageRegistBtn.Search=Search + diff --git a/src/main/resources/message/category/mng/user/reg/message_ko.properties b/src/main/resources/message/category/mng/user/reg/message_ko.properties new file mode 100644 index 00000000..96881bea --- /dev/null +++ b/src/main/resources/message/category/mng/user/reg/message_ko.properties @@ -0,0 +1,150 @@ +#\ub85c\uadf8\uc778 \uc57d\uad00\uad00\ub9ac# +comUssUmt.stplatCnfirmt.title=\uc57d\uad00\ud655\uc778 +comUssUmt.stplatCnfirmt.useStplatCn=\uc57d\uad00\ub0b4\uc6a9 +comUssUmt.stplatCnfirmt.infoProvdAgreCn=\uc815\ubcf4\ub3d9\uc758\ub0b4\uc6a9 + +comUssUmt.stplatCnfirmtMsg.useStplat=\uc57d\uad00\ub0b4\uc6a9\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4. +comUssUmt.stplatCnfirmtMsg.infoProvdAgre=\uc815\ubcf4\uc774\uc6a9\ub0b4\uc6a9\uc5d0 \ub3d9\uc758\ud569\ub2c8\ub2e4. + +comUssUmt.stplatCnfirmtValidate.disagreeStplatCnfirmt=\uc57d\uad00\uc5d0 \ub3d9\uc758\ud558\uc9c0 \uc54a\uc73c\uba74 \ud68c\uc6d0\uc73c\ub85c \uac00\uc785\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. + +comUssUmt.common.lockAt=\ub85c\uadf8\uc778\uc778\uc99d\uc81c\ud55c\uc5ec\ubd80 +comUssUmt.common.lockAtBtn=\ub85c\uadf8\uc778\uc778\uc99d\uc81c\ud55c\ud574\uc81c +comUssUmt.common.lockAtConfirm=\ub85c\uadf8\uc778\uc778\uc99d\uc81c\ud55c\uc744 \ud574\uc81c \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? + +#\ubd80\uc11c\uad00\ub9ac# +comUssUmt.deptManage.title=\ubd80\uc11c\uad00\ub9ac + +comUssUmt.deptManageList.deptId=\ubd80\uc11c ID +comUssUmt.deptManageList.deptName=\ubd80\uc11c \uba85 +comUssUmt.deptManageList.deptDc=\uc124\uba85 +comUssUmt.deptManageSearchCondition.searchKeywordText=\ubd80\uc11c\uba85 + +comUssUmt.deptManageRegist.deptId=\ubd80\uc11c ID +comUssUmt.deptManageRegist.deptName=\ubd80\uc11c \uba85 +comUssUmt.deptManageRegist.deptDc=\uc124\uba85 + +#\uc0ac\uc6a9\uc790\uad00\ub9ac# +comUssUmt.userManage.title=\uc77c\ubc18\ud68c\uc6d0\uad00\ub9ac + +comUssUmt.userManageSsearch.sbscrbSttusTitle=\uac00\uc785\uc0c1\ud0dc\uc870\uac74 \uc120\ud0dd +comUssUmt.userManageSsearch.sbscrbSttusAll=\uc0c1\ud0dc(\uc804\uccb4) +comUssUmt.userManageSsearch.sbscrbSttusA=\uac00\uc785\uc2e0\uccad +comUssUmt.userManageSsearch.sbscrbSttusD=\uc0ad\uc81c +comUssUmt.userManageSsearch.sbscrbSttusP=\uc2b9\uc778 +comUssUmt.userManageSsearch.searchConditioTitle=\uc870\ud68c\uc870\uac74 \uc120\ud0dd +comUssUmt.userManageSsearch.searchConditionId=ID +comUssUmt.userManageSsearch.searchConditionName=\uc774\ub984 + +comUssUmt.userManageList.id=\uc544\uc774\ub514 +comUssUmt.userManageList.name=\uc0ac\uc6a9\uc790\uc774\ub984 +comUssUmt.userManageList.email=\uc0ac\uc6a9\uc790\uc774\uba54\uc77c +comUssUmt.userManageList.phone=\uc804\ud654\ubc88\ud638 +comUssUmt.userManageList.sbscrbSttus=\uac00\uc785\uc0c1\ud0dc + +comUssUmt.userManageRegist.id=\uc77c\ubc18\ud68c\uc6d0\uc544\uc774\ub514 +comUssUmt.userManageRegist.name=\uc77c\ubc18\ud68c\uc6d0\uc774\ub984 +comUssUmt.userManageRegist.pass=\ube44\ubc00\ubc88\ud638 +comUssUmt.userManageRegist.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778 +comUssUmt.userManageRegist.passHit=\ube44\ubc00\ubc88\ud638\ud78c\ud2b8 +comUssUmt.userManageRegist.passOk=\ube44\ubc00\ubc88\ud638\uc815\ub2f5 +comUssUmt.userManageRegist.saxTypeCode=\uc131\ubcc4\uad6c\ubd84\ucf54\ub4dc +comUssUmt.userManageRegist.tel=\uc804\ud654\ubc88\ud638 +comUssUmt.userManageRegist.fax=\ud329\uc2a4\ubc88\ud638 +comUssUmt.userManageRegist.phone=\ud578\ub4dc\ud3f0\ubc88\ud638 +comUssUmt.userManageRegist.email=\uc774\uba54\uc77c\uc8fc\uc18c +comUssUmt.userManageRegist.post=\uc6b0\ud3b8\ubc88\ud638 +comUssUmt.userManageRegist.addr=\uc8fc\uc18c +comUssUmt.userManageRegist.addrDetail=\uc0c1\uc138\uc8fc\uc18c +comUssUmt.userManageRegist.groupId=\uadf8\ub8f9\uc544\uc774\ub514 +comUssUmt.userManageRegist.status=\uc77c\ubc18\ud68c\uc6d0\uc0c1\ud0dc\ucf54\ub4dc +comUssUmt.userManageRegistBtn.idSearch=\uc911\ubcf5\uc544\uc774\ub514 \uac80\uc0c9 + +comUssUmt.userManageRegistModal.title=\uc544\uc774\ub514 \uc911\ubcf5 \ud655\uc778 +comUssUmt.userManageRegistModal.userIsId=\uc0ac\uc6a9\ud560\uc544\uc774\ub514 +comUssUmt.userManageRegistModal.initStatus=\uacb0\uacfc : \uc911\ubcf5\ud655\uc778\uc744 \uc2e4\ud589\ud558\uc2ed\uc2dc\uc624. + +comUssUmt.userManageRegistModal.result=\uacb0\uacfc +comUssUmt.userManageRegistModal.useMsg=\ub294 \uc0ac\uc6a9\ud560\uc218 \uc5c6\ub294 \uc544\uc774\ub514\uc785\ub2c8\ub2e4. +comUssUmt.userManageRegistModal.notUseMsg=\ub294 \uc0ac\uc6a9\uac00\ub2a5\ud55c \uc544\uc774\ub514\uc785\ub2c8\ub2e4. +comUssUmt.userManageRegistModal.noIdMsg=\uc0ac\uc6a9\uc774 \ubd88\uac00\ub2a5\ud55c \uc544\uc774\ub514 \uc785\ub2c8\ub2e4 + +comUssUmt.userManageModifyBtn.passwordChange=\ube44\ubc00\ubc88\ud638\ubcc0\uacbd + +comUssUmt.userManagePasswordUpdt.title=\ube44\ubc00\ubc88\ud638\ubcc0\uacbd +comUssUmt.userManagePasswordUpdt.id=\uc77c\ubc18\ud68c\uc6d0\uc544\uc774\ub514 +comUssUmt.userManagePasswordUpdt.oldPass=\uae30\uc874 \ube44\ubc00\ubc88\ud638 +comUssUmt.userManagePasswordUpdt.pass=\ube44\ubc00\ubc88\ud638 +comUssUmt.userManagePasswordUpdt.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778 + + +#\uc5c5\ubb34\ud68c\uc6d0\uad00\ub9ac# +comUssUmt.deptUserManage.title=\uc5c5\ubb34\uc0ac\uc6a9\uc790\uad00\ub9ac + +comUssUmt.deptUserManageRegist.id=\uc77c\ubc18\ud68c\uc6d0\uc544\uc774\ub514 +comUssUmt.deptUserManageRegist.name=\uc77c\ubc18\ud68c\uc6d0\uc774\ub984 +comUssUmt.deptUserManageRegist.pass=\ube44\ubc00\ubc88\ud638 +comUssUmt.deptUserManageRegist.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778 +comUssUmt.deptUserManageRegist.passHit=\ube44\ubc00\ubc88\ud638\ud78c\ud2b8 +comUssUmt.deptUserManageRegist.passOk=\ube44\ubc00\ubc88\ud638\uc815\ub2f5 +comUssUmt.deptUserManageRegist.saxTypeCode=\uc131\ubcc4\uad6c\ubd84\ucf54\ub4dc +comUssUmt.deptUserManageRegist.tel=\uc804\ud654\ubc88\ud638 +comUssUmt.deptUserManageRegist.fax=\ud329\uc2a4\ubc88\ud638 +comUssUmt.deptUserManageRegist.phone=\ud578\ub4dc\ud3f0\ubc88\ud638 +comUssUmt.deptUserManageRegist.email=\uc774\uba54\uc77c\uc8fc\uc18c +comUssUmt.deptUserManageRegist.post=\uc6b0\ud3b8\ubc88\ud638 +comUssUmt.deptUserManageRegist.addr=\uc8fc\uc18c +comUssUmt.deptUserManageRegist.addrDetail=\uc0c1\uc138\uc8fc\uc18c +comUssUmt.deptUserManageRegist.groupId=\uadf8\ub8f9\uc544\uc774\ub514 +comUssUmt.deptUserManageRegist.status=\uc77c\ubc18\ud68c\uc6d0\uc0c1\ud0dc\ucf54\ub4dc +comUssUmt.deptUserManageRegistBtn.idSearch=\uc911\ubcf5\uc544\uc774\ub514 \uac80\uc0c9 +comUssUmt.deptUserManageRegist.subDn=\uc0ac\uc6a9\uc790DN + +comUssUmt.deptUserManageRegist.insttCode=\uc18c\uc18d\uae30\uad00\ucf54\ub4dc +comUssUmt.deptUserManageRegist.orgnztId=\uc870\uc9c1\uc544\uc774\ub514 +comUssUmt.deptUserManageRegist.ofcps=\uc9c1\uc704 +comUssUmt.deptUserManageRegist.emplNum=\uc0ac\ubc88 +comUssUmt.deptUserManageRegist.brth=\uc0dd\uc77c +comUssUmt.deptUserManageRegist.areaNo=\uc9d1\uc804\ud654\ubc88\ud638 +comUssUmt.deptUserManageRegist.offmTelno=\uc0ac\ubb34\uc2e4\uc804\ud654\ubc88\ud638 +comUssUmt.deptUserManageRegist.fxNum=\ud329\uc2a4\ubc88\ud638 +comUssUmt.deptUserManageRegist.emailAdres=\uc774\uba54\uc77c\uc8fc\uc18c +comUssUmt.deptUserManageRegistBtn.Search=\uac80\uc0c9 + +#\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac# +comUssUmt.entrprsUserManage.title=\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac +comUssUmt.entrprsUserManageList.id=\uae30\uc5c5\ud68c\uc6d0\uc544\uc774\ub514 +comUssUmt.entrprsUserManageList.company=\ud68c\uc0ac\uba85 +comUssUmt.entrprsUserManageList.name=\uc0ac\uc6a9\uc790\uc774\ub984 +comUssUmt.entrprsUserManageList.regName=\uc2e0\uccad\uc790\uba85 +comUssUmt.entrprsUserManageList.regMail=\uc2e0\uccad\uc790\uc774\uba54\uc77c +comUssUmt.entrprsUserManageList.email=\uc774\uba54\uc77c +comUssUmt.entrprsUserManageList.phone=\uc804\ud654\ubc88\ud638 +comUssUmt.entrprsUserManageList.sbscrbSttus=\uac00\uc785\uc0c1\ud0dc + +comUssUmt.entrprsUserManageRegist.id=\uae30\uc5c5\ud68c\uc6d0\uc544\uc774\ub514 +comUssUmt.entrprsUserManageRegist.name=\ud68c\uc0ac\uba85 +comUssUmt.entrprsUserManageRegist.pass=\ube44\ubc00\ubc88\ud638 +comUssUmt.entrprsUserManageRegist.passConfirm=\ube44\ubc00\ubc88\ud638\ud655\uc778 +comUssUmt.entrprsUserManageRegist.passHit=\ube44\ubc00\ubc88\ud638\ud78c\ud2b8 +comUssUmt.entrprsUserManageRegist.passOk=\ube44\ubc00\ubc88\ud638\uc815\ub2f5 +comUssUmt.entrprsUserManageRegist.tel=\ud68c\uc0ac\uc804\ud654\ubc88\ud638 +comUssUmt.entrprsUserManageRegist.fax=\ud329\uc2a4\ubc88\ud638 +comUssUmt.entrprsUserManageRegist.post=\uc6b0\ud3b8\ubc88\ud638 +comUssUmt.entrprsUserManageRegist.addr=\uc8fc\uc18c +comUssUmt.entrprsUserManageRegist.addrDetail=\uc0c1\uc138\uc8fc\uc18c +comUssUmt.entrprsUserManageRegist.groupId=\uadf8\ub8f9\uc544\uc774\ub514 +comUssUmt.entrprsUserManageRegist.status=\uae30\uc5c5\ud68c\uc6d0\uc0c1\ud0dc\ucf54\ub4dc +comUssUmt.entrprsUserManageRegist.subDn=\uc0ac\uc6a9\uc790DN + +comUssUmt.entrprsUserManageRegist.indutyCode=\uc5c5\uc885 +comUssUmt.entrprsUserManageRegist.entrprsSeCode=\uae30\uc5c5\uad6c\ubd84 +comUssUmt.entrprsUserManageRegist.cxfc=\ub300\ud45c\uc774\uc0ac\uc774\ub984 +comUssUmt.entrprsUserManageRegist.bizrno=\uc0ac\uc5c5\uc790\ub4f1\ub85d\ubc88\ud638 +comUssUmt.entrprsUserManageRegist.jurirno=\ubc95\uc778\ub4f1\ub85d\ubc88\ud638 + +comUssUmt.entrprsUserManageRegistBtn.idSearch=\uc911\ubcf5\uc544\uc774\ub514 \uac80\uc0c9 +comUssUmt.entrprsUserManageRegistBtn.Search=\uac80\uc0c9 + + + diff --git a/src/main/resources/message/com/message-common.properties b/src/main/resources/message/com/message-common.properties new file mode 100644 index 00000000..be0b9305 --- /dev/null +++ b/src/main/resources/message/com/message-common.properties @@ -0,0 +1,375 @@ +fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! +fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1} +info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. + +#UI Common resource# +table.num=\ubc88\ud638 +table.regdate=\ub4f1\ub85d\uc77c +table.reger=\ub4f1\ub85d\uc790 +table.select=\uc120\ud0dd +title.html=egovframe common component +title.detail=\uc0c1\uc138\uc870\ud68c +title.inquire=\uc870\ud68c +title.update=\uc218\uc815 +title.create=\ub4f1\ub85d +title.delete=\uc0ad\uc81c +title.save=\uc800\uc7a5 +title.list=\ubaa9\ub85d +title.searchCondition=\uac80\uc0c9\uc870\uac74 +title.search=\uac80\uc0c9\uc5b4 +title.reply=\ub2f5\uae00 +title.scrap=\uc2a4\ud06c\ub7a9 +title.comment=\ub313\uae00 +title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd +title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c +title.link=\ub9c1\ud06c +title.management=\uad00\ub9ac +title.all=\uc804\uccb4 + +input.select=\uc120\ud0dd\ud558\uc138\uc694 +input.cSelect=\uc120\ud0dd +input.input=\uc785\ub825 +input.button=\ubc84\ud2bc +input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4 +input.yes=\uc608 +input.no=\uc544\ub2c8\uc624 + +select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd + +button.select=\uc120\ud0dd +button.search=\uac80\uc0c9 +button.use=\uc0ac\uc6a9 +button.notUsed=\uc0ac\uc6a9\uc911\uc9c0 +button.inquire=\uc870\ud68c +button.update=\uc218\uc815 +button.create=\ub4f1\ub85d +button.delete=\uc0ad\uc81c +button.deleteDatabase=\uc644\uc804\uc0ad\uc81c +button.close=\ub2eb\uae30 +button.save=\uc800\uc7a5 +button.list=\ubaa9\ub85d +button.reset=\ucde8\uc18c +button.passwordUpdate=\uc554\ud638\ubcc0\uacbd +button.subscribe=\uac00\uc785\uc2e0\uccad +button.realname=\uc2e4\uba85\ud655\uc778 +button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9 +button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9 +button.agree=\ub3d9\uc758 +button.disagree=\ube44\ub3d9\uc758 +button.possible=\uac00\ub2a5 +button.impossible=\ubd88\uac00\ub2a5 +button.qnaregist=Q&A\ub4f1\ub85d +button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d +button.preview=\ubbf8\ub9ac\ubcf4\uae30 +button.next=\ub2e4\uc74c +button.add=\ubc14\ub85c\ucd94\uac00 +button.confirm=\ud655\uc778 +button.back = \ub4a4\ub85c +button.yes = \uc608 +button.no = \uc544\ub2c8\uc624 +button.home = \ud648 +button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0 +button.cop = \ud611\uc5c5 +button.wrkstart = \ucd9c\uadfc +button.wrkend = \ud1f4\uadfc +button.reply = \ub2f5\uae00 +button.scrap = \uc2a4\ud06c\ub7a9 +button.comment = \ub313\uae00 +button.excel = \uc5d1\uc140 +button.init=\ucd08\uae30\ud654 +button.acknowledgment=\uc2b9\uc778 +button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c +button.bulkUpload=\uc77c\uad04\ub4f1\ub85d +button.log = \ub85c\uadf8 +button.set = \uc124\uc815 +button.move = \uc774\ub3d9 + + +#UI Common Message# +common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. + +common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. +common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4. +common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4. +common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. + +common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694 +common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4. +common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. + +success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4. +common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4. + +fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4! +fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558) +fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#UI User Message# +fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624. +success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4. +fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328) +info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624. +success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4. +fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + + +#UI Cop Message# +cop.extrlUser = \uc678\ubd80\uc0ac\uc6a9\uc790 +cop.intrlUser = \ub0b4\ubd80\uc0ac\uc6a9\uc790 +cop.private = \ube44\uacf5\uac1c +cop.public = \uacf5\uac1c + +cop.adbkNm = \uc8fc\uc18c\ub85d\uba85 +cop.othbcScope = \uacf5\uac1c\ubc94\uc704 +cop.company = \ud68c\uc0ac +cop.part = \ubd80\uc11c +cop.man = \uac1c\uc778 +cop.adbkUser = \uad6c\uc131\uc6d0 +cop.bbsNm = \uac8c\uc2dc\ud310\uba85 +cop.bbsIntrcn = \uac8c\uc2dc\ud310\uc18c\uac1c +cop.bbsTyCode = \uac8c\uc2dc\ud310 \uc720\ud615 +cop.bbsAttrbCode = \uac8c\uc2dc\ud310 \uc18d\uc131 +cop.replyPosblAt = \ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80 +cop.fileAtchPosblAt = \ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80 +cop.posblAtchFileNumber = \ucca8\ubd80\uac00\ub2a5\ud30c\uc77c \uc22b\uc790 +cop.tmplatId = \ud15c\ud50c\ub9bf \uc815\ubcf4 +cop.guestList.subject = \ubc29\uba85\ub85d \uac8c\uc2dc\uae00\uc785\ub2c8\ub2e4. +cop.nttSj = \uc81c\ubaa9 +cop.nttCn = \uae00\ub0b4\uc6a9 +cop.ntceBgnde = \uac8c\uc2dc\uc2dc\uc791\uc77c +cop.ntceEndde = \uac8c\uc2dc\uc885\ub8cc\uc77c +cop.ntcrNm = \uc791\uc131\uc790 +cop.password = \ud328\uc2a4\uc6cc\ub4dc +cop.atchFile = \ud30c\uc77c\ucca8\ubd80 +cop.guestList = \ubc29\uba85\ub85d +cop.guestListCn = \ubc29\uba85\ub85d \ub0b4\uc6a9 +cop.noticeTerm = \uac8c\uc2dc\uae30\uac04 +cop.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d +cop.cmmntyNm = \ucee4\ubba4\ub2c8\ud2f0\uba85 +cop.cmmntyIntrcn = \ucee4\ubba4\ub2c8\ud2f0 \uc18c\uac1c +cop.cmmntyMngr = \ucee4\ubba4\ub2c8\ud2f0 \uad00\ub9ac\uc790 +cop.clbOprtr = \ub3d9\ud638\ud68c \uc6b4\uc601\uc790 +cop.clbIntrcn = \ub3d9\ud638\ud68c \uc18c\uac1c +cop.clbNm = \ub3d9\ud638\ud68c \uba85 +cop.tmplatNm = \ud15c\ud50c\ub9bf\uba85 +cop.tmplatSeCode = \ud15c\ud50c\ub9bf \uad6c\ubd84 +cop.tmplatCours = \ud15c\ud50c\ub9bf\uacbd\ub85c +cop.useAt = \uc0ac\uc6a9\uc5ec\ubd80 +cop.ncrdNm = \uc774\ub984 +cop.cmpnyNm = \ud68c\uc0ac\uba85 +cop.deptNm = \ubd80\uc11c\uba85 +cop.ofcpsNm = \uc9c1\uc704 +cop.clsfNm = \uc9c1\uae09 +cop.emailAdres = \uc774\uba54\uc77c\uc8fc\uc18c +cop.telNo = \uc804\ud654\ubc88\ud638 +cop.mbtlNum = \ud734\ub300\ud3f0\ubc88\ud638 +cop.adres = \uc8fc\uc18c +cop.extrlUserAt = \uc678\ubd80\uc0ac\uc6a9\uc790\uc5ec\ubd80 +cop.publicAt = \uacf5\uac1c\uc5ec\ubd80 +cop.remark = \ube44\uace0 +cop.trgetNm = \ucee4\ubba4\ub2c8\ud2f0/\ub3d9\ud638\ud68c \uc815\ubcf4 +cop.preview = \ubbf8\ub9ac\ubcf4\uae30 + +cop.withdraw.msg=\ud0c8\ud1f4\ucc98\ub9ac \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.reregist.msg=\uc7ac\uac00\uc785 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.registmanager.msg=\uc6b4\uc601\uc9c4\uc73c\ub85c \ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.use.msg=\uc0ac\uc6a9 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.unuse.msg=\uc0ac\uc6a9\uc911\uc9c0 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.delete.confirm.msg=\uc0ac\uc6a9\uc911\uc9c0\ub97c \uc120\ud0dd\ud558\uc2e4 \uacbd\uc6b0 \ub2e4\uc2dc \uc0ac\uc6a9\uc73c\ub85c \ubcc0\uacbd\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. +cop.ing.msg=\uc2b9\uc778\uc694\uccad \uc911\uc785\ub2c8\ub2e4. +cop.request.msg=\uac00\uc785\uc2e0\uccad\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc694\uccad\ub418\uc5c8\uc2b5\ub2c8\ub2e4 +cop.password.msg=\ud328\uc2a4\uc6cc\ub4dc\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624. +cop.password.not.same.msg=\ud328\uc2a4\uc6cc\ub4dc\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + +cop.comment.wrterNm = \uc791\uc131\uc790 +cop.comment.commentCn = \ub0b4\uc6a9 +cop.comment.commentPassword = \ud328\uc2a4\uc6cc\ub4dc + +cop.satisfaction.wrterNm = \uc791\uc131\uc790 +cop.satisfaction.stsfdgCn = \ub0b4\uc6a9 +cop.satisfaction.stsfdg = \ub9cc\uc871\ub3c4 +cop.satisfaction.stsfdgPassword = \ud328\uc2a4\uc6cc\ub4dc + +cop.scrap.scrapNm = \uc2a4\ud06c\ub7a9\uba85 + +#UI USS Message# +uss.ion.noi.ntfcSj=\uc81c\ubaa9 +uss.ion.noi.ntfcCn=\ub0b4\uc6a9 +uss.ion.noi.ntfcDate=\uc54c\ub9bc\uc77c\uc790 +uss.ion.noi.ntfcTime=\uc54c\ub9bc\uc2dc\uac04 +uss.ion.noi.ntfcHH=\uc54c\ub9bc\uc2dc\uac04 +uss.ion.noi.ntfcMM=\uc54c\ub9bc\ubd84 +uss.ion.noi.bhNtfcIntrvl=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 +uss.ion.noi.bhNtfcIntrvl.msg=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. +uss.ion.noi.alertNtfcTime=\uc54c\ub9bc\uc77c\uc790 \ubc0f \uc2dc\uac04\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + +#UI COP Message# +cop.sms.trnsmitTelno=\ubc1c\uc2e0\uc804\ud654\ubc88\ud638 +cop.sms.trnsmitCn=\uc804\uc1a1\ub0b4\uc6a9 +cop.sms.recptnTelno=\uc218\uc2e0\uc804\ud654\ubc88\ud638 +cop.sms.send=\uc804\uc1a1 +cop.sms.addRecptn=\ucd94\uac00 +cop.sms.recptnTelno.msg=\uc218\uc2e0\uc804\ud654\ubc88\ud638 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. + +#UI sym.log Message# +sym.log.histSeCode = \uc774\ub825\uad6c\ubd84 +sym.log.sysNm = \uc2dc\uc2a4\ud15c\uba85 +sym.log.histCn = \uc774\ub825\ub0b4\uc6a9 +sym.log.atchFile = \ucca8\ubd80\ud30c\uc77c +sym.log.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d +sym.ems.receiver = \ubc1b\ub294\uc0ac\ub78c +sym.ems.title = \uc81c\ubaa9 +sym.ems.content = \ubc1c\uc2e0\ub0b4\uc6a9 + +#Vlidator Errors# +errors.prefix=
+errors.suffix=

+ +errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4. +errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.integer={0}\uc740(\ub294) \uc815\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.float={0}\uc740(\ub294) \uc2e4\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. + +errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4. +errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4. + +errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4. +errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4. +errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4. + +errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. + +errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +error.security.runtime.error = error + +#Xss Errors# +errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. + +#File Upload / Download +errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. +success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#Vlidator Errors- wordDicaryVO# +wordDicaryVO.wordNm=\uc6a9\uc5b4\uba85 +wordDicaryVO.engNm=\uc601\ubb38\uba85 +wordDicaryVO.wordDc=\uc6a9\uc5b4\uc124\uba85 +wordDicaryVO.synonm=\ub3d9\uc758\uc5b4 + +#Vlidator Errors- cnsltManageVO# +cnsltManageVO.cnsltSj=\uc0c1\ub2f4\uc81c\ubaa9 +cnsltManageVO.cnsltCn=\uc0c1\ub2f4\ub0b4\uc6a9 +cnsltManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638 +cnsltManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638 +cnsltManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638 +cnsltManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638 +cnsltManageVO.wrterNm=\uc791\uc131\uc790\uba85 +cnsltManageVO.managtCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- siteManageVO# +siteManageVO.siteNm=\uc0ac\uc774\ud2b8\uba85 +siteManageVO.siteUrl=\uc0ac\uc774\ud2b8 URL +siteManageVO.siteDc=\uc0ac\uc774\ud2b8\uc124\uba85 +siteManageVO.siteThemaClCode=\uc0ac\uc774\ud2b8\uc8fc\uc81c\ubd84\ub958 +siteManageVO.actvtyAt=\ud65c\uc131\uc5ec\ubd80 +siteManageVO.useAt=\uc0ac\uc6a9\uc5ec\ubd80 + +#Vlidator Errors- recomendSiteManageVO# +recomendSiteManageVO.recomendSiteNm=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uba85 +recomendSiteManageVO.recomendSiteUrl=\ucd94\ucc9c\uc0ac\uc774\ud2b8 URL +recomendSiteManageVO.recomendSiteDc=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc124\uba85 +recomendSiteManageVO.recomendResnCn=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc2b9\uc778\uc0ac\uc720 +recomendSiteManageVO.confmDe=\uc2b9\uc778\uc77c\uc790 + +#Vlidator Errors- hpcmManageVO# +hpcmManageVO.hpcmSeCode=\ub3c4\uc6c0\ub9d0\uad6c\ubd84 +hpcmManageVO.hpcmDf=\ub3c4\uc6c0\ub9d0\uc815\uc758 +hpcmManageVO.hpcmDc=\ub3c4\uc6c0\ub9d0\uc124\uba85 + +#Vlidator Errors- newsManageVO# +newsManageVO.newsSj=\ub274\uc2a4\uc81c\ubaa9 +newsManageVO.newsCn=\ub274\uc2a4\ub0b4\uc6a9 +newsManageVO.ntceDe=\uac8c\uc2dc\uc77c\uc790 + +#Vlidator Errors- faqManageVO# +faqManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9 +faqManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9 +faqManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- stplatManageVO# +stplatManageVO.useStplatNm=\uc774\uc6a9\uc57d\uad00\uba85 +stplatManageVO.useStplatCn=\uc774\uc6a9\uc57d\uad00\ub0b4\uc6a9 +stplatManageVO.infoProvdAgreCn=\uc815\ubcf4\uc81c\uacf5\ub3d9\uc758\ub0b4\uc6a9 + +#Vlidator Errors- cpyrhtPrtcPolicyVO# +cpyrhtPrtcPolicyVO.cpyrhtPrtcPolicyCn=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45\ub0b4\uc6a9 + +#Vlidator Errors- qnaManageVO# +qnaManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9 +qnaManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9 +qnaManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638 +qnaManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638 +qnaManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638 +qnaManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638 +qnaManageVO.wrterNm=\uc791\uc131\uc790\uba85 +qnaManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- ReprtStatsVO# +sts.reprtId = \ubcf4\uace0\uc11cID +sts.title = \ubcf4\uace0\uc11c\uba85 +sts.category = \ubcf4\uace0\uc11c\uc720\ud615 +sts.status = \uc9c4\ud589\uc0c1\ud0dc +sts.regDate = \ub4f1\ub85d\uc77c\uc2dc + +#Rest day messages# +sym.cal.restDay = \ud734\uc77c\uc77c\uc790 +sym.cal.restName = \ud734\uc77c\uba85 +sym.cal.restDetail = \ud734\uc77c\uc124\uba85 +sym.cal.restCategory = \ud734\uc77c\uad6c\ubd84 + +image.errorBg = \uc624\ub958\uc774\ubbf8\uc9c0 + + +#Custom message# +custom.fail.access=\uc815\uc0c1\uc801\uc778 \uc811\uadfc\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ud6c4 \uc774\uc6a9\ud558\uc138\uc694. +custom.fail.accessDenied=\uc694\uccad\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +custom.isNotExist.msg=\ucc98\ub9ac\uc5d0 \ud544\uc694\ud55c \uc790\ub8cc\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. diff --git a/src/main/resources/message/com/message-common_en.properties b/src/main/resources/message/com/message-common_en.properties new file mode 100644 index 00000000..5caa11d4 --- /dev/null +++ b/src/main/resources/message/com/message-common_en.properties @@ -0,0 +1,277 @@ +fail.common.msg=error ocurred! +fail.common.sql=sql error ocurred! error code: {0}, error msg: {1} +info.nodata.msg=no data found. + +#UI Common resource# +table.num=num. +table.regdate=reg.date +table.reger=registrant +table.select=select +title.html=egovframe common component +title.detail=Detail Inquiry +title.inquire=Inquire +title.update=Modify +title.create=Create +title.delete=Delete +title.save=Save +title.list=List +title.searchCondition=search condition +title.search=keyword +title.reply=reply +title.scrap=scrap +title.comment=comment +title.attachedFileSelect=attached file +title.attachedFileDelete=attached file delete +title.link=link +title.management=Management +title.all=All + +input.select=Select +input.cSelect=Select +input.input=input +input.button=button +input.selectAll.title=Checkbox select all +input.yes=Yes +input.no=No + +select.searchCondition=select condition select + +button.select=select +button.search=Search +button.use=use +button.notUsed=Not used +button.inquire=inquire +button.update=update +button.create=create +button.delete=delete +button.deleteDatabase=Wiping +button.close=close +button.save=save +button.list=list +button.reset=reset +button.passwordUpdate=password update +button.subscribe=subscribe +button.realname=realname confirm +button.moveToGpin=move to gpin confirm +button.moveToIhidnum=move to ihidnum confirm +button.agree=agree +button.disagree=disagree +button.possible=possible +button.impossible=impossible +button.qnaregist=Q&A create +button.cnsltregist=Counsel create +button.preview=preview +button.next=nexut +button.add=add it now +button.confirm=confirm +button.back =back +button.yes =yes +button.no =no +button.home =home +button.user =user support +button.cop =cooperation +button.wrkstart = work start +button.wrkend = work end +button.reply = reply +button.scrap = scrap +button.comment = comment +button.excel = excel +button.init=init +button.acknowledgment=acknowledgment +button.cancelAcknowledgment=cancel acknowledgment +button.bulkUpload=bulk upload +button.log = log +button.set = set +button.move = move + + +#UI Common Message# +common.noScriptTitle.msg=I can't use all functions in browser JavaScript is not supported. +common.searchCondition.msg=This layout is a lower information searches made up of information. + +common.summary.list={0} A list of the details of the output. +common.summary.regist={0} Registered by typing the possible contents of registers by clicking the button. +common.summary.update={0} Registered by typing the possible content of modification by clicking the button. +common.summary.inqire={0} Full inquiry details about the details of the output. + +common.save.msg=confirm save? +common.regist.msg=confirm regist? +common.delete.msg=confirm delete? +common.update.msg=confirm update? +common.nodata.msg=There is no data. please choose another seach keyword +common.required.msg=is required field +common.acknowledgement.msg=confirm acknowledgement? +common.acknowledgementcancel.msg=confirm acknowledgement cancel? +common.nocomment.msg=There is no comment. +common.noguest.msg=There is no guest notice. + +success.request.msg=you're request successfully done +success.common.select=successfully selected +success.common.insert=successfully inserted +success.common.update=successfully updated +success.common.delete=successfully deleted + +common.imposbl.fileupload = cannot upload files +common.isConfmDe.msg=Please check the approval date box +common.isExist.msg = already exist + +fail.common.insert = fail to insert. +fail.common.update = fail to update +fail.common.delete = fail to delete +fail.common.delete.upperMenuExist = fail to delete[upperMenuId foreign key error] +fail.common.select = fail to select +fail.common.login = login information is not correct +fail.common.loginIncorrect = login in more than {0} account will be locked! +fail.common.login.password = password information is not correct(password digit should be 8 to 20) +fail.common.idsearch = can not find id +fail.common.pwsearch = can not find password +fail.request.msg = Failed to handle the request +fail.common.login.ip = Login is refused because it is not a registered IP. + + +#UI User Message# +fail.user.passwordUpdate1=current password is not correct +fail.user.passwordUpdate2=password confirm is not correct +info.user.rlnmCnfirm=realname confirm ready +success.user.rlnmCnfirm=it is realname +fail.user.rlnmCnfirm=it is not realname +fail.user.connectFail=connection fail + +#UI Cop Message# +cop.extrlUser = External User +cop.intrlUser = Internal User +cop.private = private +cop.public = public + +cop.bbsNm = BBS Name +cop.bbsIntrcn = BBS Introduction +cop.bbsTyCode = BBS Type +cop.bbsAttrbCode = BBS Attribute +cop.replyPosblAt = Reply Possible Alternative +cop.fileAtchPosblAt = File Attach Possible Alternative +cop.posblAtchFileNumber = Possible Attach File Number +cop.tmplatId = Template Information +cop.guestList.subject = This article registered by Guest List +cop.nttSj = Notice Subject +cop.nttCn = Notice Contents +cop.ntceBgnde = Notice Start Date +cop.ntceEndde = Notice End Date +cop.ntcrNm = Noticer Name +cop.password = PassWord +cop.atchFile = Attach Files +cop.guestList = Guest List +cop.guestListCn = Guest List Contents +cop.noticeTerm = Notice term +cop.atchFileList = Attached File List +cop.cmmntyNm = Community Name +cop.cmmntyIntrcn = Community Introduction +cop.cmmntyMngr = Community Manager +cop.clbOprtr = Club Operator +cop.clbIntrcn = Club Introduction +cop.clbNm = Club Name +cop.tmplatNm = Template Name +cop.tmplatSeCode = Template Se Code +cop.tmplatCours = Template Cours +cop.useAt = Use Alternative +cop.ncrdNm = NameCard user name +cop.cmpnyNm = Company name +cop.deptNm = Department name +cop.ofcpsNm = OFCPS name +cop.clsfNm = Class Name +cop.emailAdres = E-mail +cop.telNo = Tel No. +cop.mbtlNum = Mobile +cop.adres = Address +cop.extrlUserAt = External User alternative +cop.publicAt = Public open alternative +cop.remark = Remark +cop.trgetNm = Company/Club Information +cop.preview = preview + +cop.withdraw.msg=confirm withdrawal memebership? +cop.reregist.msg=confirm re-registration? +cop.registmanager.msg=confirm registration of manager? +cop.use.msg=confirm use? +cop.unuse.msg=confirm stop using? +cop.delete.confirm.msg=If you choose to disable the re-use change is impossible. +cop.ing.msg=Approval is being requested. +cop.request.msg=Signup is normally requested. +cop.password.msg=Please enter your password. +cop.password.not.same.msg=Password do not match. + +cop.comment.wrterNm = Writer Name +cop.comment.commentCn = Comment +cop.comment.commentPassword = Password + +cop.satisfaction.wrterNm = Writer Name +cop.satisfaction.stsfdgCn = Satisfaction +cop.satisfaction.stsfdg = Satisfaction Degree +cop.satisfaction.stsfdgPassword = Password + +cop.scrap.scrapNm = Scrap Name + +#UI USS Message# +uss.ion.noi.ntfcSj=Subject +uss.ion.noi.ntfcCn=Contents +uss.ion.noi.ntfcDate=Notification Date +uss.ion.noi.ntfcTime=Notification Time +uss.ion.noi.ntfcHH=Notification Hour +uss.ion.noi.ntfcMM=Notification Minute +uss.ion.noi.bhNtfcIntrvl=Beforehand Interval +uss.ion.noi.bhNtfcIntrvl.msg=Beforehand Interval is required. +uss.ion.noi.alertNtfcTime=Date and time of notification is not valid. + +#UI COP Message# +cop.sms.trnsmitTelno=Sender +cop.sms.trnsmitCn=Contents +cop.sms.recptnTelno=Receiver(s) +cop.sms.send=Send +cop.sms.addRecptn=Add +cop.sms.recptnTelno.msg=The phone number of receiver is required. + +#UI sym.log Message# +sym.log.histSeCode = History Code +sym.log.sysNm = System Name +sym.log.histCn = History Contents +sym.log.atchFile = Attached File +sym.log.atchFileList = Attached File List +sym.ems.receiver = Receiver +sym.ems.title = Title +sym.ems.content = Content + +#Vlidator Errors# +errors.required={0} is required. +errors.minlength={0} can not be less than {1} characters. +errors.maxlength={0} can not be greater than {1} characters. +errors.invalid={0} is invalid. + +errors.byte={0} must be a byte. +errors.short={0} must be a short. +errors.integer={0} must be an integer. +errors.long={0} must be a long. +errors.float={0} must be a float. +errors.double={0} must be a double. + +errors.date={0} is not a date. +errors.range={0} is not in the range {1} through {2}. +errors.creditcard={0} is an invalid credit card number. +errors.email={0} is an invalid e-mail address. + +#Vlidator Errors- ReprtStatsVO# +sts.reprtId = Report ID +sts.title = Report Title +sts.category = Report Category +sts.status = Report Status +sts.regDate = Registration Date + +#Rest day messages# +sym.cal.restDay = Holiday Date +sym.cal.restName = Holiday Name +sym.cal.restDetail = Holiday Detail +sym.cal.restCategory = Holiday Category + + +#Custom message# +custom.fail.access=It's not a normal approach. Log in and use it. +custom.fail.accessDenied=You do not have permission to request. +custom.isNotExist.msg=Data required for processing does not exist. diff --git a/src/main/resources/message/com/message-common_ko.properties b/src/main/resources/message/com/message-common_ko.properties new file mode 100644 index 00000000..be0b9305 --- /dev/null +++ b/src/main/resources/message/com/message-common_ko.properties @@ -0,0 +1,375 @@ +fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! +fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1} +info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. + +#UI Common resource# +table.num=\ubc88\ud638 +table.regdate=\ub4f1\ub85d\uc77c +table.reger=\ub4f1\ub85d\uc790 +table.select=\uc120\ud0dd +title.html=egovframe common component +title.detail=\uc0c1\uc138\uc870\ud68c +title.inquire=\uc870\ud68c +title.update=\uc218\uc815 +title.create=\ub4f1\ub85d +title.delete=\uc0ad\uc81c +title.save=\uc800\uc7a5 +title.list=\ubaa9\ub85d +title.searchCondition=\uac80\uc0c9\uc870\uac74 +title.search=\uac80\uc0c9\uc5b4 +title.reply=\ub2f5\uae00 +title.scrap=\uc2a4\ud06c\ub7a9 +title.comment=\ub313\uae00 +title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd +title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c +title.link=\ub9c1\ud06c +title.management=\uad00\ub9ac +title.all=\uc804\uccb4 + +input.select=\uc120\ud0dd\ud558\uc138\uc694 +input.cSelect=\uc120\ud0dd +input.input=\uc785\ub825 +input.button=\ubc84\ud2bc +input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4 +input.yes=\uc608 +input.no=\uc544\ub2c8\uc624 + +select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd + +button.select=\uc120\ud0dd +button.search=\uac80\uc0c9 +button.use=\uc0ac\uc6a9 +button.notUsed=\uc0ac\uc6a9\uc911\uc9c0 +button.inquire=\uc870\ud68c +button.update=\uc218\uc815 +button.create=\ub4f1\ub85d +button.delete=\uc0ad\uc81c +button.deleteDatabase=\uc644\uc804\uc0ad\uc81c +button.close=\ub2eb\uae30 +button.save=\uc800\uc7a5 +button.list=\ubaa9\ub85d +button.reset=\ucde8\uc18c +button.passwordUpdate=\uc554\ud638\ubcc0\uacbd +button.subscribe=\uac00\uc785\uc2e0\uccad +button.realname=\uc2e4\uba85\ud655\uc778 +button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9 +button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9 +button.agree=\ub3d9\uc758 +button.disagree=\ube44\ub3d9\uc758 +button.possible=\uac00\ub2a5 +button.impossible=\ubd88\uac00\ub2a5 +button.qnaregist=Q&A\ub4f1\ub85d +button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d +button.preview=\ubbf8\ub9ac\ubcf4\uae30 +button.next=\ub2e4\uc74c +button.add=\ubc14\ub85c\ucd94\uac00 +button.confirm=\ud655\uc778 +button.back = \ub4a4\ub85c +button.yes = \uc608 +button.no = \uc544\ub2c8\uc624 +button.home = \ud648 +button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0 +button.cop = \ud611\uc5c5 +button.wrkstart = \ucd9c\uadfc +button.wrkend = \ud1f4\uadfc +button.reply = \ub2f5\uae00 +button.scrap = \uc2a4\ud06c\ub7a9 +button.comment = \ub313\uae00 +button.excel = \uc5d1\uc140 +button.init=\ucd08\uae30\ud654 +button.acknowledgment=\uc2b9\uc778 +button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c +button.bulkUpload=\uc77c\uad04\ub4f1\ub85d +button.log = \ub85c\uadf8 +button.set = \uc124\uc815 +button.move = \uc774\ub3d9 + + +#UI Common Message# +common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. + +common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. +common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4. +common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4. +common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4. + +common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694 +common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4. +common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. + +success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4. +success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4. +common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4. + +fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4! +fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558) +fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4. +fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#UI User Message# +fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624. +success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4. +fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328) +info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624. +success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4. +fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + + +#UI Cop Message# +cop.extrlUser = \uc678\ubd80\uc0ac\uc6a9\uc790 +cop.intrlUser = \ub0b4\ubd80\uc0ac\uc6a9\uc790 +cop.private = \ube44\uacf5\uac1c +cop.public = \uacf5\uac1c + +cop.adbkNm = \uc8fc\uc18c\ub85d\uba85 +cop.othbcScope = \uacf5\uac1c\ubc94\uc704 +cop.company = \ud68c\uc0ac +cop.part = \ubd80\uc11c +cop.man = \uac1c\uc778 +cop.adbkUser = \uad6c\uc131\uc6d0 +cop.bbsNm = \uac8c\uc2dc\ud310\uba85 +cop.bbsIntrcn = \uac8c\uc2dc\ud310\uc18c\uac1c +cop.bbsTyCode = \uac8c\uc2dc\ud310 \uc720\ud615 +cop.bbsAttrbCode = \uac8c\uc2dc\ud310 \uc18d\uc131 +cop.replyPosblAt = \ub2f5\uc7a5\uac00\ub2a5\uc5ec\ubd80 +cop.fileAtchPosblAt = \ud30c\uc77c\ucca8\ubd80\uac00\ub2a5\uc5ec\ubd80 +cop.posblAtchFileNumber = \ucca8\ubd80\uac00\ub2a5\ud30c\uc77c \uc22b\uc790 +cop.tmplatId = \ud15c\ud50c\ub9bf \uc815\ubcf4 +cop.guestList.subject = \ubc29\uba85\ub85d \uac8c\uc2dc\uae00\uc785\ub2c8\ub2e4. +cop.nttSj = \uc81c\ubaa9 +cop.nttCn = \uae00\ub0b4\uc6a9 +cop.ntceBgnde = \uac8c\uc2dc\uc2dc\uc791\uc77c +cop.ntceEndde = \uac8c\uc2dc\uc885\ub8cc\uc77c +cop.ntcrNm = \uc791\uc131\uc790 +cop.password = \ud328\uc2a4\uc6cc\ub4dc +cop.atchFile = \ud30c\uc77c\ucca8\ubd80 +cop.guestList = \ubc29\uba85\ub85d +cop.guestListCn = \ubc29\uba85\ub85d \ub0b4\uc6a9 +cop.noticeTerm = \uac8c\uc2dc\uae30\uac04 +cop.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d +cop.cmmntyNm = \ucee4\ubba4\ub2c8\ud2f0\uba85 +cop.cmmntyIntrcn = \ucee4\ubba4\ub2c8\ud2f0 \uc18c\uac1c +cop.cmmntyMngr = \ucee4\ubba4\ub2c8\ud2f0 \uad00\ub9ac\uc790 +cop.clbOprtr = \ub3d9\ud638\ud68c \uc6b4\uc601\uc790 +cop.clbIntrcn = \ub3d9\ud638\ud68c \uc18c\uac1c +cop.clbNm = \ub3d9\ud638\ud68c \uba85 +cop.tmplatNm = \ud15c\ud50c\ub9bf\uba85 +cop.tmplatSeCode = \ud15c\ud50c\ub9bf \uad6c\ubd84 +cop.tmplatCours = \ud15c\ud50c\ub9bf\uacbd\ub85c +cop.useAt = \uc0ac\uc6a9\uc5ec\ubd80 +cop.ncrdNm = \uc774\ub984 +cop.cmpnyNm = \ud68c\uc0ac\uba85 +cop.deptNm = \ubd80\uc11c\uba85 +cop.ofcpsNm = \uc9c1\uc704 +cop.clsfNm = \uc9c1\uae09 +cop.emailAdres = \uc774\uba54\uc77c\uc8fc\uc18c +cop.telNo = \uc804\ud654\ubc88\ud638 +cop.mbtlNum = \ud734\ub300\ud3f0\ubc88\ud638 +cop.adres = \uc8fc\uc18c +cop.extrlUserAt = \uc678\ubd80\uc0ac\uc6a9\uc790\uc5ec\ubd80 +cop.publicAt = \uacf5\uac1c\uc5ec\ubd80 +cop.remark = \ube44\uace0 +cop.trgetNm = \ucee4\ubba4\ub2c8\ud2f0/\ub3d9\ud638\ud68c \uc815\ubcf4 +cop.preview = \ubbf8\ub9ac\ubcf4\uae30 + +cop.withdraw.msg=\ud0c8\ud1f4\ucc98\ub9ac \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.reregist.msg=\uc7ac\uac00\uc785 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.registmanager.msg=\uc6b4\uc601\uc9c4\uc73c\ub85c \ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.use.msg=\uc0ac\uc6a9 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.unuse.msg=\uc0ac\uc6a9\uc911\uc9c0 \ucc98\ub9ac\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? +cop.delete.confirm.msg=\uc0ac\uc6a9\uc911\uc9c0\ub97c \uc120\ud0dd\ud558\uc2e4 \uacbd\uc6b0 \ub2e4\uc2dc \uc0ac\uc6a9\uc73c\ub85c \ubcc0\uacbd\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4. +cop.ing.msg=\uc2b9\uc778\uc694\uccad \uc911\uc785\ub2c8\ub2e4. +cop.request.msg=\uac00\uc785\uc2e0\uccad\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc694\uccad\ub418\uc5c8\uc2b5\ub2c8\ub2e4 +cop.password.msg=\ud328\uc2a4\uc6cc\ub4dc\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624. +cop.password.not.same.msg=\ud328\uc2a4\uc6cc\ub4dc\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + +cop.comment.wrterNm = \uc791\uc131\uc790 +cop.comment.commentCn = \ub0b4\uc6a9 +cop.comment.commentPassword = \ud328\uc2a4\uc6cc\ub4dc + +cop.satisfaction.wrterNm = \uc791\uc131\uc790 +cop.satisfaction.stsfdgCn = \ub0b4\uc6a9 +cop.satisfaction.stsfdg = \ub9cc\uc871\ub3c4 +cop.satisfaction.stsfdgPassword = \ud328\uc2a4\uc6cc\ub4dc + +cop.scrap.scrapNm = \uc2a4\ud06c\ub7a9\uba85 + +#UI USS Message# +uss.ion.noi.ntfcSj=\uc81c\ubaa9 +uss.ion.noi.ntfcCn=\ub0b4\uc6a9 +uss.ion.noi.ntfcDate=\uc54c\ub9bc\uc77c\uc790 +uss.ion.noi.ntfcTime=\uc54c\ub9bc\uc2dc\uac04 +uss.ion.noi.ntfcHH=\uc54c\ub9bc\uc2dc\uac04 +uss.ion.noi.ntfcMM=\uc54c\ub9bc\ubd84 +uss.ion.noi.bhNtfcIntrvl=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 +uss.ion.noi.bhNtfcIntrvl.msg=\uc0ac\uc804\uc54c\ub9bc\uac04\uaca9 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. +uss.ion.noi.alertNtfcTime=\uc54c\ub9bc\uc77c\uc790 \ubc0f \uc2dc\uac04\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. + +#UI COP Message# +cop.sms.trnsmitTelno=\ubc1c\uc2e0\uc804\ud654\ubc88\ud638 +cop.sms.trnsmitCn=\uc804\uc1a1\ub0b4\uc6a9 +cop.sms.recptnTelno=\uc218\uc2e0\uc804\ud654\ubc88\ud638 +cop.sms.send=\uc804\uc1a1 +cop.sms.addRecptn=\ucd94\uac00 +cop.sms.recptnTelno.msg=\uc218\uc2e0\uc804\ud654\ubc88\ud638 \uc9c0\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. + +#UI sym.log Message# +sym.log.histSeCode = \uc774\ub825\uad6c\ubd84 +sym.log.sysNm = \uc2dc\uc2a4\ud15c\uba85 +sym.log.histCn = \uc774\ub825\ub0b4\uc6a9 +sym.log.atchFile = \ucca8\ubd80\ud30c\uc77c +sym.log.atchFileList = \ucca8\ubd80\ud30c\uc77c\ubaa9\ub85d +sym.ems.receiver = \ubc1b\ub294\uc0ac\ub78c +sym.ems.title = \uc81c\ubaa9 +sym.ems.content = \ubc1c\uc2e0\ub0b4\uc6a9 + +#Vlidator Errors# +errors.prefix=
+errors.suffix=

+ +errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4. +errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4. +errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.integer={0}\uc740(\ub294) \uc815\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.float={0}\uc740(\ub294) \uc2e4\uc218 \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. + +errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. +errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4. +errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4. + +errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4. +errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4. +errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4. + +errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. +errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. +errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. + +errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4. +error.security.runtime.error = error + +#Xss Errors# +errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. + +#File Upload / Download +errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4. +errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. +success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4. + +#Vlidator Errors- wordDicaryVO# +wordDicaryVO.wordNm=\uc6a9\uc5b4\uba85 +wordDicaryVO.engNm=\uc601\ubb38\uba85 +wordDicaryVO.wordDc=\uc6a9\uc5b4\uc124\uba85 +wordDicaryVO.synonm=\ub3d9\uc758\uc5b4 + +#Vlidator Errors- cnsltManageVO# +cnsltManageVO.cnsltSj=\uc0c1\ub2f4\uc81c\ubaa9 +cnsltManageVO.cnsltCn=\uc0c1\ub2f4\ub0b4\uc6a9 +cnsltManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638 +cnsltManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638 +cnsltManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638 +cnsltManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638 +cnsltManageVO.wrterNm=\uc791\uc131\uc790\uba85 +cnsltManageVO.managtCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- siteManageVO# +siteManageVO.siteNm=\uc0ac\uc774\ud2b8\uba85 +siteManageVO.siteUrl=\uc0ac\uc774\ud2b8 URL +siteManageVO.siteDc=\uc0ac\uc774\ud2b8\uc124\uba85 +siteManageVO.siteThemaClCode=\uc0ac\uc774\ud2b8\uc8fc\uc81c\ubd84\ub958 +siteManageVO.actvtyAt=\ud65c\uc131\uc5ec\ubd80 +siteManageVO.useAt=\uc0ac\uc6a9\uc5ec\ubd80 + +#Vlidator Errors- recomendSiteManageVO# +recomendSiteManageVO.recomendSiteNm=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uba85 +recomendSiteManageVO.recomendSiteUrl=\ucd94\ucc9c\uc0ac\uc774\ud2b8 URL +recomendSiteManageVO.recomendSiteDc=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc124\uba85 +recomendSiteManageVO.recomendResnCn=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uc2b9\uc778\uc0ac\uc720 +recomendSiteManageVO.confmDe=\uc2b9\uc778\uc77c\uc790 + +#Vlidator Errors- hpcmManageVO# +hpcmManageVO.hpcmSeCode=\ub3c4\uc6c0\ub9d0\uad6c\ubd84 +hpcmManageVO.hpcmDf=\ub3c4\uc6c0\ub9d0\uc815\uc758 +hpcmManageVO.hpcmDc=\ub3c4\uc6c0\ub9d0\uc124\uba85 + +#Vlidator Errors- newsManageVO# +newsManageVO.newsSj=\ub274\uc2a4\uc81c\ubaa9 +newsManageVO.newsCn=\ub274\uc2a4\ub0b4\uc6a9 +newsManageVO.ntceDe=\uac8c\uc2dc\uc77c\uc790 + +#Vlidator Errors- faqManageVO# +faqManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9 +faqManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9 +faqManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- stplatManageVO# +stplatManageVO.useStplatNm=\uc774\uc6a9\uc57d\uad00\uba85 +stplatManageVO.useStplatCn=\uc774\uc6a9\uc57d\uad00\ub0b4\uc6a9 +stplatManageVO.infoProvdAgreCn=\uc815\ubcf4\uc81c\uacf5\ub3d9\uc758\ub0b4\uc6a9 + +#Vlidator Errors- cpyrhtPrtcPolicyVO# +cpyrhtPrtcPolicyVO.cpyrhtPrtcPolicyCn=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45\ub0b4\uc6a9 + +#Vlidator Errors- qnaManageVO# +qnaManageVO.qestnSj=\uc9c8\ubb38\uc81c\ubaa9 +qnaManageVO.qestnCn=\uc9c8\ubb38\ub0b4\uc6a9 +qnaManageVO.writngPassword=\uc791\uc131\ube44\ubc00\ubc88\ud638 +qnaManageVO.areaNo=\uc9c0\uc5ed\ubc88\ud638 +qnaManageVO.middleTelno=\uc911\uac04\uc804\ud654\ubc88\ud638 +qnaManageVO.endTelno=\ub05d\uc804\ud654\ubc88\ud638 +qnaManageVO.wrterNm=\uc791\uc131\uc790\uba85 +qnaManageVO.answerCn=\ub2f5\ubcc0\ub0b4\uc6a9 + +#Vlidator Errors- ReprtStatsVO# +sts.reprtId = \ubcf4\uace0\uc11cID +sts.title = \ubcf4\uace0\uc11c\uba85 +sts.category = \ubcf4\uace0\uc11c\uc720\ud615 +sts.status = \uc9c4\ud589\uc0c1\ud0dc +sts.regDate = \ub4f1\ub85d\uc77c\uc2dc + +#Rest day messages# +sym.cal.restDay = \ud734\uc77c\uc77c\uc790 +sym.cal.restName = \ud734\uc77c\uba85 +sym.cal.restDetail = \ud734\uc77c\uc124\uba85 +sym.cal.restCategory = \ud734\uc77c\uad6c\ubd84 + +image.errorBg = \uc624\ub958\uc774\ubbf8\uc9c0 + + +#Custom message# +custom.fail.access=\uc815\uc0c1\uc801\uc778 \uc811\uadfc\uc774 \uc544\ub2d9\ub2c8\ub2e4. \ub85c\uadf8\uc778 \ud6c4 \uc774\uc6a9\ud558\uc138\uc694. +custom.fail.accessDenied=\uc694\uccad\uc5d0 \ub300\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. +custom.isNotExist.msg=\ucc98\ub9ac\uc5d0 \ud544\uc694\ud55c \uc790\ub8cc\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. diff --git a/src/main/resources/spring/context-mvc.xml b/src/main/resources/spring/context-mvc.xml new file mode 100644 index 00000000..03ee7dd7 --- /dev/null +++ b/src/main/resources/spring/context-mvc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/context-service.xml b/src/main/resources/spring/context-service.xml new file mode 100644 index 00000000..2ded230e --- /dev/null +++ b/src/main/resources/spring/context-service.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/mvc/mvc-converter.xml b/src/main/resources/spring/mvc/mvc-converter.xml new file mode 100644 index 00000000..5a8e5ca9 --- /dev/null +++ b/src/main/resources/spring/mvc/mvc-converter.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/mvc/mvc-interceptor.xml b/src/main/resources/spring/mvc/mvc-interceptor.xml new file mode 100644 index 00000000..74af7d65 --- /dev/null +++ b/src/main/resources/spring/mvc/mvc-interceptor.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/mvc/mvc-resolver.xml b/src/main/resources/spring/mvc/mvc-resolver.xml new file mode 100644 index 00000000..210b35a1 --- /dev/null +++ b/src/main/resources/spring/mvc/mvc-resolver.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + framework/egov/cmm/error/dataAccessFailure + framework/egov/cmm/error/transactionFailure + framework/egov/cmm/error/egovError + framework/egov/cmm/error/accessDenied + + + + framework/error/error_ajax.none + + + + + + + + + + + + + + + + + + + + /WEB-INF/tiles/layout-tiles-defs.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/mvc/mvc-scan.xml b/src/main/resources/spring/mvc/mvc-scan.xml new file mode 100644 index 00000000..b23cc8af --- /dev/null +++ b/src/main/resources/spring/mvc/mvc-scan.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-aspect.xml b/src/main/resources/spring/service/context-aspect.xml new file mode 100644 index 00000000..a73e4121 --- /dev/null +++ b/src/main/resources/spring/service/context-aspect.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + **service.impl.* + + + + + + + + + + + + + + + + + **service.impl.* + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-beans.xml b/src/main/resources/spring/service/context-beans.xml new file mode 100644 index 00000000..4a1e2adf --- /dev/null +++ b/src/main/resources/spring/service/context-beans.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-common.xml b/src/main/resources/spring/service/context-common.xml new file mode 100644 index 00000000..85aec4fa --- /dev/null +++ b/src/main/resources/spring/service/context-common.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + classpath:/message/com/message-common + classpath:/message/category/mng/batch/message + classpath:/message/category/mng/user/reg/message + classpath:/egovframework/rte/fdl/idgnr/messages/idgnr + classpath:/egovframework/rte/fdl/property/messages/properties + + + + + + + 60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-datasource.xml b/src/main/resources/spring/service/context-datasource.xml new file mode 100644 index 00000000..e83e4e1c --- /dev/null +++ b/src/main/resources/spring/service/context-datasource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-excel.xml b/src/main/resources/spring/service/context-excel.xml new file mode 100644 index 00000000..e003c6e8 --- /dev/null +++ b/src/main/resources/spring/service/context-excel.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-idgen-xit.xml b/src/main/resources/spring/service/context-idgen-xit.xml new file mode 100644 index 00000000..6ca2cf66 --- /dev/null +++ b/src/main/resources/spring/service/context-idgen-xit.xml @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-mail.xml b/src/main/resources/spring/service/context-mail.xml new file mode 100644 index 00000000..4c275908 --- /dev/null +++ b/src/main/resources/spring/service/context-mail.xml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/src/main/resources/spring/service/context-mapper.xml b/src/main/resources/spring/service/context-mapper.xml new file mode 100644 index 00000000..3a891f47 --- /dev/null +++ b/src/main/resources/spring/service/context-mapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-properties.xml b/src/main/resources/spring/service/context-properties.xml new file mode 100644 index 00000000..78127eda --- /dev/null +++ b/src/main/resources/spring/service/context-properties.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-scan.xml b/src/main/resources/spring/service/context-scan.xml new file mode 100644 index 00000000..68504966 --- /dev/null +++ b/src/main/resources/spring/service/context-scan.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-scheduling-sym-log-lgm.xml b/src/main/resources/spring/service/context-scheduling-sym-log-lgm.xml new file mode 100644 index 00000000..4a27d457 --- /dev/null +++ b/src/main/resources/spring/service/context-scheduling-sym-log-lgm.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-scheduling.xml b/src/main/resources/spring/service/context-scheduling.xml new file mode 100644 index 00000000..4129721d --- /dev/null +++ b/src/main/resources/spring/service/context-scheduling.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-security.xml b/src/main/resources/spring/service/context-security.xml new file mode 100644 index 00000000..1c49a2d1 --- /dev/null +++ b/src/main/resources/spring/service/context-security.xml @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-sqlMap.xml b/src/main/resources/spring/service/context-sqlMap.xml new file mode 100644 index 00000000..025b6422 --- /dev/null +++ b/src/main/resources/spring/service/context-sqlMap.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-syslogaop.xml b/src/main/resources/spring/service/context-syslogaop.xml new file mode 100644 index 00000000..47a0aa7b --- /dev/null +++ b/src/main/resources/spring/service/context-syslogaop.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-transaction.xml b/src/main/resources/spring/service/context-transaction.xml new file mode 100644 index 00000000..1e948d76 --- /dev/null +++ b/src/main/resources/spring/service/context-transaction.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/spring/service/context-validator.xml b/src/main/resources/spring/service/context-validator.xml new file mode 100644 index 00000000..58f5e04e --- /dev/null +++ b/src/main/resources/spring/service/context-validator.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + classpath:/validator/framework/validator-rules-xit.xml + classpath:/validator/framework/mng/**/*.xml + + classpath:/validator/biz/**/*.xml + + + + + diff --git a/src/main/resources/sqlmapper/biz/cmm/FimsTotalPopup-mysql-mapper.xml b/src/main/resources/sqlmapper/biz/cmm/FimsTotalPopup-mysql-mapper.xml new file mode 100644 index 00000000..d51ebb40 --- /dev/null +++ b/src/main/resources/sqlmapper/biz/cmm/FimsTotalPopup-mysql-mapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + /** FimsTotalPopup.addProc */ + /** 예약관리 등록 조회 */ + + + + + /** FimsTotalPopup.modifyProc */ + /** 개별 총정보 수정 */ + UPDATE TB_REGLT + SET + REGLT_ID = #{reglt_id} + ,OPINION_STATMNT_AT = #{opinion_statmnt_at} + ,VIOLT_PLACE = #{violt_place} + ,VIOLT_DE = #{violt_de} + + WHERE REGLT_ID = #{reglt_id} + + + + /** FimsTotalPopup.modifyProcOwner */ + /** 개별 총정보 소유주 수정 */ + UPDATE TB_REGLT + SET + ,VIOLT_DE = #{violt_de} + WHERE OWNER_ID = #{owner_id} + + + + + /** FimsTotalPopup.removeProc */ + /** 예약관리 삭제 조회 */ + + + + + + diff --git a/src/main/resources/sqlmapper/biz/rt0200/Rt0200-mysql-mapper.xml b/src/main/resources/sqlmapper/biz/rt0200/Rt0200-mysql-mapper.xml new file mode 100644 index 00000000..4fa29cba --- /dev/null +++ b/src/main/resources/sqlmapper/biz/rt0200/Rt0200-mysql-mapper.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + /** SendRqstMngMapper.addProc */ + /** 예약관리 등록 조회 */ + + + + + /** SendRqstMngMapper.modifyProc */ + /** 예약관리 수정 조회 */ + + + + + /** SendRqstMngMapper.removeProc */ + /** 예약관리 삭제 조회 */ + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameCode-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameCode-mysql-mapper.xml new file mode 100644 index 00000000..146ae204 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameCode-mysql-mapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameCode-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameCode-oracle-mapper.xml new file mode 100644 index 00000000..146ae204 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameCode-oracle-mapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameCrud-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameCrud-mysql-mapper.xml new file mode 100644 index 00000000..ecc3009e --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameCrud-mysql-mapper.xml @@ -0,0 +1,3469 @@ + + + + + + + + /** addXitAuthorGroupInfo */ + /** 권한그룹정보 등록 */ + INSERT INTO XIT_AUTHOR_GROUP_INFO( + GROUP_ID + ,GROUP_NM + ,GROUP_CREAT_DE + ,GROUP_DC + ,AUTHOR_CODE + )VALUES( + #{group_id } + ,#{group_nm } + ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ,#{group_dc } + ,#{author_code } + ) + + + /** modifyXitAuthorGroupInfo */ + /** 권한그룹정보 수정 */ + UPDATE XIT_AUTHOR_GROUP_INFO + SET + GROUP_CREAT_DE = GROUP_CREAT_DE + ,GROUP_NM = #{group_nm } + ,GROUP_DC = #{group_dc } + ,AUTHOR_CODE = #{author_code} + WHERE 1=1 + AND GROUP_ID = #{group_id} + + + /** removeXitAuthorGroupInfo */ + /** 권한그룹정보 삭제 */ + DELETE FROM XIT_AUTHOR_GROUP_INFO + WHERE 1=1 + AND GROUP_ID = #{group_id} + + + + + + + + + /** addXitAuthorInfo */ + /** 권한정보 등록 */ + INSERT INTO XIT_AUTHOR_INFO( + AUTHOR_CODE + ,AUTHOR_NM + ,AUTHOR_DC + ,AUTHOR_CREAT_DE + )VALUES( + #{author_code } + ,#{author_nm } + ,#{author_dc } + ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ) + + + /** modifyXitAuthorInfo */ + /** 권한정보 수정 */ + UPDATE XIT_AUTHOR_INFO + SET + AUTHOR_CREAT_DE = AUTHOR_CREAT_DE + ,AUTHOR_NM = #{author_nm} + ,AUTHOR_DC = #{author_dc} + WHERE 1=1 + AND AUTHOR_CODE = #{author_code} + + + /** removeXitAuthorInfo */ + /** 권한정보 삭제 */ + DELETE FROM XIT_AUTHOR_INFO + WHERE 1=1 + AND AUTHOR_CODE = #{author_code} + + + + + + + + + /** addXitAuthorRoleRelate */ + /** 권한역할관계 등록 */ + INSERT INTO XIT_AUTHOR_ROLE_RELATE( + AUTHOR_CODE + ,ROLE_CODE + ,CREAT_DT + )VALUES( + #{author_code} + ,#{role_code } + ,NOW() + ) + + + /** modifyXitAuthorRoleRelate */ + /** 권한역할관계 수정 */ + + + + + + + + /** removeXitAuthorRoleRelate */ + /** 권한역할관계 삭제 */ + DELETE FROM XIT_AUTHOR_ROLE_RELATE + WHERE 1=1 + AND AUTHOR_CODE = #{author_code} + AND ROLE_CODE = #{role_code } + + + + + + + + + /** addXitBbsMastrOption */ + /** 게시판마스터옵션 등록 */ + INSERT INTO XIT_BBS_MASTR_OPTION( + BBS_ID + ,ANSWER_AT + ,STSFDG_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{bbs_id } + ,#{answer_at } + ,#{stsfdg_at } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbsMastrOption */ + /** 게시판마스터옵션 수정 */ + UPDATE XIT_BBS_MASTR_OPTION + SET + LAST_UPDT_PNTTM = NOW() + ,ANSWER_AT = #{answer_at } + ,STSFDG_AT = #{stsfdg_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + /** removeXitBbsMastrOption */ + /** 게시판마스터옵션 삭제 */ + DELETE FROM XIT_BBS_MASTR_OPTION + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + + + + + + + /** addXitBbsMastr */ + /** 게시판마스터 등록 */ + INSERT INTO XIT_BBS_MASTR( + 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_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{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 } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbsMastr */ + /** 게시판마스터 수정 */ + UPDATE XIT_BBS_MASTR + SET + LAST_UPDT_PNTTM = NOW() + ,BBS_NM = #{bbs_nm } + ,BBS_INTRCN = #{bbs_intrcn } + ,BBS_TY_CODE = #{bbs_ty_code } + ,BBS_ATTRB_CODE = #{bbs_attrb_code } + ,REPLY_POSBL_AT = #{reply_posbl_at } + ,FILE_ATCH_POSBL_AT = #{file_atch_posbl_at } + ,ATCH_POSBL_FILE_NUMBER = #{atch_posbl_file_number} + ,ATCH_POSBL_FILE_SIZE = #{atch_posbl_file_size } + ,USE_AT = #{use_at } + ,TMPLAT_ID = #{tmplat_id } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm } + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + /** removeXitBbsMastr */ + /** 게시판마스터 삭제 */ + DELETE FROM XIT_BBS_MASTR + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + + + + + + /** addXitBbsPrcuse */ + /** 게시판활용 등록 */ + INSERT INTO XIT_BBS_PRCUSE( + TRGET_ID + ,BBS_ID + ,USE_AT + ,REGIST_SE_CODE + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{trget_id } + ,#{bbs_id } + ,#{use_at } + ,#{regist_se_code } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbsPrcuse */ + /** 게시판활용 수정 */ + UPDATE XIT_BBS_PRCUSE + SET + LAST_UPDT_PNTTM = NOW() + ,USE_AT = #{use_at } + ,REGIST_SE_CODE = #{regist_se_code } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND TRGET_ID = #{trget_id} + AND BBS_ID = #{bbs_id } + + + /** removeXitBbsPrcuse */ + /** 게시판활용 삭제 */ + DELETE FROM XIT_BBS_PRCUSE + WHERE 1=1 + AND TRGET_ID = #{trget_id} + AND BBS_ID = #{bbs_id } + + + + + + + + /** addXitBbs */ + /** 게시판 등록 */ + INSERT INTO XIT_BBS( + BBS_ID + ,NTT_ID + ,NTT_NO + ,NTT_SJ + ,NTT_CN + ,ANSWER_AT + ,PARNTS_SNTNC_NO + ,ANSWER_LC + ,SORT_ORDR + ,RDCNT + ,USE_AT + ,NTCE_BEGIN_DE + ,NTCE_END_DE + ,NTCR_ID + ,NTCR_NM + ,PASSWORD + ,ATCH_FILE_ID + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{bbs_id } + ,#{ntt_id } + ,#{ntt_no } + ,#{ntt_sj } + ,#{ntt_cn } + ,#{answer_at } + ,#{parnts_sntnc_no } + ,#{answer_lc } + ,#{sort_ordr } + ,#{rdcnt } + ,#{use_at } + ,#{ntce_begin_de } + ,#{ntce_end_de } + ,#{ntcr_id } + ,#{ntcr_nm } + ,#{password } + ,#{atch_file_id } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbs */ + /** 게시판 수정 */ + UPDATE XIT_BBS + SET + LAST_UPDT_PNTTM = NOW() + ,NTT_NO = #{ntt_no } + ,NTT_SJ = #{ntt_sj } + ,NTT_CN = #{ntt_cn } + ,ANSWER_AT = #{answer_at } + ,PARNTS_SNTNC_NO = #{parnts_sntnc_no } + ,ANSWER_LC = #{answer_lc } + ,SORT_ORDR = #{sort_ordr } + ,RDCNT = #{rdcnt } + ,USE_AT = #{use_at } + ,NTCE_BEGIN_DE = #{ntce_begin_de } + ,NTCE_END_DE = #{ntce_end_de } + ,NTCR_ID = #{ntcr_id } + ,NTCR_NM = #{ntcr_nm } + ,PASSWORD = #{password } + ,ATCH_FILE_ID = #{atch_file_id } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND BBS_ID = #{bbs_id} + AND NTT_ID = #{ntt_id} + + + /** removeXitBbs */ + /** 게시판 삭제 */ + DELETE FROM XIT_BBS + WHERE 1=1 + AND BBS_ID = #{bbs_id} + AND NTT_ID = #{ntt_id} + + + + + + + + + /** addXitCmmnClCode */ + /** 공통분류코드 등록 */ + INSERT INTO XIT_CMMN_CL_CODE( + CL_CODE + ,CL_CODE_NM + ,CL_CODE_DC + ,USE_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{cl_code } + ,#{cl_code_nm } + ,#{cl_code_dc } + ,#{use_at } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitCmmnClCode */ + /** 공통분류코드 수정 */ + UPDATE XIT_CMMN_CL_CODE + SET + LAST_UPDT_PNTTM = NOW() + ,CL_CODE_NM = #{cl_code_nm } + ,CL_CODE_DC = #{cl_code_dc } + ,USE_AT = #{use_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND CL_CODE = #{cl_code} + + + /** removeXitCmmnClCode */ + /** 공통분류코드 삭제 */ + DELETE FROM XIT_CMMN_CL_CODE + WHERE 1=1 + AND CL_CODE = #{cl_code} + + + + + + + + + /** addXitCmmnCode */ + /** 공통코드 등록 */ + INSERT INTO XIT_CMMN_CODE( + 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( + #{code_id } + ,#{code_id_nm } + ,#{code_id_dc } + ,#{use_at } + ,#{cl_code } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitCmmnCode */ + /** 공통코드 수정 */ + UPDATE XIT_CMMN_CODE + SET + LAST_UPDT_PNTTM = NOW() + ,CODE_ID_NM = #{code_id_nm } + ,CODE_ID_DC = #{code_id_dc } + ,USE_AT = #{use_at } + ,CL_CODE = #{cl_code } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND CODE_ID = #{code_id} + + + /** removeXitCmmnCode */ + /** 공통코드 삭제 */ + DELETE FROM XIT_CMMN_CODE + WHERE 1=1 + AND CODE_ID = #{code_id} + + + + + + + + + + /** addXitCmmnDetailCode */ + /** 공통상세코드 등록 */ + INSERT INTO XIT_CMMN_DETAIL_CODE( + CODE_ID + ,CODE + ,CODE_NM + ,CODE_DC + ,USE_AT + ,ETC_1 + ,ETC_2 + ,ETC_3 + ,ORDR + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{code_id } + ,#{code } + ,#{code_nm } + ,#{code_dc } + ,#{use_at } + ,#{etc_1 } + ,#{etc_2 } + ,#{etc_3 } + ,#{ordr } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitCmmnDetailCode */ + /** 공통상세코드 수정 */ + UPDATE XIT_CMMN_DETAIL_CODE + SET + LAST_UPDT_PNTTM = NOW() + ,CODE_NM = #{code_nm } + ,CODE_DC = #{code_dc } + ,USE_AT = #{use_at } + ,ETC_1 = #{etc_1 } + ,ETC_2 = #{etc_2 } + ,ETC_3 = #{etc_3 } + ,ORDR = #{ordr } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND CODE_ID = #{code_id} + AND CODE = #{code } + + + /** removeXitCmmnDetailCode */ + /** 공통상세코드 삭제 */ + DELETE + FROM XIT_CMMN_DETAIL_CODE + WHERE 1=1 + AND CODE_ID = #{code_id} + AND CODE = #{code } + + + + + + + + + /** addXitConectLog */ + /** 접속로그 등록 */ + INSERT INTO XIT_CONECT_LOG( + LOG_ID + ,CONECT_ID + ,CONECT_IP + ,CONECT_MTHD + ,ERROR_OCCRRNC_AT + ,ERROR_CODE + ,CREAT_DT + )VALUES( + #{log_id } + ,#{conect_id } + ,#{conect_ip } + ,#{conect_mthd } + ,#{error_occrrnc_at} + ,#{error_code } + ,NOW() + ) + + + /** modifyXitConectLog */ + /** 접속로그 수정 */ + UPDATE XIT_CONECT_LOG + SET + CREAT_DT = CREAT_DT + ,CONECT_ID = #{conect_id } + ,CONECT_IP = #{conect_ip } + ,CONECT_MTHD = #{conect_mthd } + ,ERROR_OCCRRNC_AT = #{error_occrrnc_at} + ,ERROR_CODE = #{error_code } + WHERE 1=1 + AND LOG_ID = #{log_id} + + + /** removeXitConectLog */ + /** 접속로그 삭제 */ + DELETE + FROM XIT_CONECT_LOG + WHERE 1=1 + AND LOG_ID = #{log_id} + + + + + + + + + /** addXitEntrprsMber */ + /** 기업회원 등록 */ + INSERT INTO XIT_ENTRPRS_MBER( + ENTRPRS_MBER_ID + ,ENTRPRS_SE_CODE + ,BIZRNO + ,JURIRNO + ,CMPNY_NM + ,CXFC + ,ZIP + ,ADRES + ,ENTRPRS_MIDDLE_TELNO + ,FXNUM + ,INDUTY_CODE + ,APPLCNT_NM + ,APPLCNT_IHIDNUM + ,SBSCRB_DE + ,ENTRPRS_MBER_STTUS + ,ENTRPRS_MBER_PASSWORD + ,ENTRPRS_MBER_PASSWORD_HINT + ,ENTRPRS_MBER_PASSWORD_CNSR + ,GROUP_ID + ,DETAIL_ADRES + ,ENTRPRS_END_TELNO + ,AREA_NO + ,APPLCNT_EMAIL_ADRES + ,ESNTL_ID + )VALUES( + #{entrprs_mber_id } + ,#{entrprs_se_code } + ,#{bizrno } + ,#{jurirno } + ,#{cmpny_nm } + ,#{cxfc } + ,#{zip } + ,#{adres } + ,#{entrprs_middle_telno } + ,#{fxnum } + ,#{induty_code } + ,#{applcnt_nm } + ,#{applcnt_ihidnum } + ,NOW() + ,#{entrprs_mber_sttus } + ,#{entrprs_mber_password } + ,#{entrprs_mber_password_hint} + ,#{entrprs_mber_password_cnsr} + ,#{group_id } + ,#{detail_adres } + ,#{entrprs_end_telno } + ,#{area_no } + ,#{applcnt_email_adres } + ,#{esntl_id } + ) + + + /** modifyXitEntrprsMber */ + /** 기업회원 수정 */ + UPDATE XIT_ENTRPRS_MBER + SET + ESNTL_ID = IFNULL(#{esntl_id}, ESNTL_ID) + ,ENTRPRS_SE_CODE = #{entrprs_se_code } + ,BIZRNO = #{bizrno } + ,JURIRNO = #{jurirno } + ,CMPNY_NM = #{cmpny_nm } + ,CXFC = #{cxfc } + ,ZIP = #{zip } + ,ADRES = #{adres } + ,ENTRPRS_MIDDLE_TELNO = #{entrprs_middle_telno } + ,FXNUM = #{fxnum } + ,INDUTY_CODE = #{induty_code } + ,APPLCNT_NM = #{applcnt_nm } + ,APPLCNT_IHIDNUM = #{applcnt_ihidnum } + ,SBSCRB_DE = #{sbscrb_de } + ,ENTRPRS_MBER_STTUS = #{entrprs_mber_sttus } + ,ENTRPRS_MBER_PASSWORD = #{entrprs_mber_password } + ,ENTRPRS_MBER_PASSWORD_HINT = #{entrprs_mber_password_hint} + ,ENTRPRS_MBER_PASSWORD_CNSR = #{entrprs_mber_password_cnsr} + ,GROUP_ID = #{group_id } + ,DETAIL_ADRES = #{detail_adres } + ,ENTRPRS_END_TELNO = #{entrprs_end_telno } + ,AREA_NO = #{area_no } + ,APPLCNT_EMAIL_ADRES = #{applcnt_email_adres } + WHERE 1=1 + AND ENTRPRS_MBER_ID = #{entrprs_mber_id} + + + /** removeXitEntrprsMber */ + /** 기업회원 삭제 */ + DELETE FROM XIT_ENTRPRS_MBER + WHERE 1=1 + AND ENTRPRS_MBER_ID = #{entrprs_mber_id} + + + + + + + + + /** addXitFileAttrb */ + /** 파일속성 등록 */ + INSERT INTO XIT_FILE_ATTRB( + ATCH_FILE_ID + ,CREAT_DT + ,USE_AT + )VALUES( + #{atch_file_id} + ,NOW() + ,#{use_at } + ) + + + /** modifyXitFileAttrb */ + /** 파일속성 수정 */ + UPDATE XIT_FILE_ATTRB + SET + USE_AT = IFNULL(#{use_at}, USE_AT) + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + + + /** removeXitFileAttrb */ + /** 파일속성 삭제 */ + DELETE FROM XIT_FILE_ATTRB + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + + + + + + + + + /** addXitFileDetailInfo */ + /** 파일상세정보 등록 */ + INSERT INTO XIT_FILE_DETAIL_INFO( + ATCH_FILE_ID + ,FILE_SN + ,FILE_STRE_COURS + ,STRE_FILE_NM + ,ORIGNL_FILE_NM + ,FILE_EXTSN + ,FILE_CN + ,FILE_SIZE + )VALUES( + #{atch_file_id } + ,#{file_sn } + ,#{file_stre_cours} + ,#{stre_file_nm } + ,#{orignl_file_nm } + ,#{file_extsn } + ,#{file_cn } + ,#{file_size } + ) + + + /** modifyXitFileDetailInfo */ + /** 파일상세정보 수정 */ + UPDATE XIT_FILE_DETAIL_INFO + SET + FILE_SN = FILE_SN + ,FILE_STRE_COURS = #{file_stre_cours} + ,STRE_FILE_NM = #{stre_file_nm } + ,ORIGNL_FILE_NM = #{orignl_file_nm } + ,FILE_EXTSN = #{file_extsn } + ,FILE_CN = #{file_cn } + ,FILE_SIZE = #{file_size } + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + AND FILE_SN = #{file_sn } + + + /** removeXitFileDetailInfo */ + /** 파일상세정보 삭제 */ + DELETE FROM XIT_FILE_DETAIL_INFO + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + AND FILE_SN = #{file_sn } + + + + + + + + + /** addXitGnrlMber */ + /** 일반회원 등록 */ + INSERT INTO XIT_GNRL_MBER( + MBER_ID + ,PASSWORD + ,PASSWORD_HINT + ,PASSWORD_CNSR + ,IHIDNUM + ,MBER_NM + ,ZIP + ,ADRES + ,AREA_NO + ,MBER_STTUS + ,DETAIL_ADRES + ,END_TELNO + ,MBTLNUM + ,GROUP_ID + ,MBER_FXNUM + ,MBER_EMAIL_ADRES + ,MIDDLE_TELNO + ,SBSCRB_DE + ,SEXDSTN_CODE + ,ESNTL_ID + )VALUES( + #{mber_id } + ,#{password } + ,#{password_hint } + ,#{password_cnsr } + ,#{ihidnum } + ,#{mber_nm } + ,#{zip } + ,#{adres } + ,#{area_no } + ,#{mber_sttus } + ,#{detail_adres } + ,#{end_telno } + ,#{mbtlnum } + ,#{group_id } + ,#{mber_fxnum } + ,#{mber_email_adres} + ,#{middle_telno } + ,NOW() + ,#{sexdstn_code } + ,#{esntl_id } + ) + + + /** modifyXitGnrlMber */ + /** 일반회원 수정 */ + UPDATE XIT_GNRL_MBER + SET + ESNTL_ID = IFNULL(#{esntl_id }, ESNTL_ID) + ,PASSWORD = #{password } + ,PASSWORD_HINT = #{password_hint } + ,PASSWORD_CNSR = #{password_cnsr } + ,IHIDNUM = #{ihidnum } + ,MBER_NM = #{mber_nm } + ,ZIP = #{zip } + ,ADRES = #{adres } + ,AREA_NO = #{area_no } + ,MBER_STTUS = #{mber_sttus } + ,DETAIL_ADRES = #{detail_adres } + ,END_TELNO = #{end_telno } + ,MBTLNUM = #{mbtlnum } + ,GROUP_ID = #{group_id } + ,MBER_FXNUM = #{mber_fxnum } + ,MBER_EMAIL_ADRES = #{mber_email_adres} + ,MIDDLE_TELNO = #{middle_telno } + ,SBSCRB_DE = #{sbscrb_de } + ,SEXDSTN_CODE = #{sexdstn_code } + WHERE 1=1 + AND MBER_ID = #{mber_id} + + + /** removeXitGnrlMber */ + /** 일반회원 삭제 */ + DELETE FROM XIT_GNRL_MBER + WHERE 1=1 + AND MBER_ID = #{mber_id} + + + + + + + + + /** addXitIds */ + /** IDS 등록 */ + INSERT INTO XIT_IDS( + TABLE_NM + ,NEXT_ID + )VALUES( + #{table_nm} + ,#{next_id} + ) + + + /** modifyXitIds */ + /** IDS 수정 */ + UPDATE XIT_IDS + SET + NEXT_ID = IFNULL(#{next_id}, NEXT_ID) + WHERE 1=1 + AND TABLE_NM = #{table_nm} + + + /** removeXitIds */ + /** IDS 삭제 */ + DELETE FROM XIT_IDS + WHERE 1=1 + AND TABLE_NM = #{table_nm} + + + + + + + + + /** addXitLoginPolicy */ + /** 로그인정책 등록 */ + INSERT INTO XIT_LOGIN_POLICY( + USER_ID + ,IP_INFO + ,DPLCT_PERM_AT + ,LMTT_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + + ,LAST_UPDUSR_ID + )VALUES( + #{user_id } + ,#{ip_info } + ,#{dplct_perm_at } + ,#{lmtt_at } + ,NOW() + ,#{frst_register_id } + ,NOW() + + ,#{frst_register_id } + ) + + + /** modifyXitLoginPolicy */ + /** 로그인정책 수정 */ + UPDATE XIT_LOGIN_POLICY + SET + LAST_UPDT_PNTTM = NOW() + ,IP_INFO = #{ip_info } + ,DPLCT_PERM_AT = #{dplct_perm_at } + ,LMTT_AT = #{lmtt_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitLoginPolicy */ + /** 로그인정책 삭제 */ + DELETE + FROM XIT_LOGIN_POLICY + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + /** addXitMenuCreatDtls */ + /** 메뉴생성내역 등록 */ + INSERT INTO XIT_MENU_CREAT_DTLS( + MENU_NO + ,AUTHOR_CODE + ,MAPNG_CREAT_ID + )VALUES( + #{menu_no } + ,#{author_code } + ,#{mapng_creat_id} + ) + + + /** modifyXitMenuCreatDtls */ + /** 메뉴생성내역 수정 */ + UPDATE XIT_MENU_CREAT_DTLS + SET + MAPNG_CREAT_ID = IFNULL(#{mapng_creat_id}, MAPNG_CREAT_ID) + WHERE 1=1 + AND MENU_NO = #{menu_no } + AND AUTHOR_CODE = #{author_code } + + + /** removeXitMenuCreatDtls */ + /** 메뉴생성내역 삭제 */ + DELETE FROM XIT_MENU_CREAT_DTLS + WHERE 1=1 + AND MENU_NO = #{menu_no } + AND AUTHOR_CODE = #{author_code } + + + + + + + + + /** addXitMenuInfo */ + /** 메뉴정보 등록 */ + INSERT INTO XIT_MENU_INFO( + MENU_NO + ,MENU_NM + ,PROGRM_FILE_NM + ,UPPER_MENU_NO + ,MENU_ORDR + ,MENU_DC + ,RELATE_IMAGE_COURS + ,RELATE_IMAGE_NM + )VALUES( + #{menu_no } + ,#{menu_nm } + ,#{progrm_file_nm } + ,#{upper_menu_no } + ,#{menu_ordr } + ,#{menu_dc } + ,#{relate_image_cours} + ,#{relate_image_nm } + ) + + + /** modifyXitMenuInfo */ + /** 메뉴정보 수정 */ + UPDATE XIT_MENU_INFO + SET + MENU_NM = IFNULL(#{menu_nm }, MENU_NM) + ,PROGRM_FILE_NM = #{progrm_file_nm } + ,UPPER_MENU_NO = #{upper_menu_no } + ,MENU_ORDR = #{menu_ordr } + ,MENU_DC = #{menu_dc } + ,RELATE_IMAGE_COURS = #{relate_image_cours} + ,RELATE_IMAGE_NM = #{relate_image_nm } + WHERE 1=1 + AND MENU_NO = #{menu_no} + + + /** removeXitMenuInfo */ + /** 메뉴정보 삭제 */ + DELETE FROM XIT_MENU_INFO + WHERE 1=1 + AND MENU_NO = #{menu_no} + + + + + + + + + /** addXitOrgnztInfo */ + /** 조직정보 등록 */ + INSERT INTO XIT_ORGNZT_INFO( + ORGNZT_ID + ,ORGNZT_NM + ,ORGNZT_DC + )VALUES( + #{orgnzt_id } + ,#{orgnzt_nm} + ,#{orgnzt_dc} + ) + + + /** modifyXitOrgnztInfo */ + /** 조직정보 수정 */ + UPDATE XIT_ORGNZT_INFO + SET + ORGNZT_NM = IFNULL(#{orgnzt_nm}, ORGNZT_NM) + ,ORGNZT_DC = #{orgnzt_dc} + WHERE 1=1 + AND ORGNZT_ID = #{orgnzt_id} + + + /** removeXitOrgnztInfo */ + /** 조직정보 삭제 */ + DELETE FROM XIT_ORGNZT_INFO + WHERE 1=1 + AND ORGNZT_ID = #{orgnzt_id} + + + + + + + + + /** addXitProgrmList */ + /** 프로그램목록 등록 */ + INSERT INTO XIT_PROGRM_LIST( + PROGRM_FILE_NM + ,PROGRM_STRE_COURS + ,PROGRM_KOREAN_NM + ,PROGRM_DC + ,URL + )VALUES( + #{progrm_file_nm } + ,#{progrm_stre_cours} + ,#{progrm_korean_nm } + ,#{progrm_dc } + ,#{url } + ) + + + /** modifyXitProgrmList */ + /** 프로그램목록 수정 */ + UPDATE XIT_PROGRM_LIST + SET + PROGRM_KOREAN_NM = IFNULL(#{progrm_korean_nm }, PROGRM_KOREAN_NM) + ,PROGRM_STRE_COURS = #{progrm_stre_cours} + ,PROGRM_DC = #{progrm_dc } + ,URL = #{url } + WHERE 1=1 + AND PROGRM_FILE_NM = #{progrm_file_nm} + + + /** removeXitProgrmList */ + /** 프로그램목록 삭제 */ + DELETE FROM XIT_PROGRM_LIST + WHERE 1=1 + AND PROGRM_FILE_NM = #{progrm_file_nm} + + + + + + + + + /** addXitRoleInfo */ + /** 역할정보 등록 */ + INSERT INTO XIT_ROLE_INFO( + ROLE_CODE + ,ROLE_NM + ,ROLE_PTTRN + ,ROLE_DC + ,ROLE_TY + ,ROLE_SORT + ,ROLE_CREAT_DE + )VALUES( + #{role_code } + ,#{role_nm } + ,#{role_pttrn } + ,#{role_dc } + ,#{role_ty } + ,#{role_sort } + ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ) + + + /** modifyXitRoleInfo */ + /** 역할정보 수정 */ + UPDATE XIT_ROLE_INFO + SET + ROLE_NM = IFNULL(#{role_nm }, ROLE_NM) + ,ROLE_PTTRN = #{role_pttrn } + ,ROLE_DC = #{role_dc } + ,ROLE_TY = #{role_ty } + ,ROLE_SORT = #{role_sort } + ,ROLE_CREAT_DE = #{role_creat_de} + WHERE 1=1 + AND ROLE_CODE = #{role_code} + + + /** removeXitRoleInfo */ + /** 역할정보 삭제 */ + DELETE FROM XIT_ROLE_INFO + WHERE 1=1 + AND ROLE_CODE = #{role_code} + + + + + + + + + /** addXitRoleSclsrtRescue */ + /** 역할계층구조 등록 */ + INSERT INTO XIT_ROLE_SCLSRT_RESCUE( + PARNTS_ROLE + ,CHLDRN_ROLE + )VALUES( + #{parnts_role } + ,#{chldrn_role} + ) + + + /** modifyXitRoleSclsrtRescue */ + /** 역할계층구조 수정 */ + + + + + + + + /** removeXitRoleSclsrtRescue */ + /** 역할계층구조 삭제 */ + DELETE FROM XIT_ROLE_SCLSRT_RESCUE + WHERE 1=1 + AND PARNTS_ROLE = #{parnts_role} + AND CHLDRN_ROLE = #{chldrn_role} + + + /** removesXitRoleSclsrtRescue */ + /** 역할계층구조 다건 삭제 */ + DELETE FROM XIT_ROLE_SCLSRT_RESCUE + WHERE 1=1 + AND PARNTS_ROLE = #{parnts_role} + AND CHLDRN_ROLE = #{chldrn_role} + + + + + + + + + /** addXitSysLogSumry */ + /** 시스템로그요약 등록 */ + INSERT INTO XIT_SYS_LOG_SUMRY( + OCCRRNC_DE + ,SRVC_NM + ,METHOD_NM + ,CREAT_CO + ,UPDT_CO + ,RDCNT + ,DELETE_CO + ,OUTPT_CO + ,ERROR_CO + )VALUES( + #{occrrnc_de} + ,#{srvc_nm } + ,#{method_nm} + ,#{creat_co } + ,#{updt_co } + ,#{rdcnt } + ,#{delete_co} + ,#{outpt_co } + ,#{error_co } + ) + + + /** modifyXitSysLogSumry */ + /** 시스템로그요약 수정 */ + + + + + + + + + + + + + + + /** removeXitSysLogSumry */ + /** 시스템로그요약 삭제 */ + DELETE FROM XIT_SYS_LOG_SUMRY + WHERE 1=1 + AND OCCRRNC_DE = #{occrrnc_de} + AND SRVC_NM = #{srvc_nm } + AND METHOD_NM = #{method_nm } + + + + + + + + + /** addXitTmplatInfo */ + /** 템플릿정보 등록 */ + INSERT INTO XIT_TMPLAT_INFO( + TMPLAT_ID + ,TMPLAT_NM + ,TMPLAT_COURS + ,USE_AT + ,TMPLAT_SE_CODE + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{tmplat_id } + ,#{tmplat_nm } + ,#{tmplat_cours } + ,#{use_at } + ,#{tmplat_se_code } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitTmplatInfo */ + /** 템플릿정보 수정 */ + UPDATE XIT_TMPLAT_INFO + SET + LAST_UPDT_PNTTM = NOW() + ,TMPLAT_NM = #{tmplat_nm } + ,TMPLAT_COURS = #{tmplat_cours } + ,USE_AT = #{use_at } + ,TMPLAT_SE_CODE = #{tmplat_se_code } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND TMPLAT_ID = #{tmplat_id} + + + /** removeXitTmplatInfo */ + /** 템플릿정보 삭제 */ + DELETE FROM XIT_TMPLAT_INFO + WHERE 1=1 + AND TMPLAT_ID = #{tmplat_id} + + + + + + + + + /** addXitUserAbsnce */ + /** 사용자부재 등록 */ + INSERT INTO XIT_USER_ABSNCE( + USER_ID + ,USER_ABSNCE_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{user_id } + ,#{user_absnce_at } + ,NOW() + ,#{frst_register_id } + ,NOW() + ,#{last_updusr_id } + ) + + + /** modifyXitUserAbsnce */ + /** 사용자부재 수정 */ + UPDATE XIT_USER_ABSNCE + SET + LAST_UPDT_PNTTM = NOW() + ,USER_ABSNCE_AT = #{user_absnce_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitUserAbsnce */ + /** 사용자부재 삭제 */ + DELETE FROM XIT_USER_ABSNCE + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + /** addXitUserEtcOption */ + /** 사용자기타옵션 등록 */ + INSERT INTO XIT_USER_ETC_OPTION( + USER_ID + ,JOB_DATA_AUTHOR + ,USER_MANAGE_AUTHOR + ,ELCTRNSANCTN_USE_AT + ,JOB_CONFM_AUTHOR_AT + )VALUES( + #{user_id } + ,#{job_data_author } + ,#{user_manage_author } + ,#{elctrnsanctn_use_at} + ,#{job_confm_author_at} + ) + + + /** modifyXitUserEtcOption */ + /** 사용자기타옵션 수정 */ + UPDATE XIT_USER_ETC_OPTION + + JOB_DATA_AUTHOR = #{job_data_author }, + USER_MANAGE_AUTHOR = #{user_manage_author }, + ELCTRNSANCTN_USE_AT= #{elctrnsanctn_use_at}, + JOB_CONFM_AUTHOR_AT= #{job_confm_author_at}, + + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitUserEtcOption */ + /** 사용자기타옵션 삭제 */ + DELETE FROM XIT_USER_ETC_OPTION + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + + + + /** addXitUserInfoChangeDtls */ + /** 사용자정보변경내역 등록 */ + INSERT INTO XIT_USER_INFO_CHANGE_DTLS( + USER_ID + ,CHANGE_DE + ,ORGNZT_ID + ,GROUP_ID + ,EMPL_NO + ,SEXDSTN_CODE + ,BRTHDY + ,FXNUM + ,HOUSE_ADRES + ,HOUSE_END_TELNO + ,AREA_NO + ,DETAIL_ADRES + ,ZIP + ,OFFM_TELNO + ,MBTLNUM + ,EMAIL_ADRES + ,HOUSE_MIDDLE_TELNO + ,PSTINST_CODE + ,USER_STTUS_CODE + ,ESNTL_ID + )VALUES( + #{user_id } + ,DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ,#{orgnzt_id } + ,#{group_id } + ,#{empl_no } + ,#{sexdstn_code } + ,#{brthdy } + ,#{fxnum } + ,#{house_adres } + ,#{house_end_telno } + ,#{area_no } + ,#{detail_adres } + ,#{zip } + ,#{offm_telno } + ,#{mbtlnum } + ,#{email_adres } + ,#{house_middle_telno} + ,#{pstinst_code } + ,#{user_sttus_code } + ,#{esntl_id } + ) + + + /** modifyXitUserInfoChangeDtls */ + /** 사용자정보변경내역 수정 */ + UPDATE XIT_USER_INFO_CHANGE_DTLS + SET + CHANGE_DE = DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') + ,ORGNZT_ID = #{orgnzt_id } + ,GROUP_ID = #{group_id } + ,EMPL_NO = #{empl_no } + ,SEXDSTN_CODE = #{sexdstn_code } + ,BRTHDY = #{brthdy } + ,FXNUM = #{fxnum } + ,HOUSE_ADRES = #{house_adres } + ,HOUSE_END_TELNO = #{house_end_telno } + ,AREA_NO = #{area_no } + ,DETAIL_ADRES = #{detail_adres } + ,ZIP = #{zip } + ,OFFM_TELNO = #{offm_telno } + ,MBTLNUM = #{mbtlnum } + ,EMAIL_ADRES = #{email_adres } + ,HOUSE_MIDDLE_TELNO = #{house_middle_telno} + ,PSTINST_CODE = #{pstinst_code } + ,USER_STTUS_CODE = #{user_sttus_code } + ,ESNTL_ID = #{esntl_id } + WHERE 1=1 + AND USER_ID = #{user_id } + AND CHANGE_DE = #{change_de} + + + /** removeXitUserInfoChangeDtls */ + /** 사용자정보변경내역 삭제 */ + DELETE FROM XIT_USER_INFO_CHANGE_DTLS + WHERE 1=1 + AND USER_ID = #{user_id } + AND CHANGE_DE = #{change_de} + + + /** removeXitUserInfoChangeDtls */ + /** 사용자정보변경내역 목록 삭제 */ + DELETE FROM XIT_USER_INFO_CHANGE_DTLS + WHERE 1=1 + AND USER_ID = #{user_id } + + + + + + + + + /** addXitUserInfo */ + /** 사용자정보 등록 */ + INSERT INTO XIT_USER_INFO( + USER_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 + ,USER_STTUS_CODE + ,ESNTL_ID + ,CRTFC_DN_VALUE + ,SBSCRB_DE + )VALUES( + #{user_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 } + ,#{user_sttus_code } + ,#{esntl_id } + ,#{crtfc_dn_value } + ,NOW() + ) + + + /** modifyXitUserInfo */ + /** 사용자정보 수정 */ + UPDATE XIT_USER_INFO + SET + SBSCRB_DE = SBSCRB_DE + ,ORGNZT_ID = #{orgnzt_id } + ,USER_NM = #{user_nm } + ,PASSWORD = #{password } + ,EMPL_NO = #{empl_no } + ,IHIDNUM = #{ihidnum } + ,SEXDSTN_CODE = #{sexdstn_code } + ,BRTHDY = #{brthdy } + ,FXNUM = #{fxnum } + ,HOUSE_ADRES = #{house_adres } + ,PASSWORD_HINT = #{password_hint } + ,PASSWORD_CNSR = #{password_cnsr } + ,HOUSE_END_TELNO = #{house_end_telno } + ,AREA_NO = #{area_no } + ,DETAIL_ADRES = #{detail_adres } + ,ZIP = #{zip } + ,OFFM_TELNO = #{offm_telno } + ,MBTLNUM = #{mbtlnum } + ,EMAIL_ADRES = #{email_adres } + ,OFCPS_NM = #{ofcps_nm } + ,HOUSE_MIDDLE_TELNO = #{house_middle_telno } + ,GROUP_ID = #{group_id } + ,PSTINST_CODE = #{pstinst_code } + ,USER_STTUS_CODE = #{user_sttus_code } + ,ESNTL_ID = #{esntl_id } + ,CRTFC_DN_VALUE = #{crtfc_dn_value } + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitUserInfo */ + /** 사용자정보 삭제 */ + DELETE FROM XIT_USER_INFO + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + + + /** addXitUserScrtySetup */ + /** 사용자보안설정 등록 */ + INSERT INTO XIT_USER_SCRTY_SETUP( + SCRTY_SETUP_TRGET_ID + ,MBER_TY_CODE + ,AUTHOR_CODE + )VALUES( + #{scrty_setup_trget_id} + ,#{mber_ty_code } + ,#{author_code } + ) + + + /** modifyXitUserScrtySetup */ + /** 사용자보안설정 수정 */ + UPDATE XIT_USER_SCRTY_SETUP + SET + MBER_TY_CODE = IFNULL(#{mber_ty_code }, MBER_TY_CODE) + ,AUTHOR_CODE = #{author_code } + WHERE 1=1 + AND SCRTY_SETUP_TRGET_ID = #{scrty_setup_trget_id} + + + /** removeXitUserScrtySetup */ + /** 사용자보안설정 삭제 */ + DELETE FROM XIT_USER_SCRTY_SETUP + WHERE 1=1 + AND SCRTY_SETUP_TRGET_ID = #{scrty_setup_trget_id} + + + + + + + + + /** addXitZip */ + /** 우편번호 등록 */ + INSERT INTO XIT_ZIP( + 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( + #{zip } + ,#{sn } + ,#{ctprvn_nm } + ,#{signgu_nm } + ,#{emd_nm } + ,#{li_buld_nm } + ,#{lnbr_dong_ho } + ,NOW() + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitZip */ + /** 우편번호 수정 */ + UPDATE XIT_ZIP + SET + LAST_UPDT_PNTTM = NOW() + ,CTPRVN_NM = #{ctprvn_nm } + ,SIGNGU_NM = #{signgu_nm } + ,EMD_NM = #{emd_nm } + ,LI_BULD_NM = #{li_buld_nm } + ,LNBR_DONG_HO = #{lnbr_dong_ho } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND ZIP = #{zip} + AND SN = #{sn } + + + /** removeXitZip */ + /** 우편번호 삭제 */ + DELETE FROM XIT_ZIP + WHERE 1=1 + AND ZIP = #{zip} + AND SN = #{sn } + + + /** removesXitZip */ + /** 우편번호 다건 삭제 */ + DELETE FROM XIT_ZIP + WHERE 1=1 + AND ZIP = #{zip} + AND SN = #{sn } + + + + + + + + + /** addComtnbatchopert */ + /** 배치작업 등록 */ + INSERT INTO COMTNBATCHOPERT( + BATCH_OPERT_ID + ,BATCH_OPERT_NM + ,BATCH_OPERT_SE + ,BATCH_PROGRM + ,PARAMTR + ,USE_AT + ,FRST_REGISTER_ID + ,FRST_REGIST_PNTTM + ,LAST_UPDUSR_ID + ,LAST_UPDT_PNTTM + )VALUES( + #{batch_opert_id } + ,#{batch_opert_nm } + ,#{batch_opert_se } + ,#{batch_progrm } + ,#{paramtr } + ,#{use_at } + ,#{frst_register_id } + ,NOW() + ,#{last_updusr_id } + ,NOW() + ) + + + /** modifyComtnbatchopert */ + /** 배치작업 수정 */ + UPDATE COMTNBATCHOPERT + + BATCH_OPERT_NM = #{batch_opert_nm }, + BATCH_OPERT_SE = #{batch_opert_se }, + BATCH_PROGRM = #{batch_progrm }, + PARAMTR = #{paramtr }, + USE_AT = #{use_at }, + FRST_REGISTER_ID = #{frst_register_id }, + FRST_REGIST_PNTTM = #{frst_regist_pnttm}, + LAST_UPDUSR_ID = #{last_updusr_id }, + LAST_UPDT_PNTTM = NOW(), + + WHERE 1=1 + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removeComtnbatchopert */ + /** 배치작업 삭제 */ + DELETE FROM COMTNBATCHOPERT + WHERE 1=1 + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removesComtnbatchopert */ + /** 배치작업 다건 삭제 */ + DELETE FROM COMTNBATCHOPERT + WHERE 1=1 + AND BATCH_OPERT_ID = #{batch_opert_id } + AND BATCH_OPERT_NM = #{batch_opert_nm } + AND BATCH_OPERT_SE = #{batch_opert_se } + AND BATCH_PROGRM = #{batch_progrm } + AND PARAMTR = #{paramtr } + AND USE_AT = #{use_at } + AND FRST_REGISTER_ID = #{frst_register_id } + AND FRST_REGIST_PNTTM = #{frst_regist_pnttm} + AND LAST_UPDUSR_ID = #{last_updusr_id } + AND LAST_UPDT_PNTTM = #{last_updt_pnttm } + + + + + + + + + /** addComtnbatchschdul */ + /** 배치스케줄 등록 */ + INSERT INTO COMTNBATCHSCHDUL( + BATCH_SCHDUL_ID + ,BATCH_OPERT_ID + ,EXECUT_CYCLE + ,EXECUT_SCHDUL_DE + ,EXECUT_SCHDUL_HOUR + ,EXECUT_SCHDUL_MNT + ,EXECUT_SCHDUL_SECND + ,FRST_REGISTER_ID + ,FRST_REGIST_PNTTM + ,LAST_UPDUSR_ID + ,LAST_UPDT_PNTTM + )VALUES( + #{batch_schdul_id } + ,#{batch_opert_id } + ,#{execut_cycle } + ,#{execut_schdul_de } + ,#{execut_schdul_hour } + ,#{execut_schdul_mnt } + ,#{execut_schdul_secnd} + ,#{frst_register_id } + ,NOW() + ,#{last_updusr_id } + ,NOW() + ) + + + /** modifyComtnbatchschdul */ + /** 배치스케줄 수정 */ + UPDATE COMTNBATCHSCHDUL + + EXECUT_CYCLE = #{execut_cycle }, + EXECUT_SCHDUL_DE = #{execut_schdul_de }, + EXECUT_SCHDUL_HOUR = #{execut_schdul_hour }, + EXECUT_SCHDUL_MNT = #{execut_schdul_mnt }, + EXECUT_SCHDUL_SECND = #{execut_schdul_secnd}, + FRST_REGISTER_ID = #{frst_register_id }, + FRST_REGIST_PNTTM = #{frst_regist_pnttm }, + LAST_UPDUSR_ID = #{last_updusr_id }, + LAST_UPDT_PNTTM = NOW(), + + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removeComtnbatchschdul */ + /** 배치스케줄 삭제 */ + DELETE FROM COMTNBATCHSCHDUL + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removesComtnbatchschdul */ + /** 배치스케줄 다건 삭제 */ + DELETE FROM COMTNBATCHSCHDUL + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + AND EXECUT_CYCLE = #{execut_cycle } + AND EXECUT_SCHDUL_DE = #{execut_schdul_de } + AND EXECUT_SCHDUL_HOUR = #{execut_schdul_hour } + AND EXECUT_SCHDUL_MNT = #{execut_schdul_mnt } + AND EXECUT_SCHDUL_SECND = #{execut_schdul_secnd} + AND FRST_REGISTER_ID = #{frst_register_id } + AND FRST_REGIST_PNTTM = #{frst_regist_pnttm } + AND LAST_UPDUSR_ID = #{last_updusr_id } + AND LAST_UPDT_PNTTM = #{last_updt_pnttm } + + + + + + + + + /** addComtnbatchschduldfk */ + /** 배치스케줄요일 등록 */ + INSERT INTO COMTNBATCHSCHDULDFK( + BATCH_SCHDUL_ID + ,EXECUT_SCHDUL_DFK_SE + )VALUES( + #{batch_schdul_id } + ,#{execut_schdul_dfk_se} + ) + + + /** modifyComtnbatchschduldfk */ + /** 배치스케줄요일 수정 */ + UPDATE COMTNBATCHSCHDULDFK + + EXECUT_SCHDUL_DFK_SE = #{execut_schdul_dfk_se} + + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + + + /** removeComtnbatchschduldfk */ + /** 배치스케줄요일 삭제 */ + DELETE FROM COMTNBATCHSCHDULDFK + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND EXECUT_SCHDUL_DFK_SE = #{execut_schdul_dfk_se} + + + /** removesComtnbatchschduldfk */ + /** 배치스케줄요일 다건 삭제 */ + DELETE FROM COMTNBATCHSCHDULDFK + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND EXECUT_SCHDUL_DFK_SE = #{execut_schdul_dfk_se} + + + + + + + + + /** addComtnbatchresult */ + /** 배치결과 등록 */ + INSERT INTO COMTNBATCHRESULT( + BATCH_RESULT_ID + ,BATCH_SCHDUL_ID + ,BATCH_OPERT_ID + ,PARAMTR + ,STTUS + ,ERROR_INFO + ,EXECUT_BEGIN_TM + ,EXECUT_END_TM + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + )VALUES( + #{batch_result_id } + ,#{batch_schdul_id } + ,#{batch_opert_id } + ,#{paramtr } + ,#{sttus } + ,#{error_info } + ,#{execut_begin_tm } + ,#{execut_end_tm } + ,NOW() + ,#{last_updusr_id } + ,NOW() + ,#{frst_register_id } + ) + + + /** modifyComtnbatchresult */ + /** 배치결과 수정 */ + UPDATE COMTNBATCHRESULT + + BATCH_SCHDUL_ID = #{batch_schdul_id }, + BATCH_OPERT_ID = #{batch_opert_id }, + PARAMTR = #{paramtr }, + STTUS = #{sttus }, + ERROR_INFO = #{error_info }, + EXECUT_BEGIN_TM = #{execut_begin_tm }, + EXECUT_END_TM = #{execut_end_tm }, + LAST_UPDT_PNTTM = NOW(), + LAST_UPDUSR_ID = #{last_updusr_id }, + FRST_REGIST_PNTTM = #{frst_regist_pnttm}, + FRST_REGISTER_ID = #{frst_register_id }, + + WHERE 1=1 + AND BATCH_RESULT_ID = #{batch_result_id } + + + /** removeComtnbatchresult */ + /** 배치결과 삭제 */ + DELETE FROM COMTNBATCHRESULT + WHERE 1=1 + AND BATCH_RESULT_ID = #{batch_result_id } + + + /** removesComtnbatchresult */ + /** 배치결과 다건 삭제 */ + DELETE FROM COMTNBATCHRESULT + WHERE 1=1 + AND BATCH_RESULT_ID = #{batch_result_id } + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + AND PARAMTR = #{paramtr } + AND STTUS = #{sttus } + AND ERROR_INFO = #{error_info } + AND EXECUT_BEGIN_TM = #{execut_begin_tm } + AND EXECUT_END_TM = #{execut_end_tm } + AND LAST_UPDT_PNTTM = #{last_updt_pnttm } + AND LAST_UPDUSR_ID = #{last_updusr_id } + AND FRST_REGIST_PNTTM = #{frst_regist_pnttm} + AND FRST_REGISTER_ID = #{frst_register_id } + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameCrud-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameCrud-oracle-mapper.xml new file mode 100644 index 00000000..32a3559d --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameCrud-oracle-mapper.xml @@ -0,0 +1,3469 @@ + + + + + + + + /** addXitAuthorGroupInfo */ + /** 권한그룹정보 등록 */ + INSERT INTO XIT_AUTHOR_GROUP_INFO( + GROUP_ID + ,GROUP_NM + ,GROUP_CREAT_DE + ,GROUP_DC + ,AUTHOR_CODE + )VALUES( + #{group_id } + ,#{group_nm } + ,TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') + ,#{group_dc } + ,#{author_code } + ) + + + /** modifyXitAuthorGroupInfo */ + /** 권한그룹정보 수정 */ + UPDATE XIT_AUTHOR_GROUP_INFO + SET + GROUP_CREAT_DE = GROUP_CREAT_DE + ,GROUP_NM = #{group_nm } + ,GROUP_DC = #{group_dc } + ,AUTHOR_CODE = #{author_code} + WHERE 1=1 + AND GROUP_ID = #{group_id} + + + /** removeXitAuthorGroupInfo */ + /** 권한그룹정보 삭제 */ + DELETE FROM XIT_AUTHOR_GROUP_INFO + WHERE 1=1 + AND GROUP_ID = #{group_id} + + + + + + + + + /** addXitAuthorInfo */ + /** 권한정보 등록 */ + INSERT INTO XIT_AUTHOR_INFO( + AUTHOR_CODE + ,AUTHOR_NM + ,AUTHOR_DC + ,AUTHOR_CREAT_DE + )VALUES( + #{author_code } + ,#{author_nm } + ,#{author_dc } + ,TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') + ) + + + /** modifyXitAuthorInfo */ + /** 권한정보 수정 */ + UPDATE XIT_AUTHOR_INFO + SET + AUTHOR_CREAT_DE = AUTHOR_CREAT_DE + ,AUTHOR_NM = #{author_nm} + ,AUTHOR_DC = #{author_dc} + WHERE 1=1 + AND AUTHOR_CODE = #{author_code} + + + /** removeXitAuthorInfo */ + /** 권한정보 삭제 */ + DELETE FROM XIT_AUTHOR_INFO + WHERE 1=1 + AND AUTHOR_CODE = #{author_code} + + + + + + + + + /** addXitAuthorRoleRelate */ + /** 권한역할관계 등록 */ + INSERT INTO XIT_AUTHOR_ROLE_RELATE( + AUTHOR_CODE + ,ROLE_CODE + ,CREAT_DT + )VALUES( + #{author_code} + ,#{role_code } + ,SYSDATE + ) + + + /** modifyXitAuthorRoleRelate */ + /** 권한역할관계 수정 */ + + + + + + + + /** removeXitAuthorRoleRelate */ + /** 권한역할관계 삭제 */ + DELETE FROM XIT_AUTHOR_ROLE_RELATE + WHERE 1=1 + AND AUTHOR_CODE = #{author_code} + AND ROLE_CODE = #{role_code } + + + + + + + + + /** addXitBbsMastrOption */ + /** 게시판마스터옵션 등록 */ + INSERT INTO XIT_BBS_MASTR_OPTION( + BBS_ID + ,ANSWER_AT + ,STSFDG_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{bbs_id } + ,#{answer_at } + ,#{stsfdg_at } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbsMastrOption */ + /** 게시판마스터옵션 수정 */ + UPDATE XIT_BBS_MASTR_OPTION + SET + LAST_UPDT_PNTTM = SYSDATE + ,ANSWER_AT = #{answer_at } + ,STSFDG_AT = #{stsfdg_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + /** removeXitBbsMastrOption */ + /** 게시판마스터옵션 삭제 */ + DELETE FROM XIT_BBS_MASTR_OPTION + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + + + + + + + /** addXitBbsMastr */ + /** 게시판마스터 등록 */ + INSERT INTO XIT_BBS_MASTR( + 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_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{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 } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbsMastr */ + /** 게시판마스터 수정 */ + UPDATE XIT_BBS_MASTR + SET + LAST_UPDT_PNTTM = SYSDATE + ,BBS_NM = #{bbs_nm } + ,BBS_INTRCN = #{bbs_intrcn } + ,BBS_TY_CODE = #{bbs_ty_code } + ,BBS_ATTRB_CODE = #{bbs_attrb_code } + ,REPLY_POSBL_AT = #{reply_posbl_at } + ,FILE_ATCH_POSBL_AT = #{file_atch_posbl_at } + ,ATCH_POSBL_FILE_NUMBER = #{atch_posbl_file_number} + ,ATCH_POSBL_FILE_SIZE = #{atch_posbl_file_size } + ,USE_AT = #{use_at } + ,TMPLAT_ID = #{tmplat_id } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm } + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + /** removeXitBbsMastr */ + /** 게시판마스터 삭제 */ + DELETE FROM XIT_BBS_MASTR + WHERE 1=1 + AND BBS_ID = #{bbs_id} + + + + + + + + /** addXitBbsPrcuse */ + /** 게시판활용 등록 */ + INSERT INTO XIT_BBS_PRCUSE( + TRGET_ID + ,BBS_ID + ,USE_AT + ,REGIST_SE_CODE + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{trget_id } + ,#{bbs_id } + ,#{use_at } + ,#{regist_se_code } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbsPrcuse */ + /** 게시판활용 수정 */ + UPDATE XIT_BBS_PRCUSE + SET + LAST_UPDT_PNTTM = SYSDATE + ,USE_AT = #{use_at } + ,REGIST_SE_CODE = #{regist_se_code } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND TRGET_ID = #{trget_id} + AND BBS_ID = #{bbs_id } + + + /** removeXitBbsPrcuse */ + /** 게시판활용 삭제 */ + DELETE FROM XIT_BBS_PRCUSE + WHERE 1=1 + AND TRGET_ID = #{trget_id} + AND BBS_ID = #{bbs_id } + + + + + + + + /** addXitBbs */ + /** 게시판 등록 */ + INSERT INTO XIT_BBS( + BBS_ID + ,NTT_ID + ,NTT_NO + ,NTT_SJ + ,NTT_CN + ,ANSWER_AT + ,PARNTS_SNTNC_NO + ,ANSWER_LC + ,SORT_ORDR + ,RDCNT + ,USE_AT + ,NTCE_BEGIN_DE + ,NTCE_END_DE + ,NTCR_ID + ,NTCR_NM + ,PASSWORD + ,ATCH_FILE_ID + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{bbs_id } + ,#{ntt_id } + ,#{ntt_no } + ,#{ntt_sj } + ,#{ntt_cn } + ,#{answer_at } + ,#{parnts_sntnc_no } + ,#{answer_lc } + ,#{sort_ordr } + ,#{rdcnt } + ,#{use_at } + ,#{ntce_begin_de } + ,#{ntce_end_de } + ,#{ntcr_id } + ,#{ntcr_nm } + ,#{password } + ,#{atch_file_id } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitBbs */ + /** 게시판 수정 */ + UPDATE XIT_BBS + SET + LAST_UPDT_PNTTM = SYSDATE + ,NTT_NO = #{ntt_no } + ,NTT_SJ = #{ntt_sj } + ,NTT_CN = #{ntt_cn } + ,ANSWER_AT = #{answer_at } + ,PARNTS_SNTNC_NO = #{parnts_sntnc_no } + ,ANSWER_LC = #{answer_lc } + ,SORT_ORDR = #{sort_ordr } + ,RDCNT = #{rdcnt } + ,USE_AT = #{use_at } + ,NTCE_BEGIN_DE = #{ntce_begin_de } + ,NTCE_END_DE = #{ntce_end_de } + ,NTCR_ID = #{ntcr_id } + ,NTCR_NM = #{ntcr_nm } + ,PASSWORD = #{password } + ,ATCH_FILE_ID = #{atch_file_id } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND BBS_ID = #{bbs_id} + AND NTT_ID = #{ntt_id} + + + /** removeXitBbs */ + /** 게시판 삭제 */ + DELETE FROM XIT_BBS + WHERE 1=1 + AND BBS_ID = #{bbs_id} + AND NTT_ID = #{ntt_id} + + + + + + + + + /** addXitCmmnClCode */ + /** 공통분류코드 등록 */ + INSERT INTO XIT_CMMN_CL_CODE( + CL_CODE + ,CL_CODE_NM + ,CL_CODE_DC + ,USE_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{cl_code } + ,#{cl_code_nm } + ,#{cl_code_dc } + ,#{use_at } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitCmmnClCode */ + /** 공통분류코드 수정 */ + UPDATE XIT_CMMN_CL_CODE + SET + LAST_UPDT_PNTTM = SYSDATE + ,CL_CODE_NM = #{cl_code_nm } + ,CL_CODE_DC = #{cl_code_dc } + ,USE_AT = #{use_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND CL_CODE = #{cl_code} + + + /** removeXitCmmnClCode */ + /** 공통분류코드 삭제 */ + DELETE FROM XIT_CMMN_CL_CODE + WHERE 1=1 + AND CL_CODE = #{cl_code} + + + + + + + + + /** addXitCmmnCode */ + /** 공통코드 등록 */ + INSERT INTO XIT_CMMN_CODE( + 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( + #{code_id } + ,#{code_id_nm } + ,#{code_id_dc } + ,#{use_at } + ,#{cl_code } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitCmmnCode */ + /** 공통코드 수정 */ + UPDATE XIT_CMMN_CODE + SET + LAST_UPDT_PNTTM = SYSDATE + ,CODE_ID_NM = #{code_id_nm } + ,CODE_ID_DC = #{code_id_dc } + ,USE_AT = #{use_at } + ,CL_CODE = #{cl_code } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND CODE_ID = #{code_id} + + + /** removeXitCmmnCode */ + /** 공통코드 삭제 */ + DELETE FROM XIT_CMMN_CODE + WHERE 1=1 + AND CODE_ID = #{code_id} + + + + + + + + + + /** addXitCmmnDetailCode */ + /** 공통상세코드 등록 */ + INSERT INTO XIT_CMMN_DETAIL_CODE( + CODE_ID + ,CODE + ,CODE_NM + ,CODE_DC + ,USE_AT + ,ETC_1 + ,ETC_2 + ,ETC_3 + ,ORDR + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{code_id } + ,#{code } + ,#{code_nm } + ,#{code_dc } + ,#{use_at } + ,#{etc_1 } + ,#{etc_2 } + ,#{etc_3 } + ,#{ordr } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitCmmnDetailCode */ + /** 공통상세코드 수정 */ + UPDATE XIT_CMMN_DETAIL_CODE + SET + LAST_UPDT_PNTTM = SYSDATE + ,CODE_NM = #{code_nm } + ,CODE_DC = #{code_dc } + ,USE_AT = #{use_at } + ,ETC_1 = #{etc_1 } + ,ETC_2 = #{etc_2 } + ,ETC_3 = #{etc_3 } + ,ORDR = #{ordr } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND CODE_ID = #{code_id} + AND CODE = #{code } + + + /** removeXitCmmnDetailCode */ + /** 공통상세코드 삭제 */ + DELETE + FROM XIT_CMMN_DETAIL_CODE + WHERE 1=1 + AND CODE_ID = #{code_id} + AND CODE = #{code } + + + + + + + + + /** addXitConectLog */ + /** 접속로그 등록 */ + INSERT INTO XIT_CONECT_LOG( + LOG_ID + ,CONECT_ID + ,CONECT_IP + ,CONECT_MTHD + ,ERROR_OCCRRNC_AT + ,ERROR_CODE + ,CREAT_DT + )VALUES( + #{log_id } + ,#{conect_id } + ,#{conect_ip } + ,#{conect_mthd } + ,#{error_occrrnc_at} + ,#{error_code } + ,SYSDATE + ) + + + /** modifyXitConectLog */ + /** 접속로그 수정 */ + UPDATE XIT_CONECT_LOG + SET + CREAT_DT = CREAT_DT + ,CONECT_ID = #{conect_id } + ,CONECT_IP = #{conect_ip } + ,CONECT_MTHD = #{conect_mthd } + ,ERROR_OCCRRNC_AT = #{error_occrrnc_at} + ,ERROR_CODE = #{error_code } + WHERE 1=1 + AND LOG_ID = #{log_id} + + + /** removeXitConectLog */ + /** 접속로그 삭제 */ + DELETE + FROM XIT_CONECT_LOG + WHERE 1=1 + AND LOG_ID = #{log_id} + + + + + + + + + /** addXitEntrprsMber */ + /** 기업회원 등록 */ + INSERT INTO XIT_ENTRPRS_MBER( + ENTRPRS_MBER_ID + ,ENTRPRS_SE_CODE + ,BIZRNO + ,JURIRNO + ,CMPNY_NM + ,CXFC + ,ZIP + ,ADRES + ,ENTRPRS_MIDDLE_TELNO + ,FXNUM + ,INDUTY_CODE + ,APPLCNT_NM + ,APPLCNT_IHIDNUM + ,SBSCRB_DE + ,ENTRPRS_MBER_STTUS + ,ENTRPRS_MBER_PASSWORD + ,ENTRPRS_MBER_PASSWORD_HINT + ,ENTRPRS_MBER_PASSWORD_CNSR + ,GROUP_ID + ,DETAIL_ADRES + ,ENTRPRS_END_TELNO + ,AREA_NO + ,APPLCNT_EMAIL_ADRES + ,ESNTL_ID + )VALUES( + #{entrprs_mber_id } + ,#{entrprs_se_code } + ,#{bizrno } + ,#{jurirno } + ,#{cmpny_nm } + ,#{cxfc } + ,#{zip } + ,#{adres } + ,#{entrprs_middle_telno } + ,#{fxnum } + ,#{induty_code } + ,#{applcnt_nm } + ,#{applcnt_ihidnum } + ,SYSDATE + ,#{entrprs_mber_sttus } + ,#{entrprs_mber_password } + ,#{entrprs_mber_password_hint} + ,#{entrprs_mber_password_cnsr} + ,#{group_id } + ,#{detail_adres } + ,#{entrprs_end_telno } + ,#{area_no } + ,#{applcnt_email_adres } + ,#{esntl_id } + ) + + + /** modifyXitEntrprsMber */ + /** 기업회원 수정 */ + UPDATE XIT_ENTRPRS_MBER + SET + ESNTL_ID = NVL(#{esntl_id}, ESNTL_ID) + ,ENTRPRS_SE_CODE = #{entrprs_se_code } + ,BIZRNO = #{bizrno } + ,JURIRNO = #{jurirno } + ,CMPNY_NM = #{cmpny_nm } + ,CXFC = #{cxfc } + ,ZIP = #{zip } + ,ADRES = #{adres } + ,ENTRPRS_MIDDLE_TELNO = #{entrprs_middle_telno } + ,FXNUM = #{fxnum } + ,INDUTY_CODE = #{induty_code } + ,APPLCNT_NM = #{applcnt_nm } + ,APPLCNT_IHIDNUM = #{applcnt_ihidnum } + ,SBSCRB_DE = #{sbscrb_de } + ,ENTRPRS_MBER_STTUS = #{entrprs_mber_sttus } + ,ENTRPRS_MBER_PASSWORD = #{entrprs_mber_password } + ,ENTRPRS_MBER_PASSWORD_HINT = #{entrprs_mber_password_hint} + ,ENTRPRS_MBER_PASSWORD_CNSR = #{entrprs_mber_password_cnsr} + ,GROUP_ID = #{group_id } + ,DETAIL_ADRES = #{detail_adres } + ,ENTRPRS_END_TELNO = #{entrprs_end_telno } + ,AREA_NO = #{area_no } + ,APPLCNT_EMAIL_ADRES = #{applcnt_email_adres } + WHERE 1=1 + AND ENTRPRS_MBER_ID = #{entrprs_mber_id} + + + /** removeXitEntrprsMber */ + /** 기업회원 삭제 */ + DELETE FROM XIT_ENTRPRS_MBER + WHERE 1=1 + AND ENTRPRS_MBER_ID = #{entrprs_mber_id} + + + + + + + + + /** addXitFileAttrb */ + /** 파일속성 등록 */ + INSERT INTO XIT_FILE_ATTRB( + ATCH_FILE_ID + ,CREAT_DT + ,USE_AT + )VALUES( + #{atch_file_id} + ,SYSDATE + ,#{use_at } + ) + + + /** modifyXitFileAttrb */ + /** 파일속성 수정 */ + UPDATE XIT_FILE_ATTRB + SET + USE_AT = NVL(#{use_at}, USE_AT) + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + + + /** removeXitFileAttrb */ + /** 파일속성 삭제 */ + DELETE FROM XIT_FILE_ATTRB + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + + + + + + + + + /** addXitFileDetailInfo */ + /** 파일상세정보 등록 */ + INSERT INTO XIT_FILE_DETAIL_INFO( + ATCH_FILE_ID + ,FILE_SN + ,FILE_STRE_COURS + ,STRE_FILE_NM + ,ORIGNL_FILE_NM + ,FILE_EXTSN + ,FILE_CN + ,FILE_SIZE + )VALUES( + #{atch_file_id } + ,#{file_sn } + ,#{file_stre_cours} + ,#{stre_file_nm } + ,#{orignl_file_nm } + ,#{file_extsn } + ,#{file_cn } + ,#{file_size } + ) + + + /** modifyXitFileDetailInfo */ + /** 파일상세정보 수정 */ + UPDATE XIT_FILE_DETAIL_INFO + SET + FILE_SN = FILE_SN + ,FILE_STRE_COURS = #{file_stre_cours} + ,STRE_FILE_NM = #{stre_file_nm } + ,ORIGNL_FILE_NM = #{orignl_file_nm } + ,FILE_EXTSN = #{file_extsn } + ,FILE_CN = #{file_cn } + ,FILE_SIZE = #{file_size } + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + AND FILE_SN = #{file_sn } + + + /** removeXitFileDetailInfo */ + /** 파일상세정보 삭제 */ + DELETE FROM XIT_FILE_DETAIL_INFO + WHERE 1=1 + AND ATCH_FILE_ID = #{atch_file_id} + AND FILE_SN = #{file_sn } + + + + + + + + + /** addXitGnrlMber */ + /** 일반회원 등록 */ + INSERT INTO XIT_GNRL_MBER( + MBER_ID + ,PASSWORD + ,PASSWORD_HINT + ,PASSWORD_CNSR + ,IHIDNUM + ,MBER_NM + ,ZIP + ,ADRES + ,AREA_NO + ,MBER_STTUS + ,DETAIL_ADRES + ,END_TELNO + ,MBTLNUM + ,GROUP_ID + ,MBER_FXNUM + ,MBER_EMAIL_ADRES + ,MIDDLE_TELNO + ,SBSCRB_DE + ,SEXDSTN_CODE + ,ESNTL_ID + )VALUES( + #{mber_id } + ,#{password } + ,#{password_hint } + ,#{password_cnsr } + ,#{ihidnum } + ,#{mber_nm } + ,#{zip } + ,#{adres } + ,#{area_no } + ,#{mber_sttus } + ,#{detail_adres } + ,#{end_telno } + ,#{mbtlnum } + ,#{group_id } + ,#{mber_fxnum } + ,#{mber_email_adres} + ,#{middle_telno } + ,SYSDATE + ,#{sexdstn_code } + ,#{esntl_id } + ) + + + /** modifyXitGnrlMber */ + /** 일반회원 수정 */ + UPDATE XIT_GNRL_MBER + SET + ESNTL_ID = NVL(#{esntl_id }, ESNTL_ID) + ,PASSWORD = #{password } + ,PASSWORD_HINT = #{password_hint } + ,PASSWORD_CNSR = #{password_cnsr } + ,IHIDNUM = #{ihidnum } + ,MBER_NM = #{mber_nm } + ,ZIP = #{zip } + ,ADRES = #{adres } + ,AREA_NO = #{area_no } + ,MBER_STTUS = #{mber_sttus } + ,DETAIL_ADRES = #{detail_adres } + ,END_TELNO = #{end_telno } + ,MBTLNUM = #{mbtlnum } + ,GROUP_ID = #{group_id } + ,MBER_FXNUM = #{mber_fxnum } + ,MBER_EMAIL_ADRES = #{mber_email_adres} + ,MIDDLE_TELNO = #{middle_telno } + ,SBSCRB_DE = #{sbscrb_de } + ,SEXDSTN_CODE = #{sexdstn_code } + WHERE 1=1 + AND MBER_ID = #{mber_id} + + + /** removeXitGnrlMber */ + /** 일반회원 삭제 */ + DELETE FROM XIT_GNRL_MBER + WHERE 1=1 + AND MBER_ID = #{mber_id} + + + + + + + + + /** addXitIds */ + /** IDS 등록 */ + INSERT INTO XIT_IDS( + TABLE_NM + ,NEXT_ID + )VALUES( + #{table_nm} + ,#{next_id} + ) + + + /** modifyXitIds */ + /** IDS 수정 */ + UPDATE XIT_IDS + SET + NEXT_ID = NVL(#{next_id}, NEXT_ID) + WHERE 1=1 + AND TABLE_NM = #{table_nm} + + + /** removeXitIds */ + /** IDS 삭제 */ + DELETE FROM XIT_IDS + WHERE 1=1 + AND TABLE_NM = #{table_nm} + + + + + + + + + /** addXitLoginPolicy */ + /** 로그인정책 등록 */ + INSERT INTO XIT_LOGIN_POLICY( + USER_ID + ,IP_INFO + ,DPLCT_PERM_AT + ,LMTT_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + + ,LAST_UPDUSR_ID + )VALUES( + #{user_id } + ,#{ip_info } + ,#{dplct_perm_at } + ,#{lmtt_at } + ,SYSDATE + ,#{frst_register_id } + ,SYSDATE + + ,#{frst_register_id } + ) + + + /** modifyXitLoginPolicy */ + /** 로그인정책 수정 */ + UPDATE XIT_LOGIN_POLICY + SET + LAST_UPDT_PNTTM = SYSDATE + ,IP_INFO = #{ip_info } + ,DPLCT_PERM_AT = #{dplct_perm_at } + ,LMTT_AT = #{lmtt_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitLoginPolicy */ + /** 로그인정책 삭제 */ + DELETE + FROM XIT_LOGIN_POLICY + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + /** addXitMenuCreatDtls */ + /** 메뉴생성내역 등록 */ + INSERT INTO XIT_MENU_CREAT_DTLS( + MENU_NO + ,AUTHOR_CODE + ,MAPNG_CREAT_ID + )VALUES( + #{menu_no } + ,#{author_code } + ,#{mapng_creat_id} + ) + + + /** modifyXitMenuCreatDtls */ + /** 메뉴생성내역 수정 */ + UPDATE XIT_MENU_CREAT_DTLS + SET + MAPNG_CREAT_ID = NVL(#{mapng_creat_id}, MAPNG_CREAT_ID) + WHERE 1=1 + AND MENU_NO = #{menu_no } + AND AUTHOR_CODE = #{author_code } + + + /** removeXitMenuCreatDtls */ + /** 메뉴생성내역 삭제 */ + DELETE FROM XIT_MENU_CREAT_DTLS + WHERE 1=1 + AND MENU_NO = #{menu_no } + AND AUTHOR_CODE = #{author_code } + + + + + + + + + /** addXitMenuInfo */ + /** 메뉴정보 등록 */ + INSERT INTO XIT_MENU_INFO( + MENU_NO + ,MENU_NM + ,PROGRM_FILE_NM + ,UPPER_MENU_NO + ,MENU_ORDR + ,MENU_DC + ,RELATE_IMAGE_COURS + ,RELATE_IMAGE_NM + )VALUES( + #{menu_no } + ,#{menu_nm } + ,#{progrm_file_nm } + ,#{upper_menu_no } + ,#{menu_ordr } + ,#{menu_dc } + ,#{relate_image_cours} + ,#{relate_image_nm } + ) + + + /** modifyXitMenuInfo */ + /** 메뉴정보 수정 */ + UPDATE XIT_MENU_INFO + SET + MENU_NM = NVL(#{menu_nm }, MENU_NM) + ,PROGRM_FILE_NM = #{progrm_file_nm } + ,UPPER_MENU_NO = #{upper_menu_no } + ,MENU_ORDR = #{menu_ordr } + ,MENU_DC = #{menu_dc } + ,RELATE_IMAGE_COURS = #{relate_image_cours} + ,RELATE_IMAGE_NM = #{relate_image_nm } + WHERE 1=1 + AND MENU_NO = #{menu_no} + + + /** removeXitMenuInfo */ + /** 메뉴정보 삭제 */ + DELETE FROM XIT_MENU_INFO + WHERE 1=1 + AND MENU_NO = #{menu_no} + + + + + + + + + /** addXitOrgnztInfo */ + /** 조직정보 등록 */ + INSERT INTO XIT_ORGNZT_INFO( + ORGNZT_ID + ,ORGNZT_NM + ,ORGNZT_DC + )VALUES( + #{orgnzt_id } + ,#{orgnzt_nm} + ,#{orgnzt_dc} + ) + + + /** modifyXitOrgnztInfo */ + /** 조직정보 수정 */ + UPDATE XIT_ORGNZT_INFO + SET + ORGNZT_NM = NVL(#{orgnzt_nm}, ORGNZT_NM) + ,ORGNZT_DC = #{orgnzt_dc} + WHERE 1=1 + AND ORGNZT_ID = #{orgnzt_id} + + + /** removeXitOrgnztInfo */ + /** 조직정보 삭제 */ + DELETE FROM XIT_ORGNZT_INFO + WHERE 1=1 + AND ORGNZT_ID = #{orgnzt_id} + + + + + + + + + /** addXitProgrmList */ + /** 프로그램목록 등록 */ + INSERT INTO XIT_PROGRM_LIST( + PROGRM_FILE_NM + ,PROGRM_STRE_COURS + ,PROGRM_KOREAN_NM + ,PROGRM_DC + ,URL + )VALUES( + #{progrm_file_nm } + ,#{progrm_stre_cours} + ,#{progrm_korean_nm } + ,#{progrm_dc } + ,#{url } + ) + + + /** modifyXitProgrmList */ + /** 프로그램목록 수정 */ + UPDATE XIT_PROGRM_LIST + SET + PROGRM_KOREAN_NM = NVL(#{progrm_korean_nm }, PROGRM_KOREAN_NM) + ,PROGRM_STRE_COURS = #{progrm_stre_cours} + ,PROGRM_DC = #{progrm_dc } + ,URL = #{url } + WHERE 1=1 + AND PROGRM_FILE_NM = #{progrm_file_nm} + + + /** removeXitProgrmList */ + /** 프로그램목록 삭제 */ + DELETE FROM XIT_PROGRM_LIST + WHERE 1=1 + AND PROGRM_FILE_NM = #{progrm_file_nm} + + + + + + + + + /** addXitRoleInfo */ + /** 역할정보 등록 */ + INSERT INTO XIT_ROLE_INFO( + ROLE_CODE + ,ROLE_NM + ,ROLE_PTTRN + ,ROLE_DC + ,ROLE_TY + ,ROLE_SORT + ,ROLE_CREAT_DE + )VALUES( + #{role_code } + ,#{role_nm } + ,#{role_pttrn } + ,#{role_dc } + ,#{role_ty } + ,#{role_sort } + ,TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') + ) + + + /** modifyXitRoleInfo */ + /** 역할정보 수정 */ + UPDATE XIT_ROLE_INFO + SET + ROLE_NM = NVL(#{role_nm }, ROLE_NM) + ,ROLE_PTTRN = #{role_pttrn } + ,ROLE_DC = #{role_dc } + ,ROLE_TY = #{role_ty } + ,ROLE_SORT = #{role_sort } + ,ROLE_CREAT_DE = #{role_creat_de} + WHERE 1=1 + AND ROLE_CODE = #{role_code} + + + /** removeXitRoleInfo */ + /** 역할정보 삭제 */ + DELETE FROM XIT_ROLE_INFO + WHERE 1=1 + AND ROLE_CODE = #{role_code} + + + + + + + + + /** addXitRoleSclsrtRescue */ + /** 역할계층구조 등록 */ + INSERT INTO XIT_ROLE_SCLSRT_RESCUE( + PARNTS_ROLE + ,CHLDRN_ROLE + )VALUES( + #{parnts_role } + ,#{chldrn_role} + ) + + + /** modifyXitRoleSclsrtRescue */ + /** 역할계층구조 수정 */ + + + + + + + + /** removeXitRoleSclsrtRescue */ + /** 역할계층구조 삭제 */ + DELETE FROM XIT_ROLE_SCLSRT_RESCUE + WHERE 1=1 + AND PARNTS_ROLE = #{parnts_role} + AND CHLDRN_ROLE = #{chldrn_role} + + + /** removesXitRoleSclsrtRescue */ + /** 역할계층구조 다건 삭제 */ + DELETE FROM XIT_ROLE_SCLSRT_RESCUE + WHERE 1=1 + AND PARNTS_ROLE = #{parnts_role} + AND CHLDRN_ROLE = #{chldrn_role} + + + + + + + + + /** addXitSysLogSumry */ + /** 시스템로그요약 등록 */ + INSERT INTO XIT_SYS_LOG_SUMRY( + OCCRRNC_DE + ,SRVC_NM + ,METHOD_NM + ,CREAT_CO + ,UPDT_CO + ,RDCNT + ,DELETE_CO + ,OUTPT_CO + ,ERROR_CO + )VALUES( + #{occrrnc_de} + ,#{srvc_nm } + ,#{method_nm} + ,#{creat_co } + ,#{updt_co } + ,#{rdcnt } + ,#{delete_co} + ,#{outpt_co } + ,#{error_co } + ) + + + /** modifyXitSysLogSumry */ + /** 시스템로그요약 수정 */ + + + + + + + + + + + + + + + /** removeXitSysLogSumry */ + /** 시스템로그요약 삭제 */ + DELETE FROM XIT_SYS_LOG_SUMRY + WHERE 1=1 + AND OCCRRNC_DE = #{occrrnc_de} + AND SRVC_NM = #{srvc_nm } + AND METHOD_NM = #{method_nm } + + + + + + + + + /** addXitTmplatInfo */ + /** 템플릿정보 등록 */ + INSERT INTO XIT_TMPLAT_INFO( + TMPLAT_ID + ,TMPLAT_NM + ,TMPLAT_COURS + ,USE_AT + ,TMPLAT_SE_CODE + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{tmplat_id } + ,#{tmplat_nm } + ,#{tmplat_cours } + ,#{use_at } + ,#{tmplat_se_code } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitTmplatInfo */ + /** 템플릿정보 수정 */ + UPDATE XIT_TMPLAT_INFO + SET + LAST_UPDT_PNTTM = SYSDATE + ,TMPLAT_NM = #{tmplat_nm } + ,TMPLAT_COURS = #{tmplat_cours } + ,USE_AT = #{use_at } + ,TMPLAT_SE_CODE = #{tmplat_se_code } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND TMPLAT_ID = #{tmplat_id} + + + /** removeXitTmplatInfo */ + /** 템플릿정보 삭제 */ + DELETE FROM XIT_TMPLAT_INFO + WHERE 1=1 + AND TMPLAT_ID = #{tmplat_id} + + + + + + + + + /** addXitUserAbsnce */ + /** 사용자부재 등록 */ + INSERT INTO XIT_USER_ABSNCE( + USER_ID + ,USER_ABSNCE_AT + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + )VALUES( + #{user_id } + ,#{user_absnce_at } + ,SYSDATE + ,#{frst_register_id } + ,SYSDATE + ,#{last_updusr_id } + ) + + + /** modifyXitUserAbsnce */ + /** 사용자부재 수정 */ + UPDATE XIT_USER_ABSNCE + SET + LAST_UPDT_PNTTM = SYSDATE + ,USER_ABSNCE_AT = #{user_absnce_at } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitUserAbsnce */ + /** 사용자부재 삭제 */ + DELETE FROM XIT_USER_ABSNCE + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + /** addXitUserEtcOption */ + /** 사용자기타옵션 등록 */ + INSERT INTO XIT_USER_ETC_OPTION( + USER_ID + ,JOB_DATA_AUTHOR + ,USER_MANAGE_AUTHOR + ,ELCTRNSANCTN_USE_AT + ,JOB_CONFM_AUTHOR_AT + )VALUES( + #{user_id } + ,#{job_data_author } + ,#{user_manage_author } + ,#{elctrnsanctn_use_at} + ,#{job_confm_author_at} + ) + + + /** modifyXitUserEtcOption */ + /** 사용자기타옵션 수정 */ + UPDATE XIT_USER_ETC_OPTION + + JOB_DATA_AUTHOR = #{job_data_author }, + USER_MANAGE_AUTHOR = #{user_manage_author }, + ELCTRNSANCTN_USE_AT= #{elctrnsanctn_use_at}, + JOB_CONFM_AUTHOR_AT= #{job_confm_author_at}, + + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitUserEtcOption */ + /** 사용자기타옵션 삭제 */ + DELETE FROM XIT_USER_ETC_OPTION + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + + + + /** addXitUserInfoChangeDtls */ + /** 사용자정보변경내역 등록 */ + INSERT INTO XIT_USER_INFO_CHANGE_DTLS( + USER_ID + ,CHANGE_DE + ,ORGNZT_ID + ,GROUP_ID + ,EMPL_NO + ,SEXDSTN_CODE + ,BRTHDY + ,FXNUM + ,HOUSE_ADRES + ,HOUSE_END_TELNO + ,AREA_NO + ,DETAIL_ADRES + ,ZIP + ,OFFM_TELNO + ,MBTLNUM + ,EMAIL_ADRES + ,HOUSE_MIDDLE_TELNO + ,PSTINST_CODE + ,USER_STTUS_CODE + ,ESNTL_ID + )VALUES( + #{user_id } + ,TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') + ,#{orgnzt_id } + ,#{group_id } + ,#{empl_no } + ,#{sexdstn_code } + ,#{brthdy } + ,#{fxnum } + ,#{house_adres } + ,#{house_end_telno } + ,#{area_no } + ,#{detail_adres } + ,#{zip } + ,#{offm_telno } + ,#{mbtlnum } + ,#{email_adres } + ,#{house_middle_telno} + ,#{pstinst_code } + ,#{user_sttus_code } + ,#{esntl_id } + ) + + + /** modifyXitUserInfoChangeDtls */ + /** 사용자정보변경내역 수정 */ + UPDATE XIT_USER_INFO_CHANGE_DTLS + SET + CHANGE_DE = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') + ,ORGNZT_ID = #{orgnzt_id } + ,GROUP_ID = #{group_id } + ,EMPL_NO = #{empl_no } + ,SEXDSTN_CODE = #{sexdstn_code } + ,BRTHDY = #{brthdy } + ,FXNUM = #{fxnum } + ,HOUSE_ADRES = #{house_adres } + ,HOUSE_END_TELNO = #{house_end_telno } + ,AREA_NO = #{area_no } + ,DETAIL_ADRES = #{detail_adres } + ,ZIP = #{zip } + ,OFFM_TELNO = #{offm_telno } + ,MBTLNUM = #{mbtlnum } + ,EMAIL_ADRES = #{email_adres } + ,HOUSE_MIDDLE_TELNO = #{house_middle_telno} + ,PSTINST_CODE = #{pstinst_code } + ,USER_STTUS_CODE = #{user_sttus_code } + ,ESNTL_ID = #{esntl_id } + WHERE 1=1 + AND USER_ID = #{user_id } + AND CHANGE_DE = #{change_de} + + + /** removeXitUserInfoChangeDtls */ + /** 사용자정보변경내역 삭제 */ + DELETE FROM XIT_USER_INFO_CHANGE_DTLS + WHERE 1=1 + AND USER_ID = #{user_id } + AND CHANGE_DE = #{change_de} + + + /** removeXitUserInfoChangeDtls */ + /** 사용자정보변경내역 목록 삭제 */ + DELETE FROM XIT_USER_INFO_CHANGE_DTLS + WHERE 1=1 + AND USER_ID = #{user_id } + + + + + + + + + /** addXitUserInfo */ + /** 사용자정보 등록 */ + INSERT INTO XIT_USER_INFO( + USER_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 + ,USER_STTUS_CODE + ,ESNTL_ID + ,CRTFC_DN_VALUE + ,SBSCRB_DE + )VALUES( + #{user_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 } + ,#{user_sttus_code } + ,#{esntl_id } + ,#{crtfc_dn_value } + ,SYSDATE + ) + + + /** modifyXitUserInfo */ + /** 사용자정보 수정 */ + UPDATE XIT_USER_INFO + SET + SBSCRB_DE = SBSCRB_DE + ,ORGNZT_ID = #{orgnzt_id } + ,USER_NM = #{user_nm } + ,PASSWORD = #{password } + ,EMPL_NO = #{empl_no } + ,IHIDNUM = #{ihidnum } + ,SEXDSTN_CODE = #{sexdstn_code } + ,BRTHDY = #{brthdy } + ,FXNUM = #{fxnum } + ,HOUSE_ADRES = #{house_adres } + ,PASSWORD_HINT = #{password_hint } + ,PASSWORD_CNSR = #{password_cnsr } + ,HOUSE_END_TELNO = #{house_end_telno } + ,AREA_NO = #{area_no } + ,DETAIL_ADRES = #{detail_adres } + ,ZIP = #{zip } + ,OFFM_TELNO = #{offm_telno } + ,MBTLNUM = #{mbtlnum } + ,EMAIL_ADRES = #{email_adres } + ,OFCPS_NM = #{ofcps_nm } + ,HOUSE_MIDDLE_TELNO = #{house_middle_telno } + ,GROUP_ID = #{group_id } + ,PSTINST_CODE = #{pstinst_code } + ,USER_STTUS_CODE = #{user_sttus_code } + ,ESNTL_ID = #{esntl_id } + ,CRTFC_DN_VALUE = #{crtfc_dn_value } + WHERE 1=1 + AND USER_ID = #{user_id} + + + /** removeXitUserInfo */ + /** 사용자정보 삭제 */ + DELETE FROM XIT_USER_INFO + WHERE 1=1 + AND USER_ID = #{user_id} + + + + + + + + + + + /** addXitUserScrtySetup */ + /** 사용자보안설정 등록 */ + INSERT INTO XIT_USER_SCRTY_SETUP( + SCRTY_SETUP_TRGET_ID + ,MBER_TY_CODE + ,AUTHOR_CODE + )VALUES( + #{scrty_setup_trget_id} + ,#{mber_ty_code } + ,#{author_code } + ) + + + /** modifyXitUserScrtySetup */ + /** 사용자보안설정 수정 */ + UPDATE XIT_USER_SCRTY_SETUP + SET + MBER_TY_CODE = NVL(#{mber_ty_code }, MBER_TY_CODE) + ,AUTHOR_CODE = #{author_code } + WHERE 1=1 + AND SCRTY_SETUP_TRGET_ID = #{scrty_setup_trget_id} + + + /** removeXitUserScrtySetup */ + /** 사용자보안설정 삭제 */ + DELETE FROM XIT_USER_SCRTY_SETUP + WHERE 1=1 + AND SCRTY_SETUP_TRGET_ID = #{scrty_setup_trget_id} + + + + + + + + + /** addXitZip */ + /** 우편번호 등록 */ + INSERT INTO XIT_ZIP( + 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( + #{zip } + ,#{sn } + ,#{ctprvn_nm } + ,#{signgu_nm } + ,#{emd_nm } + ,#{li_buld_nm } + ,#{lnbr_dong_ho } + ,SYSDATE + ,#{frst_register_id } + ,#{last_updt_pnttm } + ,#{last_updusr_id } + ) + + + /** modifyXitZip */ + /** 우편번호 수정 */ + UPDATE XIT_ZIP + SET + LAST_UPDT_PNTTM = SYSDATE + ,CTPRVN_NM = #{ctprvn_nm } + ,SIGNGU_NM = #{signgu_nm } + ,EMD_NM = #{emd_nm } + ,LI_BULD_NM = #{li_buld_nm } + ,LNBR_DONG_HO = #{lnbr_dong_ho } + ,FRST_REGIST_PNTTM = #{frst_regist_pnttm} + ,FRST_REGISTER_ID = #{frst_register_id } + ,LAST_UPDUSR_ID = #{last_updusr_id } + WHERE 1=1 + AND ZIP = #{zip} + AND SN = #{sn } + + + /** removeXitZip */ + /** 우편번호 삭제 */ + DELETE FROM XIT_ZIP + WHERE 1=1 + AND ZIP = #{zip} + AND SN = #{sn } + + + /** removesXitZip */ + /** 우편번호 다건 삭제 */ + DELETE FROM XIT_ZIP + WHERE 1=1 + AND ZIP = #{zip} + AND SN = #{sn } + + + + + + + + + /** addComtnbatchopert */ + /** 배치작업 등록 */ + INSERT INTO COMTNBATCHOPERT( + BATCH_OPERT_ID + ,BATCH_OPERT_NM + ,BATCH_OPERT_SE + ,BATCH_PROGRM + ,PARAMTR + ,USE_AT + ,FRST_REGISTER_ID + ,FRST_REGIST_PNTTM + ,LAST_UPDUSR_ID + ,LAST_UPDT_PNTTM + )VALUES( + #{batch_opert_id } + ,#{batch_opert_nm } + ,#{batch_opert_se } + ,#{batch_progrm } + ,#{paramtr } + ,#{use_at } + ,#{frst_register_id } + ,SYSDATE + ,#{last_updusr_id } + ,SYSDATE + ) + + + /** modifyComtnbatchopert */ + /** 배치작업 수정 */ + UPDATE COMTNBATCHOPERT + + BATCH_OPERT_NM = #{batch_opert_nm }, + BATCH_OPERT_SE = #{batch_opert_se }, + BATCH_PROGRM = #{batch_progrm }, + PARAMTR = #{paramtr }, + USE_AT = #{use_at }, + FRST_REGISTER_ID = #{frst_register_id }, + FRST_REGIST_PNTTM = #{frst_regist_pnttm}, + LAST_UPDUSR_ID = #{last_updusr_id }, + LAST_UPDT_PNTTM = SYSDATE, + + WHERE 1=1 + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removeComtnbatchopert */ + /** 배치작업 삭제 */ + DELETE FROM COMTNBATCHOPERT + WHERE 1=1 + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removesComtnbatchopert */ + /** 배치작업 다건 삭제 */ + DELETE FROM COMTNBATCHOPERT + WHERE 1=1 + AND BATCH_OPERT_ID = #{batch_opert_id } + AND BATCH_OPERT_NM = #{batch_opert_nm } + AND BATCH_OPERT_SE = #{batch_opert_se } + AND BATCH_PROGRM = #{batch_progrm } + AND PARAMTR = #{paramtr } + AND USE_AT = #{use_at } + AND FRST_REGISTER_ID = #{frst_register_id } + AND FRST_REGIST_PNTTM = #{frst_regist_pnttm} + AND LAST_UPDUSR_ID = #{last_updusr_id } + AND LAST_UPDT_PNTTM = #{last_updt_pnttm } + + + + + + + + + /** addComtnbatchschdul */ + /** 배치스케줄 등록 */ + INSERT INTO COMTNBATCHSCHDUL( + BATCH_SCHDUL_ID + ,BATCH_OPERT_ID + ,EXECUT_CYCLE + ,EXECUT_SCHDUL_DE + ,EXECUT_SCHDUL_HOUR + ,EXECUT_SCHDUL_MNT + ,EXECUT_SCHDUL_SECND + ,FRST_REGISTER_ID + ,FRST_REGIST_PNTTM + ,LAST_UPDUSR_ID + ,LAST_UPDT_PNTTM + )VALUES( + #{batch_schdul_id } + ,#{batch_opert_id } + ,#{execut_cycle } + ,#{execut_schdul_de } + ,#{execut_schdul_hour } + ,#{execut_schdul_mnt } + ,#{execut_schdul_secnd} + ,#{frst_register_id } + ,SYSDATE + ,#{last_updusr_id } + ,SYSDATE + ) + + + /** modifyComtnbatchschdul */ + /** 배치스케줄 수정 */ + UPDATE COMTNBATCHSCHDUL + + EXECUT_CYCLE = #{execut_cycle }, + EXECUT_SCHDUL_DE = #{execut_schdul_de }, + EXECUT_SCHDUL_HOUR = #{execut_schdul_hour }, + EXECUT_SCHDUL_MNT = #{execut_schdul_mnt }, + EXECUT_SCHDUL_SECND = #{execut_schdul_secnd}, + FRST_REGISTER_ID = #{frst_register_id }, + FRST_REGIST_PNTTM = #{frst_regist_pnttm }, + LAST_UPDUSR_ID = #{last_updusr_id }, + LAST_UPDT_PNTTM = SYSDATE, + + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removeComtnbatchschdul */ + /** 배치스케줄 삭제 */ + DELETE FROM COMTNBATCHSCHDUL + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + + + /** removesComtnbatchschdul */ + /** 배치스케줄 다건 삭제 */ + DELETE FROM COMTNBATCHSCHDUL + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + AND EXECUT_CYCLE = #{execut_cycle } + AND EXECUT_SCHDUL_DE = #{execut_schdul_de } + AND EXECUT_SCHDUL_HOUR = #{execut_schdul_hour } + AND EXECUT_SCHDUL_MNT = #{execut_schdul_mnt } + AND EXECUT_SCHDUL_SECND = #{execut_schdul_secnd} + AND FRST_REGISTER_ID = #{frst_register_id } + AND FRST_REGIST_PNTTM = #{frst_regist_pnttm } + AND LAST_UPDUSR_ID = #{last_updusr_id } + AND LAST_UPDT_PNTTM = #{last_updt_pnttm } + + + + + + + + + /** addComtnbatchschduldfk */ + /** 배치스케줄요일 등록 */ + INSERT INTO COMTNBATCHSCHDULDFK( + BATCH_SCHDUL_ID + ,EXECUT_SCHDUL_DFK_SE + )VALUES( + #{batch_schdul_id } + ,#{execut_schdul_dfk_se} + ) + + + /** modifyComtnbatchschduldfk */ + /** 배치스케줄요일 수정 */ + UPDATE COMTNBATCHSCHDULDFK + + EXECUT_SCHDUL_DFK_SE = #{execut_schdul_dfk_se} + + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + + + /** removeComtnbatchschduldfk */ + /** 배치스케줄요일 삭제 */ + DELETE FROM COMTNBATCHSCHDULDFK + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND EXECUT_SCHDUL_DFK_SE = #{execut_schdul_dfk_se} + + + /** removesComtnbatchschduldfk */ + /** 배치스케줄요일 다건 삭제 */ + DELETE FROM COMTNBATCHSCHDULDFK + WHERE 1=1 + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND EXECUT_SCHDUL_DFK_SE = #{execut_schdul_dfk_se} + + + + + + + + + /** addComtnbatchresult */ + /** 배치결과 등록 */ + INSERT INTO COMTNBATCHRESULT( + BATCH_RESULT_ID + ,BATCH_SCHDUL_ID + ,BATCH_OPERT_ID + ,PARAMTR + ,STTUS + ,ERROR_INFO + ,EXECUT_BEGIN_TM + ,EXECUT_END_TM + ,LAST_UPDT_PNTTM + ,LAST_UPDUSR_ID + ,FRST_REGIST_PNTTM + ,FRST_REGISTER_ID + )VALUES( + #{batch_result_id } + ,#{batch_schdul_id } + ,#{batch_opert_id } + ,#{paramtr } + ,#{sttus } + ,#{error_info } + ,#{execut_begin_tm } + ,#{execut_end_tm } + ,SYSDATE + ,#{last_updusr_id } + ,SYSDATE + ,#{frst_register_id } + ) + + + /** modifyComtnbatchresult */ + /** 배치결과 수정 */ + UPDATE COMTNBATCHRESULT + + BATCH_SCHDUL_ID = #{batch_schdul_id }, + BATCH_OPERT_ID = #{batch_opert_id }, + PARAMTR = #{paramtr }, + STTUS = #{sttus }, + ERROR_INFO = #{error_info }, + EXECUT_BEGIN_TM = #{execut_begin_tm }, + EXECUT_END_TM = #{execut_end_tm }, + LAST_UPDT_PNTTM = SYSDATE, + LAST_UPDUSR_ID = #{last_updusr_id }, + FRST_REGIST_PNTTM = #{frst_regist_pnttm}, + FRST_REGISTER_ID = #{frst_register_id }, + + WHERE 1=1 + AND BATCH_RESULT_ID = #{batch_result_id } + + + /** removeComtnbatchresult */ + /** 배치결과 삭제 */ + DELETE FROM COMTNBATCHRESULT + WHERE 1=1 + AND BATCH_RESULT_ID = #{batch_result_id } + + + /** removesComtnbatchresult */ + /** 배치결과 다건 삭제 */ + DELETE FROM COMTNBATCHRESULT + WHERE 1=1 + AND BATCH_RESULT_ID = #{batch_result_id } + AND BATCH_SCHDUL_ID = #{batch_schdul_id } + AND BATCH_OPERT_ID = #{batch_opert_id } + AND PARAMTR = #{paramtr } + AND STTUS = #{sttus } + AND ERROR_INFO = #{error_info } + AND EXECUT_BEGIN_TM = #{execut_begin_tm } + AND EXECUT_END_TM = #{execut_end_tm } + AND LAST_UPDT_PNTTM = #{last_updt_pnttm } + AND LAST_UPDUSR_ID = #{last_updusr_id } + AND FRST_REGIST_PNTTM = #{frst_regist_pnttm} + AND FRST_REGISTER_ID = #{frst_register_id } + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameFile-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameFile-mysql-mapper.xml new file mode 100644 index 00000000..ca86c15e --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameFile-mysql-mapper.xml @@ -0,0 +1,62 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT + A.ATCH_FILE_ID AS "atchFileId" + ,B.FILE_CN AS "fileCn" + ,B.FILE_SN AS "fileSn" + ,B.FILE_STRE_COURS AS "fileStreCours" + ,B.STRE_FILE_NM AS "streFileNm" + ,B.FILE_EXTSN AS "fileExtsn" + ,B.ORIGNL_FILE_NM AS "orignlFileNm" + ,B.FILE_SIZE AS "fileSize" + ,A.CREAT_DT AS "creatDt" + + + FROM XIT_FILE_ATTRB A + INNER JOIN XIT_FILE_DETAIL_INFO B ON A.ATCH_FILE_ID = B.ATCH_FILE_ID + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameFile-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameFile-oracle-mapper.xml new file mode 100644 index 00000000..e381a3de --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameFile-oracle-mapper.xml @@ -0,0 +1,64 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT + A.ATCH_FILE_ID AS "atchFileId" + ,B.FILE_CN AS "fileCn" + ,B.FILE_SN AS "fileSn" + ,B.FILE_STRE_COURS AS "fileStreCours" + ,B.STRE_FILE_NM AS "streFileNm" + ,B.FILE_EXTSN AS "fileExtsn" + ,B.ORIGNL_FILE_NM AS "orignlFileNm" + ,B.FILE_SIZE AS "fileSize" + ,A.CREAT_DT AS "creatDt" + + + FROM XIT_FILE_ATTRB A + INNER JOIN XIT_FILE_DETAIL_INFO B ON A.ATCH_FILE_ID = B.ATCH_FILE_ID + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFramePopup-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFramePopup-mysql-mapper.xml new file mode 100644 index 00000000..8c148cd7 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFramePopup-mysql-mapper.xml @@ -0,0 +1,76 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + + + + SELECT ZIP AS "zip" + , SN AS "sn" + , CTPRVN_NM AS "ctprvnNm" + , SIGNGU_NM AS "signguNm" + , EMD_NM AS "emdNm" + , LI_BULD_NM AS "liBuldNm" + , LNBR_DONG_HO AS "lnbrDongHo" + + + FROM XIT_ZIP + + + + + AND ZIP = #{searchKeyword} + + + AND CTPRVN_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND SIGNGU_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND EMD_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND LI_BULD_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFramePopup-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFramePopup-oracle-mapper.xml new file mode 100644 index 00000000..11b8c28f --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFramePopup-oracle-mapper.xml @@ -0,0 +1,78 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + + + + SELECT ZIP AS "zip" + , SN AS "sn" + , CTPRVN_NM AS "ctprvnNm" + , SIGNGU_NM AS "signguNm" + , EMD_NM AS "emdNm" + , LI_BULD_NM AS "liBuldNm" + , LNBR_DONG_HO AS "lnbrDongHo" + + + FROM XIT_ZIP + + + + + AND ZIP = #{searchKeyword} + + + AND CTPRVN_NM LIKE '%'||#{searchKeyword}||'%' + + + AND SIGNGU_NM LIKE '%'||#{searchKeyword}||'%' + + + AND EMD_NM LIKE '%'||#{searchKeyword}||'%' + + + AND LI_BULD_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameScheduler-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameScheduler-mysql-mapper.xml new file mode 100644 index 00000000..1dcd426f --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameScheduler-mysql-mapper.xml @@ -0,0 +1,38 @@ + + + + + + /** addSysLogSummaryOfYesterday */ + /** 시스템 로그 전날 로그 요약 등록 */ + INSERT INTO XIT_SYS_LOG_SUMRY( + OCCRRNC_DE + ,SRVC_NM + ,METHOD_NM + ,CREAT_CO + ,UPDT_CO + ,RDCNT + ,DELETE_CO + ,OUTPT_CO + ,ERROR_CO + ) + SELECT DATE_FORMAT(B.CREAT_DT, '%Y%m%d') AS "OCCRRNC_DE" + , 'Member-login' AS "SRVC_NM" + , 'actionLogin' AS "METHOD_NM" + , SUM(CASE WHEN B.CONECT_MTHD = 'I' THEN 1 ELSE 0 END) AS "CREAT_CO" + , SUM(CASE WHEN B.CONECT_MTHD = 'U' THEN 1 ELSE 0 END) AS "UPDT_CO" + , SUM(CASE WHEN B.CONECT_MTHD = 'R' THEN 1 ELSE 0 END) AS "RDCNT" + , SUM(CASE WHEN B.CONECT_MTHD = 'O' THEN 1 ELSE 0 END) AS "DELETE_CO" + , 0 AS "OUTPT_CO" + , 0 AS "ERROR_CO" + FROM XIT_CONECT_LOG B + WHERE NOT EXISTS ( + SELECT FA.OCCRRNC_DE + FROM XIT_SYS_LOG_SUMRY FA + WHERE TRIM(FA.OCCRRNC_DE) = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY ), '%Y%m%d') + ) + AND DATE_FORMAT(B.CREAT_DT, '%Y%m%d') = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY ), '%Y%m%d') + GROUP BY DATE_FORMAT(B.CREAT_DT, '%Y%m%d'), B.CONECT_MTHD + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameScheduler-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameScheduler-oracle-mapper.xml new file mode 100644 index 00000000..ca45ece0 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameScheduler-oracle-mapper.xml @@ -0,0 +1,38 @@ + + + + + + /** addSysLogSummaryOfYesterday */ + /** 시스템 로그 전날 로그 요약 등록 */ + INSERT INTO XIT_SYS_LOG_SUMRY( + OCCRRNC_DE + ,SRVC_NM + ,METHOD_NM + ,CREAT_CO + ,UPDT_CO + ,RDCNT + ,DELETE_CO + ,OUTPT_CO + ,ERROR_CO + ) + SELECT TO_CHAR(B.CREAT_DT, 'YYYYMMDD') AS "OCCRRNC_DE" + , 'Member-login' AS "SRVC_NM" + , 'actionLogin' AS "METHOD_NM" + , SUM(CASE WHEN B.CONECT_MTHD = 'I' THEN 1 ELSE 0 END) AS "CREAT_CO" + , SUM(CASE WHEN B.CONECT_MTHD = 'U' THEN 1 ELSE 0 END) AS "UPDT_CO" + , SUM(CASE WHEN B.CONECT_MTHD = 'R' THEN 1 ELSE 0 END) AS "RDCNT" + , SUM(CASE WHEN B.CONECT_MTHD = 'O' THEN 1 ELSE 0 END) AS "DELETE_CO" + , 0 AS "OUTPT_CO" + , 0 AS "ERROR_CO" + FROM XIT_CONECT_LOG B + WHERE NOT EXISTS ( + SELECT FA.OCCRRNC_DE + FROM XIT_SYS_LOG_SUMRY FA + WHERE TRIM(FA.OCCRRNC_DE) = TO_CHAR((SYSDATE -1 ), 'YYYYMMDD') + ) + AND TO_CHAR(B.CREAT_DT, 'YYYYMMDD') = TO_CHAR((SYSDATE -1 ), 'YYYYMMDD') + GROUP BY TO_CHAR(B.CREAT_DT, 'YYYYMMDD'), B.CONECT_MTHD + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameUnit-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameUnit-mysql-mapper.xml new file mode 100644 index 00000000..ae251f33 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameUnit-mysql-mapper.xml @@ -0,0 +1,155 @@ + + + + + + + WITH recursive TREE_QUERY(MENU_ID, PARNT_MENU_ID, MENU_NAME, MENU_FULL_PATH, MENU_FULL_PATH_NAME, MENU_DEPTH) AS + ( + SELECT + A.MENU_NO AS "MENU_ID" + , A.UPPER_MENU_NO AS "PARNT_MENU_ID" + , A.MENU_NM AS "MENU_NAME" + , CONCAT('',A.MENU_NO) AS "MENU_FULL_PATH" + , CONCAT('',A.MENU_NM) AS "MENU_FULL_PATH_NAME" + , 1 AS "MENU_DEPTH" + FROM XIT_MENU_INFO A + INNER JOIN XIT_PROGRM_LIST B ON A.PROGRM_FILE_NM=B.PROGRM_FILE_NM + WHERE A.UPPER_MENU_NO = 0 + UNION ALL + SELECT + A.MENU_NO AS "MENU_ID" + , A.UPPER_MENU_NO AS "PARNT_MENU_ID" + , A.MENU_NM AS "MENU_NAME" + , CONCAT(B.MENU_FULL_PATH,'_',A.MENU_NO) AS "MENU_FULL_PATH" + , CONCAT(B.MENU_FULL_PATH_NAME,' > ',A.MENU_NM) AS "MENU_FULL_PATH_NAME" + , B.MENU_DEPTH+1 AS "MENU_DEPTH" + FROM XIT_MENU_INFO A + INNER JOIN TREE_QUERY B ON A.UPPER_MENU_NO = B.MENU_ID + WHERE B.MENU_ID != 0 + ) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitFrameUnit-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitFrameUnit-oracle-mapper.xml new file mode 100644 index 00000000..614aa40d --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitFrameUnit-oracle-mapper.xml @@ -0,0 +1,155 @@ + + + + + + + WITH TREE_QUERY(MENU_ID, PARNT_MENU_ID, MENU_NAME, MENU_FULL_PATH, MENU_FULL_PATH_NAME, MENU_DEPTH) AS + ( + SELECT + A.MENU_NO AS "MENU_ID" + , A.UPPER_MENU_NO AS "PARNT_MENU_ID" + , A.MENU_NM AS "MENU_NAME" + , ''||A.MENU_NO AS "MENU_FULL_PATH" + , ''||A.MENU_NM AS "MENU_FULL_PATH_NAME" + , 1 AS "MENU_DEPTH" + FROM XIT_MENU_INFO A + INNER JOIN XIT_PROGRM_LIST B ON A.PROGRM_FILE_NM=B.PROGRM_FILE_NM + WHERE A.UPPER_MENU_NO = 0 + UNION ALL + SELECT + A.MENU_NO AS "MENU_ID" + , A.UPPER_MENU_NO AS "PARNT_MENU_ID" + , A.MENU_NM AS "MENU_NAME" + , B.MENU_FULL_PATH || '_' || A.MENU_NO AS "MENU_FULL_PATH" + , B.MENU_FULL_PATH_NAME || ' > ' || A.MENU_NM AS "MENU_FULL_PATH_NAME" + , B.MENU_DEPTH+1 AS "MENU_DEPTH" + FROM XIT_MENU_INFO A + INNER JOIN TREE_QUERY B ON A.UPPER_MENU_NO = B.MENU_ID + WHERE B.MENU_ID != 0 + ) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitTest-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitTest-mysql-mapper.xml new file mode 100644 index 00000000..0a3dcf5c --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitTest-mysql-mapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + /** addTest */ + /** 등록 테스트 */ + INSERT INTO LETTNLOGINLOG( + LOG_ID + ,CONECT_MTHD + ,ERROR_OCCRRNC_AT + ,ERROR_CODE + ,CREAT_DT + )VALUES( + CONCAT('TEST_',LPAD((SELECT IFNULL(REPLACE(MAX(LOG_ID),'TEST_',''),0)+1 AS "LOG_ID" FROM LETTNLOGINLOG WHERE LOG_ID LIKE 'TEST_%') ,14 ,'0') ) + ,'I' + ,'N' + ,IFNULL(#{error_code}, '00') + ,NOW() + ) + + + + diff --git a/src/main/resources/sqlmapper/framework/cmm/XitTest-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/cmm/XitTest-oracle-mapper.xml new file mode 100644 index 00000000..97b2286e --- /dev/null +++ b/src/main/resources/sqlmapper/framework/cmm/XitTest-oracle-mapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + /** addTest */ + /** 등록 테스트 */ + INSERT INTO XIT_CONECT_LOG( + LOG_ID + ,CONECT_MTHD + ,ERROR_OCCRRNC_AT + ,ERROR_CODE + ,CREAT_DT + )VALUES( + NVL( + #{log_id} + ,'TEST_'||LPAD((SELECT NVL(REPLACE(MAX(LOG_ID),'TEST_',''),0)+1 AS "LOG_ID" FROM XIT_CONECT_LOG WHERE LOG_ID LIKE 'TEST_%') ,14 ,'0') + ) + ,'I' + ,'N' + ,NVL(#{error_code}, '00') + ,SYSDATE + ) + + + /** addListTest */ + /** 리스트 등록 테스트 */ + INSERT INTO XIT_CONECT_LOG( + LOG_ID + ,CONECT_MTHD + ,ERROR_OCCRRNC_AT + ,ERROR_CODE + ,CREAT_DT + ) + + SELECT + NVL( + #{row.log_id} + ,'TEST_'||LPAD((SELECT NVL(REPLACE(MAX(LOG_ID),'TEST_',''),0)+1 AS "LOG_ID" FROM XIT_CONECT_LOG WHERE LOG_ID LIKE 'TEST_%') ,14 ,'0') + ) AS "LOG_ID" + ,'I' AS "CONECT_MTHD" + ,'N' AS "ERROR_OCCRRNC_AT" + ,NVL(#{row.error_code}, '00') AS "ERROR_CODE" + ,SYSDATE AS "CREAT_DT" + FROM DUAL + + + + + /** 접속로그 테이블의 테스트 데이터 일괄 삭제 */ + /** removesXitConectLogForTestData */ + DELETE FROM XIT_CONECT_LOG + WHERE LOG_ID LIKE NVL(#{log_id}, 'BATCH_')||'%' + + + + diff --git a/src/main/resources/sqlmapper/framework/login/XitLogin-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/login/XitLogin-mysql-mapper.xml new file mode 100644 index 00000000..4a6f1530 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/login/XitLogin-mysql-mapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/sqlmapper/framework/login/XitLogin-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/login/XitLogin-oracle-mapper.xml new file mode 100644 index 00000000..4a6f1530 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/login/XitLogin-oracle-mapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/sqlmapper/framework/main/XitMain-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/main/XitMain-mysql-mapper.xml new file mode 100644 index 00000000..a73c7971 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/main/XitMain-mysql-mapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/main/XitMain-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/main/XitMain-oracle-mapper.xml new file mode 100644 index 00000000..a73c7971 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/main/XitMain-oracle-mapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/admin/XitAdminDbMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/admin/XitAdminDbMng-mysql-mapper.xml new file mode 100644 index 00000000..ad4a5565 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/admin/XitAdminDbMng-mysql-mapper.xml @@ -0,0 +1,84 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + + + + + + + + + + + + + + + + + + + + + + /** XitAdminDbMngMapper.addDynamicSql */ + /** 관리자DB관리 동적질의문 등록 */ + ${dynamicSql} + + + /** XitAdminDbMngMapper.modifyDynamicSql */ + /** 관리자DB관리 동적질의문 수정 */ + ${dynamicSql} + + + /** XitAdminDbMngMapper.removeDynamicSql */ + /** 관리자DB관리 동적질의문 삭제 */ + ${dynamicSql} + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/admin/XitAdminDbMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/admin/XitAdminDbMng-oracle-mapper.xml new file mode 100644 index 00000000..02a1d1fd --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/admin/XitAdminDbMng-oracle-mapper.xml @@ -0,0 +1,86 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + + + + + + + + + + + + + + + + + + + + + + /** XitAdminDbMngMapper.addDynamicSql */ + /** 관리자DB관리 동적질의문 등록 */ + ${dynamicSql} + + + /** XitAdminDbMngMapper.modifyDynamicSql */ + /** 관리자DB관리 동적질의문 수정 */ + ${dynamicSql} + + + /** XitAdminDbMngMapper.removeDynamicSql */ + /** 관리자DB관리 동적질의문 삭제 */ + ${dynamicSql} + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/grp/XitAuthGrpMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/grp/XitAuthGrpMng-mysql-mapper.xml new file mode 100644 index 00000000..70c6875a --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/grp/XitAuthGrpMng-mysql-mapper.xml @@ -0,0 +1,74 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.GROUP_ID AS "groupId" + ,A.GROUP_NM AS "groupNm" + ,A.GROUP_DC AS "groupDc" + ,A.GROUP_CREAT_DE AS "groupCreatDe" + ,A.AUTHOR_CODE AS "authorCode" + ,(SELECT SA.AUTHOR_NM FROM XIT_AUTHOR_INFO SA WHERE SA.AUTHOR_CODE=A.AUTHOR_CODE) AS "authorNm" + + + FROM XIT_AUTHOR_GROUP_INFO A + + + + AND A.GROUP_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/grp/XitAuthGrpMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/grp/XitAuthGrpMng-oracle-mapper.xml new file mode 100644 index 00000000..c1361dbc --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/grp/XitAuthGrpMng-oracle-mapper.xml @@ -0,0 +1,76 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.GROUP_ID AS "groupId" + ,A.GROUP_NM AS "groupNm" + ,A.GROUP_DC AS "groupDc" + ,A.GROUP_CREAT_DE AS "groupCreatDe" + ,A.AUTHOR_CODE AS "authorCode" + ,(SELECT SA.AUTHOR_NM FROM XIT_AUTHOR_INFO SA WHERE SA.AUTHOR_CODE=A.AUTHOR_CODE) AS "authorNm" + + + FROM XIT_AUTHOR_GROUP_INFO A + + + + AND A.GROUP_NM LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/hierarchy/XitAuthHierarchyMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/hierarchy/XitAuthHierarchyMng-mysql-mapper.xml new file mode 100644 index 00000000..589c6342 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/hierarchy/XitAuthHierarchyMng-mysql-mapper.xml @@ -0,0 +1,76 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.AUTHOR_CODE AS "authorCode" + ,A.AUTHOR_NM AS "authorNm" + ,A.AUTHOR_DC AS "authorDc" + ,A.AUTHOR_CREAT_DE AS "authorCreatDe" + + + FROM XIT_AUTHOR_INFO A + + + + AND A.AUTHOR_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/hierarchy/XitAuthHierarchyMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/hierarchy/XitAuthHierarchyMng-oracle-mapper.xml new file mode 100644 index 00000000..087e66e4 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/hierarchy/XitAuthHierarchyMng-oracle-mapper.xml @@ -0,0 +1,78 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.AUTHOR_CODE AS "authorCode" + ,A.AUTHOR_NM AS "authorNm" + ,A.AUTHOR_DC AS "authorDc" + ,A.AUTHOR_CREAT_DE AS "authorCreatDe" + + + FROM XIT_AUTHOR_INFO A + + + + AND A.AUTHOR_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/reg/XitAuthRegMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/reg/XitAuthRegMng-mysql-mapper.xml new file mode 100644 index 00000000..e97e0148 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/reg/XitAuthRegMng-mysql-mapper.xml @@ -0,0 +1,137 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.AUTHOR_CODE AS "authorCode" + ,A.AUTHOR_NM AS "authorNm" + ,A.AUTHOR_DC AS "authorDc" + ,A.AUTHOR_CREAT_DE AS "authorCreatDe" + + + FROM XIT_AUTHOR_INFO A + + + + AND A.AUTHOR_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT A.ROLE_CODE AS "roleCode" + ,A.ROLE_NM AS "roleNm" + ,A.ROLE_PTTRN AS "rolePtn" + ,A.ROLE_DC AS "roleDc" + ,A.ROLE_TY AS "roleTyp" + ,A.ROLE_SORT AS "roleSort" + ,B.AUTHOR_CODE AS "authorCode" + ,B.CREAT_DT AS "creatDt" + ,(CASE WHEN B.ROLE_CODE IS NULL THEN 'N' ELSE 'Y' END) AS "regYn" + + + FROM XIT_ROLE_INFO A + LEFT OUTER JOIN ( SELECT AUTHOR_CODE, ROLE_CODE, CREAT_DT + FROM XIT_AUTHOR_ROLE_RELATE + WHERE AUTHOR_CODE = #{searchKeyword} + ) B ON A.ROLE_CODE = B.ROLE_CODE + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/reg/XitAuthRegMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/reg/XitAuthRegMng-oracle-mapper.xml new file mode 100644 index 00000000..dc745f2f --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/reg/XitAuthRegMng-oracle-mapper.xml @@ -0,0 +1,139 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.AUTHOR_CODE AS "authorCode" + ,A.AUTHOR_NM AS "authorNm" + ,A.AUTHOR_DC AS "authorDc" + ,A.AUTHOR_CREAT_DE AS "authorCreatDe" + + + FROM XIT_AUTHOR_INFO A + + + + AND A.AUTHOR_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT A.ROLE_CODE AS "roleCode" + ,A.ROLE_NM AS "roleNm" + ,A.ROLE_PTTRN AS "rolePtn" + ,A.ROLE_DC AS "roleDc" + ,A.ROLE_TY AS "roleTyp" + ,A.ROLE_SORT AS "roleSort" + ,B.AUTHOR_CODE AS "authorCode" + ,B.CREAT_DT AS "creatDt" + ,(CASE WHEN B.ROLE_CODE IS NULL THEN 'N' ELSE 'Y' END) AS "regYn" + + + FROM XIT_ROLE_INFO A + LEFT OUTER JOIN ( SELECT AUTHOR_CODE, ROLE_CODE, CREAT_DT + FROM XIT_AUTHOR_ROLE_RELATE + WHERE AUTHOR_CODE = #{searchKeyword} + ) B ON A.ROLE_CODE = B.ROLE_CODE + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/rule/XitAuthRuleMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/rule/XitAuthRuleMng-mysql-mapper.xml new file mode 100644 index 00000000..b55b0e79 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/rule/XitAuthRuleMng-mysql-mapper.xml @@ -0,0 +1,77 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.ROLE_CODE AS "roleCode" + ,A.ROLE_NM AS "roleNm" + ,A.ROLE_PTTRN AS "rolePtn" + ,A.ROLE_DC AS "roleDc" + ,( + SELECT CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT029' AND CODE = A.ROLE_TY) AS "roleTyp" + ,A.ROLE_SORT AS "roleSort" + ,A.ROLE_CREAT_DE AS "roleCreatDe" + + + FROM XIT_ROLE_INFO A + + + + AND A.ROLE_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/rule/XitAuthRuleMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/rule/XitAuthRuleMng-oracle-mapper.xml new file mode 100644 index 00000000..84a6a105 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/rule/XitAuthRuleMng-oracle-mapper.xml @@ -0,0 +1,79 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.ROLE_CODE AS "roleCode" + ,A.ROLE_NM AS "roleNm" + ,A.ROLE_PTTRN AS "rolePtn" + ,A.ROLE_DC AS "roleDc" + ,( + SELECT CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT029' AND CODE = A.ROLE_TY) AS "roleTyp" + ,A.ROLE_SORT AS "roleSort" + ,A.ROLE_CREAT_DE AS "roleCreatDe" + + + FROM XIT_ROLE_INFO A + + + + AND A.ROLE_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/usr/XitAuthUsrMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/usr/XitAuthUsrMng-mysql-mapper.xml new file mode 100644 index 00000000..6c50145b --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/usr/XitAuthUsrMng-mysql-mapper.xml @@ -0,0 +1,144 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.USER_ID AS "userId" + ,A.USER_NM AS "userNm" + ,A.GROUP_ID AS "groupId" + ,B.MBER_TY_CODE AS "mberTyCode" + ,(SELECT CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT012' + AND CODE = B.MBER_TY_CODE + AND USE_AT = 'Y') AS "mberTyNm" + ,B.AUTHOR_CODE AS "authorCode" + ,CASE WHEN B.SCRTY_SETUP_TRGET_ID IS NULL THEN 'N' + ELSE 'Y' + END AS "regYn" + ,ESNTL_ID AS "uniqId" + + + FROM ( + SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, ESNTL_ID + FROM XIT_GNRL_MBER + UNION ALL + SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, ESNTL_ID + FROM XIT_ENTRPRS_MBER + UNION ALL + SELECT USER_ID, USER_NM USER_NM, GROUP_ID, ESNTL_ID + FROM XIT_USER_INFO ) A + LEFT OUTER JOIN XIT_USER_SCRTY_SETUP B ON A.ESNTL_ID = B.SCRTY_SETUP_TRGET_ID + + + + + AND A.USER_ID LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.USER_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.GROUP_ID = #{searchKeyword} + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT A.GROUP_ID AS "groupId" + ,A.GROUP_NM AS "groupNm" + ,A.GROUP_DC AS "groupDc" + ,A.GROUP_CREAT_DE AS "groupCreatDe" + + + FROM XIT_AUTHOR_GROUP_INFO A + + + + AND A.GROUP_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/auth/usr/XitAuthUsrMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/auth/usr/XitAuthUsrMng-oracle-mapper.xml new file mode 100644 index 00000000..bd73e4a8 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/auth/usr/XitAuthUsrMng-oracle-mapper.xml @@ -0,0 +1,146 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.USER_ID AS "userId" + ,A.USER_NM AS "userNm" + ,A.GROUP_ID AS "groupId" + ,B.MBER_TY_CODE AS "mberTyCode" + ,(SELECT CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT012' + AND CODE = B.MBER_TY_CODE + AND USE_AT = 'Y') AS "mberTyNm" + ,B.AUTHOR_CODE AS "authorCode" + ,CASE WHEN B.SCRTY_SETUP_TRGET_ID IS NULL THEN 'N' + ELSE 'Y' + END AS "regYn" + ,ESNTL_ID AS "uniqId" + + + FROM ( + SELECT MBER_ID USER_ID, MBER_NM USER_NM, GROUP_ID, ESNTL_ID + FROM XIT_GNRL_MBER + UNION ALL + SELECT ENTRPRS_MBER_ID USER_ID, CMPNY_NM USER_NM, GROUP_ID, ESNTL_ID + FROM XIT_ENTRPRS_MBER + UNION ALL + SELECT USER_ID, USER_NM USER_NM, GROUP_ID, ESNTL_ID + FROM XIT_USER_INFO ) A + LEFT OUTER JOIN XIT_USER_SCRTY_SETUP B ON A.ESNTL_ID = B.SCRTY_SETUP_TRGET_ID + + + + + AND A.USER_ID LIKE '%'||#{searchKeyword}||'%' + + + AND A.USER_NM LIKE '%'||#{searchKeyword}||'%' + + + AND A.GROUP_ID = #{searchKeyword} + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT A.GROUP_ID AS "groupId" + ,A.GROUP_NM AS "groupNm" + ,A.GROUP_DC AS "groupDc" + ,A.GROUP_CREAT_DE AS "groupCreatDe" + + + FROM XIT_AUTHOR_GROUP_INFO A + + + + AND A.GROUP_NM LIKE '%' || #{searchKeyword} || '%' + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/batch/XitBatchRegMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchRegMng-mysql-mapper.xml new file mode 100644 index 00000000..659dc304 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchRegMng-mysql-mapper.xml @@ -0,0 +1,83 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.BATCH_OPERT_ID AS "batchOpertId" + ,A.BATCH_OPERT_NM AS "batchOpertNm" + ,A.BATCH_OPERT_SE AS "batchOpertSe" + ,A.BATCH_PROGRM AS "batchProgrm" + ,A.PARAMTR AS "paramtr" + ,DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %H:%i:%s') AS "frstRegisterId" + ,A.LAST_UPDUSR_ID AS "frstRegisterPnttm" + ,A.FRST_REGISTER_ID AS "lastUpdusrId" + ,DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%s') AS "lastUpdusrPnttm" + + + FROM COMTNBATCHOPERT A + + + AND USE_AT = 'Y' + + + AND A.BATCH_OPERT_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.BATCH_PROGRM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/batch/XitBatchRegMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchRegMng-oracle-mapper.xml new file mode 100644 index 00000000..d89281e8 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchRegMng-oracle-mapper.xml @@ -0,0 +1,85 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.BATCH_OPERT_ID AS "batchOpertId" + ,A.BATCH_OPERT_NM AS "batchOpertNm" + ,A.BATCH_OPERT_SE AS "batchOpertSe" + ,A.BATCH_PROGRM AS "batchProgrm" + ,A.PARAMTR AS "paramtr" + ,TO_CHAR (A.LAST_UPDT_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS "frstRegisterId" + ,A.LAST_UPDUSR_ID AS "frstRegisterPnttm" + ,A.FRST_REGISTER_ID AS "lastUpdusrId" + ,TO_CHAR (A.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS "lastUpdusrPnttm" + + + FROM COMTNBATCHOPERT A + + + AND USE_AT = 'Y' + + + AND A.BATCH_OPERT_NM LIKE '%' || #{searchKeyword} || '%' + + + AND A.BATCH_PROGRM LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/batch/XitBatchResultMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchResultMng-mysql-mapper.xml new file mode 100644 index 00000000..c8c0813d --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchResultMng-mysql-mapper.xml @@ -0,0 +1,101 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.BATCH_RESULT_ID AS "batchResultId" + ,A.BATCH_SCHDUL_ID AS "batchSchdulId" + ,A.BATCH_OPERT_ID AS "batchOpertId" + ,B.BATCH_OPERT_NM AS "batchOpertNm" + ,B.BATCH_PROGRM AS "batchProgrm" + ,A.PARAMTR AS "paramtr" + ,A.STTUS AS "sttus" + ,C.CODE_NM AS "sttusNm" + ,A.ERROR_INFO AS "errorInfo" + ,A.EXECUT_BEGIN_TM AS "executBeginTime" + ,A.EXECUT_END_TM AS "executEndTime" + ,DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %H:%i:%s') AS "lastUpdusrPnttm" + ,A.LAST_UPDUSR_ID AS "lastUpdusrId" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%s') AS "frstRegisterPnttm" + + + FROM COMTNBATCHRESULT A + INNER JOIN COMTNBATCHOPERT B ON A.BATCH_OPERT_ID = B.BATCH_OPERT_ID + INNER JOIN XIT_CMMN_DETAIL_CODE C ON A.STTUS = C.CODE AND C.CODE_ID = 'XIT076' + + + + AND A.STTUS = #{sttus} + + + AND SUBSTRING(A.EXECUT_BEGIN_TM,1, 8) >= #{searchKeywordFrom} + + + AND SUBSTRING(A.EXECUT_BEGIN_TM,1, 8) <= #{searchKeywordTo} + + + + AND B.BATCH_OPERT_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND B.BATCH_SCHDUL_ID LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/batch/XitBatchResultMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchResultMng-oracle-mapper.xml new file mode 100644 index 00000000..1407d422 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchResultMng-oracle-mapper.xml @@ -0,0 +1,103 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.BATCH_RESULT_ID AS "batchResultId" + ,A.BATCH_SCHDUL_ID AS "batchSchdulId" + ,A.BATCH_OPERT_ID AS "batchOpertId" + ,B.BATCH_OPERT_NM AS "batchOpertNm" + ,B.BATCH_PROGRM AS "batchProgrm" + ,A.PARAMTR AS "paramtr" + ,A.STTUS AS "sttus" + ,C.CODE_NM AS "sttusNm" + ,A.ERROR_INFO AS "errorInfo" + ,A.EXECUT_BEGIN_TM AS "executBeginTime" + ,A.EXECUT_END_TM AS "executEndTime" + ,TO_CHAR (A.LAST_UPDT_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS "lastUpdusrPnttm" + ,A.LAST_UPDUSR_ID AS "lastUpdusrId" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,TO_CHAR (A.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS "frstRegisterPnttm" + + + FROM COMTNBATCHRESULT A + INNER JOIN COMTNBATCHOPERT B ON A.BATCH_OPERT_ID = B.BATCH_OPERT_ID + INNER JOIN XIT_CMMN_DETAIL_CODE C ON A.STTUS = C.CODE AND C.CODE_ID = 'XIT076' + + + + AND A.STTUS = #{sttus} + + + AND SUBSTR(A.EXECUT_BEGIN_TM,1, 8) >= #{searchKeywordFrom} + + + AND SUBSTR(A.EXECUT_BEGIN_TM,1, 8) <= #{searchKeywordTo} + + + + AND B.BATCH_OPERT_NM LIKE '%' || #{searchKeyword} || '%' + + + AND B.BATCH_SCHDUL_ID LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/batch/XitBatchScheduleMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchScheduleMng-mysql-mapper.xml new file mode 100644 index 00000000..084685ea --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchScheduleMng-mysql-mapper.xml @@ -0,0 +1,104 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.BATCH_SCHDUL_ID AS "batchSchdulId" + ,A.BATCH_OPERT_ID AS "batchOpertId" + ,A.EXECUT_CYCLE AS "executCycle" + ,C.CODE_NM AS "executCycleNm" + ,A.EXECUT_SCHDUL_DE AS "executSchdulDe" + ,A.EXECUT_SCHDUL_HOUR AS "executSchdulHour" + ,A.EXECUT_SCHDUL_MNT AS "executSchdulMnt" + ,A.EXECUT_SCHDUL_SECND AS "executSchdulSecnd" + ,B.BATCH_OPERT_NM AS "batchOpertNm" + ,B.BATCH_PROGRM AS "batchProgrm" + ,B.PARAMTR AS "paramtr" + ,DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %H:%i:%s') AS "lastUpdusrId" + ,A.LAST_UPDUSR_ID AS "lastUpdusrPnttm" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i:%s') AS "frstRegisterPnttm" + + + FROM COMTNBATCHSCHDUL A + INNER JOIN COMTNBATCHOPERT B ON A.BATCH_OPERT_ID = B.BATCH_OPERT_ID + INNER JOIN XIT_CMMN_DETAIL_CODE C ON A.EXECUT_CYCLE = C.CODE AND C.CODE_ID = 'XIT047' + + + + + AND B.BATCH_OPERT_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.BATCH_PROGRM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/batch/XitBatchScheduleMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchScheduleMng-oracle-mapper.xml new file mode 100644 index 00000000..c9b450d3 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/batch/XitBatchScheduleMng-oracle-mapper.xml @@ -0,0 +1,106 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.BATCH_SCHDUL_ID AS "batchSchdulId" + ,A.BATCH_OPERT_ID AS "batchOpertId" + ,A.EXECUT_CYCLE AS "executCycle" + ,C.CODE_NM AS "executCycleNm" + ,A.EXECUT_SCHDUL_DE AS "executSchdulDe" + ,A.EXECUT_SCHDUL_HOUR AS "executSchdulHour" + ,A.EXECUT_SCHDUL_MNT AS "executSchdulMnt" + ,A.EXECUT_SCHDUL_SECND AS "executSchdulSecnd" + ,B.BATCH_OPERT_NM AS "batchOpertNm" + ,B.BATCH_PROGRM AS "batchProgrm" + ,B.PARAMTR AS "paramtr" + ,TO_CHAR (A.LAST_UPDT_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS "lastUpdusrId" + ,A.LAST_UPDUSR_ID AS "lastUpdusrPnttm" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,TO_CHAR (A.FRST_REGIST_PNTTM, 'YYYY-MM-DD HH24:MI:SS') AS "frstRegisterPnttm" + + + FROM COMTNBATCHSCHDUL A + INNER JOIN COMTNBATCHOPERT B ON A.BATCH_OPERT_ID = B.BATCH_OPERT_ID + INNER JOIN XIT_CMMN_DETAIL_CODE C ON A.EXECUT_CYCLE = C.CODE AND C.CODE_ID = 'XIT047' + + + + + AND B.BATCH_OPERT_NM LIKE '%' || #{searchKeyword} || '%' + + + AND A.BATCH_PROGRM LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/basic/XitBasicBbsMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/basic/XitBasicBbsMng-mysql-mapper.xml new file mode 100644 index 00000000..05c0f895 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/basic/XitBasicBbsMng-mysql-mapper.xml @@ -0,0 +1,196 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.NTT_SJ AS "nttSj" + ,A.NTCR_ID AS "ntcrId" + ,A.NTCR_NM AS "ntcrNm" + ,A.NTT_NO AS "nttNo" + ,A.NTT_CN AS "nttCn" + ,A.PASSWORD AS "password" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,IFNULL (B.USER_NM, A.NTCR_NM) AS "frstRegisterNm" + ,DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d') AS "frstRegisterPnttm" + ,A.NTCE_BEGIN_DE AS "ntceBgnde" + ,A.NTCE_END_DE AS "ntceEndde" + ,A.RDCNT AS "inqireCo" + ,A.USE_AT AS "useAt" + ,A.ATCH_FILE_ID AS "atchFileId" + ,A.BBS_ID AS "bbsId" + ,A.NTT_ID AS "nttId" + ,A.PARNTS_SNTNC_NO AS "parnts" + ,A.ANSWER_AT AS "replyAt" + ,A.ANSWER_LC AS "replyLc" + ,A.SORT_ORDR AS "sortOrdr" + ,C.BBS_TY_CODE AS "bbsTyCode" + ,C.BBS_ATTRB_CODE AS "bbsAttrbCode" + ,C.REPLY_POSBL_AT AS "replyPosblAt" + ,C.FILE_ATCH_POSBL_AT AS "fileAtchPosblAt" + ,C.ATCH_POSBL_FILE_NUMBER AS "posblAtchFileNumber" + ,C.BBS_NM AS "bbsNm" + + + FROM XIT_BBS A + LEFT OUTER JOIN XIT_VW_USER_MASTR B ON A.FRST_REGISTER_ID = B.ESNTL_ID + LEFT OUTER JOIN XIT_BBS_MASTR C ON A.BBS_ID = C.BBS_ID + + + AND A.BBS_ID = #{bbsId} + AND A.PARNTS_SNTNC_NO = 0 + + + AND A.NTT_SJ LIKE CONCAT('%',#{searchWrd},'%') + + + AND A.NTT_CN LIKE CONCAT('%',#{searchWrd},'%') + + + AND B.USER_NM LIKE CONCAT('%',#{searchWrd},'%') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/basic/XitBasicBbsMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/basic/XitBasicBbsMng-oracle-mapper.xml new file mode 100644 index 00000000..0c5ec4cf --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/basic/XitBasicBbsMng-oracle-mapper.xml @@ -0,0 +1,197 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.NTT_SJ AS "nttSj" + ,A.NTCR_ID AS "ntcrId" + ,A.NTCR_NM AS "ntcrNm" + ,A.NTT_NO AS "nttNo" + ,A.NTT_CN AS "nttCn" + ,A.PASSWORD AS "password" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,NVL (B.USER_NM, A.NTCR_NM) AS "frstRegisterNm" + ,TO_CHAR (A.FRST_REGIST_PNTTM, 'YYYY-MM-DD') AS "frstRegisterPnttm" + ,A.NTCE_BEGIN_DE AS "ntceBgnde" + ,A.NTCE_END_DE AS "ntceEndde" + ,A.RDCNT AS "inqireCo" + ,A.USE_AT AS "useAt" + ,A.ATCH_FILE_ID AS "atchFileId" + ,A.BBS_ID AS "bbsId" + ,A.NTT_ID AS "nttId" + ,A.PARNTS_SNTNC_NO AS "parnts" + ,A.ANSWER_AT AS "replyAt" + ,A.ANSWER_LC AS "replyLc" + ,A.SORT_ORDR AS "sortOrdr" + ,C.BBS_TY_CODE AS "bbsTyCode" + ,C.BBS_ATTRB_CODE AS "bbsAttrbCode" + ,C.REPLY_POSBL_AT AS "replyPosblAt" + ,C.FILE_ATCH_POSBL_AT AS "fileAtchPosblAt" + ,C.ATCH_POSBL_FILE_NUMBER AS "posblAtchFileNumber" + ,C.BBS_NM AS "bbsNm" + + + FROM XIT_BBS A + LEFT OUTER JOIN XIT_VW_USER_MASTR B ON A.FRST_REGISTER_ID = B.ESNTL_ID + LEFT OUTER JOIN XIT_BBS_MASTR C ON A.BBS_ID = C.BBS_ID + + + AND A.BBS_ID = #{bbsId} + AND A.PARNTS_SNTNC_NO = 0 + + + AND A.NTT_SJ LIKE '%' || #{searchWrd} || '%' + + + AND A.NTT_CN LIKE '%' || #{searchWrd} || '%' + + + AND B.USER_NM LIKE '%' || #{searchWrd} || '%' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/create/XitBbsCreateMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/create/XitBbsCreateMng-mysql-mapper.xml new file mode 100644 index 00000000..56bf13c7 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/create/XitBbsCreateMng-mysql-mapper.xml @@ -0,0 +1,107 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.BBS_ID AS "bbsId" + ,A.BBS_TY_CODE AS "bbsTyCode" + ,B.CODE_NM AS "bbsTyCodeNm" + ,A.BBS_INTRCN AS "bbsIntrcn" + ,A.BBS_ATTRB_CODE AS "bbsAttrbCode" + ,C.CODE_NM AS "bbsAttrbCodeNm" + ,A.BBS_NM AS "bbsNm" + ,A.TMPLAT_ID AS "tmplatId" + ,D.TMPLAT_NM AS "tmplatNm" + ,D.TMPLAT_COURS AS "tmplatCours" + ,A.FILE_ATCH_POSBL_AT AS "fileAtchPosblAt" + ,A.ATCH_POSBL_FILE_NUMBER AS "posblAtchFileNumber" + ,A.ATCH_POSBL_FILE_SIZE AS "posblAtchFileSize" + ,A.REPLY_POSBL_AT AS "replyPosblAt" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,(SELECT SA.USER_NM FROM XIT_VW_USER_MASTR SA WHERE SA.ESNTL_ID = A.FRST_REGISTER_ID) AS "frstRegisterNm" + ,A.USE_AT AS "useAt" + ,DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d') AS "frstRegisterPnttm" + ,(SELECT IFNULL (SA.USE_AT, 'N') + FROM XIT_BBS_PRCUSE SA + + WHERE SA.BBS_ID = A.BBS_ID + AND SA.TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')) + AS "authFlag" + + + FROM XIT_BBS_MASTR A + LEFT OUTER JOIN (SELECT CODE_ID, CODE, CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT004' AND USE_AT = 'Y') B ON A.BBS_TY_CODE = B.CODE + LEFT OUTER JOIN (SELECT CODE_ID, CODE, CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT009' AND USE_AT = 'Y') C ON A.BBS_ATTRB_CODE = C.CODE + LEFT OUTER JOIN XIT_TMPLAT_INFO D ON A.TMPLAT_ID = D.TMPLAT_ID AND D.USE_AT = 'Y' + + + + AND A.USE_AT = #{useAt} + + + + AND A.BBS_NM LIKE CONCAT('%',#{searchWrd},'%') + + + AND B.CODE_NM LIKE CONCAT('%',#{searchWrd},'%') + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/create/XitBbsCreateMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/create/XitBbsCreateMng-oracle-mapper.xml new file mode 100644 index 00000000..5d7070e2 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/create/XitBbsCreateMng-oracle-mapper.xml @@ -0,0 +1,109 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.BBS_ID AS "bbsId" + ,A.BBS_TY_CODE AS "bbsTyCode" + ,B.CODE_NM AS "bbsTyCodeNm" + ,A.BBS_INTRCN AS "bbsIntrcn" + ,A.BBS_ATTRB_CODE AS "bbsAttrbCode" + ,C.CODE_NM AS "bbsAttrbCodeNm" + ,A.BBS_NM AS "bbsNm" + ,A.TMPLAT_ID AS "tmplatId" + ,D.TMPLAT_NM AS "tmplatNm" + ,D.TMPLAT_COURS AS "tmplatCours" + ,A.FILE_ATCH_POSBL_AT AS "fileAtchPosblAt" + ,A.ATCH_POSBL_FILE_NUMBER AS "posblAtchFileNumber" + ,A.ATCH_POSBL_FILE_SIZE AS "posblAtchFileSize" + ,A.REPLY_POSBL_AT AS "replyPosblAt" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,(SELECT SA.USER_NM FROM XIT_VW_USER_MASTR SA WHERE SA.ESNTL_ID = A.FRST_REGISTER_ID) AS "frstRegisterNm" + ,A.USE_AT AS "useAt" + ,TO_CHAR (A.FRST_REGIST_PNTTM, 'YYYY-MM-DD') AS "frstRegisterPnttm" + ,(SELECT NVL (SA.USE_AT, 'N') + FROM XIT_BBS_PRCUSE SA + + WHERE SA.BBS_ID = A.BBS_ID + AND SA.TRGET_ID IN (#{uniqId}, 'SYSTEM_DEFAULT_BOARD')) + AS "authFlag" + + + FROM XIT_BBS_MASTR A + LEFT OUTER JOIN (SELECT CODE_ID, CODE, CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT004' AND USE_AT = 'Y') B ON A.BBS_TY_CODE = B.CODE + LEFT OUTER JOIN (SELECT CODE_ID, CODE, CODE_NM + FROM XIT_CMMN_DETAIL_CODE + WHERE CODE_ID = 'XIT009' AND USE_AT = 'Y') C ON A.BBS_ATTRB_CODE = C.CODE + LEFT OUTER JOIN XIT_TMPLAT_INFO D ON A.TMPLAT_ID = D.TMPLAT_ID AND D.USE_AT = 'Y' + + + + AND A.USE_AT = #{useAt} + + + + AND A.BBS_NM LIKE '%' || #{searchWrd} || '%' + + + AND B.CODE_NM LIKE '%' || #{searchWrd} || '%' + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/tmplate/XitBbsTmplateMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/tmplate/XitBbsTmplateMng-mysql-mapper.xml new file mode 100644 index 00000000..8a404ab0 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/tmplate/XitBbsTmplateMng-mysql-mapper.xml @@ -0,0 +1,91 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + + SELECT A.TMPLAT_ID AS "tmplatId" + ,A.TMPLAT_NM AS "tmplatNm" + ,A.TMPLAT_SE_CODE AS "tmplatSeCode" + ,A.TMPLAT_COURS AS "tmplatCours" + ,A.USE_AT AS "useAt" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,A.FRST_REGIST_PNTTM AS "frstRegisterPnttm" + ,A.LAST_UPDUSR_ID AS "lastUpdusrId" + ,A.LAST_UPDT_PNTTM AS "lastUpdusrPnttm" + ,B.CODE_NM AS "tmplatSeCodeNm" + ,(SELECT SA.USER_NM FROM XIT_VW_USER_MASTR SA WHERE SA.ESNTL_ID=A.FRST_REGISTER_ID) AS "frstRegisterNm" + ,(SELECT SA.USER_NM FROM XIT_VW_USER_MASTR SA WHERE SA.ESNTL_ID=A.LAST_UPDUSR_ID) AS "lastUpdusrNm" + + + FROM XIT_TMPLAT_INFO A + LEFT OUTER JOIN XIT_CMMN_DETAIL_CODE B ON A.TMPLAT_SE_CODE = B.CODE + + + AND B.CODE_ID = 'XIT005' + + AND A.TMPLAT_SE_CODE = #{tmplatSeCode} + + + + AND A.TMPLAT_NM LIKE CONCAT('%',#{searchWrd},'%') + + + AND B.CODE_NM LIKE CONCAT('%',#{searchWrd},'%') + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/tmplate/XitBbsTmplateMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/tmplate/XitBbsTmplateMng-oracle-mapper.xml new file mode 100644 index 00000000..2c8abbc7 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/tmplate/XitBbsTmplateMng-oracle-mapper.xml @@ -0,0 +1,93 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + + SELECT A.TMPLAT_ID AS "tmplatId" + ,A.TMPLAT_NM AS "tmplatNm" + ,A.TMPLAT_SE_CODE AS "tmplatSeCode" + ,A.TMPLAT_COURS AS "tmplatCours" + ,A.USE_AT AS "useAt" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,A.FRST_REGIST_PNTTM AS "frstRegisterPnttm" + ,A.LAST_UPDUSR_ID AS "lastUpdusrId" + ,A.LAST_UPDT_PNTTM AS "lastUpdusrPnttm" + ,B.CODE_NM AS "tmplatSeCodeNm" + ,(SELECT SA.USER_NM FROM XIT_VW_USER_MASTR SA WHERE SA.ESNTL_ID=A.FRST_REGISTER_ID) AS "frstRegisterNm" + ,(SELECT SA.USER_NM FROM XIT_VW_USER_MASTR SA WHERE SA.ESNTL_ID=A.LAST_UPDUSR_ID) AS "lastUpdusrNm" + + + FROM XIT_TMPLAT_INFO A + LEFT OUTER JOIN XIT_CMMN_DETAIL_CODE B ON A.TMPLAT_SE_CODE = B.CODE + + + AND B.CODE_ID = 'XIT005' + + AND A.TMPLAT_SE_CODE = #{tmplatSeCode} + + + + AND A.TMPLAT_NM LIKE '%' || #{searchWrd} || '%' + + + AND B.CODE_NM LIKE '%' || #{searchWrd} || '%' + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/use/XitBbsUseMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/use/XitBbsUseMng-mysql-mapper.xml new file mode 100644 index 00000000..af45ec32 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/use/XitBbsUseMng-mysql-mapper.xml @@ -0,0 +1,89 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.BBS_ID AS "bbsId" + ,E.BBS_NM AS "bbsNm" + ,A.TRGET_ID AS "trgetId" + ,A.REGIST_SE_CODE AS "registSeCode" + ,B.CODE_NM AS "registSeCodeNm" + ,A.USE_AT AS "useAt" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,A.FRST_REGIST_PNTTM AS "frstRegisterPnttm" + ,'시스템 활용' AS "cmmntyId" + ,'시스템 활용' AS "cmmntyNm" + ,'시스템 활용' AS "clbId" + ,'시스템 활용' AS "clbNm" + ,'시스템 활용' AS "bbsTyCode" + + + FROM XIT_BBS_PRCUSE A + LEFT OUTER JOIN XIT_CMMN_DETAIL_CODE B ON B.CODE = A.REGIST_SE_CODE + LEFT OUTER JOIN XIT_BBS_MASTR E ON A.BBS_ID = E.BBS_ID + + + AND B.CODE_ID = 'XIT001' + AND A.REGIST_SE_CODE != 'REGC07' + + + AND E.BBS_NM LIKE CONCAT('%',#{searchWrd},'%') + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/bbs/use/XitBbsUseMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/bbs/use/XitBbsUseMng-oracle-mapper.xml new file mode 100644 index 00000000..8579f171 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/bbs/use/XitBbsUseMng-oracle-mapper.xml @@ -0,0 +1,91 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.BBS_ID AS "bbsId" + ,E.BBS_NM AS "bbsNm" + ,A.TRGET_ID AS "trgetId" + ,A.REGIST_SE_CODE AS "registSeCode" + ,B.CODE_NM AS "registSeCodeNm" + ,A.USE_AT AS "useAt" + ,A.FRST_REGISTER_ID AS "frstRegisterId" + ,A.FRST_REGIST_PNTTM AS "frstRegisterPnttm" + ,'시스템 활용' AS "cmmntyId" + ,'시스템 활용' AS "cmmntyNm" + ,'시스템 활용' AS "clbId" + ,'시스템 활용' AS "clbNm" + ,'시스템 활용' AS "bbsTyCode" + + + FROM XIT_BBS_PRCUSE A + LEFT OUTER JOIN XIT_CMMN_DETAIL_CODE B ON B.CODE = A.REGIST_SE_CODE + LEFT OUTER JOIN XIT_BBS_MASTR E ON A.BBS_ID = E.BBS_ID + + + AND B.CODE_ID = 'XIT001' + AND A.REGIST_SE_CODE != 'REGC07' + + + AND E.BBS_NM LIKE '%' || #{searchWrd} || '%' + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/cl/XitClCodeMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/cl/XitClCodeMng-mysql-mapper.xml new file mode 100644 index 00000000..48d1a896 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/cl/XitClCodeMng-mysql-mapper.xml @@ -0,0 +1,77 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.CL_CODE AS "clCode" + , A.CL_CODE_NM AS "clCodeNm" + , A.CL_CODE_DC AS "clCodeDc" + , A.USE_AT AS "useAt" + + + FROM XIT_CMMN_CL_CODE A + + + + AND A.CL_CODE = #{searchKeyword} + + + AND A.CL_CODE_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.USE_AT = 'Y' + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/cl/XitClCodeMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/cl/XitClCodeMng-oracle-mapper.xml new file mode 100644 index 00000000..ab9713fb --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/cl/XitClCodeMng-oracle-mapper.xml @@ -0,0 +1,79 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.CL_CODE AS "clCode" + , A.CL_CODE_NM AS "clCodeNm" + , A.CL_CODE_DC AS "clCodeDc" + , A.USE_AT AS "useAt" + + + FROM XIT_CMMN_CL_CODE A + + + + AND A.CL_CODE = #{searchKeyword} + + + AND A.CL_CODE_NM LIKE '%'||#{searchKeyword}||'%' + + + AND A.USE_AT = 'Y' + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/cmmn/XitCmmnCodeMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/cmmn/XitCmmnCodeMng-mysql-mapper.xml new file mode 100644 index 00000000..e054bc77 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/cmmn/XitCmmnCodeMng-mysql-mapper.xml @@ -0,0 +1,81 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT B.CL_CODE_NM AS "clCodeNm" + , A.CL_CODE AS "clCode" + , A.CODE_ID AS "codeId" + , A.CODE_ID_NM AS "codeIdNm" + , A.CODE_ID_DC AS "codeIdDc" + , A.USE_AT AS "useAt" + + + FROM XIT_CMMN_CODE A + INNER JOIN XIT_CMMN_CL_CODE B ON A.CL_CODE = B.CL_CODE + + + + AND A.CODE_ID = #{searchKeyword} + + + AND A.CODE_ID_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.CL_CODE = #{searchKeyword} + AND A.USE_AT = 'Y' + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/cmmn/XitCmmnCodeMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/cmmn/XitCmmnCodeMng-oracle-mapper.xml new file mode 100644 index 00000000..85a35dc2 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/cmmn/XitCmmnCodeMng-oracle-mapper.xml @@ -0,0 +1,83 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT B.CL_CODE_NM AS "clCodeNm" + , A.CL_CODE AS "clCode" + , A.CODE_ID AS "codeId" + , A.CODE_ID_NM AS "codeIdNm" + , A.CODE_ID_DC AS "codeIdDc" + , A.USE_AT AS "useAt" + + + FROM XIT_CMMN_CODE A + INNER JOIN XIT_CMMN_CL_CODE B ON A.CL_CODE = B.CL_CODE + + + + AND A.CODE_ID = #{searchKeyword} + + + AND A.CODE_ID_NM LIKE '%'||#{searchKeyword}||'%' + + + AND A.CL_CODE = #{searchKeyword} + AND A.USE_AT = 'Y' + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/detail/XitDetailCodeMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/detail/XitDetailCodeMng-mysql-mapper.xml new file mode 100644 index 00000000..2a901402 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/detail/XitDetailCodeMng-mysql-mapper.xml @@ -0,0 +1,84 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.CODE_ID AS "codeId" + , B.CODE_ID_NM AS "codeIdNm" + , A.CODE AS "code" + , A.CODE_NM AS "codeNm" + , A.CODE_DC AS "codeDc" + , A.USE_AT AS "useAt" + + + FROM XIT_CMMN_DETAIL_CODE A + INNER JOIN XIT_CMMN_CODE B ON A.CODE_ID = B.CODE_ID + + + AND B.USE_AT = 'Y' + + AND A.CODE_ID = #{searchKeyword} + + + AND A.CODE = #{searchKeyword} + + + AND A.CODE_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/detail/XitDetailCodeMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/detail/XitDetailCodeMng-oracle-mapper.xml new file mode 100644 index 00000000..319cf2fe --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/detail/XitDetailCodeMng-oracle-mapper.xml @@ -0,0 +1,86 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.CODE_ID AS "codeId" + , B.CODE_ID_NM AS "codeIdNm" + , A.CODE AS "code" + , A.CODE_NM AS "codeNm" + , A.CODE_DC AS "codeDc" + , A.USE_AT AS "useAt" + + + FROM XIT_CMMN_DETAIL_CODE A + INNER JOIN XIT_CMMN_CODE B ON A.CODE_ID = B.CODE_ID + + + AND B.USE_AT = 'Y' + + AND A.CODE_ID = #{searchKeyword} + + + AND A.CODE = #{searchKeyword} + + + AND A.CODE_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/zip/XitZipCodeMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/zip/XitZipCodeMng-mysql-mapper.xml new file mode 100644 index 00000000..d1d6f1c1 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/zip/XitZipCodeMng-mysql-mapper.xml @@ -0,0 +1,90 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.ZIP AS "zip" + ,A.SN AS "sn" + ,A.CTPRVN_NM AS "ctprvnNm" + ,A.SIGNGU_NM AS "signguNm" + ,A.EMD_NM AS "emdNm" + ,A.LI_BULD_NM AS "liBuldNm" + ,A.LNBR_DONG_HO AS "lnbrDongHo" + + + FROM XIT_ZIP A + + + + + AND A.ZIP = #{searchKeyword} + + + AND A.CTPRVN_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.SIGNGU_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.EMD_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.LI_BULD_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/code/zip/XitZipCodeMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/code/zip/XitZipCodeMng-oracle-mapper.xml new file mode 100644 index 00000000..f5c257f7 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/code/zip/XitZipCodeMng-oracle-mapper.xml @@ -0,0 +1,92 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.ZIP AS "zip" + ,A.SN AS "sn" + ,A.CTPRVN_NM AS "ctprvnNm" + ,A.SIGNGU_NM AS "signguNm" + ,A.EMD_NM AS "emdNm" + ,A.LI_BULD_NM AS "liBuldNm" + ,A.LNBR_DONG_HO AS "lnbrDongHo" + + + FROM XIT_ZIP A + + + + + AND A.ZIP = #{searchKeyword} + + + AND A.CTPRVN_NM LIKE '%'||#{searchKeyword}||'%' + + + AND A.SIGNGU_NM LIKE '%'||#{searchKeyword}||'%' + + + AND A.EMD_NM LIKE '%'||#{searchKeyword}||'%' + + + AND A.LI_BULD_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/log/cnctn/XitConectionLogMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/log/cnctn/XitConectionLogMng-mysql-mapper.xml new file mode 100644 index 00000000..bb7cc4fd --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/log/cnctn/XitConectionLogMng-mysql-mapper.xml @@ -0,0 +1,79 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT + A.LOG_ID AS "logId" + ,A.CREAT_DT AS "creatDt" + ,A.CONECT_MTHD AS "loginMthd" + ,A.CONECT_IP AS "loginIp" + ,A.CONECT_ID AS "loginId" + ,B.USER_NM AS "loginNm" + + + FROM XIT_CONECT_LOG A + LEFT OUTER JOIN XIT_VW_USER_MASTR B ON A.CONECT_ID = B.ESNTL_ID + + + + AND A.CONECT_MTHD LIKE CONCAT('%',#{searchWrd},'%') + + + AND DATE_FORMAT(A.CREAT_DT, '%Y%m%d') BETWEEN #{searchBgnDe} AND #{searchEndDe} + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/log/cnctn/XitConectionLogMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/log/cnctn/XitConectionLogMng-oracle-mapper.xml new file mode 100644 index 00000000..a0ad94aa --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/log/cnctn/XitConectionLogMng-oracle-mapper.xml @@ -0,0 +1,81 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT + A.LOG_ID AS "logId" + ,A.CREAT_DT AS "creatDt" + ,A.CONECT_MTHD AS "loginMthd" + ,A.CONECT_IP AS "loginIp" + ,A.CONECT_ID AS "loginId" + ,B.USER_NM AS "loginNm" + + + FROM XIT_CONECT_LOG A + LEFT OUTER JOIN XIT_VW_USER_MASTR B ON A.CONECT_ID = B.ESNTL_ID + + + + AND A.CONECT_MTHD LIKE '%' || #{searchWrd} || '%' + + + AND TO_CHAR(A.CREAT_DT, 'YYYYMMDD') BETWEEN #{searchBgnDe} AND #{searchEndDe} + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/menu/create/XitMenuCreateMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/menu/create/XitMenuCreateMng-mysql-mapper.xml new file mode 100644 index 00000000..b4e02849 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/menu/create/XitMenuCreateMng-mysql-mapper.xml @@ -0,0 +1,114 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.AUTHOR_CODE AS "authorCode" + ,A.AUTHOR_NM AS "authorNm" + ,A.AUTHOR_DC AS "authorDc" + ,A.AUTHOR_CREAT_DE AS "authorCreatDe" + ,(SELECT COUNT(B.AUTHOR_CODE) + FROM XIT_MENU_CREAT_DTLS B + WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu" + + + FROM XIT_AUTHOR_INFO A + + + + AND A.AUTHOR_CODE LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + + + + + + + + /** XitMenuListMngMapper.deleteAllMenuCreatDtlsList */ + /** 메뉴생성내역 전체데이터 삭제 */ + + DELETE FROM XIT_MENU_CREAT_DTLS + + + diff --git a/src/main/resources/sqlmapper/framework/mng/menu/create/XitMenuCreateMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/menu/create/XitMenuCreateMng-oracle-mapper.xml new file mode 100644 index 00000000..82154e10 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/menu/create/XitMenuCreateMng-oracle-mapper.xml @@ -0,0 +1,116 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.AUTHOR_CODE AS "authorCode" + ,A.AUTHOR_NM AS "authorNm" + ,A.AUTHOR_DC AS "authorDc" + ,A.AUTHOR_CREAT_DE AS "authorCreatDe" + ,(SELECT COUNT(B.AUTHOR_CODE) + FROM XIT_MENU_CREAT_DTLS B + WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu" + + + FROM XIT_AUTHOR_INFO A + + + + AND A.AUTHOR_CODE LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + + + + + + + + + + /** XitMenuListMngMapper.deleteAllMenuCreatDtlsList */ + /** 메뉴생성내역 전체데이터 삭제 */ + + DELETE FROM XIT_MENU_CREAT_DTLS + + + diff --git a/src/main/resources/sqlmapper/framework/mng/menu/list/XitMenuListMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/menu/list/XitMenuListMng-mysql-mapper.xml new file mode 100644 index 00000000..2169aa6b --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/menu/list/XitMenuListMng-mysql-mapper.xml @@ -0,0 +1,85 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT + A.MENU_NO AS "menuNo" + ,A.MENU_ORDR AS "menuOrdr" + ,A.MENU_NM AS "menuNm" + ,A.UPPER_MENU_NO AS "upperMenuId" + ,A.MENU_DC AS "menuDc" + ,A.RELATE_IMAGE_COURS AS "relateImagePath" + ,A.RELATE_IMAGE_NM AS "relateImageNm" + ,A.PROGRM_FILE_NM AS "progrmFileNm" + + + FROM XIT_MENU_INFO A + + + + AND A.MENU_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + /** XitMenuListMngMapper.deleteAllMenuList */ + /** 메뉴정보 전체데이터 삭제 */ + + + DELETE FROM XIT_MENU_INFO + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/menu/list/XitMenuListMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/menu/list/XitMenuListMng-oracle-mapper.xml new file mode 100644 index 00000000..a49d0954 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/menu/list/XitMenuListMng-oracle-mapper.xml @@ -0,0 +1,87 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT + A.MENU_NO AS "menuNo" + ,A.MENU_ORDR AS "menuOrdr" + ,A.MENU_NM AS "menuNm" + ,A.UPPER_MENU_NO AS "upperMenuId" + ,A.MENU_DC AS "menuDc" + ,A.RELATE_IMAGE_COURS AS "relateImagePath" + ,A.RELATE_IMAGE_NM AS "relateImageNm" + ,A.PROGRM_FILE_NM AS "progrmFileNm" + + + FROM XIT_MENU_INFO A + + + + AND A.MENU_NM LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + /** XitMenuListMngMapper.deleteAllMenuList */ + /** 메뉴정보 전체데이터 삭제 */ + + + DELETE FROM XIT_MENU_INFO + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/menu/program/XitProgramMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/menu/program/XitProgramMng-mysql-mapper.xml new file mode 100644 index 00000000..8eb088b6 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/menu/program/XitProgramMng-mysql-mapper.xml @@ -0,0 +1,78 @@ + + + + + + SELECT A.PROGRM_FILE_NM AS "progrmFileNm" + , A.PROGRM_STRE_COURS AS "progrmStrePath" + , A.PROGRM_KOREAN_NM AS "progrmKoreanNm" + /*, CONCAT(DBMS_LOB.SUBSTRING (A.PROGRM_DC, 10, 1),'...') AS "progrmDc" */ + , A.PROGRM_DC AS "progrmDc" + , A.URL AS "URL" + + + FROM XIT_PROGRM_LIST A + + + + AND A.PROGRM_KOREAN_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + /** XitMenuListMngMapper.deleteAllProgrm */ + /** 프로그램정보 전체데이터 삭제 */ + + DELETE FROM XIT_PROGRM_LIST + + + + + + /** XitMenuListMngMapper.deleteAllProgrmDtls */ + /** 프로그램변경내역 정보 전체데이터 삭제 */ + + DELETE FROM LETTHPROGRMCHANGEDTLS + + diff --git a/src/main/resources/sqlmapper/framework/mng/menu/program/XitProgramMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/menu/program/XitProgramMng-oracle-mapper.xml new file mode 100644 index 00000000..170cef18 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/menu/program/XitProgramMng-oracle-mapper.xml @@ -0,0 +1,90 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.PROGRM_FILE_NM AS "progrmFileNm" + ,A.PROGRM_STRE_COURS AS "progrmStrePath" + ,A.PROGRM_KOREAN_NM AS "progrmKoreanNm" + + ,A.PROGRM_DC AS "progrmDc" + ,A.URL AS "URL" + + + FROM XIT_PROGRM_LIST A + + + + AND A.PROGRM_KOREAN_NM LIKE '%' || #{searchKeyword} || '%' + + + + + + + + + + + + + + + + + + + /** XitMenuListMngMapper.deleteAllProgrm */ + /** 프로그램정보 전체데이터 삭제 */ + + DELETE FROM XIT_PROGRM_LIST + + + + + + /** XitMenuListMngMapper.deleteAllProgrmDtls */ + /** 프로그램변경내역 정보 전체데이터 삭제 */ + + DELETE FROM LETTHPROGRMCHANGEDTLS + + diff --git a/src/main/resources/sqlmapper/framework/mng/policy/login/XitLoginPolicyMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/policy/login/XitLoginPolicyMng-mysql-mapper.xml new file mode 100644 index 00000000..d40f287d --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/policy/login/XitLoginPolicyMng-mysql-mapper.xml @@ -0,0 +1,81 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.USER_ID AS "emplyrId" + ,A.USER_NM AS "emplyrNm" + ,A.USER_SE AS "emplyrSe" + ,B.IP_INFO AS "ipInfo" + ,B.DPLCT_PERM_AT AS "dplctPermAt" + ,B.LMTT_AT AS "lmttAt" + ,B.LAST_UPDUSR_ID AS "userId" + ,B.LAST_UPDT_PNTTM AS "regDate" + ,CASE B.USER_ID WHEN NULL THEN 'N' ELSE 'Y' END AS "regYn" + + + FROM XIT_VW_USER_MASTR A + LEFT OUTER JOIN XIT_LOGIN_POLICY B ON A.USER_ID = B.USER_ID + + + + + + AND A.USER_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/policy/login/XitLoginPolicyMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/policy/login/XitLoginPolicyMng-oracle-mapper.xml new file mode 100644 index 00000000..90548e69 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/policy/login/XitLoginPolicyMng-oracle-mapper.xml @@ -0,0 +1,83 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.USER_ID AS "emplyrId" + ,A.USER_NM AS "emplyrNm" + ,A.USER_SE AS "emplyrSe" + ,B.IP_INFO AS "ipInfo" + ,B.DPLCT_PERM_AT AS "dplctPermAt" + ,B.LMTT_AT AS "lmttAt" + ,B.LAST_UPDUSR_ID AS "userId" + ,B.LAST_UPDT_PNTTM AS "regDate" + ,DECODE (B.USER_ID, NULL, 'N', 'Y') AS "regYn" + + + FROM XIT_VW_USER_MASTR A + LEFT OUTER JOIN XIT_LOGIN_POLICY B ON A.USER_ID = B.USER_ID + + + + + + AND A.USER_NM LIKE '%'||#{searchKeyword}||'%' + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/stats/cnctn/XitConectionStatsMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/stats/cnctn/XitConectionStatsMng-mysql-mapper.xml new file mode 100644 index 00000000..ca9c9b37 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/stats/cnctn/XitConectionStatsMng-mysql-mapper.xml @@ -0,0 +1,153 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/stats/cnctn/XitConectionStatsMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/stats/cnctn/XitConectionStatsMng-oracle-mapper.xml new file mode 100644 index 00000000..3cae3907 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/stats/cnctn/XitConectionStatsMng-oracle-mapper.xml @@ -0,0 +1,155 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/absnt/XitUserAbsntMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/absnt/XitUserAbsntMng-mysql-mapper.xml new file mode 100644 index 00000000..43ede57d --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/absnt/XitUserAbsntMng-mysql-mapper.xml @@ -0,0 +1,91 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT X.USER_ID AS "userId" + ,X.USER_NM AS "userNm" + ,X.USER_ABSNCE_AT AS "userAbsnceAt" + ,X.REG_YN AS "regYn" + ,X.LAST_UPDUSR_ID AS "lastUpdusrId" + ,X.LAST_UPDT_PNTTM AS "lastUpdusrPnttm" + + + FROM ( + SELECT A.USER_ID + ,A.USER_NM + ,(CASE + WHEN B.USER_ABSNCE_AT IS NULL THEN 'N' + ELSE B.USER_ABSNCE_AT + END) + AS USER_ABSNCE_AT + ,(CASE WHEN B.USER_ABSNCE_AT IS NULL THEN 'N' ELSE 'Y' END) + AS REG_YN + ,LAST_UPDUSR_ID + ,LAST_UPDT_PNTTM + FROM XIT_USER_INFO A + LEFT OUTER JOIN XIT_USER_ABSNCE B ON A.USER_ID = B.USER_ID + ) X + + + + AND X.USER_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND X.USER_ABSNCE_AT = #{selAbsnceAt} + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/absnt/XitUserAbsntMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/absnt/XitUserAbsntMng-oracle-mapper.xml new file mode 100644 index 00000000..03f08077 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/absnt/XitUserAbsntMng-oracle-mapper.xml @@ -0,0 +1,93 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT X.USER_ID AS "userId" + ,X.USER_NM AS "userNm" + ,X.USER_ABSNCE_AT AS "userAbsnceAt" + ,X.REG_YN AS "regYn" + ,X.LAST_UPDUSR_ID AS "lastUpdusrId" + ,X.LAST_UPDT_PNTTM AS "lastUpdusrPnttm" + + + FROM ( + SELECT A.USER_ID + ,A.USER_NM + ,(CASE + WHEN B.USER_ABSNCE_AT IS NULL THEN 'N' + ELSE B.USER_ABSNCE_AT + END) + AS USER_ABSNCE_AT + ,(CASE WHEN B.USER_ABSNCE_AT IS NULL THEN 'N' ELSE 'Y' END) + AS REG_YN + ,LAST_UPDUSR_ID + ,LAST_UPDT_PNTTM + FROM XIT_USER_INFO A + LEFT OUTER JOIN XIT_USER_ABSNCE B ON A.USER_ID = B.USER_ID + ) X + + + + AND X.USER_NM LIKE '%'||#{searchKeyword}||'%' + + + AND X.USER_ABSNCE_AT = #{selAbsnceAt} + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/opt/XitUserEtcOptMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/opt/XitUserEtcOptMng-mysql-mapper.xml new file mode 100644 index 00000000..33d82fdc --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/opt/XitUserEtcOptMng-mysql-mapper.xml @@ -0,0 +1,114 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.USER_ID AS "userId" + ,A.USER_NM AS "userNm" + ,B.JOB_DATA_AUTHOR AS "jobDataAuthor" + ,B.USER_MANAGE_AUTHOR AS "userManageAuthor" + ,B.ELCTRNSANCTN_USE_AT AS "elctrnsanctnUseAt" + ,B.JOB_CONFM_AUTHOR_AT AS "jobConfmAuthorAt" + + + FROM XIT_USER_INFO A + LEFT JOIN XIT_USER_ETC_OPTION B ON A.USER_ID=B.USER_ID + + + + + AND A.USER_ID LIKE #{searchKeyword} + + + AND A.USER_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + AND A.GROUP_ID = #{searchKeyword} + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/opt/XitUserEtcOptMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/opt/XitUserEtcOptMng-oracle-mapper.xml new file mode 100644 index 00000000..b0b8341d --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/opt/XitUserEtcOptMng-oracle-mapper.xml @@ -0,0 +1,116 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.USER_ID AS "userId" + ,A.USER_NM AS "userNm" + ,B.JOB_DATA_AUTHOR AS "jobDataAuthor" + ,B.USER_MANAGE_AUTHOR AS "userManageAuthor" + ,B.ELCTRNSANCTN_USE_AT AS "elctrnsanctnUseAt" + ,B.JOB_CONFM_AUTHOR_AT AS "jobConfmAuthorAt" + + + FROM XIT_USER_INFO A + LEFT JOIN XIT_USER_ETC_OPTION B ON A.USER_ID=B.USER_ID + + + + + AND A.USER_ID LIKE #{searchKeyword} + + + AND A.USER_NM LIKE '%' ||#{searchKeyword}|| '%' + + + AND A.GROUP_ID = #{searchKeyword} + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/reg/XitEntUserRegMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitEntUserRegMng-mysql-mapper.xml new file mode 100644 index 00000000..8755df68 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitEntUserRegMng-mysql-mapper.xml @@ -0,0 +1,119 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT + A.ESNTL_ID AS "uniqId" + ,'USR02' AS "userTy" + ,A.ENTRPRS_MBER_ID AS "userId" + ,A.CMPNY_NM AS "cmpnyNm" + ,A.APPLCNT_NM AS "userNm" + ,A.APPLCNT_EMAIL_ADRES AS "emailAdres" + ,A.AREA_NO AS "areaNo" + ,A.ENTRPRS_MIDDLE_TELNO AS "middleTelno" + ,A.ENTRPRS_END_TELNO AS "endTelno" + ,'' AS "moblphonNo" + ,A.GROUP_ID AS "groupId" + ,A.ENTRPRS_MBER_STTUS AS "sttus" + ,A.SBSCRB_DE AS "sbscrbDe" + ,(SELECT CODE_NM FROM XIT_CMMN_DETAIL_CODE WHERE USE_AT = 'Y' AND CODE_ID = 'XIT013' AND CODE = A.ENTRPRS_MBER_STTUS) AS "userSttusCode" + + + FROM XIT_ENTRPRS_MBER A + + + + AND A.ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus} + + + + + AND A.ENTRPRS_MBER_ID LIKE #{searchKeyword} + + + AND A.APPLCNT_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/reg/XitEntUserRegMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitEntUserRegMng-oracle-mapper.xml new file mode 100644 index 00000000..ba4e0d69 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitEntUserRegMng-oracle-mapper.xml @@ -0,0 +1,121 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT + A.ESNTL_ID AS "uniqId" + ,'USR02' AS "userTy" + ,A.ENTRPRS_MBER_ID AS "userId" + ,A.CMPNY_NM AS "cmpnyNm" + ,A.APPLCNT_NM AS "userNm" + ,A.APPLCNT_EMAIL_ADRES AS "emailAdres" + ,A.AREA_NO AS "areaNo" + ,A.ENTRPRS_MIDDLE_TELNO AS "middleTelno" + ,A.ENTRPRS_END_TELNO AS "endTelno" + ,'' AS "moblphonNo" + ,A.GROUP_ID AS "groupId" + ,A.ENTRPRS_MBER_STTUS AS "sttus" + ,A.SBSCRB_DE AS "sbscrbDe" + ,(SELECT CODE_NM FROM XIT_CMMN_DETAIL_CODE WHERE USE_AT = 'Y' AND CODE_ID = 'XIT013' AND CODE = A.ENTRPRS_MBER_STTUS) AS "userSttusCode" + + + FROM XIT_ENTRPRS_MBER A + + + + AND A.ENTRPRS_MBER_STTUS LIKE #{sbscrbSttus} + + + + + AND A.ENTRPRS_MBER_ID LIKE #{searchKeyword} + + + AND A.APPLCNT_NM LIKE '%' ||#{searchKeyword}|| '%' + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/reg/XitGnrUserRegMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitGnrUserRegMng-mysql-mapper.xml new file mode 100644 index 00000000..27c5f88b --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitGnrUserRegMng-mysql-mapper.xml @@ -0,0 +1,115 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT + A.ESNTL_ID AS "uniqId" + ,'USR01' AS "userTy" + ,A.MBER_ID AS "userId" + ,A.MBER_NM AS "userNm" + ,A.MBER_EMAIL_ADRES AS "emailAdres" + ,A.AREA_NO AS "areaNo" + ,A.MIDDLE_TELNO AS "middleTelno" + ,A.END_TELNO AS "endTelno" + ,A.MBTLNUM AS "moblphonNo" + ,A.GROUP_ID AS "groupId" + ,A.MBER_STTUS AS "sttus" + ,A.SBSCRB_DE AS "sbscrbDe" + ,(SELECT CODE_NM FROM XIT_CMMN_DETAIL_CODE WHERE USE_AT = 'Y' AND CODE_ID = 'XIT013' AND CODE = A.MBER_STTUS) AS "userSttusCode" + + + + FROM XIT_GNRL_MBER A + + + + AND A.MBER_STTUS LIKE #{sbscrbSttus} + + + + + AND A.MBER_ID LIKE #{searchKeyword} + + + AND A.MBER_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/reg/XitGnrUserRegMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitGnrUserRegMng-oracle-mapper.xml new file mode 100644 index 00000000..85d8a10f --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitGnrUserRegMng-oracle-mapper.xml @@ -0,0 +1,117 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT + A.ESNTL_ID AS "uniqId" + ,'USR01' AS "userTy" + ,A.MBER_ID AS "userId" + ,A.MBER_NM AS "userNm" + ,A.MBER_EMAIL_ADRES AS "emailAdres" + ,A.AREA_NO AS "areaNo" + ,A.MIDDLE_TELNO AS "middleTelno" + ,A.END_TELNO AS "endTelno" + ,A.MBTLNUM AS "moblphonNo" + ,A.GROUP_ID AS "groupId" + ,A.MBER_STTUS AS "sttus" + ,A.SBSCRB_DE AS "sbscrbDe" + ,(SELECT CODE_NM FROM XIT_CMMN_DETAIL_CODE WHERE USE_AT = 'Y' AND CODE_ID = 'XIT013' AND CODE = A.MBER_STTUS) AS "userSttusCode" + + + + FROM XIT_GNRL_MBER A + + + + AND A.MBER_STTUS LIKE #{sbscrbSttus} + + + + + AND A.MBER_ID LIKE #{searchKeyword} + + + AND A.MBER_NM LIKE '%' ||#{searchKeyword}|| '%' + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/reg/XitUserRegMng-mysql-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitUserRegMng-mysql-mapper.xml new file mode 100644 index 00000000..560c24e4 --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitUserRegMng-mysql-mapper.xml @@ -0,0 +1,118 @@ + + + + + + SELECT LIST.* FROM( + + + + ) LIST LIMIT #{firstIndex}, #{recordCountPerPage} + + + + + SELECT A.ESNTL_ID AS "uniqId" + ,'USR03' AS "userTy" + ,A.USER_ID AS "userId" + ,A.USER_NM AS "userNm" + ,A.EMAIL_ADRES AS "emailAdres" + ,A.AREA_NO AS "areaNo" + ,A.HOUSE_MIDDLE_TELNO AS "middleTelno" + ,A.HOUSE_END_TELNO AS "endTelno" + ,A.MBTLNUM AS "moblphonNo" + ,A.GROUP_ID AS "groupId" + ,A.USER_STTUS_CODE AS "sttus" + ,A.SBSCRB_DE AS "sbscrbDe" + ,(SELECT CODE_NM FROM XIT_CMMN_DETAIL_CODE WHERE USE_AT = 'Y' AND CODE_ID = 'XIT013' AND CODE = A.USER_STTUS_CODE) AS "userSttusCode" + + + FROM XIT_USER_INFO A + + + + AND A.USER_STTUS_CODE LIKE #{sbscrbSttus} + + + + + AND A.USER_ID LIKE #{searchKeyword} + + + AND A.USER_NM LIKE CONCAT('%',#{searchKeyword},'%') + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/framework/mng/usr/reg/XitUserRegMng-oracle-mapper.xml b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitUserRegMng-oracle-mapper.xml new file mode 100644 index 00000000..cdcf67cc --- /dev/null +++ b/src/main/resources/sqlmapper/framework/mng/usr/reg/XitUserRegMng-oracle-mapper.xml @@ -0,0 +1,120 @@ + + + + + + SELECT * FROM + (SELECT LIST.*, ROWNUM AS "RN" FROM( + + + + ) LIST + ) WHERE RN BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage} + + + + + SELECT A.ESNTL_ID AS "uniqId" + ,'USR03' AS "userTy" + ,A.USER_ID AS "userId" + ,A.USER_NM AS "userNm" + ,A.EMAIL_ADRES AS "emailAdres" + ,A.AREA_NO AS "areaNo" + ,A.HOUSE_MIDDLE_TELNO AS "middleTelno" + ,A.HOUSE_END_TELNO AS "endTelno" + ,A.MBTLNUM AS "moblphonNo" + ,A.GROUP_ID AS "groupId" + ,A.USER_STTUS_CODE AS "sttus" + ,A.SBSCRB_DE AS "sbscrbDe" + ,(SELECT CODE_NM FROM XIT_CMMN_DETAIL_CODE WHERE USE_AT = 'Y' AND CODE_ID = 'XIT013' AND CODE = A.USER_STTUS_CODE) AS "userSttusCode" + + + FROM XIT_USER_INFO A + + + + AND A.USER_STTUS_CODE LIKE #{sbscrbSttus} + + + + + AND A.USER_ID LIKE #{searchKeyword} + + + AND A.USER_NM LIKE '%' ||#{searchKeyword}|| '%' + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/sqlmapper/sql-mapper-config.xml b/src/main/resources/sqlmapper/sql-mapper-config.xml new file mode 100644 index 00000000..3ae2e333 --- /dev/null +++ b/src/main/resources/sqlmapper/sql-mapper-config.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/validator/biz/adm/SendRqstMng.xml b/src/main/resources/validator/biz/adm/SendRqstMng.xml new file mode 100644 index 00000000..44189547 --- /dev/null +++ b/src/main/resources/validator/biz/adm/SendRqstMng.xml @@ -0,0 +1,29 @@ + + + + + + + +
+ + + + + + + + + + maxlength + 5 + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/biz/sysadm/LinkInfoMng.xml b/src/main/resources/validator/biz/sysadm/LinkInfoMng.xml new file mode 100644 index 00000000..eaab17ff --- /dev/null +++ b/src/main/resources/validator/biz/sysadm/LinkInfoMng.xml @@ -0,0 +1,39 @@ + + + + + + + +
+ + + + + + maxlength + 5 + + + + + + + + + + + + maxlength + 10 + + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/biz/sysadm/NotiMng.xml b/src/main/resources/validator/biz/sysadm/NotiMng.xml new file mode 100644 index 00000000..51f074b9 --- /dev/null +++ b/src/main/resources/validator/biz/sysadm/NotiMng.xml @@ -0,0 +1,63 @@ + + + + + + + +
+ + + + + + maxlength + 5 + + + + + + + + maxlength + 5 + + + + + + + + + + + + maxlength + 50 + + + + + + + + + + + + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/auth/XitAuthRegMng.xml b/src/main/resources/validator/framework/mng/auth/XitAuthRegMng.xml new file mode 100644 index 00000000..8aeca05f --- /dev/null +++ b/src/main/resources/validator/framework/mng/auth/XitAuthRegMng.xml @@ -0,0 +1,41 @@ + + + + + + +
+ + + + + + +
+
+ + +
+ + + +
+
+ + +
+ + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/batch/XitBatchRegMng.xml b/src/main/resources/validator/framework/mng/batch/XitBatchRegMng.xml new file mode 100644 index 00000000..c9fb7010 --- /dev/null +++ b/src/main/resources/validator/framework/mng/batch/XitBatchRegMng.xml @@ -0,0 +1,40 @@ + + + + + + +
+ + + + + maxlength + 60 + + + + + + + + maxlength + 255 + + + + + + + + maxlength + 250 + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/batch/XitBatchSchduleMng.xml b/src/main/resources/validator/framework/mng/batch/XitBatchSchduleMng.xml new file mode 100644 index 00000000..492f2d85 --- /dev/null +++ b/src/main/resources/validator/framework/mng/batch/XitBatchSchduleMng.xml @@ -0,0 +1,35 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/bbs/XitBasicBbsMng.xml b/src/main/resources/validator/framework/mng/bbs/XitBasicBbsMng.xml new file mode 100644 index 00000000..476188aa --- /dev/null +++ b/src/main/resources/validator/framework/mng/bbs/XitBasicBbsMng.xml @@ -0,0 +1,36 @@ + + + + + + +
+ + + + + maxlength + 1200 + + + + + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/bbs/XitBbsCreateMng.xml b/src/main/resources/validator/framework/mng/bbs/XitBbsCreateMng.xml new file mode 100644 index 00000000..ed95a879 --- /dev/null +++ b/src/main/resources/validator/framework/mng/bbs/XitBbsCreateMng.xml @@ -0,0 +1,49 @@ + + + + + + +
+ + + + + maxlength + 120 + + + + + + + + maxlength + 2000 + + + + + + + + + + + + + + + + + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/bbs/XitBbsTmplateMng.xml b/src/main/resources/validator/framework/mng/bbs/XitBbsTmplateMng.xml new file mode 100644 index 00000000..12751949 --- /dev/null +++ b/src/main/resources/validator/framework/mng/bbs/XitBbsTmplateMng.xml @@ -0,0 +1,39 @@ + + + + + +
+ + + + + maxlength + 120 + + + + + + + maxlength + 2000 + + + + + +
+
+ + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/code/XitClCodeMng.xml b/src/main/resources/validator/framework/mng/code/XitClCodeMng.xml new file mode 100644 index 00000000..3614c9dd --- /dev/null +++ b/src/main/resources/validator/framework/mng/code/XitClCodeMng.xml @@ -0,0 +1,42 @@ + + + + + + +
+ + + + + maxlength + 3 + + + + + + + maxlength + 60 + + + + + + + maxlength + 200 + + + + + +
+ + +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/code/XitCmmnCodeMng.xml b/src/main/resources/validator/framework/mng/code/XitCmmnCodeMng.xml new file mode 100644 index 00000000..f8c56e03 --- /dev/null +++ b/src/main/resources/validator/framework/mng/code/XitCmmnCodeMng.xml @@ -0,0 +1,50 @@ + + + + + + +
+ + + + + maxlength + 6 + + + + + + + maxlength + 60 + + + + + + + maxlength + 200 + + + + + + + maxlength + 3 + + + + + +
+ + +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/code/XitDetailCodeMng.xml b/src/main/resources/validator/framework/mng/code/XitDetailCodeMng.xml new file mode 100644 index 00000000..a4643e76 --- /dev/null +++ b/src/main/resources/validator/framework/mng/code/XitDetailCodeMng.xml @@ -0,0 +1,51 @@ + + + + + + + +
+ + + + + maxlength + 6 + + + + + + + maxlength + 15 + + + + + + + maxlength + 60 + + + + + + + maxlength + 200 + + + + + +
+ + +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/code/XitZipCodeMng.xml b/src/main/resources/validator/framework/mng/code/XitZipCodeMng.xml new file mode 100644 index 00000000..f9d7043a --- /dev/null +++ b/src/main/resources/validator/framework/mng/code/XitZipCodeMng.xml @@ -0,0 +1,64 @@ + + + + + + + +
+ + + + + maxlength + 6 + + + + + + + maxlength + 20 + + + + + + + maxlength + 20 + + + + + + + maxlength + 30 + + + + + + + maxlength + 60 + + + + + + + maxlength + 20 + + +
+ + +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/menu/XitMenuListMng.xml b/src/main/resources/validator/framework/mng/menu/XitMenuListMng.xml new file mode 100644 index 00000000..35aa5430 --- /dev/null +++ b/src/main/resources/validator/framework/mng/menu/XitMenuListMng.xml @@ -0,0 +1,60 @@ + + + + + +
+ + + + + + + + + + + maxlength + 50 + + + + + + + + + + maxlength + 50 + + + + + + + maxlength + 100 + + + + + + + maxlength + 100 + + + + + + + maxlength + 50 + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/menu/XitProgramMng.xml b/src/main/resources/validator/framework/mng/menu/XitProgramMng.xml new file mode 100644 index 00000000..dc3c7961 --- /dev/null +++ b/src/main/resources/validator/framework/mng/menu/XitProgramMng.xml @@ -0,0 +1,50 @@ + + + + +
+ + + + + maxlength + 50 + + + + + + + maxlength + 100 + + + + + + + maxlength + 50 + + + + + + + maxlength + 100 + + + + + + + maxlength + 100 + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/menu/XitProgrmManageDtl.xml b/src/main/resources/validator/framework/mng/menu/XitProgrmManageDtl.xml new file mode 100644 index 00000000..c2a951c7 --- /dev/null +++ b/src/main/resources/validator/framework/mng/menu/XitProgrmManageDtl.xml @@ -0,0 +1,75 @@ + + + + +
+ + + + + maxlength + 50 + + + + + + + + + + maxlength + 20 + + + + + + + maxlength + 1000 + + + + + + + maxlength + 1000 + + + + + + + maxlength + 20 + + + + + + datePatternStrict + yyyy-MM-dd + + + + + + datePatternStrict + yyyy-MM-dd + + + + + + + maxlength + 50 + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/policy/XitLoginPolicyMng.xml b/src/main/resources/validator/framework/mng/policy/XitLoginPolicyMng.xml new file mode 100644 index 00000000..b101e284 --- /dev/null +++ b/src/main/resources/validator/framework/mng/policy/XitLoginPolicyMng.xml @@ -0,0 +1,24 @@ + + + + + + +
+ + + + + maxlength + 23 + + + + + +
+
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/usr/XitEntUserRegMng.xml b/src/main/resources/validator/framework/mng/usr/XitEntUserRegMng.xml new file mode 100644 index 00000000..e32705a1 --- /dev/null +++ b/src/main/resources/validator/framework/mng/usr/XitEntUserRegMng.xml @@ -0,0 +1,119 @@ + + + + + + + +
+ + + + + maxlength + 20 + + + + + + + + maxlength + 50 + + + + + + + + + + + + + + + + maxlength + 100 + + + + + + + + + + + + maxlength + 4 + + + + + + + + maxlength + 4 + + + + + + + + maxlength + 4 + + + + + + + + + + + + maxlength + 100 + + + + + + + + + + + + maxlength + 50 + + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/usr/XitGnrUserRegMng.xml b/src/main/resources/validator/framework/mng/usr/XitGnrUserRegMng.xml new file mode 100644 index 00000000..9a965a40 --- /dev/null +++ b/src/main/resources/validator/framework/mng/usr/XitGnrUserRegMng.xml @@ -0,0 +1,135 @@ + + + + + + + +
+ + + + + + maxlength + 20 + + + + + + + + maxlength + 50 + + + + + + + + + + + + + + + + maxlength + 100 + + + + + + + + maxlength + 4 + + + + + + + + maxlength + 4 + + + + + + + + maxlength + 4 + + + + + + + + maxlength + 15 + + + + + + + + maxlength + 15 + + + + + + + + maxlength + 50 + + + + + + + + maxlength + 6 + + + + + + + + maxlength + 100 + + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/usr/XitUserRegMng.xml b/src/main/resources/validator/framework/mng/usr/XitUserRegMng.xml new file mode 100644 index 00000000..c409fc51 --- /dev/null +++ b/src/main/resources/validator/framework/mng/usr/XitUserRegMng.xml @@ -0,0 +1,141 @@ + + + + + + + +
+ + + + + + maxlength + 20 + + + + + + + + maxlength + 50 + + + + + + + + + + + + + + maxlength + 100 + + + + + + + maxlength + 4 + + + mask + [0-9]([0-9])* + + + + + + + maxlength + 4 + + + mask + [0-9][0-9][0-9]([0-9])* + + + + + + + maxlength + 4 + + + mask + [0-9][0-9][0-9][0-9] + + + + + + + maxlength + 15 + + + + + + + + maxlength + 15 + + + + + + + + maxlength + 15 + + + + + + + + + + + + maxlength + 100 + + + + + + + + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/mng/usr/XitUserRegMngOfEditPwd.xml b/src/main/resources/validator/framework/mng/usr/XitUserRegMngOfEditPwd.xml new file mode 100644 index 00000000..412bf27f --- /dev/null +++ b/src/main/resources/validator/framework/mng/usr/XitUserRegMngOfEditPwd.xml @@ -0,0 +1,24 @@ + + + + + + + +
+ + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/src/main/resources/validator/framework/validator-rules-xit.xml b/src/main/resources/validator/framework/validator-rules-xit.xml new file mode 100644 index 00000000..0d876b77 --- /dev/null +++ b/src/main/resources/validator/framework/validator-rules-xit.xml @@ -0,0 +1,1530 @@ + + + + + + + + + + = 0) { + value = field.options[si].value; + } + } else if (field.type == 'radio' || field.type == 'checkbox') { + if (field.checked) { + value = field.value; + } + } else { + value = field.value; + } + if (trim(value).length == 0) { + if ((i == 0) && (field.type != 'hidden')) { + focusField = field; + } + fields[i++] = oRequired[x][1]; + isValid = false; + } + } else if (field.type == "select-multiple") { + var numOptions = field.options.length; + lastSelected=-1; + for(loop=numOptions-1;loop>=0;loop--) { + if(field.options[loop].selected) { + lastSelected = loop; + value = field.options[loop].value; + break; + } + } + if(lastSelected < 0 || trim(value).length == 0) { + if(i == 0) { + focusField = field; + } + fields[i++] = oRequired[x][1]; + isValid=false; + } + } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) { + isChecked=-1; + for (loop=0;loop < field.length;loop++) { + if (field[loop].checked) { + isChecked=loop; + break; // only one needs to be checked + } + } + if (isChecked < 0) { + if (i == 0) { + focusField = field[0]; + } + fields[i++] = oRequired[x][1]; + isValid=false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + } + + // Trim whitespace from left and right sides of s. + function trim(s) { + return s.replace( /^\s*/, "" ).replace( /\s*$/, "" ); + } + + ]]> + + + + + + + + + + + + 0) && (field.value.length < iMin)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oMinLength[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + + iMax) { + if (i == 0) { + focusField = field; + } + fields[i++] = oMaxLength[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + + 0)) { + + if (!matchPattern(field.value, oMasked[x][2]("mask"))) { + if (i == 0) { + focusField = field; + } + fields[i++] = oMasked[x][1]; + isValid = false; + } + } + } + + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + } + + function matchPattern(value, mask) { + return mask.exec(value); + }]]> + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + if (!isAllDigits(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oByte[x][1]; + + } else { + + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oByte[x][1]; + bValid = false; + } + } + } + + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + }]]> + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + if (!isAllDigits(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oShort[x][1]; + + } else { + + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oShort[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + }]]> + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + + if (!isAllDigits(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oInteger[x][1]; + + } else { + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oInteger[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function isAllDigits(argvalue) { + argvalue = argvalue.toString(); + var validChars = "0123456789"; + var startFrom = 0; + if (argvalue.substring(0, 2) == "0x") { + validChars = "0123456789abcdefABCDEF"; + startFrom = 2; + } else if (argvalue.charAt(0) == "0") { + validChars = "01234567"; + startFrom = 1; + } else if (argvalue.charAt(0) == "-") { + startFrom = 1; + } + + for (var n = startFrom; n < argvalue.length; n++) { + if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false; + } + return true; + }]]> + + + + + + + + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + // remove '.' before checking digits + var tempArray = value.split('.'); + var joinedString= tempArray.join(''); + + if (!isAllDigits(joinedString)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oFloat[x][1]; + + } else { + var iValue = parseFloat(value); + if (isNaN(iValue)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oFloat[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + }]]> + + + + + + + + + + + 0) && + (datePattern.length > 0)) { + var MONTH = "MM"; + var DAY = "dd"; + var YEAR = "yyyy"; + var orderMonth = datePattern.indexOf(MONTH); + var orderDay = datePattern.indexOf(DAY); + var orderYear = datePattern.indexOf(YEAR); + if ((orderDay < orderYear && orderDay > orderMonth)) { + var iDelim1 = orderMonth + MONTH.length; + var iDelim2 = orderDay + DAY.length; + var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); + var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); + if (iDelim1 == orderDay && iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"); + } else if (iDelim1 == orderDay) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$"); + } else if (iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$"); + } else { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$"); + } + var matched = dateRegexp.exec(value); + if(matched != null) { + if (!isValidDate(matched[2], matched[1], matched[3])) { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else if ((orderMonth < orderYear && orderMonth > orderDay)) { + var iDelim1 = orderDay + DAY.length; + var iDelim2 = orderMonth + MONTH.length; + var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); + var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); + if (iDelim1 == orderMonth && iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"); + } else if (iDelim1 == orderMonth) { + dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$"); + } else if (iDelim2 == orderYear) { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$"); + } else { + dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$"); + } + var matched = dateRegexp.exec(value); + if(matched != null) { + if (!isValidDate(matched[1], matched[2], matched[3])) { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else if ((orderMonth > orderYear && orderMonth < orderDay)) { + var iDelim1 = orderYear + YEAR.length; + var iDelim2 = orderMonth + MONTH.length; + var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); + var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); + if (iDelim1 == orderMonth && iDelim2 == orderDay) { + dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$"); + } else if (iDelim1 == orderMonth) { + dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$"); + } else if (iDelim2 == orderDay) { + dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$"); + } else { + dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$"); + } + var matched = dateRegexp.exec(value); + if(matched != null) { + if (!isValidDate(matched[3], matched[2], matched[1])) { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } else { + if (i == 0) { + focusField = form[oDate[x][0]]; + } + fields[i++] = oDate[x][1]; + bValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function isValidDate(day, month, year) { + if (month < 1 || month > 12) { + return false; + } + if (day < 1 || day > 31) { + return false; + } + if ((month == 4 || month == 6 || month == 9 || month == 11) && + (day == 31)) { + return false; + } + if (month == 2) { + var leap = (year % 4 == 0 && + (year % 100 != 0 || year % 400 == 0)); + if (day>29 || (day == 29 && !leap)) { + return false; + } + } + return true; + }]]> + + + + + + + + + + + + + + + 0)) { + + var iMin = parseInt(oRange[x][2]("min")); + var iMax = parseInt(oRange[x][2]("max")); + var iValue = parseInt(field.value); + if (!(iValue >= iMin && iValue <= iMax)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oRange[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + 0)) { + + var fMin = parseFloat(oRange[x][2]("min")); + var fMax = parseFloat(oRange[x][2]("max")); + var fValue = parseFloat(field.value); + if (!(fValue >= fMin && fValue <= fMax)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oRange[x][1]; + isValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return isValid; + }]]> + + + + + + + 0)) { + if (!luhnCheck(form[oCreditCard[x][0]].value)) { + if (i == 0) { + focusField = form[oCreditCard[x][0]]; + } + fields[i++] = oCreditCard[x][1]; + bValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + /** + * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl + */ + function luhnCheck(cardNumber) { + if (isLuhnNum(cardNumber)) { + var no_digit = cardNumber.length; + var oddoeven = no_digit & 1; + var sum = 0; + for (var count = 0; count < no_digit; count++) { + var digit = parseInt(cardNumber.charAt(count)); + if (!((count & 1) ^ oddoeven)) { + digit *= 2; + if (digit > 9) digit -= 9; + }; + sum += digit; + }; + if (sum == 0) return false; + if (sum % 10 == 0) return true; + }; + return false; + } + + function isLuhnNum(argvalue) { + argvalue = argvalue.toString(); + if (argvalue.length == 0) { + return false; + } + for (var n = 0; n < argvalue.length; n++) { + if ((argvalue.substring(n, n+1) < "0") || + (argvalue.substring(n,n+1) > "9")) { + return false; + } + } + return true; + }]]> + + + + + + + + 0)) { + if (!checkEmail(form[oEmail[x][0]].value)) { + if (i == 0) { + focusField = form[oEmail[x][0]]; + } + fields[i++] = oEmail[x][1]; + bValid = false; + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + /** + * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com), + * http://javascript.internet.com + */ + function checkEmail(emailStr) { + if (emailStr.length == 0) { + return true; + } + var emailPat=/^(.+)@(.+)$/; + var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"; + var validChars="\[^\\s" + specialChars + "\]"; + var quotedUser="(\"[^\"]*\")"; + var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/; + var atom=validChars + '+'; + var word="(" + atom + "|" + quotedUser + ")"; + var userPat=new RegExp("^" + word + "(\\." + word + ")*$"); + var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$"); + var matchArray=emailStr.match(emailPat); + if (matchArray == null) { + return false; + } + var user=matchArray[1]; + var domain=matchArray[2]; + if (user.match(userPat) == null) { + return false; + } + var IPArray = domain.match(ipDomainPat); + if (IPArray != null) { + for (var i = 1; i <= 4; i++) { + if (IPArray[i] > 255) { + return false; + } + } + return true; + } + var domainArray=domain.match(domainPat); + if (domainArray == null) { + return false; + } + var atomPat=new RegExp(atom,"g"); + var domArr=domain.match(atomPat); + var len=domArr.length; + if ((domArr[domArr.length-1].length < 2) || + (domArr[domArr.length-1].length > 3)) { + return false; + } + if (len < 2) { + return false; + } + return true; + }]]> + + + + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + /** + * Reference: JS Guide + * http://jsguide.net/ver2/articles/frame.php?artnum=002 + */ + function checkIhIdNum(ihidnum){ + + fmt = /^\d{6}[1234]\d{6}$/; + if(!fmt.test(ihidnum)){ + return false; + } + + birthYear = (ihidnum.charAt(7) <= "2") ? "19" : "20"; + birthYear += ihidnum.substr(0, 2); + birthMonth = ihidnum.substr(2, 2) - 1; + birthDate = ihidnum.substr(4, 2); + birth = new Date(birthYear, birthMonth, birthDate); + + if( birth.getYear() % 100 != ihidnum.substr(0, 2) || + birth.getMonth() != birthMonth || + birth.getDate() != birthDate) { + return false; + } + + var arrDivide = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]; + var checkdigit = 0; + for(var i=0;i + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function checkKorean(koreanStr){ + for(var i=0;i + + + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function checkPassword1(pwd) { + p_pass = pwd.value; + + if (pwd.value.length < 8 || pwd.value.length > 20 ){ + + pwd.value =""; + pwd.focus(); + return false; + } + return pwd; + } + ]]> + + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function checkPassword2(pwd) { + var str = pwd.value; + for (var i=0; i < str .length; i++) { + ch_char = str .charAt(i); + ch = ch_char.charCodeAt(); + if( (ch >= 33 && ch <= 47) || (ch >= 58 && ch <= 64) || (ch >= 91 && ch <= 96) || (ch >= 123 && ch <= 126) ) { + return false; + } + } + return pwd; + } + ]]> + + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function checkPassword3(pwd) { + p_pass = pwd.value; + var cnt=0,cnt2=1,cnt3=1; + var temp=""; + + for(i=0;i < p_pass.length;i++){ + temp_pass1 = p_pass.charAt(i); + next_pass = (parseInt(temp_pass1.charCodeAt(0)))+1; + temp_p = p_pass.charAt(i+1); + temp_pass2 = (parseInt(temp_p.charCodeAt(0))); + if (temp_pass2 == next_pass) + cnt2 = cnt2 + 1; + else + cnt2 = 1; + if (temp_pass1 == temp_p) + cnt3 = cnt3 + 1; + else + cnt3 = 1; + if (cnt2 > 3) break; + if (cnt3 > 3) break; + } + if (cnt2 > 3){ + pwd.value =""; + pwd.focus(); + return false; + } + return pwd; + } + ]]> + + + + + 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function checkPassword4(pwd) { + p_pass = pwd.value; + var cnt=0,cnt2=1,cnt3=1; + var temp=""; + + for(i=0;i < p_pass.length;i++){ + temp_pass1 = p_pass.charAt(i); + next_pass = (parseInt(temp_pass1.charCodeAt(0)))+1; + temp_p = p_pass.charAt(i+1); + temp_pass2 = (parseInt(temp_p.charCodeAt(0))); + if (temp_pass2 == next_pass) + cnt2 = cnt2 + 1; + else + cnt2 = 1; + if (temp_pass1 == temp_p) + cnt3 = cnt3 + 1; + else + cnt3 = 1; + if (cnt2 > 3) break; + if (cnt3 > 3) break; + } + if (cnt3 > 3){ + pwd.value =""; + pwd.focus(); + return false; + } + return pwd; + } + ]]> + + + + = 0) { + value = field.options[si].value; + } + } else { + value = field.value; + } + + if (value.length > 0) { + + if (!isOK(value)) { + bValid = false; + if (i == 0) { + focusField = field; + } + fields[i++] = oInteger[x][1]; + + } else { + var iValue = parseInt(value); + if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) { + if (i == 0) { + focusField = field; + } + fields[i++] = oInteger[x][1]; + bValid = false; + } + } + } + } + } + if (fields.length > 0) { + focusField.focus(); + alert(fields.join('\n')); + } + return bValid; + } + + function isOK(vv){ + if (vv >0) return true; + else return false; + } + ]]> + + + + + diff --git a/src/main/resources/xitProps/globals.properties b/src/main/resources/xitProps/globals.properties new file mode 100644 index 00000000..c1944bc9 --- /dev/null +++ b/src/main/resources/xitProps/globals.properties @@ -0,0 +1,120 @@ +#----------------------------------------------------------------------- +# +# globals.properties : \uC2DC\uC2A4\uD15C +# +#----------------------------------------------------------------------- +# 1. key = value \uAD6C\uC870\uC785\uB2C8\uB2E4. +# 2. key\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uD3EC\uD568\uBD88\uAC00, value\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uAC00\uB2A5 +# 3. key\uAC12\uC73C\uB85C \uD55C\uAE00\uC744 \uC0AC\uC6A9\uBD88\uAC00, value\uAC12\uC740 \uD55C\uAE00\uC0AC\uC6A9\uC774 \uAC00\uB2A5 +# 4. \uC904\uC744 \uBC14\uAFC0 \uD544\uC694\uAC00 \uC788\uC73C\uBA74 '\'\uB97C \uB77C\uC778\uC758 \uB05D\uC5D0 \uCD94\uAC00(\uB9CC\uC57D '\'\uBB38\uC790\uB97C \uC0AC\uC6A9\uD574\uC57C \uD558\uB294 \uACBD\uC6B0\uB294 '\\'\uB97C \uC0AC\uC6A9) +# 5. Windows\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '\\' or '/' ('\' \uC0AC\uC6A9\uD558\uBA74 \uC548\uB428) +# 6. Unix\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '/' +# 7. \uC8FC\uC11D\uBB38 \uCC98\uB9AC\uB294 #\uC0AC\uC6A9 +# 8. value\uAC12 \uB4A4\uC5D0 \uC2A4\uD398\uC774\uC2A4\uAC00 \uC874\uC7AC\uD558\uB294 \uACBD\uC6B0 \uC11C\uBE14\uB9BF\uC5D0\uC11C \uCC38\uC870\uD560\uB54C\uB294 \uC5D0\uB7EC\uBC1C\uC0DD\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C trim()\uD558\uAC70\uB098 \uB9C8\uC9C0\uB9C9 \uACF5\uBC31\uC5C6\uC774 properties \uAC12\uC744 \uC124\uC815\uD560\uAC83 +#----------------------------------------------------------------------- + +# \uC6B4\uC601\uC11C\uBC84 \uD0C0\uC785(WINDOWS, UNIX) +Globals.OsType = WINDOWS + + +# G4C \uC5F0\uACB0\uC6A9 IP (localhost) +Globals.LocalIp = 127.0.0.1 + +# DB\uC11C\uBC84 \uD0C0\uC785(mysql,oracle,altibase,tibero) - datasource \uBC0F sqlMap \uD30C\uC77C \uC9C0\uC815\uC5D0 \uC0AC\uC6A9\uB428 +Globals.DbType = mysql +Globals.UserName=root +Globals.Password=xit5811807 +#Globals.UserName=new_inbus +#Globals.Password=bustms!2018 + +# maria +# \uAC1C\uBC1C +Globals.DriverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy +Globals.Url=jdbc:log4jdbc:mariadb://211.119.124.122:3306/xplatform?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false +#Globals.DriverClassName=org.mariadb.jdbc.Driver +#Globals.Url=jdbc:mariadb://211.119.124.122:3306/xplatform?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false + +#Globals.DriverClassName=com.mysql.jdbc.Driver +#Globals.Url=jdbc:mysql://211.119.124.122:3306/xplatform + +# \uC6B4\uC601 +#Globals.DriverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy +#Globals.Url=jdbc:log4jdbc:mariadb://152.99.141.30:60001/XPlatform?useUnicode=true&characterEncoding=utf8 + +# mysql +#Globals.DriverClassName=net.sf.log4jdbc.DriverSpy +#Globals.Url=jdbc:log4jdbc:mysql://127.0.0.1:3306/ebt + +#oracle +#Globals.DriverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy +##Globals.Url=jdbc:log4jdbc:oracle:thin:@115.21.123.42:1521:bustms +#Globals.Url=jdbc:log4jdbc:oracle:thin:@115.21.123.118:1521:bustms + +#Altibase +#Globals.DriverClassName=Altibase.jdbc.driver.AltibaseDriver +#Globals.Url=jdbc:Altibase://127.0.0.1:1721/egovfrm?encoding=UTF-8 + +#Tibero +#Globals.DriverClassName=com.tmax.tibero.jdbc.TbDriver +#Globals.Url=jdbc:tibero:thin:@127.0.0.1:1821:egovfrm + +#cubrid +#Globals.DriverClassName=cubrid.jdbc.driver.CUBRIDDriver +#Globals.Url=jdbc:cubrid:127.0.0.1:33000:sht:::?charset=utf-8 + +# MainPage Setting +Globals.MainPage = /cmm/main/mainPage.do + + + + + +# ############################################## # +# XitFramework \uC0AC\uC6A9\uC790 \uCEE4\uC2A4\uD140 \uD56D\uBAA9 +# ############################################## # + +# [\uD544\uC218]\uB85C\uADF8\uC778 \uD398\uC774\uC9C0 \uD30C\uC77C\uACBD\uB85C \uC124\uC815(xitframe\uC5D0\uC11C \uAE30\uBCF8\uC81C\uACF5\uD558\uB294 \uB85C\uADF8\uC778\uD654\uBA74\uC740 "~/jsp/framework/xit/category/login/XitLoginUsr.jsp"\uC774\uBA70, \uC0AC\uC5C5\uBCC4 custom \uD544\uC694 \uC2DC project \uD558\uC704 \uD3F4\uB354\uC5D0 \uD398\uC774\uC9C0\uB97C \uC0DD\uC131\uD558\uC5EC \uD574\uB2F9 \uD30C\uC77C\uC758 \uACBD\uB85C \uC791\uC131) +Globals.Xit.LoginPage = framework/biz/login/XitLoginUsr +#Globals.Xit.LoginPage = framework/xit/category/login/XitLoginEvrUsr + +# [\uD544\uC218]\uB85C\uADF8\uC778 \uD6C4 \uC774\uB3D9\uD560 \uBA54\uC778\uD398\uC774\uC9C0 URL \uC124\uC815(xitframe\uC5D0\uC11C \uAE30\uBCF8\uC81C\uACF5\uD558\uB294 \uBA54\uC778\uD654\uBA74\uC740 "/main/mainPage.do"\uC774\uBA70, \uC0AC\uC5C5\uBCC4 custom \uD544\uC694 \uC2DC project \uD558\uC704 pakage\uC5D0 \uD074\uB798\uC2A4 \uC0DD\uC131\uD558\uC5EC \uD574\uB2F9 request URL \uC791\uC131) +Globals.Xit.MainPage = /main/mainPage.do +#Globals.Xit.MainPage = /bustms/main/mainPage.do +# [\uC120\uD0DD]\uC77C\uBC18\uD68C\uC6D0 \uB85C\uADF8\uC778 \uD6C4 \uC774\uB3D9\uD560 \uBA54\uC778\uD398\uC774\uC9C0 URL +Globals.Xit.MainPage.Gnr = +# [\uC120\uD0DD]\uAE30\uC5C5\uD68C\uC6D0 \uB85C\uADF8\uC778 \uD6C4 \uC774\uB3D9\uD560 \uBA54\uC778\uD398\uC774\uC9C0 URL +Globals.Xit.MainPage.Ent = +# [\uC120\uD0DD]\uC5C5\uBB34\uC0AC\uC6A9\uC790 \uB85C\uADF8\uC778 \uD6C4 \uC774\uB3D9\uD560 \uBA54\uC778\uD398\uC774\uC9C0 URL +Globals.Xit.MainPage.Usr = + +# [\uD544\uC218]\uD68C\uC6D0\uAC00\uC785 \uC0C1\uD0DC\uCF54\uB4DC(A: \uC2E0\uCCAD, D: \uC0AD\uC81C, P:\uC2B9\uC778) +Globals.Xit.JoinMembership.Sttus = A +# [\uC120\uD0DD]\uC77C\uBC18\uD68C\uC6D0 \uD68C\uC6D0\uAC00\uC785 \uC0C1\uD0DC\uCF54\uB4DC(A: \uC2E0\uCCAD, D: \uC0AD\uC81C, P:\uC2B9\uC778) +Globals.Xit.JoinMembership.Sttus.Gnr = +# [\uC120\uD0DD]\uAE30\uC5C5\uD68C\uC6D0 \uD68C\uC6D0\uAC00\uC785 \uC0C1\uD0DC\uCF54\uB4DC(A: \uC2E0\uCCAD, D: \uC0AD\uC81C, P:\uC2B9\uC778) +Globals.Xit.JoinMembership.Sttus.Ent = +# [\uC120\uD0DD]\uC5C5\uBB34\uC0AC\uC6A9\uC790 \uD68C\uC6D0\uAC00\uC785 \uC0C1\uD0DC\uCF54\uB4DC(A: \uC2E0\uCCAD, D: \uC0AD\uC81C, P:\uC2B9\uC778) +Globals.Xit.JoinMembership.Sttus.Usr = + +# [\uD544\uC218]\uAD8C\uD55C\uC81C\uD55C \uD398\uC774\uC9C0 \uD30C\uC77C\uACBD\uB85C \uC124\uC815 +Globals.Xit.AccessDeniedPage = login/XitAccessDenied + +# [\uD544\uC218]\uC2DC\uC2A4\uD15C \uBA85\uCE6D +Globals.Xit.SystemName = \uC5D1\uC2A4\uC544\uC774\uD2F0 \uD504\uB808\uC784\uC6CC\uD06C + +# [\uD544\uC218]\uCCA8\uBD80\uD30C\uC77C \uC5C5\uB85C\uB4DC Path +Globals.Xit.File.UploadPath = /xitframe/file/user/upload/ + +# [\uD544\uC218]\uCCA8\uBD80\uD30C\uC77C \uC5C5\uB85C\uB4DC \uCD5C\uB300 Size(\uB2E8\uC704: byte) +Globals.Xit.File.UploadableSize = 5242880 + +# [\uD544\uC218]Default Pagination Info +Globals.Xit.Pagination.PageUnit = 10 +Globals.Xit.Pagination.PageSize = 10 + +# [\uC120\uD0DD]Rolling \uACF5\uC9C0\uC0AC\uD56D \uAC8C\uC2DC\uD310 ID (\uAC8C\uC2DC\uD310ID \uBBF8\uAE30\uC7AC \uC2DC \uD654\uBA74\uC0C1\uB2E8 \uB124\uC774\uAC8C\uC774\uC158 \uC601\uC5ED \uB0B4 \uB864\uB9C1\uACF5\uC9C0\uC0AC\uD56D\uC740 \uC801\uC6A9\uB418\uC9C0 \uC54A\uC73C\uBA70, \uAC8C\uC2DC\uD310ID\uB294 "XIT_BBS_MASTR.BBS_ID" \uCC38\uC870) +Globals.Xit.RollingNotiBbsId = BBSMSTR_00001 + +# ############################################## # +# //XitFramework \uC0AC\uC6A9\uC790 \uCEE4\uC2A4\uD140 \uD56D\uBAA9 +# ############################################## # diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 00000000..254272e1 --- /dev/null +++ b/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/src/main/webapp/WEB-INF/jeus-web-dd.xml b/src/main/webapp/WEB-INF/jeus-web-dd.xml new file mode 100644 index 00000000..4a856b26 --- /dev/null +++ b/src/main/webapp/WEB-INF/jeus-web-dd.xml @@ -0,0 +1,8 @@ + + + /ebt + + true + true + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/common/popup/fimsTotal_popup.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/common/popup/fimsTotal_popup.jsp new file mode 100644 index 00000000..961b0fff --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/common/popup/fimsTotal_popup.jsp @@ -0,0 +1,959 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +<%--2022.10.05 박소영 웹폰트 링크 추가--%> + + +
+ + + +
+ +

개별총정보

+
+ +
+
+ + +
+
+

위반정보

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
등록구분"> + 자료출처
위반일시차량번호
단속자
위반장소
발행번호
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
위반횟수시군구법정동
사전통지금액부과금액
감액금액총수납액잔액
특이사항
처리상태${contents.reglt_process_sttus_code}
+

소유주 정보

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
소유주aaa등록구분
주민번호aaaa우편번호
주소
상세주소
차대번호도로코드
+
+
+
    +
  • + + + +
  • +
+
+
+
+
+

진술내역

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
등록구분진술일
성명 + 주민등록번호
주소
번지
우편번호연락처
차주와의 관계이메일 주소
회신방법
진술요지
진술 내용
+
+
+

판정

+ + + + + + + + + + + + + + + + + + + + + + + +
처리일시
처리결과 +
담당자 의견
+
+
+
+
+
+
+
+

처리상태 변동이력

+
+ <%--삭제조심--%> +
+
+
+

감경처리

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
처리일 +
감경사유 +
감경금액
처리자 +
특이사항
+
+
+

서손처리

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
처리일 +
감경사유 +
감경금액
처리자 +
특이사항
+
+
+ <%--box_01--%> + +
+

주소 변동이력

+
+
+
+
+
+

발송 이력

+
+
+
+
+ +
+
    +
  • + + + +
  • +
+
+ +
+ +
+
+
+
+

민원내역

+
+
+
+
+
+

민원내용

+
+ <%--
--%> +
+
+
+
    +
  • + + + +
  • +
+
+
<%--box--%> +
+ + + + +
+ diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_detail.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_detail.jsp new file mode 100644 index 00000000..7a7ac187 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_detail.jsp @@ -0,0 +1,494 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
+ + + +
+ +

발송관리

+
+ +
+
+ 발송정보 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
발송 예약 정보
통지서명${contents.reglt_id}
기관명접수일시
발송건수발송처리상태
발송일시조회마감일시
+
+
+ +
+
+ 발송대상 +
+ +
+
+
+ 기본검색 +
    +
  • + + +
  • +
  • + + +
  • +
+
+
+
+
+
+
    + + + +
  • + +
  • + + + + + + + + + + + + +
+
전체 ㅣ {tot_cnt}
+
+ +
+ + +
+
+
+ diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main.jsp new file mode 100644 index 00000000..1183512d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main.jsp @@ -0,0 +1,443 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
+ + + + +
+ +
+
+
    + + + +
  • + +
  • + + + + + + + + + + + + +
+
전체 ㅣ
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main2.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main2.jsp new file mode 100644 index 00000000..4c4adc0d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main2.jsp @@ -0,0 +1,490 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
+ + + + + + +
+
+
    + + + +
  • + +
  • + + + + + + + + + + + + +
+
전체 ㅣ
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + + + +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main3.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main3.jsp new file mode 100644 index 00000000..5d3b037b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/Rt0200_main3.jsp @@ -0,0 +1,646 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
+ + + + + + +
+
+
    + + + +
  • + +
  • + + + + + + + + + + + + +
+
전체 ㅣ
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + + + +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/rtRt0200Sel.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/rtRt0200Sel.jsp new file mode 100644 index 00000000..3f47adce --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/rt/rt0200/rtRt0200Sel.jsp @@ -0,0 +1,443 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
+ + + + +
+ +
+
+
    + + + +
  • + +
  • + + + + + + + + + + + + +
+
전체 ㅣ
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/XitIncludeBase.jsp b/src/main/webapp/WEB-INF/jsp/framework/XitIncludeBase.jsp new file mode 100644 index 00000000..42feb087 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/XitIncludeBase.jsp @@ -0,0 +1,192 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%-- --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + + + + + + + + + +<%-- --%> + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/XitIncludeMenuPath.jsp b/src/main/webapp/WEB-INF/jsp/framework/XitIncludeMenuPath.jsp new file mode 100644 index 00000000..f202c853 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/XitIncludeMenuPath.jsp @@ -0,0 +1,24 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +
+
+
    +
  • HOME
  • +
  • >
  • + + + + +
  • +
    + +
  • +
  • >
  • +
    +
    +
    +
+
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitIdDuplCnfirm.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitIdDuplCnfirm.jsp new file mode 100644 index 00000000..78a65f77 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitIdDuplCnfirm.jsp @@ -0,0 +1,157 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + +
+ + + + + +
diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitUserReg_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitUserReg_input.jsp new file mode 100644 index 00000000..2fb4ddaf --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitUserReg_input.jsp @@ -0,0 +1,318 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
+ +
+

업무사용자 등록

+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
사용자아이디 + 필수 + + + + + + (중복아이디 검색) + + + 핸드폰번호   + + +
비밀번호 + 필수 + + + + 비밀번호확인 + 필수 + + +
비밀번호힌트 + 필수 + + + + + + + 비밀번호정답 + 필수 + + + +
이름 + 필수 + + + + 소속기관 + + + + + +
조직코드 + 필수 + + + + + + + 직위명 + + +
이메일주소 + + + 집전화지역번호 + + + - + - + + + +
사무실전화번호 + + + 팩스번호 + + +
주소 + + + + + + (우편번호 검색) + + + + 상세주소 + + +
그룹아이디 + 필수 + + + + + + +
+
+ + +
+ + + + + + + + + + +
+ + + + +
+
+ + + + + + + 1"/> + +
+
diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitUserReg_inputEvr.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitUserReg_inputEvr.jsp new file mode 100644 index 00000000..ad82a8fa --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/XitUserReg_inputEvr.jsp @@ -0,0 +1,183 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/api/XitAdresSearch.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/api/XitAdresSearch.jsp new file mode 100644 index 00000000..ab35b24b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/api/XitAdresSearch.jsp @@ -0,0 +1,130 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + +주소 검색 +<% + /** + * @파일명 : AdresSearch.jsp + * @파일정보 : 주소 검색 팝업화면 + * @수정이력 + * @수정자 수정일 수정내용 + * @------- ------------ ---------------- + * @박민규 2020.10.05. 최초생성 + * @--------------------------------------- + * @author (주)엑스아이티 개발팀 + * @since 2020. 2. 2. + * @version 1.0 Copyright(c) XIT All rights reserved. + */ +%> +<% + /** + * Encoding Set + * -시스템의 인코딩 설정에 따라 주석 해제 후 사용 + */ + request.setCharacterEncoding("UTF-8"); + //request.setCharacterEncoding("EUC-KR"); + + + String inputYn = request.getParameter("inputYn"); + String addrDetail = request.getParameter("addrDetail"); //사용자가 입력한 상세주소 + + String roadFullAddr = request.getParameter("roadFullAddr"); //전체 도로명 주소(도로명주소 + 사용자 입력주소 + 도로명주소 참고항목) + String roadAddr = request.getParameter("roadAddr"); //전체 도로명 주소. 예시-> 서울특별시 마포구 성암로 301 (상암동) + String roadAddrPart1 = request.getParameter("roadAddrPart1"); //도로명주소(참고항목 제외). 예시-> 서울특별시 마포구 성암로 301 + String roadAddrPart2 = request.getParameter("roadAddrPart2"); //도로명주소 참고항목. 예시-> (상암동) + String jibunAddr = request.getParameter("jibunAddr"); //지번주소. 예시-> 서울특별시 마포구 상암동 1595 한국지역정보개발원(KLID Tower) + String engAddr = request.getParameter("engAddr"); //영문주소. 예시-> 301, Seongam-ro, Mapo-gu, Seoul + String zipNo = request.getParameter("zipNo"); //우편번호. 예시-> 03923 + String admCd = request.getParameter("admCd"); //행정구역코드. 예시-> 1144012700 + String rnMgtSn = request.getParameter("rnMgtSn"); //도로명코드. 예시-> 14403113012 + String bdMgtSn = request.getParameter("bdMgtSn"); //건물관리번호. 예시-> 1144012700115950000000001 + String detBdNmList = request.getParameter("detBdNmList"); //상세건물명. 예시-> + String bdNm = request.getParameter("bdNm"); //건물명. 예시-> 한국지역정보개발원(KLID Tower) + String bdKdcd = request.getParameter("bdKdcd"); //공동주택여부. 예시-> 0 + String siNm = request.getParameter("siNm"); //시도명. 예시-> 서울특별시 + String sggNm = request.getParameter("sggNm"); //시군구명. 예시-> 마포구 + String emdNm = request.getParameter("emdNm"); //읍면동명. 예시-> 상암동 + String liNm = request.getParameter("liNm"); //법정리명. 예시-> + String rn = request.getParameter("rn"); //도로명. 예시-> + String udrtYn = request.getParameter("udrtYn"); //지하여부(0:지상,1:지하). 예시-> 0 + String buldMnnm = request.getParameter("buldMnnm"); //건물본번. 예시-> 301 + String buldSlno = request.getParameter("buldSlno"); //건물부번(부번이 없는 경우 0). 예시-> 0 + String mtYn = request.getParameter("mtYn"); //산여부(0:대지,1:산). 예시-> 0 + String lnbrMnnm = request.getParameter("lnbrMnnm"); //지번본번(번지). 예시-> 1595 + String lnbrSlno = request.getParameter("lnbrSlno"); //지번부번(호)(부번이 없는 경우 0).예시-> 0 + String emdNo = request.getParameter("emdNo"); //읍변동일련번호. 예시-> 03 + +%> + + + +
+ + + + + +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/api/XitAdresSearchApi.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/api/XitAdresSearchApi.jsp new file mode 100644 index 00000000..fa555bb7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/api/XitAdresSearchApi.jsp @@ -0,0 +1,731 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + +<% + request.setCharacterEncoding("UTF-8"); // 한글깨지면 주석제거 + + String confmKey = "U01TX0FVVEgyMDIxMDYyMjE1MTIyMTExMTMxMDU="; // 검색API 승인키 + String domain = "http://www.juso.go.kr"; // 인터넷망 + // ※ 행정망 내에서 운영되는 시스템도 이용 가능합니다. 행정망 서비스를 위한 API 요청URL은 별도로 문의 주시기 바랍니다.(1588-0061) + String resultType = "4"; // 검색결과 화면 출력유(1 : 도로명, 2 : 도로명+지번, 3 : 도로명+상세건물명, 4 : 도로명+지번+상세건물명) +%> + + + + + +주소정보연계 | 도로명주소 안내시스템 + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/EntUserForm.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/EntUserForm.jsp new file mode 100644 index 00000000..2e1398a4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/EntUserForm.jsp @@ -0,0 +1,374 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/GnrUserForm.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/GnrUserForm.jsp new file mode 100644 index 00000000..512a4825 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/GnrUserForm.jsp @@ -0,0 +1,397 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%> + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/UserForm.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/UserForm.jsp new file mode 100644 index 00000000..c9e6f2bc --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/anonymous/forms/UserForm.jsp @@ -0,0 +1,357 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + 1"/> + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/file/XitAttachFile_imgage_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/file/XitAttachFile_imgage_list.jsp new file mode 100644 index 00000000..12c33501 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/file/XitAttachFile_imgage_list.jsp @@ -0,0 +1,20 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + +
+ ?atchFileId=&fileSn=' width="640" alt="파일보기링크" /> +
diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/file/XitAttachFile_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/file/XitAttachFile_list.jsp new file mode 100644 index 00000000..9f155ea1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/file/XitAttachFile_list.jsp @@ -0,0 +1,61 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + +
+ + +  [ byte] + 파일 삭제','');" /> + + + ','')"> +  [ byte] + + + +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/popup/XitZipSearch.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/popup/XitZipSearch.jsp new file mode 100644 index 00000000..096acde4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/popup/XitZipSearch.jsp @@ -0,0 +1,19 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + +
+ + +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/common/popup/XitZipSearchList.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/common/popup/XitZipSearchList.jsp new file mode 100644 index 00000000..fe2db554 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/common/popup/XitZipSearchList.jsp @@ -0,0 +1,111 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + + + + +우편번호 찾기 + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
우편번호주소
-${resultInfo.ctprvnNm} ${resultInfo.signguNm} ${resultInfo.emdNm} ${resultInfo.liBuldNm} ${resultInfo.lnbrDongHo}
+ + + + + +
+ +
+
    + +
+
+ + +
diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitAccessDenied.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitAccessDenied.jsp new file mode 100644 index 00000000..d0809a0f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitAccessDenied.jsp @@ -0,0 +1,94 @@ +<%@ page import="org.springframework.security.core.context.SecurityContextHolder" %> +<%@ page import="org.springframework.security.core.Authentication" %> +<%@ page import="org.springframework.security.web.access.AccessDeniedHandlerImpl" %> + +<%@ page isErrorPage="true"%> +<%@ page contentType="text/html; charset=euc-kr" %> +<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %> +<%@page import="kr.xit.framework.core.utils.XitCmmnUtil"%> +<%@ page import="java.lang.String" %> +<% + boolean authenticateFail = false; + if(request.getAttribute("authenticateFail")!=null && !request.getAttribute("authenticateFail").toString().equals("")){ + authenticateFail = true; + } + + boolean authFail = false; + if(request.getAttribute("authFail")!=null && !request.getAttribute("authFail").toString().equals("")){ + authFail = true; + } + + String target = XitCmmnUtil.nvl((String)request.getAttribute("target")); + target = target.equals("") ? "_top" : target; +%> + + + +Access is denied + + + + + + + + +

+
+
+ + + + +
+ + + +
+ + + + + + + + + +
+ + + + + + + +
ǥ + û ϴ. +
ý۰ڿ ٶϴ. +<%-- <%= request.getAttribute(org.springframework.security.web.WebAttributes.AUTHENTICATION_EXCEPTION) %> --%> +<%-- <% Authentication auth = SecurityContextHolder.getContext().getAuthentication(); --%> + +<%-- } %> --%> +
${exception.message}
+ +

+
ȭ ̵
+
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_inputEvr_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_inputEvr_popup.jsp new file mode 100644 index 00000000..8eb63e98 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_inputEvr_popup.jsp @@ -0,0 +1,277 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> + + + + + + + + +파주시 버스운송관리 지원시스템 + + +
+ + + +
+
+ + + +
+ + +
+ +
+
+ + + +
+
+ + + +
+ + +
+ +
+
+ + + +
+
+ + + +
+ + +
+ +
+
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_input_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_input_popup.jsp new file mode 100644 index 00000000..88879a56 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_input_popup.jsp @@ -0,0 +1,100 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> + + + + + + + +파주시 버스운송관리 지원시스템 + + +
+ + + +
+ + +
+ +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_result_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_result_popup.jsp new file mode 100644 index 00000000..e555fa6c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindId_result_popup.jsp @@ -0,0 +1,90 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%-- <%@include file="/WEB-INF/sitemesh/main/includeBase.jsp" %> --%> + + + + + + 파주시 버스운송관리 지원시스템 + + + + + +
+ + + + + +
+ + + +
+ +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_inputEvr_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_inputEvr_popup.jsp new file mode 100644 index 00000000..c4f42307 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_inputEvr_popup.jsp @@ -0,0 +1,309 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%-- <%@include file="/WEB-INF/jsp/project/bustms/cmmn/includeBase.jsp" %> --%> + + + + + + +파주시 버스운송관리 지원시스템 + + + + + + + + + +
+ + + +
+
+ + + +
+ + + +
+ +
+
+ + + +
+
+ + + +
+ + + +
+ +
+
+ + + +
+
+ + + +
+ + + +
+ +
+
+ +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_input_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_input_popup.jsp new file mode 100644 index 00000000..c72082e9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_input_popup.jsp @@ -0,0 +1,119 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%-- <%@include file="/WEB-INF/jsp/project/bustms/cmmn/includeBase.jsp" %> --%> + + + + + + + 파주시 버스운송관리 지원시스템 + + + + + +
+ + + +
+ + + +
+ +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_result_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_result_popup.jsp new file mode 100644 index 00000000..46856bde --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitFindPwd_result_popup.jsp @@ -0,0 +1,70 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%-- <%@include file="/WEB-INF/sitemesh/main/includeBase.jsp" %> --%> + + + + + + 파주시 버스운송관리 지원시스템 + + + + + + +
+ + + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginEvrUsr.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginEvrUsr.jsp new file mode 100644 index 00000000..7296aae2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginEvrUsr.jsp @@ -0,0 +1,325 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + +로그인 + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginUsr.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginUsr.jsp new file mode 100644 index 00000000..f5f36e9f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginUsr.jsp @@ -0,0 +1,260 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + +로그인 + + + +<%-- --%> + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginUsr.jsp_bak b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginUsr.jsp_bak new file mode 100644 index 00000000..5930c5b2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/login/XitLoginUsr.jsp_bak @@ -0,0 +1,185 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + +로그인 + + + + + + + +
+ + +
+ + +
+ +
+ + +
+ +
LOGIN 표준프레임워크 경량환경 내부업무 시스템에 오신것을 환영합니다.
+ +
+ +
+ + + + +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/main/XitMain.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/main/XitMain.jsp new file mode 100644 index 00000000..ce90c711 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/main/XitMain.jsp @@ -0,0 +1,281 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + +
+
+
+

+ 누구나 쉽게
간편하게 사용할 수 있는 +

+

과태료 통합 관리 시스템

+
+ mainVisual + <%-- mainVisual --%> +<%-- mainVisual--%> + mainVisual + mainVisual +
+ +
+
+

과태료 통합 관리 시스템

+

City of ChunCheon

+
+ mainVisual + <%-- mainVisual --%> + <%-- mainVisual --%> + mainVisual + mainVisual +
+ + +
+ +
+
+
+ +
+
+ + " class="btnMore"> + + +
+
+
+
+ +
+
+ + " class="btnMore"> + + +
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/db/XitAdminDbMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/db/XitAdminDbMng_list.jsp new file mode 100644 index 00000000..56a4952a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/db/XitAdminDbMng_list.jsp @@ -0,0 +1,616 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + +
+
    +
  • ※ CLOB 컬럼 조회 시 오류 대응 방법
  • +
      +
    • -.Oracle 인 경우 ex> SELECT DBMS_LOB.SUBSTR([컬럼], 2000, 1) AS "VALUE" FROM TEST
    • +
    +
+
+ + + + + + + +
+ +
+
+
+ + + + +
+ + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerCmdMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerCmdMng_list.jsp new file mode 100644 index 00000000..eff94f61 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerCmdMng_list.jsp @@ -0,0 +1,152 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
    +
    + +
    +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerFileMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerFileMng_list.jsp new file mode 100644 index 00000000..ada62afd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerFileMng_list.jsp @@ -0,0 +1,626 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + +
    + + + 업로드 +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + "/> +
    + + + 생성 +
    + +
    +
    + +
    +
    +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerLogMng_filelist_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerLogMng_filelist_popup.jsp new file mode 100644 index 00000000..cd07a730 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerLogMng_filelist_popup.jsp @@ -0,0 +1,386 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + +권한별 롤 목록 + + + + + + + + + + + +

    파일 목록 조회

    + + + + + + + + + +
    + + +<%-- --%> +<%-- "/> --%> + +
    + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerLogMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerLogMng_list.jsp new file mode 100644 index 00000000..95726101 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/admin/server/XitAdminServerLogMng_list.jsp @@ -0,0 +1,187 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + +
    + + 다운로드 + +
    + + + +
    +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_edit.jsp new file mode 100644 index 00000000..1ef627c9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_edit.jsp @@ -0,0 +1,185 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_input.jsp new file mode 100644 index 00000000..11c88143 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_input.jsp @@ -0,0 +1,185 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_list.jsp new file mode 100644 index 00000000..aa135fe6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/XitAuthGrpMng_list.jsp @@ -0,0 +1,357 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + +
    + + 등록 + 삭제 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_edit.jsp new file mode 100644 index 00000000..92ab614d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_edit.jsp @@ -0,0 +1,148 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + +
    +

    +
    + + +
    + + + + + + + + + + + + + + + + + +
    그룹 ID +
    그룹 명 + 필수 +  
    설명
    등록일자
    +
    + + +
    + + + + + + + + + + + + + + + +
    + 목록 + + 저장 + + 저장 + + 삭제 +
    +
    + + + + + + + + + +
    + +
    + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_input.jsp new file mode 100644 index 00000000..6e9696cc --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_input.jsp @@ -0,0 +1,149 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + +
    +

    +
    + + +
    + + + + + + + + + + + + + + + + + +
    그룹 ID +
    그룹 명 + 필수 +  
    설명
    등록일자
    +
    + + +
    + + + + + + + + + + + + + + + +
    + 목록 + + 저장 + + 저장 + + 삭제 +
    +
    + + + + + + + + + +
    + +
    + +
    + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_list2.jsp new file mode 100644 index 00000000..8bafc1d2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/grp/backup/XitAuthGrpMng_list2.jsp @@ -0,0 +1,223 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + + +
    +

    그룹 관리

    + +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    그룹 관리
    그룹 ID그룹 명설명등록일자
    " />')">')">상세조회
    +
    + + + +
    +
      + +
    +
    + +
    + +
    + +
    + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/hierarchy/XitAuthHierarchyMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/hierarchy/XitAuthHierarchyMng_edit.jsp new file mode 100644 index 00000000..6ad9479f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/hierarchy/XitAuthHierarchyMng_edit.jsp @@ -0,0 +1,307 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/hierarchy/XitAuthHierarchyMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/hierarchy/XitAuthHierarchyMng_list.jsp new file mode 100644 index 00000000..9660e374 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/hierarchy/XitAuthHierarchyMng_list.jsp @@ -0,0 +1,250 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_edit.jsp new file mode 100644 index 00000000..735a157d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_edit.jsp @@ -0,0 +1,176 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_input.jsp new file mode 100644 index 00000000..b64f28b3 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_input.jsp @@ -0,0 +1,176 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_list.jsp new file mode 100644 index 00000000..9b037b9c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_list.jsp @@ -0,0 +1,361 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + +
    + + 등록 + 삭제 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_rolegrant_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_rolegrant_popup.jsp new file mode 100644 index 00000000..5351d4c0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/XitAuthRegMng_rolegrant_popup.jsp @@ -0,0 +1,367 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + +권한별 롤 목록 + + + + + + + + + + + +

    권한 롤 관리

    + + +
    + + 저장 + +
    + + +
    + + + + + + "/> + +
    + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_edit.jsp new file mode 100644 index 00000000..a3fadbe2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_edit.jsp @@ -0,0 +1,150 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + +
    +

    +
    + + +
    + + + + + + + + + + + + + + + + + + + +
    권한 코드 + 필수 +  
    권한 명 + 필수 +  
    설명
    등록일자
    +
    + + +
    + + + + + + + + + + + + + + + +
    + 목록 + + 저장 + + 저장 + + 삭제 +
    +
    + + + + + + + + + +
    + +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_input.jsp new file mode 100644 index 00000000..b9324bfc --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_input.jsp @@ -0,0 +1,152 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +
    + + +
    + + + + + + + + + + + + + + + + + + + +
    권한 코드 + 필수 +  
    권한 명 + 필수 +  
    설명
    등록일자
    +
    + + +
    + + + + + + + + + + + + + + + + +
    + 목록 + + 저장 + + 저장 + + 삭제 +
    +
    + + +
    + +
    + + + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_list2.jsp new file mode 100644 index 00000000..fcfdf128 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_list2.jsp @@ -0,0 +1,244 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + +
    +

    권한 목록

    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자목록관리
    권한 코드권한 명설명등록일자롤 정보
    " />')">')">롤 정보
    +
    + + + +
    +
      + +
    +
    + +
    + +
    +
    + + + + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_rolegrant_popup.jsp_bak b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_rolegrant_popup.jsp_bak new file mode 100644 index 00000000..568c05f7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/reg/backup/XitAuthRegMng_rolegrant_popup.jsp_bak @@ -0,0 +1,240 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + +권한별 롤 목록 + + + + + + + + + + + +
    +

    권한 롤 관리

    + +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    롤 ID롤 명롤 타입롤 Sort롤 설명등록일자등록여부
    " /> + +
    +
    + + + +
    +
      + +
    +
    + +
    + +
    +
    + + + + "/> + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_edit.jsp new file mode 100644 index 00000000..f5b9f3de --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_edit.jsp @@ -0,0 +1,194 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_input.jsp new file mode 100644 index 00000000..fcb8d5d2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_input.jsp @@ -0,0 +1,194 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_list.jsp new file mode 100644 index 00000000..2e8530f7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/XitAuthRuleMng_list.jsp @@ -0,0 +1,361 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + + + + + +
    + + 등록 + 삭제 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_edit.jsp new file mode 100644 index 00000000..6960e51f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_edit.jsp @@ -0,0 +1,172 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + +
    +

    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    롤 코드 +
    롤 명 + 필수 +  
    롤 패턴 + 필수 +  
    설명 +
    롤 타입 + 필수 + + +
    롤 Sort + 필수 +
    등록일자
    +
    + + +
    + + + + + + + + + + + + + + + +
    + 목록 + + 저장 + + 저장 + + 삭제 +
    +
    + + + + + + + + + +
    + +
    + +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_input.jsp new file mode 100644 index 00000000..841e3a17 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_input.jsp @@ -0,0 +1,171 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + +
    +

    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    롤 코드 +
    롤 명 + 필수 +  
    롤 패턴 + 필수 +  
    설명
    롤 타입 + 필수 + +
    롤 Sort + 필수 +
    등록일자
    +
    + + +
    + + + + + + + + + + + + + + + +
    + 목록 + + 저장 + + 저장 + + 삭제 +
    +
    + + + + + + + + + +
    + +
    + +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_list2.jsp new file mode 100644 index 00000000..d9578c04 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/rule/backup/XitAuthRuleMng_list2.jsp @@ -0,0 +1,227 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + +
    +

    롤 관리

    +
    + 조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    롤 관리
    롤 ID롤 명롤 타입롤 Sort롤 설명등록일자
    " />')">')">상세조회
    +
    + + + +
    +
      + +
    +
    + +
    + +
    +
    + + + + +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/XitAuthUsrMng_groupsearch_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/XitAuthUsrMng_groupsearch_popup.jsp new file mode 100644 index 00000000..e8b724e0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/XitAuthUsrMng_groupsearch_popup.jsp @@ -0,0 +1,116 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + +
    + +
    + + + +
    +
    그룹 조회 팝업
    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    그룹 조회 팝업
    그룹 ID그룹 명
    ')">
    검색된 결과가 없습니다.
    +
    + + + +
    +
      + +
    +
    +
    + + + + + +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/XitAuthUsrMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/XitAuthUsrMng_list.jsp new file mode 100644 index 00000000..b51817bf --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/XitAuthUsrMng_list.jsp @@ -0,0 +1,371 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/backup/XitAuthUsrMng_list3.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/backup/XitAuthUsrMng_list3.jsp new file mode 100644 index 00000000..9dae6d33 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/auth/usr/backup/XitAuthUsrMng_list3.jsp @@ -0,0 +1,290 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + + +
    +

    사용자별 권한관리

    +
    + 조건정보 영역 +
    +
      +
    • + + +
    • +
    • + + search팝업 +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    권한그룹관리
    사용자 ID사용자 명사용자 유형권한등록 여부
    "/> + + ">
    검색결과가 없습니다.
    +
    + + + +
    +
      + +
    +
    + +
    + +
    +
    + + + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_choice_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_choice_popup.jsp new file mode 100644 index 00000000..3321456a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_choice_popup.jsp @@ -0,0 +1,122 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + +

    + +
    + + +"> + +
    + + + + + + + + + + + + + + + + + + + + + + <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%> + + + + + + <%-- 데이터를 화면에 출력해준다 --%> + + + + + + + + + + +
    + +
    ${resultInfo.batchOpertId}${resultInfo.batchOpertNm}${resultInfo.batchProgrm}${resultInfo.paramtr} + ', ''); return false;"> +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_edit.jsp new file mode 100644 index 00000000..b7f2d8a7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_edit.jsp @@ -0,0 +1,270 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + +<%pageContext.setAttribute("crlf", "\r\n"); %> + + + + + + + + + "/> + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_input.jsp new file mode 100644 index 00000000..6302980a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_input.jsp @@ -0,0 +1,260 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + "/> + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_list.jsp new file mode 100644 index 00000000..d495ee17 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/XitBatchRegMng_list.jsp @@ -0,0 +1,295 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
    + + + "> + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_edit.jsp new file mode 100644 index 00000000..8f2677ce --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_edit.jsp @@ -0,0 +1,112 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%pageContext.setAttribute("crlf", "\r\n"); %> + + + + + + + + + +<%-- noscript 태그 --%> + + + + + + + + + "/> + +
    + +

    배치작업 수정

    + + + + + + + + + + + + + + + + + + + + + + + +
    * + + +
    * + + +
    * + + +
    + + +
    + + +
    + + +
    +
    +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_input.jsp new file mode 100644 index 00000000..f95a27c0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_input.jsp @@ -0,0 +1,104 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + "/> + +
    + +

    배치작업 등록

    + + + + + + + + + + + + + + + + + + + +
    * + + +
    * + + +
    + + +
    + + +
    + + +
    +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_list2.jsp new file mode 100644 index 00000000..7354da90 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_list2.jsp @@ -0,0 +1,125 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + +
    + "> + + +
    + + + + + + + + + + + + + + + + + + + <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%> + + + + + + <%-- 데이터를 화면에 출력해준다 --%> + + + + + + + + + +
    + +
    +
    + + + + + '); return false;"> +
    +
    ${resultInfo.batchOpertNm}${resultInfo.batchProgrm}${resultInfo.paramtr}
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_view.jsp new file mode 100644 index 00000000..05bd747b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/reg/backup/XitBatchRegMng_view.jsp @@ -0,0 +1,98 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%pageContext.setAttribute("crlf", "\r\n"); %> + + + + + + + +

    배치작업 상세조회

    + +
    + + + + + "/> + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + +
    + + +
    + + + +
    +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/XitBatchResultMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/XitBatchResultMng_edit.jsp new file mode 100644 index 00000000..16331557 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/XitBatchResultMng_edit.jsp @@ -0,0 +1,228 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + "/> + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/XitBatchResultMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/XitBatchResultMng_list.jsp new file mode 100644 index 00000000..a601da20 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/XitBatchResultMng_list.jsp @@ -0,0 +1,316 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + +
    + + + + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/backup/XitBatchResultMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/backup/XitBatchResultMng_edit.jsp new file mode 100644 index 00000000..50568023 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/backup/XitBatchResultMng_edit.jsp @@ -0,0 +1,140 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + +<% +// 배치결과의 executBeginTime, executEndTime의 화면 표시용 임시 변수 .... +%> + +<%pageContext.setAttribute("crlf", "\r\n"); %> + + + + + + + + + + +

    배치결과 상세조회

    + +
    + + + + + + + "/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    + + +
    + + +
    + + +
    +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/backup/XitBatchResultMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/backup/XitBatchResultMng_list2.jsp new file mode 100644 index 00000000..af284635 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/result/backup/XitBatchResultMng_list2.jsp @@ -0,0 +1,314 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + + + + + + + + + +

    배치결과 목록

    + +
    + + +"> + + + +
    + + + + + + + + + + + + + + + + + + + + + + + <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%> + + + + + + <%-- 데이터를 화면에 출력해준다 --%> + + + + + + + + + + + +
    + +
    +
    + + + + + '); return false;"> +
    +
    ${resultInfo.batchSchdulId}${resultInfo.batchOpertNm}${resultInfo.sttusNm} + + + + + +
    + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_edit.jsp new file mode 100644 index 00000000..1a59c8c6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_edit.jsp @@ -0,0 +1,508 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + "/> + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_input.jsp new file mode 100644 index 00000000..84c9feb6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_input.jsp @@ -0,0 +1,464 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + "/> + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_list.jsp new file mode 100644 index 00000000..088685b4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/XitBatchScheduleMng_list.jsp @@ -0,0 +1,316 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + +
    + + + "> + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_edit.jsp new file mode 100644 index 00000000..93841999 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_edit.jsp @@ -0,0 +1,414 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%pageContext.setAttribute("crlf", "\r\n"); %> + + + + + + + + + + + + + + + + + + + + + + +<%-- noscript 태그 --%> + + + + + + + + "/> + + + + + +

    배치스케줄 수정

    + + + + + + + + + + + + + + + + + + + + + + + +
    * + + +
    * + + + 배치작업조회팝업 제공 +
    * + + +
    * + + + + + + + " readonly style="width:70px" /> + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_input.jsp new file mode 100644 index 00000000..5e251acb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_input.jsp @@ -0,0 +1,382 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + +<%-- noscript 테그 --%> + + + + + + + + "/> + + + + +

    + + + + + + + + + + + + + + + + + + + +
    * + + + 배치작업조회팝업 제공 +
    * + + +
    * + + + + + + + " readonly="readonly" style="width:70px"> + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_list2.jsp new file mode 100644 index 00000000..3609d5f5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_list2.jsp @@ -0,0 +1,131 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + +

    배치스케줄관리 목록

    + +
    +"> + + + +
    + + + + + + + + + + + + + + + + + + + + + <%-- 데이터를 없을때 화면에 메세지를 출력해준다 --%> + + + + + + <%-- 데이터를 화면에 출력해준다 --%> + + + + + + + + + + +
    + +
    +
    + + + + + '); return false;"> +
    +
    ${resultInfo.batchOpertNm}${resultInfo.batchProgrm}${resultInfo.executCycleNm}${resultInfo.executSchdul}
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_view.jsp new file mode 100644 index 00000000..aaa00405 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/batch/schedule/backup/XitBatchScheduleMng_view.jsp @@ -0,0 +1,103 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%pageContext.setAttribute("crlf", "\r\n"); %> + + + + + + + + + + + +

    배치스케줄 상세조회

    + +
    + + + + + "/> + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +   +
    + + +
    + + + +
    +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_edit.jsp new file mode 100644 index 00000000..636c3015 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_edit.jsp @@ -0,0 +1,387 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + +<c:out value='${bdMstr.bbsNm}'/> - 게시글 수정 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_input.jsp new file mode 100644 index 00000000..375fcc6e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_input.jsp @@ -0,0 +1,335 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_inputReply.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_inputReply.jsp new file mode 100644 index 00000000..692c6455 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_inputReply.jsp @@ -0,0 +1,332 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_list.jsp new file mode 100644 index 00000000..cb072a46 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_list.jsp @@ -0,0 +1,635 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + +<c:out value="${brdMstrVO.bbsNm}"/> 목록 + + + + + + + + +<%--

    --%> +<%--
    --%> +<%-- --%> + +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + + + + + +<%-- 검색조건 --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + + + + +<%-- --%> +<%-- --%> +<%-- --%> + + + +<%-- --%> + + + + + + + + + + + + + + + + + + + +<%-- search조회 --%> +<%-- --%> +<%-- ">등록 --%> +<%-- --%> + + + + + + + + + + + + +<%-- 게시물 목록 --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + + + + +<%-- --%> + + +<%-- --%> +<%-- --%> + +<%-- --%> + + + + + + +<%-- --%> + + +<%-- --%> + +<%-- --%> +<%-- --%> +<%-- --%> + +<%-- --%> +<%-- reply arrow --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- " /> --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- "> --%> +<%-- --%> +<%-- --%> + + +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + +<%-- --%> +<%-- --%> + +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> + +<%-- --%> + + + + + + + +<%-- --%> + + + + + + + + + + + + + + + + + + + + + +
    + + 등록 + + +
    + + + +
    + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_preview.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_preview.jsp new file mode 100644 index 00000000..974eac63 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_preview.jsp @@ -0,0 +1,250 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + +<c:out value='${bdMstr.bbsNm}'/> - 게시글 수정 + + + + + + + + + +
    +

    - 게시글 수정

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + required + + " type="text" size="60" value='' maxlength="60" > +
    +
    + required + + + +
    + required + + + + + calendar + ~ + + + calendar +
    +
    +
    +<%-- --%> +<%-- --%> +<%-- --%> + +
    + + + + + +
    + + + +
    + + +
    + + + + +<%-- --%> + + + + + + + +
    + + + +
    +
    + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_view.jsp new file mode 100644 index 00000000..7c80c358 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/basic/XitBasicBbsMng_view.jsp @@ -0,0 +1,356 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + +
    + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_choice_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_choice_popup.jsp new file mode 100644 index 00000000..4f56e652 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_choice_popup.jsp @@ -0,0 +1,161 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + +게시판 정보 + + + + + + +
    + + + + +
    +

    게시판 정보

    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    • + + +
    • +
    + +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    게시판정보
    번호게시판명게시판유형게시판속성생성일사용여부선택
    + + + + + + ','');" /> +
    +
    + + +
    +
      + +
    +
    + + + + + + + +
    +
    + + + + +
    닫기
    +
    +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_edit.jsp new file mode 100644 index 00000000..0d821bc2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_edit.jsp @@ -0,0 +1,346 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + +
    + + + + + + + + + +
    + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_input.jsp new file mode 100644 index 00000000..4da740b5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_input.jsp @@ -0,0 +1,317 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + +
    + + + + +
    + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_list.jsp new file mode 100644 index 00000000..010389d0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/XitBbsCreateMng_list.jsp @@ -0,0 +1,302 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_choice_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_choice_popup.jsp new file mode 100644 index 00000000..4f56e652 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_choice_popup.jsp @@ -0,0 +1,161 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + +게시판 정보 + + + + + + +
    + + + + +
    +

    게시판 정보

    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    • + + +
    • +
    + +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    게시판정보
    번호게시판명게시판유형게시판속성생성일사용여부선택
    + + + + + + ','');" /> +
    +
    + + +
    +
      + +
    +
    + + + + + + + +
    +
    + + + + +
    닫기
    +
    +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_edit.jsp new file mode 100644 index 00000000..e750ac68 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_edit.jsp @@ -0,0 +1,213 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + +
    +

    게시판 정보수정 및 상세보기

    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + required + + +
    +
    + + required + + + +
    게시판 유형게시판 속성
    답장가능여부 + + + + + + + + + + + required + + : checked="checked">  + : checked="checked"> +
    +
    + + + +
    +
    + + required + + " maxlength="20" readonly="readonly" > + +  새창 +
    +
    추가 선택사항 + + ※ 추가 선택사항은 수정 불가 (미설정된 기존 게시판의 경우 처음 설정은 가능함) +
    +
    + + +
    + + + + + + + + + +
    +      +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_input.jsp new file mode 100644 index 00000000..19f39187 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_input.jsp @@ -0,0 +1,229 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + +
    +

    게시판 생성

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + required + +
    +
    + + required + + +
    +
    + + required + + + + + +
    +
    + + required + + + + + +
    +
    + + required + + :   + : +
    +
    + + required + + :   + : +
    +
    + + + + + 1개 + 2개 + 3개 + +
    +
    + + required + + + +   + 새창 +
    +
    + + + 댓글 + 만족도조사 + +
    +
    + + +
    + + + + + + + +
    + +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_list.jsp new file mode 100644 index 00000000..3d3de29c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/create/backup/XitBbsCreateMng_list.jsp @@ -0,0 +1,162 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + + +
    +

    게시판정보

    +
    + + + +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    • + + +
    • +
    +
      +
    • +
      + search조회 + + " onclick="fn_egov_select_brdMstr('1'); return false;" id="invisible" class="invisible" /> +
      +
    • +
    +
    +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자목록관리
    번호게시판명게시판유형게시판속성생성일사용여부
    + + + + + + + + + + + +
    +
    + +
    +
      + +
    +
    +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_choice_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_choice_popup.jsp new file mode 100644 index 00000000..fd3de00c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_choice_popup.jsp @@ -0,0 +1,349 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + + + +
    + + + + + +

    템플릿 목록

    + + + + + + + + + + +
    + + + + + + + + + + +
    + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_edit.jsp new file mode 100644 index 00000000..a43d63ca --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_edit.jsp @@ -0,0 +1,263 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + +
    + + + + + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_input.jsp new file mode 100644 index 00000000..c9e1e208 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_input.jsp @@ -0,0 +1,258 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + +
    + + + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_list.jsp new file mode 100644 index 00000000..cb269b30 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/XitBbsTmplateMng_list.jsp @@ -0,0 +1,293 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_choice_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_choice_popup.jsp new file mode 100644 index 00000000..2b320710 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_choice_popup.jsp @@ -0,0 +1,162 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + + + + + + +
    + + + + +
    +

    템플릿 목록

    +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자목록관리
    번호템플릿명템플릿구분템플릿경로사용여부등록일자선택
    + + + + + ','')" /> + +
    +
    + + +
    +
      + +
    +
    + + + + + + + +
    +
    + + + + +
    닫기
    +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_edit.jsp new file mode 100644 index 00000000..1359afcb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_edit.jsp @@ -0,0 +1,160 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    템플릿 정보수정

    +
    + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + required + +     +
    +
    + + required + + +
    +
    + + required + + Y : checked="checked" >  + N : checked="checked"> +
    +
    + + + +
    + + + + + + + + + +
    + + + + + +
    +
    + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_input.jsp new file mode 100644 index 00000000..dba959d8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_input.jsp @@ -0,0 +1,161 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    템플릿 등록

    +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    + + required + + +
    +
    + + required + +     +
    +
    + + required + + +
    +
    + + required + + Y :   + N : +
    +
    +
    + + + +
    + + + + + + + + + +
    + 저장 + + 목록 + + 미리보기 +
    +
    + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_list.jsp new file mode 100644 index 00000000..4817a60d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/tmplate/backup/XitBbsTmplateMng_list.jsp @@ -0,0 +1,134 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + +
    +

    개시판템플릿목록

    +
    " method="post"> + + "/> + + +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    게시판 템플릿 목록
    번호템플릿명템플릿구분템플릿경로사용여부등록일자
    + + + + + + +
    +
    + +
    +
      + +
    +
    + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_edit.jsp new file mode 100644 index 00000000..1ca4f264 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_edit.jsp @@ -0,0 +1,240 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + +
    + + + + + + + + +
    + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_input.jsp new file mode 100644 index 00000000..96ed0120 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_input.jsp @@ -0,0 +1,266 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + +
    + + + + + +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_list.jsp new file mode 100644 index 00000000..0f100f2b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/XitBbsUseMng_list.jsp @@ -0,0 +1,293 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_edit.jsp new file mode 100644 index 00000000..bf6a1e82 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_edit.jsp @@ -0,0 +1,118 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
    +

    게시판 사용정보 수정

    +
    +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    게시판명 + +
    커뮤니티/ 동호회명 + + + + + + + + (시스템 활용) + +
    + + required + + : checked="checked">  + : checked="checked"> +
    +
    제공 URL + " target="_blank"> + + +
    +
    + + +
    + + + + + + + +
    + 저장 + + 목록 +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_input.jsp new file mode 100644 index 00000000..ff9347fa --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_input.jsp @@ -0,0 +1,170 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    게시판 사용등록

    +
    + +
    + + + +
    + + + + + + + + + +
    required + + + +  새창 +
    +
    + + required + + + + +
    +
    +
    + + + +
    + + + + + + + +
    + +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_list2.jsp new file mode 100644 index 00000000..03400000 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/bbs/use/backup/XitBbsUseMng_list2.jsp @@ -0,0 +1,158 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + +
    +

    게시판 사용정보 조회

    +
    +
    + + + + +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자목록관리
    번호게시판명사용 커뮤니티 명사용 동호회 명등록일시사용여부
    + + + "> + "> + + + + + + + + +
    +
    + +
    +
      + +
    +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_edit.jsp new file mode 100644 index 00000000..e49d59c0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_edit.jsp @@ -0,0 +1,230 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_input.jsp new file mode 100644 index 00000000..3f6c664a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_input.jsp @@ -0,0 +1,203 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_list.jsp new file mode 100644 index 00000000..6f103d6c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/XitClCodeMng_list.jsp @@ -0,0 +1,270 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + +<%--
    + + +
    --%> + +
    + + + + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_edit.jsp new file mode 100644 index 00000000..286ac624 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_edit.jsp @@ -0,0 +1,124 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    공통분류코드 수정

    +
    + + + + +
    + + + + + + + + + + + + + + + + + +
    분류코드필수 + ${cmmnClCode.clCode} +
    필수 + + + +
    필수 + + +
    필수 + + + + +
    +
    + + +
    + + + + + + + + + + + +
    + 목록 + + + + +
    +
    + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_input.jsp new file mode 100644 index 00000000..e21a44e3 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_input.jsp @@ -0,0 +1,106 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + +
    +

    공통분류코드 등록

    +
    + + +
    + + + + + + + + + + + + + + + + + +
    필수 + + +
    필수 + + +
    필수 + + +
    필수 + + + + +
    +
    + + +
    + + + + + + + +
    + 목록 + + +
    +
    + + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_list2.jsp new file mode 100644 index 00000000..11175cd0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cl/backup/XitClCodeMng_list2.jsp @@ -0,0 +1,157 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + +
    + + + + +
    +

    공통분류코드 목록

    + +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    공통분류코드 목록
    순번분류코드분류코드명사용여부
    ${resultInfo.clCode}${resultInfo.clCodeNm}사용미사용
    + +
    +
    + + +
    +
      + +
    +
    + + + +
    + +
    + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_edit.jsp new file mode 100644 index 00000000..a873dc43 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_edit.jsp @@ -0,0 +1,267 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_input.jsp new file mode 100644 index 00000000..8bc8b739 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_input.jsp @@ -0,0 +1,267 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_list.jsp new file mode 100644 index 00000000..b53d0dd9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/XitCmmnCodeMng_list.jsp @@ -0,0 +1,273 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + +
    + + + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_edit.jsp new file mode 100644 index 00000000..50e01d9e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_edit.jsp @@ -0,0 +1,134 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
    +

    공통코드 수정

    +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    분류코드명필수${cmmnCode.clCodeNm}
    코드ID필수 + ${cmmnCode.codeId} +
    필수 + + +
    필수 + + + +
    필수 + + + + +
    +
    + + +
    + + + + + + + + + + + +
    + 목록 + + 저장 + + +
    +
    + + + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_input.jsp new file mode 100644 index 00000000..2788ab2e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_input.jsp @@ -0,0 +1,123 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + +
    +

    공통코드 등록

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    필수 + +
    필수 + + +
    필수 + + +
    필수 + + +
    필수 + + + + +
    +
    + + +
    + + + + + + + +
    + 목록 + + 저장 +
    +
    + + + + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_list2.jsp new file mode 100644 index 00000000..7d0b2ae8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/cmmn/backup/XitCmmnCodeMng_list2.jsp @@ -0,0 +1,167 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + + + +
    + + + + + + +
    +

    공통코드 목록

    + +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    공통코드 목록
    순번분류명코드ID코드ID명사용여부
    ${resultInfo.clCodeNm}${resultInfo.codeId}${resultInfo.codeIdNm}사용미사용
    + +
    +
    + + +
    +
      + +
    +
    + + + +
    + +
    + + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_edit.jsp new file mode 100644 index 00000000..e50469c8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_edit.jsp @@ -0,0 +1,289 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_input.jsp new file mode 100644 index 00000000..f4b9e330 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_input.jsp @@ -0,0 +1,296 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_list.jsp new file mode 100644 index 00000000..2c37461d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/XitDetailCodeMng_list.jsp @@ -0,0 +1,295 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + +
    + + + + + + + + + +
    + + 등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_edit.jsp new file mode 100644 index 00000000..be3cb454 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_edit.jsp @@ -0,0 +1,130 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    공통상세코드 수정

    +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    코드ID필수 + ${cmmnDetailCode.codeIdNm} +
    코드필수
    필수 + + +
    필수 + + +
    필수 + + + + +
    +
    + + +
    + + + + + + + + + + + +
    + 목록 + + 저장 + + 삭제 +
    +
    + + + + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_input.jsp new file mode 100644 index 00000000..3fed8948 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_input.jsp @@ -0,0 +1,135 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + +
    +

    공통상세코드 등록

    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    필수 + + +
    필수 + + +
    필수 + + +
    필수 + + +
    필수 + + + + +
    +
    + + +
    + + + + + + + +
    + 목록 + + 저장 +
    +
    + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_list2.jsp new file mode 100644 index 00000000..652c8fae --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/detail/backup/XitDetailCodeMng_list2.jsp @@ -0,0 +1,166 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + +
    + + + + + +
    +

    공통상세코드 목록

    + + +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    공통상세코드 목록
    순번코드ID코드코드명사용여부
    ${resultInfo.codeId}${resultInfo.code}${resultInfo.codeNm}사용미사용
    + +
    +
    + + +
    +
      + +
    +
    + + + +
    + +
    + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_edit.jsp new file mode 100644 index 00000000..cf7acee5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_edit.jsp @@ -0,0 +1,263 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_input.jsp new file mode 100644 index 00000000..33ed92c6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_input.jsp @@ -0,0 +1,260 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_inputs.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_inputs.jsp new file mode 100644 index 00000000..66a44015 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_inputs.jsp @@ -0,0 +1,231 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + +
    + + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_list.jsp new file mode 100644 index 00000000..46cffcf9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/XitZipCodeMng_list.jsp @@ -0,0 +1,300 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + +
    + + 등록 + 엑셀등록 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_edit.jsp new file mode 100644 index 00000000..0ecfdeba --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_edit.jsp @@ -0,0 +1,130 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
    +

    우편번호 수정

    +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    우편번호필수 + - +
    시도명필수 + +
    시군구명필수 + +
    읍면동명필수 + +
    + +
    + +
    +
    + + +
    + + + + + + + + + +
    + 목록 + + + + +
    +
    + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_input.jsp new file mode 100644 index 00000000..d523b958 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_input.jsp @@ -0,0 +1,118 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + +
    +

    우편번호 등록

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    필수 + +  * 우편번호의 '-'를 제외하고 입력하시오. +
    필수 + + +
    필수 + + +
    필수 + + +
    + + +
    + + +
    +
    + + +
    + + + + + + + +
    + 목록 + + +
    +
    + + + + + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_inputs.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_inputs.jsp new file mode 100644 index 00000000..e5c04294 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_inputs.jsp @@ -0,0 +1,87 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + +
    +

    우편번호 엑셀파일 등록

    +
    +
    + +
    + + + + + +
    필수
    +
    + + +
    + + + + + + + +
    + 목록 + + +
    +
    + + + + + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_list2.jsp new file mode 100644 index 00000000..ad1e2d10 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/code/zip/backup/XitZipCodeMng_list2.jsp @@ -0,0 +1,165 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + +
    + + + + +
    +

    우편번호 목록

    + +
    조건정보 영역 +
    +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    공통코드 목록
    순번우편번호주소
    -${resultInfo.ctprvnNm} ${resultInfo.signguNm} ${resultInfo.emdNm} ${resultInfo.liBuldNm} ${resultInfo.lnbrDongHo}
    + +
    +
    + + +
    +
      + +
    +
    + + + +
    + +
    + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/XitConectionLogMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/XitConectionLogMng_list.jsp new file mode 100644 index 00000000..74d1a93b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/XitConectionLogMng_list.jsp @@ -0,0 +1,280 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + +
    + + + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/XitConectionLogMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/XitConectionLogMng_view.jsp new file mode 100644 index 00000000..57efae24 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/XitConectionLogMng_view.jsp @@ -0,0 +1,84 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> + +
    + + + + + + + +
    + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/backup/XitConectionLogMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/backup/XitConectionLogMng_list2.jsp new file mode 100644 index 00000000..ff2dbb68 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/backup/XitConectionLogMng_list2.jsp @@ -0,0 +1,159 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + +
    + + + +
    +

    로그인 로그조회

    + + +
    조건정보 영역 +
    +
      +
    • 발생일자 + + + 달력창팝업버튼이미지 + ~ + + + 달력창팝업버튼이미지 +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    로그인 로그조회
    번호로그ID발생일자로그유형상세보기
    + '); return false;" + style="selector-dummy:expression(this.hideFocus=false);">상세보기 +
    +
    + + +
    +
      + +
    +
    + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/backup/XitConectionLogMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/backup/XitConectionLogMng_view.jsp new file mode 100644 index 00000000..73810746 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/log/cnctn/backup/XitConectionLogMng_view.jsp @@ -0,0 +1,62 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + +

    로그인 로그 정보

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    로그ID   + +
    발생일자   + +
    로그유형   + +
    요청자   + +
    요청자IP   + +
    +
    + + +
    + + + + + +
    + 닫기 +
    +
    + + + + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/XitMenuCreateMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/XitMenuCreateMng_input.jsp new file mode 100644 index 00000000..439a8314 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/XitMenuCreateMng_input.jsp @@ -0,0 +1,175 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon/"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + + + + + + + + + + +
    + + + + +
    + +
    +

    메뉴생성

    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + + +
    + + + + + + + + + +
    메뉴일괄등록
      + +
    + +
    +
    +
    +
    + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/XitMenuCreateMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/XitMenuCreateMng_list.jsp new file mode 100644 index 00000000..b079cc58 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/XitMenuCreateMng_list.jsp @@ -0,0 +1,248 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon/"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + +
    + + + + + + + + + + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/backup/XitMenuCreateMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/backup/XitMenuCreateMng_list2.jsp new file mode 100644 index 00000000..254106e2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/create/backup/XitMenuCreateMng_list2.jsp @@ -0,0 +1,168 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon/"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + + + + + + + + + +
    + + + + + +
    +

    메뉴생성관리

    + + + + + +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    메뉴생성관리 목록
    권한코드권한명권한 설명메뉴생성여부메뉴생성
    + Y + N + + '" onclick="selectMenuCreat(''); return false;">메뉴생성 +
    +
    + + +
    +
      + +
    +
    + + + +
    + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_edit.jsp new file mode 100644 index 00000000..82e70584 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_edit.jsp @@ -0,0 +1,232 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_input.jsp new file mode 100644 index 00000000..4839b53a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_input.jsp @@ -0,0 +1,246 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_inputs.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_inputs.jsp new file mode 100644 index 00000000..0ea2a6ae --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_inputs.jsp @@ -0,0 +1,107 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_list.jsp new file mode 100644 index 00000000..1acf9da4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/XitMenuListMng_list.jsp @@ -0,0 +1,303 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon"; + String imagePath_button = "/images/egovframework/sym/mpm/button"; +%> + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_edit.jsp new file mode 100644 index 00000000..89102942 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_edit.jsp @@ -0,0 +1,177 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    메뉴상세조회및 수정

    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    필수 +   + + + + 필수 +   + + +
    필수  + + + 필수  + + +
    필수 +   + + + + (프로그램파일명 검색) +
      + + +   + + +
      + + +
    +
    + + +
    + + + + + + + + + +
    + 목록 + + + + +
    +
    + + + + + + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_input.jsp new file mode 100644 index 00000000..b3c51294 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_input.jsp @@ -0,0 +1,169 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + +
    +

    메뉴 등록

    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    필수 +   + + + 필수 +   + + +
    필수 +   + + + 필수 +   + + +
    필수 +   + + + + + 프로그램파일명 검색(프로그램파일명 검색) +
    +   + + + +   + + +
      + + +
    +
    + + +
    + + + + + + + +
    + 목록 + + +
    +
    + + + + + + + +
    + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_inputs.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_inputs.jsp new file mode 100644 index 00000000..dc953514 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_inputs.jsp @@ -0,0 +1,118 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + + + + + + + + + + +
    +

    메뉴일괄등록

    +
    +
    + + +
    + + + + + +
    + 필수 + +
    +
    + + +
    + + + + + + +
    + 목록 + + 일괄등록 +
    +
    + + + + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_list2.jsp new file mode 100644 index 00000000..f69a3927 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/list/backup/XitMenuListMng_list2.jsp @@ -0,0 +1,216 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon"; + String imagePath_button = "/images/egovframework/sym/mpm/button"; +%> + + + + + + +
    + + + + +
    +

    메뉴관리리스트

    + + + + +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    메뉴관리 목록
    메뉴번호메뉴명프로그램파일명메뉴설명상위메뉴번호
    + + + + '); return false;"> +
    +
    + + +
    +
      + +
    +
    + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/mngProgramMgtFrom.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/mngProgramMgtFrom.jsp new file mode 100644 index 00000000..985cac1b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/mngProgramMgtFrom.jsp @@ -0,0 +1,310 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
    + + + + + + + + + + + + + + +
    + + 등록 + 삭제 + +
    + +
    +
    +
    + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/ProgramMng.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/ProgramMng.jsp new file mode 100644 index 00000000..c726272a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/ProgramMng.jsp @@ -0,0 +1,310 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
    + + + + + + + + + + + + + + +
    + + 등록 + 삭제 + +
    + +
    +
    +
    + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng.jsp new file mode 100644 index 00000000..e70c3ba8 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng.jsp @@ -0,0 +1,310 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + +
    + + + + + + + + + + + + + + +
    + + 등록 + 삭제 + +
    + +
    +
    +
    + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_FileNmSearch_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_FileNmSearch_popup.jsp new file mode 100644 index 00000000..3b5990bc --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_FileNmSearch_popup.jsp @@ -0,0 +1,126 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon/"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + + + + + + +
    + + + +
    +
    프로그램파일명 검색
    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    프로그램파일명 검색
    프로그램파일명프로그램명
    + '); return false;"> +
    +
    + + +
    +
      + +
    +
    + + +
    + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_edit.jsp new file mode 100644 index 00000000..069fadf1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_edit.jsp @@ -0,0 +1,186 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_input.jsp new file mode 100644 index 00000000..9814c638 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/XitProgramMng_input.jsp @@ -0,0 +1,215 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_FileNmSearch_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_FileNmSearch_popup.jsp new file mode 100644 index 00000000..ea476a64 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_FileNmSearch_popup.jsp @@ -0,0 +1,124 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<% + /* Image Path 설정 */ + String imagePath_icon = "/images/egovframework/sym/mpm/icon/"; + String imagePath_button = "/images/egovframework/sym/mpm/button/"; +%> + + + + + + + + +
    + + + +
    +
    프로그램파일명 검색
    +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    + +
    +
    +
    + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    프로그램파일명 검색
    프로그램파일명프로그램명
    + '); return false;"> +
    +
    + + +
    +
      + +
    +
    + + +
    + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_edit.jsp new file mode 100644 index 00000000..9f78ce62 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_edit.jsp @@ -0,0 +1,149 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
    +

    프로그램목록 상세조회 /수정

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + 필수 + " > + + +
    + 필수 + + +
    + 필수 + + +
    + 필수 + + +
    + + +
    +
    + + + + + + + + +
    + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_input.jsp new file mode 100644 index 00000000..d8fc4bfb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/menu/program/backup/XitProgramMng_input.jsp @@ -0,0 +1,136 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + 필수 +   + + +
    + 필수 +   + +
    + 필수 +   + +
    + 필수 +   + +
      + + +
    +
    + + +
    + + + + + + + +
    + + + +
    +
    + + + + + +
    + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_edit.jsp new file mode 100644 index 00000000..0de5680e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_edit.jsp @@ -0,0 +1,327 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_input.jsp new file mode 100644 index 00000000..a153b660 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_input.jsp @@ -0,0 +1,283 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_list.jsp new file mode 100644 index 00000000..77d45426 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/XitLoginPolicyMng_list.jsp @@ -0,0 +1,294 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/backup/XitLoginPolicyMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/backup/XitLoginPolicyMng_list2.jsp new file mode 100644 index 00000000..6889331a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/policy/login/backup/XitLoginPolicyMng_list2.jsp @@ -0,0 +1,251 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + +
    +

    로그인정책 관리

    +
    + + + 1"> + +
    조건정보 영역 +
    +
      +
    • + + " size="25" title="검색" onkeypress="press();" > +
    • +
    + +
    +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    로그인정책 관리
    사용자 ID사용자 명IP 정보제한여부
    +
    + "> + + + "> + '); return false;" value="등록" class="invisible"> + '); return false;" > + + +
    +
    YN
    +
    + + + +
    +
      + +
    +
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/stats/cnctn/XitConectionStatsMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/stats/cnctn/XitConectionStatsMng_list.jsp new file mode 100644 index 00000000..4e7c1423 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/stats/cnctn/XitConectionStatsMng_list.jsp @@ -0,0 +1,347 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + +
    + + + + + + + + + + + + + + + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/stats/cnctn/backup/XitConectionStatsMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/stats/cnctn/backup/XitConectionStatsMng_list2.jsp new file mode 100644 index 00000000..03b90943 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/stats/cnctn/backup/XitConectionStatsMng_list2.jsp @@ -0,0 +1,267 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + + + + + + + +
    + + + + + + +
    +

    접속 통계 관리

    +
    조건정보 영역 +
    +
      +
    • + + + + + + 달력(새창) +  ~  + 달력(새창) +
    • +
    • + + +
    • +
    • + + + + +
    • +
    + +
    +
    +
    + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    서비스별 접속 통계
    일자메소드명생성(로그인)수정(미사용)조회(미사용)삭제(미사용)출력(미사용)에러(미사용)
    ${resultInfo.statsDate} ${resultInfo.conectMethod}${resultInfo.creatCo}${resultInfo.updtCo}${resultInfo.inqireCo}${resultInfo.deleteCo}${resultInfo.outptCo}${resultInfo.errorCo}
    조회된 접속 통계가 없습니다.
    +
    +
    + + + +
    + + 1. 그래프 (단위, 횟수) + + + + + + + +
    ${resultInfo.statsDate} +  (${resultInfo.statsCo} 회) +
    + + + +
    + 2. 텍스트 (단위, 횟수) + + + + + + + + + + + +
    +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_edit.jsp new file mode 100644 index 00000000..fe896128 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_edit.jsp @@ -0,0 +1,167 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_input.jsp new file mode 100644 index 00000000..25bd44c9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_input.jsp @@ -0,0 +1,141 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_list.jsp new file mode 100644 index 00000000..947b0349 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/XitUserAbsntMng_list.jsp @@ -0,0 +1,402 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
    + + + + + + + + +
    +
    + + + + <%--
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자부재 관리
    사용자 ID사용자 명부재여부등록여부등록일시
    +
    + "> + "> + + + "> + ', ''); return false;" value="등록"> +
    +
    + + + + + +
    검색된 값이 없습니다.
    +
    + + +
    +
      + +
    +
    +
    + --%> + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_edit.jsp new file mode 100644 index 00000000..bde8b618 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_edit.jsp @@ -0,0 +1,148 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + +
    +

    사용자부재 수정

    +
    + + +
    + + + + + + + + + + + + + + + + + +
    사용자ID + +
    사용자명 + +
    부재여부 + + + +
    등록일시 + + " maxLength="50" size="20" class="readOnlyClass" readonly>
    +
    + + + + + + + + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_input.jsp new file mode 100644 index 00000000..819f1f8f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_input.jsp @@ -0,0 +1,154 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_input2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_input2.jsp new file mode 100644 index 00000000..19a07297 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_input2.jsp @@ -0,0 +1,125 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + + + + + + + + + + + + +
    +

    사용자부재 등록

    +
    + + +
    + + + + + + + + + + + + + + + + + +
    사용자ID + +
    사용자명 + +
    부재여부 + + + +
    등록일시 + +
    +
    + + + + + + + + + + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_list2.jsp new file mode 100644 index 00000000..82412b31 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/absnt/backup/XitUserAbsntMng_list2.jsp @@ -0,0 +1,289 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + + + + + +
    + + + 1"> + + + + +
    +

    사용자부재 관리

    +
    + 조건정보 영역 +
    +
      +
    • + + " size="25" title="검색" onkeypress="press();" > +
    • +
    • + + +
    • +
    + +
    +
    +
    + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자부재 관리
    사용자 ID사용자 명부재여부등록여부등록일시
    +
    + "> + "> + + + "> + ', ''); return false;" value="등록"> +
    +
    + + + + + +
    검색된 값이 없습니다.
    +
    + + +
    +
      + +
    +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/opt/XitUserEtcOptMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/opt/XitUserEtcOptMng_list.jsp new file mode 100644 index 00000000..2f7615cf --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/opt/XitUserEtcOptMng_list.jsp @@ -0,0 +1,404 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
    + + + + + + + + +
    + + 저장 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_edit.jsp new file mode 100644 index 00000000..c1af2270 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_edit.jsp @@ -0,0 +1,472 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_editPwd_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_editPwd_popup.jsp new file mode 100644 index 00000000..b5225c62 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_editPwd_popup.jsp @@ -0,0 +1,129 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + +
    + + + + + + + + + + + + + + + + +
    + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_input.jsp new file mode 100644 index 00000000..da9730cf --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_input.jsp @@ -0,0 +1,464 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_list.jsp new file mode 100644 index 00000000..ae6c1378 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_list.jsp @@ -0,0 +1,397 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
    + + + + + + + + +
    + + 등록 + 삭제 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_view.jsp new file mode 100644 index 00000000..a2a496fd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitEntUserRegMng_view.jsp @@ -0,0 +1,364 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_edit.jsp new file mode 100644 index 00000000..28951764 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_edit.jsp @@ -0,0 +1,428 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_editPwd_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_editPwd_popup.jsp new file mode 100644 index 00000000..d7a1cfe7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_editPwd_popup.jsp @@ -0,0 +1,128 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + +
    + + + + + + + + + + + + + + + + +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_input.jsp new file mode 100644 index 00000000..16d5d6a0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_input.jsp @@ -0,0 +1,423 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_list.jsp new file mode 100644 index 00000000..26f575bd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_list.jsp @@ -0,0 +1,390 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
    + + + + + + + + +
    + + 등록 + 삭제 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_view.jsp new file mode 100644 index 00000000..874da919 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitGnrUserRegMng_view.jsp @@ -0,0 +1,318 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_edit.jsp new file mode 100644 index 00000000..6cfb61f3 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_edit.jsp @@ -0,0 +1,432 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_editPwd_popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_editPwd_popup.jsp new file mode 100644 index 00000000..68fe0ac5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_editPwd_popup.jsp @@ -0,0 +1,101 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + +
    + + + + + + + + + + + + + + + + +
    + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_input.jsp new file mode 100644 index 00000000..e91da606 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_input.jsp @@ -0,0 +1,437 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="ufn" uri="/WEB-INF/tlds/egovfn.tld"%> +<%@ taglib prefix="orderby" uri="/WEB-INF/tlds/orderby.tld" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_list.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_list.jsp new file mode 100644 index 00000000..fc944d01 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_list.jsp @@ -0,0 +1,390 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + +
    + + + + + + + + +
    + + 등록 + 삭제 + +
    + + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_view.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_view.jsp new file mode 100644 index 00000000..535f18e4 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/XitUserRegMng_view.jsp @@ -0,0 +1,327 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_edit.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_edit.jsp new file mode 100644 index 00000000..3472ea34 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_edit.jsp @@ -0,0 +1,320 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + + + + + +
    +

    업무사용자 정보수정

    +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자아이디 + 필수 + + + + + 핸드폰번호   + + +
    비밀번호힌트 + 필수 + + + + + + + 비밀번호정답 + 필수 + + + +
    이름 + 필수 + + + + 소속기관   + + + + + +
    부서 + 필수 + + + + + + + 직위명   + + +
    이메일주소 + + + + 집전화지역번호 + + + - + - + + + +
    사무실전화번호 + + + 팩스번호 + + +
    주소 + + + + + + + (우편번호 검색) + + + 상세주소   + + +
    사용자상태코드 + 필수 + + + + + + + 권한그룹 + 필수 + + + + + + +
    업무 데이터 권한 + + + + + + + 사용자 관리 권한 + + + + + + +
    전자결재 사용 여부 + + + + + + + 업무 승인 권한 여부 + + + + + + +
    +
    + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    +
    + + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_editPwd.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_editPwd.jsp new file mode 100644 index 00000000..93213913 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_editPwd.jsp @@ -0,0 +1,122 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + +
    +

    업무사용자 암호변경

    +
    + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    사용자아이디 + + + +
    기존 비밀번호
    비밀번호
    비밀번호확인
    +
    + + +
    + + + + + + + + + +<%-- --%> + + + + + + + + +
    + + + 이전화면 + + +
    +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_input.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_input.jsp new file mode 100644 index 00000000..13c03826 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_input.jsp @@ -0,0 +1,339 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + + + + + + + + + + + + + + +
    +

    업무사용자 등록

    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자아이디 + 필수 + + + + + (중복아이디 검색) + + + 핸드폰번호   + + +
    비밀번호 + 필수 + + + + 비밀번호확인 + 필수 + + +
    비밀번호힌트 + 필수 + + + + + + + 비밀번호정답 + 필수 + + + +
    이름 + 필수 + + + + 소속기관 + + + + + +
    조직코드 + 필수 + + + + + + + 직위명 + + +
    이메일주소 + + + 집전화지역번호 + + + - + - + + + +
    사무실전화번호 + + + 팩스번호 + + +
    주소 + + + + + (우편번호 검색) + + + + 상세주소 + + +
    사용자상태코드 + 필수 + + + + + + + 그룹아이디 + 필수 + + + + + + +
    업무 데이터 권한 + + + + + + + 사용자 관리 권한 + + + + + + +
    전자결재 사용 여부 + + + + + + + 업무 승인 권한 여부 + + + + + + +
    +
    + + +
    + + + + + + + + + + +
    + + + + + +
    +
    + + + + + + + 1"/> + +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_list2.jsp b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_list2.jsp new file mode 100644 index 00000000..03355fe9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/biz/mng/usr/reg/backup/XitUserRegMng_list2.jsp @@ -0,0 +1,217 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + + + + + + + +
    + + + + + +
    +

    사용자목록

    + + + + +
    조건정보 영역 +
    +
      +
    • + + +
    • +
    • + " /> +
    • +
    + +
    +
    +
    + + +
    사용자수 :
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    사용자목록
    No.아이디사용자이름사용자이메일전화번호등록일가입상태
    + " type="checkbox"/> + + + " onclick="javascript:fnSelectUser(':'); return false;"> + )- + + + +
    +
    + +
    +
      + +
    +
    + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/error/error.jsp b/src/main/webapp/WEB-INF/jsp/framework/error/error.jsp new file mode 100644 index 00000000..281ae1c5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/error/error.jsp @@ -0,0 +1,27 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + + +ERROR + + + + + or other required elements. + thead: [ 1, "
    + 에러 + + + + + +
    + + + +
    오류발생 알림화면(허용되지 않는 요청을 하셨습니다)
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/error/error_ajax.jsp b/src/main/webapp/WEB-INF/jsp/framework/error/error_ajax.jsp new file mode 100644 index 00000000..2c6559f2 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/error/error_ajax.jsp @@ -0,0 +1,4 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +서비스 이용에 불편을 드려 죄송합니다. +담당자에게 문의하시기 바랍니다. +실패사유: ${exception.message } diff --git a/src/main/webapp/WEB-INF/jsp/framework/error/error_backup.jsp b/src/main/webapp/WEB-INF/jsp/framework/error/error_backup.jsp new file mode 100644 index 00000000..65923bb7 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/error/error_backup.jsp @@ -0,0 +1,26 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +알림 + + + + +
    + + + + +
    +
    + 에러 +

    오류가 발생했습니다!

    + + Fail Info: + +

    + + 이전 페이지 + +

    +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/footer.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/footer.jsp new file mode 100644 index 00000000..1513a309 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/footer.jsp @@ -0,0 +1,7 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +Copyright © 2002.02.02. XIT All rights reserved. + + 시스템문의 + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/header.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/header.jsp new file mode 100644 index 00000000..b7304d59 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/header.jsp @@ -0,0 +1,399 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%String uri = request.getRequestURI();%> + + + + +
    + +
    +
    + +
    + + +
    + <%--
    " />
    --%> + +
    +
    + +
    +
      +
    • " />
    • +
    + +
    +
    +
    + +
    + + +
    + + + + + + +<%--
    --%> +
    +
    +
    + +
    + + +<%-- 사이드메뉴 펼치기 --%> + 사이드메뉴 펼치기 +
    +
    + + + +
    +

    전체메뉴보기 전체메뉴 닫기

    +
    + +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/layout-tiles-base.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/layout-tiles-base.jsp new file mode 100644 index 00000000..a9a83cf0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/layout-tiles-base.jsp @@ -0,0 +1,77 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + +<%@include file="/WEB-INF/jsp/framework/XitIncludeBase.jsp" %> + + + + + + FIMS + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + +<%-- --%> + +
    +

    ${urlInfoMap.menuName}

    + + <%@include file="/WEB-INF/jsp/framework/XitIncludeMenuPath.jsp" %> +
    +
    +
    + +
    +
    +
    + + + + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/left.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/left.jsp new file mode 100644 index 00000000..c0bec3d6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/base/left.jsp @@ -0,0 +1,68 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + +
    +
    +
    + +
    + + 사이드메뉴 펼치기 +
    +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp new file mode 100644 index 00000000..68002628 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp @@ -0,0 +1,134 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + +<%-- --%> + + + + + + + + + + + + + + + + +<%-- --%> + + + + + + + + + + + + + + + + <%-- --%> + + + + + + +<%-- --%> +<%-- --%> + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeMenuPath.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeMenuPath.jsp new file mode 100644 index 00000000..9cb14d3e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeMenuPath.jsp @@ -0,0 +1,16 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + HOME> + + + + + + + + > + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/footer.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/footer.jsp new file mode 100644 index 00000000..787c3a69 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/footer.jsp @@ -0,0 +1,11 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/header.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/header.jsp new file mode 100644 index 00000000..df5b84b6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/header.jsp @@ -0,0 +1,156 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%String uri = request.getRequestURI();%> + + + + + + + + + + +
    +
    + + + + + + + + +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz-main.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz-main.jsp new file mode 100644 index 00000000..2a65a35a --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz-main.jsp @@ -0,0 +1,55 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + + + + + + + + <%@include file="/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp" %> + + + + + + + +
    +
    + + +
    +
    +
    + +
    +
    +
    + +
    + + + + +
    + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz-pop.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz-pop.jsp new file mode 100644 index 00000000..b25dbd3c --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz-pop.jsp @@ -0,0 +1,38 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + + + + + + + <%@include file="/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp" %> + + + + + + +
    +<%--
    + +

    ${urlInfoMap.menuName}

    +
    --%> + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz.jsp new file mode 100644 index 00000000..95abc0c5 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz.jsp @@ -0,0 +1,61 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + + + + + + + + <%@include file="/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp" %> + + + + + + + +
    +
    + + +
    +
    +
    +

    <%@include file="/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeMenuPath.jsp" %>

    +
    + + <%--

    ${urlInfoMap.menuName}

    --%> +

    ${urlInfoMap.menuName}

    +
    + +
    +
    +
    + +
    + + + + +
    + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz_back.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz_back.jsp new file mode 100644 index 00000000..ecd72e38 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/layout-tiles-biz_back.jsp @@ -0,0 +1,80 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + +<%@include file="/WEB-INF/jsp/framework/layouts/tiles/biz/cmmn/BizIncludeBase.jsp" %> + + + + + + + + + + + + +<%-- --%> + + + + + + + + + + + + + + + +
    + + + + + + +
    + +<%-- --%> + + +
    + +<%--

    ${urlInfoMap.menuName}

    --%> +

    ${urlInfoMap.menuName}

    + + <%@include file="/WEB-INF/jsp/framework/XitIncludeMenuPath.jsp" %> +
    +
    +
    + +
    +
    +
    + + + + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/left.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/left.jsp new file mode 100644 index 00000000..c0bec3d6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/biz/left.jsp @@ -0,0 +1,68 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + +
    +
    +
    + +
    + + 사이드메뉴 펼치기 +
    +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/footer.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/footer.jsp new file mode 100644 index 00000000..c424c8e9 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/footer.jsp @@ -0,0 +1,4 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/header.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/header.jsp new file mode 100644 index 00000000..5f952349 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/header.jsp @@ -0,0 +1,19 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + +
    +

    템플릿 샘플 내부업무 사이트

    +
    +
    XIT 프레임워크 샘플 내부업무 사이트 +메뉴구성 설명 +
    + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/layout-tiles-egov.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/layout-tiles-egov.jsp new file mode 100644 index 00000000..cdc22b41 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/layout-tiles-egov.jsp @@ -0,0 +1,49 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + +<%@include file="/WEB-INF/jsp/framework/XitIncludeBase.jsp" %> + + + + + + FIMS> + +<%-- --%> + + + + + + +
    + + + +
    +
    +
    + +
    +
    + +
    +
    + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/left.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/left.jsp new file mode 100644 index 00000000..ab0f525d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/egov/left.jsp @@ -0,0 +1,3 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/footer.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/footer.jsp new file mode 100644 index 00000000..1513a309 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/footer.jsp @@ -0,0 +1,7 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + +Copyright © 2002.02.02. XIT All rights reserved. + + 시스템문의 + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/header.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/header.jsp new file mode 100644 index 00000000..9715ef71 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/header.jsp @@ -0,0 +1,287 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%String uri = request.getRequestURI();%> + + + + +
    + +
    +
    + +
    + + +
    +<%--
    " />
    --%> + +
    +
    + +
    +
      +
    • " />
    • +
    + +
    +
    +
    + +
    + + +
    +
    + + + + + + +
    +

    전체메뉴보기 전체메뉴 닫기

    +
    + +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/layout-tiles-main.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/layout-tiles-main.jsp new file mode 100644 index 00000000..6e2ff0f6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/main/layout-tiles-main.jsp @@ -0,0 +1,63 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + +<%@include file="/WEB-INF/jsp/framework/XitIncludeBase.jsp" %> + + + + + + FIMS + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + + + +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/none/layout-tiles-none.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/none/layout-tiles-none.jsp new file mode 100644 index 00000000..14f45d91 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/none/layout-tiles-none.jsp @@ -0,0 +1,4 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/popup/layout-tiles-popup.jsp b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/popup/layout-tiles-popup.jsp new file mode 100644 index 00000000..1eba9624 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/layouts/tiles/popup/layout-tiles-popup.jsp @@ -0,0 +1,63 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> + + +<%@include file="/WEB-INF/jsp/framework/XitIncludeBase.jsp" %> + + + + + + FIMS + + + + + + + + + + + + + +
    +
    + +
    +
    + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/test/TuiGrid.jsp b/src/main/webapp/WEB-INF/jsp/framework/test/TuiGrid.jsp new file mode 100644 index 00000000..d126e88f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/test/TuiGrid.jsp @@ -0,0 +1,107 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + + +
    + + diff --git a/src/main/webapp/WEB-INF/jsp/framework/test/test.jsp b/src/main/webapp/WEB-INF/jsp/framework/test/test.jsp new file mode 100644 index 00000000..d9d80368 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/test/test.jsp @@ -0,0 +1,12 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + +Insert title here + + + Hello World! + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/framework/util/validator.jsp b/src/main/webapp/WEB-INF/jsp/framework/util/validator.jsp new file mode 100644 index 00000000..29253853 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/framework/util/validator.jsp @@ -0,0 +1,3 @@ +<%@ page language="java" contentType="javascript/x-javascript" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/lib/SDBAPI_JAVA_secure_v01080022.jar b/src/main/webapp/WEB-INF/lib/SDBAPI_JAVA_secure_v01080022.jar new file mode 100644 index 00000000..165fb831 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/SDBAPI_JAVA_secure_v01080022.jar differ diff --git a/src/main/webapp/WEB-INF/lib/TransCoord.jar b/src/main/webapp/WEB-INF/lib/TransCoord.jar new file mode 100644 index 00000000..3f376a16 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/TransCoord.jar differ diff --git a/src/main/webapp/WEB-INF/lib/UbiServer.jar b/src/main/webapp/WEB-INF/lib/UbiServer.jar new file mode 100644 index 00000000..396a145e Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/UbiServer.jar differ diff --git a/src/main/webapp/WEB-INF/lib/axis.jar b/src/main/webapp/WEB-INF/lib/axis.jar new file mode 100644 index 00000000..20b09a59 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/axis.jar differ diff --git a/src/main/webapp/WEB-INF/lib/commons-discovery-0.2.jar b/src/main/webapp/WEB-INF/lib/commons-discovery-0.2.jar new file mode 100644 index 00000000..b8855484 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/commons-discovery-0.2.jar differ diff --git a/src/main/webapp/WEB-INF/lib/commons-logging.jar b/src/main/webapp/WEB-INF/lib/commons-logging.jar new file mode 100644 index 00000000..acb44e5c Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/commons-logging.jar differ diff --git a/src/main/webapp/WEB-INF/lib/cos.jar b/src/main/webapp/WEB-INF/lib/cos.jar new file mode 100644 index 00000000..bcb822ab Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/cos.jar differ diff --git a/src/main/webapp/WEB-INF/lib/jaxrpc.jar b/src/main/webapp/WEB-INF/lib/jaxrpc.jar new file mode 100644 index 00000000..a2c13d9a Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/jaxrpc.jar differ diff --git a/src/main/webapp/WEB-INF/lib/json-simple-1.1.1.jar b/src/main/webapp/WEB-INF/lib/json-simple-1.1.1.jar new file mode 100644 index 00000000..66347a6c Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/json-simple-1.1.1.jar differ diff --git a/src/main/webapp/WEB-INF/lib/kisa-seed-1.0.0.jar b/src/main/webapp/WEB-INF/lib/kisa-seed-1.0.0.jar new file mode 100644 index 00000000..33212c5b Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/kisa-seed-1.0.0.jar differ diff --git a/src/main/webapp/WEB-INF/lib/ojdbc8.jar b/src/main/webapp/WEB-INF/lib/ojdbc8.jar new file mode 100644 index 00000000..bf412434 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/ojdbc8.jar differ diff --git a/src/main/webapp/WEB-INF/lib/saaj.jar b/src/main/webapp/WEB-INF/lib/saaj.jar new file mode 100644 index 00000000..4ea696e7 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/saaj.jar differ diff --git a/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1.jar b/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1.jar new file mode 100644 index 00000000..9bba7cbe Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1.jar differ diff --git a/src/main/webapp/WEB-INF/lib/ubiserver.xml b/src/main/webapp/WEB-INF/lib/ubiserver.xml new file mode 100644 index 00000000..14be0553 --- /dev/null +++ b/src/main/webapp/WEB-INF/lib/ubiserver.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/lib/wsdl4j.jar b/src/main/webapp/WEB-INF/lib/wsdl4j.jar new file mode 100644 index 00000000..47cd445a Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/wsdl4j.jar differ diff --git a/src/main/webapp/WEB-INF/tiles/layout-tiles-defs.xml b/src/main/webapp/WEB-INF/tiles/layout-tiles-defs.xml new file mode 100644 index 00000000..c45843ca --- /dev/null +++ b/src/main/webapp/WEB-INF/tiles/layout-tiles-defs.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/tlds/CreateCodeTag.tld b/src/main/webapp/WEB-INF/tlds/CreateCodeTag.tld new file mode 100644 index 00000000..b1bc3486 --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/CreateCodeTag.tld @@ -0,0 +1,76 @@ + + + + + 1.2 + cct + + 코드관리 코드 리스트 태그(select, checkbox, radio) 만들기 + codeTag + egovframework.itgcms.util.CreateCodeTag + empty + + + pcode + true + true + + + tagType + false + true + + + tagName + true + true + + + selectedValue + false + true + + + tagTitle + false + true + + + className + false + true + + + useNullOpt + false + true + + + + 코드관리 코드 이름 가져오기 + getCodeName + egovframework.itgcms.util.GetCode + empty + + + code + true + true + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tlds/CustomTagSelectCodeList.tld b/src/main/webapp/WEB-INF/tlds/CustomTagSelectCodeList.tld new file mode 100644 index 00000000..7521f9e3 --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/CustomTagSelectCodeList.tld @@ -0,0 +1,50 @@ + + + + + 1.2 + ora + + 코드관리 코드 리스트 SELECT 태그 만들기 + selectCodeList + egovframework.itgcms.util.CustomTagSelectCodeList + empty + + codeList + true + true + + + selectName + true + true + + + selectedValue + true + true + + + selectTitle + true + true + + + className + false + true + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tlds/egovc.tld b/src/main/webapp/WEB-INF/tlds/egovc.tld new file mode 100644 index 00000000..4dfd19b8 --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/egovc.tld @@ -0,0 +1,552 @@ + + + + + Egov CrossSite Tag Replace Special Html Code Convert(JSTL 1.1 core library 기반) + Egov JSTL core + 1.1 + egovc + + + Catches any Throwable that occurs in its body and optionally + exposes it. + + catch + org.apache.taglibs.standard.tag.common.core.CatchTag + JSP + + +Name of the exported scoped variable for the +exception thrown from a nested action. The type of the +scoped variable is the type of the exception thrown. + + var + false + false + + + + + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + + + + Simple conditional tag, which evalutes its body if the + supplied condition is true and optionally exposes a Boolean + scripting variable representing the evaluation of this condition + + if + org.apache.taglibs.standard.tag.rt.core.IfTag + JSP + + +The test condition that determines whether or +not the body content should be processed. + + test + true + true + boolean + + + +Name of the exported scoped variable for the +resulting value of the test condition. The type +of the scoped variable is Boolean. + + var + false + false + + + +Scope for var. + + scope + false + false + + + + + + Retrieves an absolute or relative URL and exposes its contents + to either the page, a String in 'var', or a Reader in 'varReader'. + + import + org.apache.taglibs.standard.tag.rt.core.ImportTag + org.apache.taglibs.standard.tei.ImportTEI + JSP + + +The URL of the resource to import. + + url + true + true + + + +Name of the exported scoped variable for the +resource's content. The type of the scoped +variable is String. + + var + false + false + + + +Scope for var. + + scope + false + false + + + +Name of the exported scoped variable for the +resource's content. The type of the scoped +variable is Reader. + + varReader + false + false + + + +Name of the context when accessing a relative +URL resource that belongs to a foreign +context. + + context + false + true + + + +Character encoding of the content at the input +resource. + + charEncoding + false + true + + + + + + The basic iteration tag, accepting many different + collection types and supporting subsetting and other + functionality + + forEach + org.apache.taglibs.standard.tag.rt.core.ForEachTag + org.apache.taglibs.standard.tei.ForEachTEI + JSP + + +Collection of items to iterate over. + + items + false + true + java.lang.Object + + + +If items specified: +Iteration begins at the item located at the +specified index. First item of the collection has +index 0. +If items not specified: +Iteration begins with index set at the value +specified. + + begin + false + true + int + + + +If items specified: +Iteration ends at the item located at the +specified index (inclusive). +If items not specified: +Iteration ends when index reaches the value +specified. + + end + false + true + int + + + +Iteration will only process every step items of +the collection, starting with the first one. + + step + false + true + int + + + +Name of the exported scoped variable for the +current item of the iteration. This scoped +variable has nested visibility. Its type depends +on the object of the underlying collection. + + var + false + false + + + +Name of the exported scoped variable for the +status of the iteration. Object exported is of type +javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested +visibility. + + varStatus + false + false + + + + + + Iterates over tokens, separated by the supplied delimeters + + forTokens + org.apache.taglibs.standard.tag.rt.core.ForTokensTag + JSP + + +String of tokens to iterate over. + + items + true + true + java.lang.String + + + +The set of delimiters (the characters that +separate the tokens in the string). + + delims + true + true + java.lang.String + + + +Iteration begins at the token located at the +specified index. First token has index 0. + + begin + false + true + int + + + +Iteration ends at the token located at the +specified index (inclusive). + + end + false + true + int + + + +Iteration will only process every step tokens +of the string, starting with the first one. + + step + false + true + int + + + +Name of the exported scoped variable for the +current item of the iteration. This scoped +variable has nested visibility. + + var + false + false + + + +Name of the exported scoped variable for the +status of the iteration. Object exported is of +type +javax.servlet.jsp.jstl.core.LoopTag +Status. This scoped variable has nested +visibility. + + varStatus + false + false + + + + + + Like <%= ... >, but for expressions. + + out + egovframework.com.cmm.EgovComCrossSiteHndlr + JSP + + +Expression to be evaluated. + + value + true + true + + + +Default value if the resulting value is null. + + default + false + true + + + +Determines whether characters <,>,&,'," in the +resulting string should be converted to their +corresponding character entity codes. Default value is +true. + + escapeXml + false + true + + + + + + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + + + + Adds a parameter to a containing 'import' tag's URL. + + param + org.apache.taglibs.standard.tag.rt.core.ParamTag + JSP + + +Name of the query string parameter. + + name + true + true + + + +Value of the parameter. + + value + false + true + + + + + + Redirects to a new URL. + + redirect + org.apache.taglibs.standard.tag.rt.core.RedirectTag + JSP + + +The URL of the resource to redirect to. + + url + false + true + + + +Name of the context when redirecting to a relative URL +resource that belongs to a foreign context. + + context + false + true + + + + + + Removes a scoped variable (from a particular scope, if specified). + + remove + org.apache.taglibs.standard.tag.common.core.RemoveTag + empty + + +Name of the scoped variable to be removed. + + var + true + false + + + +Scope for var. + + scope + false + false + + + + + + Sets the result of an expression evaluation in a 'scope' + + set + org.apache.taglibs.standard.tag.rt.core.SetTag + JSP + + +Name of the exported scoped variable to hold the value +specified in the action. The type of the scoped variable is +whatever type the value expression evaluates to. + + var + false + false + + + +Expression to be evaluated. + + value + false + true + + + +Target object whose property will be set. Must evaluate to +a JavaBeans object with setter property property, or to a +java.util.Map object. + + target + false + true + + + +Name of the property to be set in the target object. + + property + false + true + + + +Scope for var. + + scope + false + false + + + + + + Creates a URL with optional query parameters. + + url + org.apache.taglibs.standard.tag.rt.core.UrlTag + JSP + + +Name of the exported scoped variable for the +processed url. The type of the scoped variable is +String. + + var + false + false + + + +Scope for var. + + scope + false + false + + + +URL to be processed. + + value + false + true + + + +Name of the context when specifying a relative URL +resource that belongs to a foreign context. + + context + false + true + + + + + + Subtag of <choose> that includes its body if its + condition evalutes to 'true' + + when + org.apache.taglibs.standard.tag.rt.core.WhenTag + JSP + + +The test condition that determines whether or not the +body content should be processed. + + test + true + true + boolean + + + + diff --git a/src/main/webapp/WEB-INF/tlds/egovfn.tld b/src/main/webapp/WEB-INF/tlds/egovfn.tld new file mode 100644 index 00000000..60b45dc9 --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/egovfn.tld @@ -0,0 +1,481 @@ + + + + + Egov CrossSite Tag Replace Special Html Code Convert(JSTL 1.1 core library 기반) + Egov JSTL core + 1.1 + fn + + Form Select Tag selected="selected" + selected + egovframework.itgcms.util.CommUtil + java.lang.String selected(java.lang.String, java.lang.String) + + ${ufn:selected(val1, val2)} + + + + Form radio,checkbox Tag checked="checked" + checked + egovframework.itgcms.util.CommUtil + java.lang.String checked(java.lang.String, java.lang.String) + + ${ufn:checked(val1, val2)} + + + + Form radio,readonly Tag readonly="readonly" + readOnly + egovframework.itgcms.util.CommUtil + java.lang.String readOnly(java.lang.String, java.lang.String) + + ${ufn:readOnly(val1, val2)} + + + + Korean urlEncoding + getUrlEndcoding + egovframework.itgcms.util.CommUtil + java.lang.String getUrlEndcoding(java.lang.String) + + ${ufn:getUrlEndcoding(str)} + + + + get Age from ssn + getAgeFromSSN + egovframework.itgcms.util.CommUtil + java.lang.String getAgeFromSSN(java.lang.String) + + ${ufn:getAgeFromSSN(str)} + + + + get Gender from ssn + getGenderFromSSN + egovframework.itgcms.util.CommUtil + java.lang.String getGenderFromSSN(java.lang.String) + + ${ufn:getGenderFromSSN(str)} + + + + isNull + isNull + egovframework.itgcms.util.CommUtil + java.lang.String isNull(java.lang.String, java.lang.String) + + ${ufn:isNull(str, '')} + + + + replaceAll + replaceAll + egovframework.itgcms.util.CommUtil + java.lang.String replaceAll(java.lang.String, java.lang.String, java.lang.String) + + ${ufn:replaceAll(str, '', '')} + + + + cutString + cutString + egovframework.itgcms.util.CommUtil + java.lang.String cutString(java.lang.String, int, java.lang.String) + + ${ufn:cutString(str, 40, '...')} + + + + deCode + deCode + egovframework.itgcms.util.CommUtil + java.lang.String deCode(java.lang.String, java.lang.String, java.lang.String) + + ${ufn:deCode(str, '비교1,값1,비교2,값2,비교3,값3', 'default')} + + + + authorityCheck + authorityCheck + egovframework.itgcms.util.CommUtil + boolean authorityCheck(int) + + ${ufn:authorityCheck(1)} + + + + getSessionFromField + getSessionFromField + egovframework.itgcms.util.CommUtil + java.lang.String getSessionFromField(java.lang.String) + + ${ufn:getSessionFromField('web_id')} + + + + getDatePattern + getDatePattern + egovframework.itgcms.util.CommUtil + java.lang.String getDatePattern(java.lang.String) + + ${ufn:getDatePattern('yyyy-MM-dd')} + + + + 입력된 날짜를 패턴에 맞게 변환 함.(date, pattern)yyyy-MM-dd : 2019-02-28 , yyyy-MM-dd hh:mm:ss.SSS + printDatePattern + egovframework.itgcms.util.CommUtil + java.lang.String printDatePattern(java.lang.String,java.lang.String) + + ${ufn:printDatePattern('2016-03-03', 'yyyy-MM-dd')} + + + + dateDiff + dateDiff + egovframework.itgcms.util.CommUtil + int dateDiff(java.lang.String, java.lang.String, java.lang.String, java.lang.String) + + ${ufn:dateDiff('2012-08-01', '2012-09-01', 'yyyy-MM-dd', 'd')} + + + + + dateDiff + dateCompare + egovframework.itgcms.util.CommUtil + int dateDiff(java.lang.String) + + ${ufn:dateCompare('2012-08-01')} + + + + quot + quot + egovframework.itgcms.util.CommUtil + String quot(java.lang.String) + + ${ufn:quot($param.idx)} + + + + getDownloadLink + getDownloadLink + egovframework.itgcms.util.CommUtil + String getDownloadLink(java.lang.String, java.lang.String, java.lang.String, java.lang.String) + + ${ufn:getDownloadLink('', 'POPUP', 'abcd.jpg', '원본파일명.jpg')} + + + + getThumbFileName + getThumbFileName + egovframework.itgcms.util.CommUtil + String getThumbFileName(java.lang.String , java.lang.String ) + + ${ufn:getThumbFileName('asdf1234.jpg', '_S')} + + + + getFormatDateKorean + getFormatDateKorean + egovframework.itgcms.util.CommUtil + String getFormatDateKorean(java.lang.String) + + ${ufn:getFormatDateKorean(2013-11-28)} + + + + getFormatRound + getFormatRound + egovframework.itgcms.util.CommUtil + String getFormatRound(double) + + ${ufn:getFormatRound(1.2)} + + + + IIF(조건식, 참일때결과, 거짓일때결과) + IIF + egovframework.itgcms.util.CommUtil + String IIF(boolean , java.lang.String, java.lang.String) + + ${ufn:IIF(2>3,'12,'13'')} + + + + getZeroPlus + getZeroPlus + egovframework.itgcms.util.CommUtil + String getZeroPlus(int ) + + ${ufn:getZeroPlus(9)} + + + + getMngrSessionVO + getMngrSessionVO + egovframework.itgcms.util.CommUtil + Session getMngrSessionVO() + + ${ufn:getMngrSessionVO()} + + + + getUserSessionVO + getUserSessionVO + egovframework.itgcms.util.CommUtil + Session getUserSessionVO() + + ${ufn:getUserSessionVO()} + + + + getConfigFromXml + getConfigFromXml + egovframework.itgcms.util.CommUtil + Session getConfigFromXml(java.lang.String ) + + ${ufn:getConfigFromXml('popup')} + + + + getUserNavigation + getUserNavigation + egovframework.itgcms.util.CommUtil + String getUserNavigation(java.lang.String,java.lang.String) + + ${ufn:getUserNavigation('>경기테크노파크>경기TP소개>비전 및 목표>세부 실행과제홈','0')} + + + + getAntiHtml type : 1=태그전체삭제, 2=스크립트 + getAntiHtml + egovframework.itgcms.util.CommUtil + String getAntiHtml(java.lang.String, java.lang.String) + + ${ufn:getAntiHtml('html~~~/html', type)} + + + + stripXss + stripXss + egovframework.itgcms.util.CommUtil + String stripXss(java.lang.String) + + ${ufn:stripXss('html~~~/html')} + + + + stripXssScript + stripXssScript + egovframework.itgcms.util.CommUtil + String stripXssScript(java.lang.String) + + ${ufn:stripXssScript('html~~~/html')} + + + + decodeXss + decodeXss + egovframework.itgcms.util.CommUtil + String decodeXss(java.lang.String) + + ${ufn:decodeXss('html~~~/html')} + + + + String 사칙연산 + strCalculator + egovframework.itgcms.util.CommUtil + String strCalculator(java.lang.String, java.lang.Character, java.lang.String) + + ${ufn:strCalculator(numStr1, '+', numStr2)} + + + + getMenuLink + getMenuLink + egovframework.itgcms.util.CommUtil + String getMenuLink(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) + + ${ufn:getMenuLink(menuCode, menuName, menuType, menuUrl, showType, siteCode)} + + + + getMenuLink2 + getMenuLink2 + egovframework.itgcms.util.CommUtil + String getMenuLink2(egovframework.itgcms.core.menu.service.MngrMenuVO, java.lang.String) + + ${ufn:getMenuLink2(menuVO,'web')} + + + + mngrLevelTrueFalse 관리자가 가진권한이 true false + mngrLevelTrueFalse + egovframework.itgcms.util.CommUtil + boolean mngrLevelTrueFalse(java.lang.String) + + ${ufn:mngrLevelTrueFalse('menu01')} + + + + 페이지 템플릿, 게시판 타입에 따라 HTML을 생성하는 메소드 + mainPageBoard + egovframework.itgcms.util.CommUtil + String getMainPageBoard(java.util.List, java.lang.String, int) + + ${ufn:mainPageBoard(list, 'templ', 30)} + + + + strInArrChk + strInArrChk + egovframework.itgcms.util.CommUtil + boolean strInArrChk(java.lang.String, java.lang.String) + + ${ufn:strInArrChk('menu1,menu2','menu01')} + + + + strConceal 문자열을 지정된 지점에서부터 *로 치환(끝나는 지점이 지정되지 않으면 끝까지 치환) + strConceal + egovframework.itgcms.util.CommUtil + String strConceal(java.lang.String, int, int) + + ${ufn:strConceal('menu01', 1, 9)} + + + + 프로그램 모듈을 호출하여 HTML을 생성하는 메소드 + getModule + egovframework.itgcms.util.CommUtil + String getModule(java.lang.String, java.lang.Object, java.lang.String) + + ${ufn:getModule('slideSet',obj,'web')} + + + + 금지어 정규식을 출력하는 메소드 + getProhibitRegEx + egovframework.itgcms.util.CommUtil + String getProhibitRegEx() + + ${ufn:getProhibitRegEx()} + + + + 0 일때 인라인 방식 CSS display : none 추가 + styleDisplayNone + egovframework.itgcms.util.CommUtil + String styleDisplayNone(int) + + ${ufn:styleDisplayNone(0)} + + + + 첫번째 파라미터(arg[0])가 오늘 날짜일 때, 두번재 파라미터를 출력함 + newTag + egovframework.itgcms.util.CommUtil + String newTag(java.lang.String, java.lang.String) + + ${ufn:newTag('date', 'printDate')} + + + + 첫번째 스트링을 두번째 캐릭터로 분리하여 배열 리턴 + strSplit + egovframework.itgcms.util.CommUtil + String strSplit(java.lang.String, java.lang.String) + + ${ufn:strSplit('111-111-111','-')} + + + + 암호화된 문자열을 복호화 + seedDec256 + egovframework.itgcms.util.CommUtil + String seedDec256(java.lang.String) + + ${ufn:seedDec256('597f5fb'} + + + + 문자열 시작 여부 + startWith + egovframework.itgcms.util.CommUtil + boolean startWith(java.lang.String, java.lang.String) + + ${ufn:startWith('597f5fb', '597'} + + + + 문자열 시작 여부 + getDateDay + egovframework.itgcms.util.CommUtil + String getDateDay(java.lang.String, java.lang.String) + + ${ufn:getDateDay('2017-01-01', 'yyyy-MM-dd'} + + + + isDate + isDate + egovframework.itgcms.util.CommUtil + boolean isDate(int, int, int) + + ${ufn:isDate(m, d, y)} + + + + isLunar + isLunar + egovframework.itgcms.util.CommUtil + boolean isLunar(java.lang.String) + + ${ufn:isLunar('2017-01-01')} + + + + 문자열 split후 원하는 위치의 문자열을 가져옴 + strSplitGetPhone + egovframework.itgcms.util.CommUtil + String strSplitGetPhone(java.lang.String, java.lang.String) + + ${ufn:strSplitGetPhone('111-111-111','1')} + + + + getInnerListToMap String Key + getInnerListToMap + egovframework.itgcms.util.CommUtil + List getInnerListToMap(java.util.Map, java.lang.String) + + ${ufn:getInnerListToMap(map, String)} + + + + isContainValue + isContainValue + egovframework.itgcms.util.CommUtil + String isContainValue(java.lang.String, java.lang.String[]) + + ${ufn:isContainValue('string', 'string[]')} + + + + diff --git a/src/main/webapp/WEB-INF/tlds/orderby.tld b/src/main/webapp/WEB-INF/tlds/orderby.tld new file mode 100644 index 00000000..99032b2d --- /dev/null +++ b/src/main/webapp/WEB-INF/tlds/orderby.tld @@ -0,0 +1,46 @@ + + + + + 1.2 + ora + + 게시판 목록 제목 클릭 정렬 설정 + setOrderBy + egovframework.itgcms.util.CustomTagOrderBy + empty + + fieldValue + true + true + + + fieldText + true + true + + + + + schOrderFld + true + true + + + schOrderBy + true + true + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 00000000..a4690a96 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,176 @@ + + + egovframework.ebt + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + utf-8 + + + + encodingFilter + *.do + + + + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + + + readableRequestWrapperFilter + kr.xit.framework.core.filter.log.ReadableRequestWrapperFilter + + + + readableRequestWrapperFilter + *.do + + + + + org.springframework.security.web.session.HttpSessionEventPublisher + + + + + + + + + + org.springframework.web.context.ContextLoaderListener + + + + + ch.qos.logback.ext.spring.web.LogbackConfigListener + + + + + org.springframework.web.context.request.RequestContextListener + + + + + + logbackConfigLocation + classpath:logback-${spring.profiles.active}.xml + + + + + + contextConfigLocation + classpath:/spring/context-service.xml + + + + + + + + action + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + classpath:/spring/context-mvc.xml + + 1 + + + action + *.do + *.ajax + + + + + UbiServer + com.ubireport.server.UbiServer4 + + + UbiServer + /UbiServer + + + + + index.jsp + + + BASIC + + + + 60 + COOKIE + + true + false + + + + + + java.lang.Throwable + /common/error.jsp + + + org.springframework.web.util.NestedServletException + /common/error.jsp + + + 500 + /WEB-INF/jsp/framework/error/error.jsp + + + 403 + /WEB-INF/jsp/framework/error/error.jsp + + + 404 + + /WEB-INF/jsp/framework/error/error.jsp + + + 500 + /WEB-INF/jsp/framework/error/error.jsp + + + 901 + /WEB-INF/jsp/framework/error/error.jsp + + diff --git a/src/main/webapp/WEB-INF/weblogic.xml b/src/main/webapp/WEB-INF/weblogic.xml new file mode 100644 index 00000000..f597f05e --- /dev/null +++ b/src/main/webapp/WEB-INF/weblogic.xml @@ -0,0 +1,5 @@ + + + + /ebt + \ No newline at end of file diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 00000000..efa9e85a --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,5 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + \ No newline at end of file diff --git a/src/main/webapp/resources/3rd-party/cryptoJS/js/aes.js b/src/main/webapp/resources/3rd-party/cryptoJS/js/aes.js new file mode 100644 index 00000000..7e5e2e2a --- /dev/null +++ b/src/main/webapp/resources/3rd-party/cryptoJS/js/aes.js @@ -0,0 +1,35 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}}, +r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var k=0;k>>2]|=(e[k>>>2]>>>24-8*(k%4)&255)<<24-8*((j+k)%4);else if(65535>>2]=e[k>>>2];else c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<< +32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;e>>2]>>>24-8*(j%4)&255;e.push((k>>>4).toString(16));e.push((k&15).toString(16))}return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j>>3]|=parseInt(a.substr(j, +2),16)<<24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j>>2]>>>24-8*(j%4)&255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}}, +q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;q>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w< +l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(); +(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])}, +_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]), +f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f, +m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m, +E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/ +4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math); +(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a, +this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684, +1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})}, +decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d, +b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}(); +(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8, +16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>> +8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t= +d[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})(); \ No newline at end of file diff --git a/src/main/webapp/resources/3rd-party/cryptoJS/js/sha256.js b/src/main/webapp/resources/3rd-party/cryptoJS/js/sha256.js new file mode 100644 index 00000000..ebb360d0 --- /dev/null +++ b/src/main/webapp/resources/3rd-party/cryptoJS/js/sha256.js @@ -0,0 +1,16 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}}, +q=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<< +32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b, +2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}}, +x=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]= +c[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes; +d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math); \ No newline at end of file diff --git a/src/main/webapp/resources/3rd-party/jquery/3.6.1/jquery.js b/src/main/webapp/resources/3rd-party/jquery/3.6.1/jquery.js new file mode 100644 index 00000000..12e65d06 --- /dev/null +++ b/src/main/webapp/resources/3rd-party/jquery/3.6.1/jquery.js @@ -0,0 +1,10909 @@ +/*! + * jQuery JavaScript Library v3.6.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2022-08-26T17:52Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket trac-14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See trac-6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (trac-9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see trac-8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (trac-14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (trac-11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (trac-14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (trac-13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting
    ", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (trac-12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (trac-13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (trac-504, trac-13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function( event ) { + return dataPriv.get( event.target, type ); + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (trac-8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var rcustomProp = /^--/; + + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (trac-8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test( name ), + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + // trim whitespace for custom property (issue gh-4926) + if ( isCustomProp ) { + + // rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace( rtrimCSS, "$1" ); + } + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (trac-7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug trac-9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (trac-7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // Use proper attribute retrieval (trac-12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + if ( cur.indexOf( " " + className + " " ) < 0 ) { + cur += className + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + removeClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + + // This expression is here for better compressibility (see addClass) + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Remove *all* instances + while ( cur.indexOf( " " + className + " " ) > -1 ) { + cur = cur.replace( " " + className + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var classNames, className, i, self, + type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + classNames = classesToArray( value ); + + return this.each( function() { + if ( isValidValue ) { + + // Toggle individual class names + self = jQuery( this ); + + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (trac-14686, trac-14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (trac-2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (trac-6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // trac-7653, trac-8125, trac-8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes trac-9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket trac-12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // trac-9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (trac-11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // trac-1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see trac-8605, trac-14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // trac-14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + * "; + * var result = util.encodeHTMLEntity(htmlEntityString); + * //"<script> alert('test');</script><a href='test'>" + */ + function encodeHTMLEntity(html) { + var entities = { + '"': 'quot', + '&': 'amp', + '<': 'lt', + '>': 'gt', + '\'': '#39' + }; + + return html.replace(/[<>&"']/g, function(m0) { + return entities[m0] ? '&' + entities[m0] + ';' : m0; + }); + } + + /** + * Return whether the string capable to transform into plain string is in the given string or not. + * @param {String} string - test string + * @memberof tui.util + * @returns {boolean} + */ + function hasEncodableString(string) { + return (/[<>&"']/).test(string); + } + + /** + * Return duplicate charters + * @param {string} operandStr1 The operand string + * @param {string} operandStr2 The operand string + * @private + * @memberof tui.util + * @returns {string} + * @example + * //-- #1. Get Module --// + * var util = require('tui-code-snippet'); // node, commonjs + * var util = tui.util; // distribution file + * + * //-- #2. Use property --// + * util.getDuplicatedChar('fe dev', 'nhn entertainment'); // 'e' + * util.getDuplicatedChar('fdsa', 'asdf'); // 'asdf' + */ + function getDuplicatedChar(operandStr1, operandStr2) { + var i = 0; + var len = operandStr1.length; + var pool = {}; + var dupl, key; + + for (; i < len; i += 1) { + key = operandStr1.charAt(i); + pool[key] = 1; + } + + for (i = 0, len = operandStr2.length; i < len; i += 1) { + key = operandStr2.charAt(i); + if (pool[key]) { + pool[key] += 1; + } + } + + pool = collection.filter(pool, function(item) { + return item > 1; + }); + + pool = object.keys(pool).sort(); + dupl = pool.join(''); + + return dupl; + } + + module.exports = { + decodeHTMLEntity: decodeHTMLEntity, + encodeHTMLEntity: encodeHTMLEntity, + hasEncodableString: hasEncodableString, + getDuplicatedChar: getDuplicatedChar + }; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /** + * @fileoverview collections of some technic methods. + * @author NHN. + * FE Development Lab + */ + + 'use strict'; + + var tricks = {}; + var aps = Array.prototype.slice; + + /** + * Creates a debounced function that delays invoking fn until after delay milliseconds has elapsed + * since the last time the debouced function was invoked. + * @param {function} fn The function to debounce. + * @param {number} [delay=0] The number of milliseconds to delay + * @memberof tui.util + * @returns {function} debounced function. + * @example + * //-- #1. Get Module --// + * var util = require('tui-code-snippet'); // node, commonjs + * var util = tui.util; // distribution file + * + * //-- #2. Use property --// + * function someMethodToInvokeDebounced() {} + * + * var debounced = util.debounce(someMethodToInvokeDebounced, 300); + * + * // invoke repeatedly + * debounced(); + * debounced(); + * debounced(); + * debounced(); + * debounced(); + * debounced(); // last invoke of debounced() + * + * // invoke someMethodToInvokeDebounced() after 300 milliseconds. + */ + function debounce(fn, delay) { + var timer, args; + + /* istanbul ignore next */ + delay = delay || 0; + + function debounced() { // eslint-disable-line require-jsdoc + args = aps.call(arguments); + + window.clearTimeout(timer); + timer = window.setTimeout(function() { + fn.apply(null, args); + }, delay); + } + + return debounced; + } + + /** + * return timestamp + * @memberof tui.util + * @returns {number} The number of milliseconds from Jan. 1970 00:00:00 (GMT) + */ + function timestamp() { + return Number(new Date()); + } + + /** + * Creates a throttled function that only invokes fn at most once per every interval milliseconds. + * + * You can use this throttle short time repeatedly invoking functions. (e.g MouseMove, Resize ...) + * + * if you need reuse throttled method. you must remove slugs (e.g. flag variable) related with throttling. + * @param {function} fn function to throttle + * @param {number} [interval=0] the number of milliseconds to throttle invocations to. + * @memberof tui.util + * @returns {function} throttled function + * @example + * //-- #1. Get Module --// + * var util = require('tui-code-snippet'); // node, commonjs + * var util = tui.util; // distribution file + * + * //-- #2. Use property --// + * function someMethodToInvokeThrottled() {} + * + * var throttled = util.throttle(someMethodToInvokeThrottled, 300); + * + * // invoke repeatedly + * throttled(); // invoke (leading) + * throttled(); + * throttled(); // invoke (near 300 milliseconds) + * throttled(); + * throttled(); + * throttled(); // invoke (near 600 milliseconds) + * // ... + * // invoke (trailing) + * + * // if you need reuse throttled method. then invoke reset() + * throttled.reset(); + */ + function throttle(fn, interval) { + var base; + var isLeading = true; + var tick = function(_args) { + fn.apply(null, _args); + base = null; + }; + var debounced, stamp, args; + + /* istanbul ignore next */ + interval = interval || 0; + + debounced = tricks.debounce(tick, interval); + + function throttled() { // eslint-disable-line require-jsdoc + args = aps.call(arguments); + + if (isLeading) { + tick(args); + isLeading = false; + + return; + } + + stamp = tricks.timestamp(); + + base = base || stamp; + + // pass array directly because `debounce()`, `tick()` are already use + // `apply()` method to invoke developer's `fn` handler. + // + // also, this `debounced` line invoked every time for implements + // `trailing` features. + debounced(args); + + if ((stamp - base) >= interval) { + tick(args); + } + } + + function reset() { // eslint-disable-line require-jsdoc + isLeading = true; + base = null; + } + + throttled.reset = reset; + + return throttled; + } + + tricks.timestamp = timestamp; + tricks.debounce = debounce; + tricks.throttle = throttle; + + module.exports = tricks; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * @fileoverview This module has some functions for handling object as collection. + * @author NHN. + * FE Development Lab + */ + 'use strict'; + + var object = __webpack_require__(1); + var collection = __webpack_require__(4); + var type = __webpack_require__(2); + var ms7days = 7 * 24 * 60 * 60 * 1000; + + /** + * Check if the date has passed 7 days + * @param {number} date - milliseconds + * @returns {boolean} + * @ignore + */ + function isExpired(date) { + var now = new Date().getTime(); + + return now - date > ms7days; + } + + /** + * Send hostname on DOMContentLoaded. + * To prevent hostname set tui.usageStatistics to false. + * @param {string} appName - application name + * @param {string} trackingId - GA tracking ID + * @ignore + */ + function sendHostname(appName, trackingId) { + var url = 'https://www.google-analytics.com/collect'; + var hostname = location.hostname; + var hitType = 'event'; + var eventCategory = 'use'; + var applicationKeyForStorage = 'TOAST UI ' + appName + ' for ' + hostname + ': Statistics'; + var date = window.localStorage.getItem(applicationKeyForStorage); + + // skip if the flag is defined and is set to false explicitly + if (!type.isUndefined(window.tui) && window.tui.usageStatistics === false) { + return; + } + + // skip if not pass seven days old + if (date && !isExpired(date)) { + return; + } + + window.localStorage.setItem(applicationKeyForStorage, new Date().getTime()); + + setTimeout(function() { + if (document.readyState === 'interactive' || document.readyState === 'complete') { + imagePing(url, { + v: 1, + t: hitType, + tid: trackingId, + cid: hostname, + dp: hostname, + dh: appName, + el: appName, + ec: eventCategory + }); + } + }, 1000); + } + + /** + * Request image ping. + * @param {String} url url for ping request + * @param {Object} trackingInfo infos for make query string + * @returns {HTMLElement} + * @memberof tui.util + * @example + * //-- #1. Get Module --// + * var util = require('tui-code-snippet'); // node, commonjs + * var util = tui.util; // distribution file + * + * //-- #2. Use property --// + * util.imagePing('https://www.google-analytics.com/collect', { + * v: 1, + * t: 'event', + * tid: 'trackingid', + * cid: 'cid', + * dp: 'dp', + * dh: 'dh' + * }); + */ + function imagePing(url, trackingInfo) { + var queryString = collection.map(object.keys(trackingInfo), function(key, index) { + var startWith = index === 0 ? '' : '&'; + + return startWith + key + '=' + trackingInfo[key]; + }).join(''); + var trackingElement = document.createElement('img'); + + trackingElement.src = url + '?' + queryString; + + trackingElement.style.display = 'none'; + document.body.appendChild(trackingElement); + document.body.removeChild(trackingElement); + + return trackingElement; + } + + module.exports = { + imagePing: imagePing, + sendHostname: sendHostname + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports) { + + /** + * @fileoverview This module detects the kind of well-known browser and version. + * @author NHN. + * FE Development Lab + */ + + 'use strict'; + + /** + * This object has an information that indicate the kind of browser.
    + * The list below is a detectable browser list. + * - ie8 ~ ie11 + * - chrome + * - firefox + * - safari + * - edge + * @memberof tui.util + * @example + * //-- #1. Get Module --// + * var util = require('tui-code-snippet'); // node, commonjs + * var util = tui.util; // distribution file + * + * //-- #2. Use property --// + * util.browser.chrome === true; // chrome + * util.browser.firefox === true; // firefox + * util.browser.safari === true; // safari + * util.browser.msie === true; // IE + * util.browser.edge === true; // edge + * util.browser.others === true; // other browser + * util.browser.version; // browser version + */ + var browser = { + chrome: false, + firefox: false, + safari: false, + msie: false, + edge: false, + others: false, + version: 0 + }; + + if (window && window.navigator) { + detectBrowser(); + } + + /** + * Detect the browser. + * @private + */ + function detectBrowser() { + var nav = window.navigator; + var appName = nav.appName.replace(/\s/g, '_'); + var userAgent = nav.userAgent; + + var rIE = /MSIE\s([0-9]+[.0-9]*)/; + var rIE11 = /Trident.*rv:11\./; + var rEdge = /Edge\/(\d+)\./; + var versionRegex = { + firefox: /Firefox\/(\d+)\./, + chrome: /Chrome\/(\d+)\./, + safari: /Version\/([\d.]+).*Safari\/(\d+)/ + }; + + var key, tmp; + + var detector = { + Microsoft_Internet_Explorer: function() { // eslint-disable-line camelcase + var detectedVersion = userAgent.match(rIE); + + if (detectedVersion) { // ie8 ~ ie10 + browser.msie = true; + browser.version = parseFloat(detectedVersion[1]); + } else { // no version information + browser.others = true; + } + }, + Netscape: function() { // eslint-disable-line complexity + var detected = false; + + if (rIE11.exec(userAgent)) { + browser.msie = true; + browser.version = 11; + detected = true; + } else if (rEdge.exec(userAgent)) { + browser.edge = true; + browser.version = userAgent.match(rEdge)[1]; + detected = true; + } else { + for (key in versionRegex) { + if (versionRegex.hasOwnProperty(key)) { + tmp = userAgent.match(versionRegex[key]); + if (tmp && tmp.length > 1) { // eslint-disable-line max-depth + browser[key] = detected = true; + browser.version = parseFloat(tmp[1] || 0); + break; + } + } + } + } + if (!detected) { + browser.others = true; + } + } + }; + + var fn = detector[appName]; + + if (fn) { + detector[appName](); + } + } + + module.exports = browser; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * @fileoverview This module has some methods for handling popup-window + * @author NHN. + * FE Development Lab + */ + + 'use strict'; + + var collection = __webpack_require__(4); + var type = __webpack_require__(2); + var func = __webpack_require__(5); + var browser = __webpack_require__(10); + var object = __webpack_require__(1); + + var popupId = 0; + + /** + * Popup management class + * @constructor + * @memberof tui.util + * @example + * // node, commonjs + * var popup = require('tui-code-snippet').popup; + * @example + * // distribution file, script + * + * + * + */ + function CustomEvents() { + /** + * @type {HandlerItem[]} + */ + this.events = null; + + /** + * only for checking specific context event was binded + * @type {object[]} + */ + this.contexts = null; + } + + /** + * Mixin custom events feature to specific constructor + * @param {function} func - constructor + * @example + * //-- #1. Get Module --// + * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs + * var CustomEvents = tui.util.CustomEvents; // distribution file + * + * //-- #2. Use property --// + * var model; + * function Model() { + * this.name = ''; + * } + * CustomEvents.mixin(Model); + * + * model = new Model(); + * model.on('change', function() { this.name = 'model'; }, this); + * model.fire('change'); + * alert(model.name); // 'model'; + */ + CustomEvents.mixin = function(func) { + object.extend(func.prototype, CustomEvents.prototype); + }; + + /** + * Get HandlerItem object + * @param {function} handler - handler function + * @param {object} [context] - context for handler + * @returns {HandlerItem} HandlerItem object + * @private + */ + CustomEvents.prototype._getHandlerItem = function(handler, context) { + var item = {handler: handler}; + + if (context) { + item.context = context; + } + + return item; + }; + + /** + * Get event object safely + * @param {string} [eventName] - create sub event map if not exist. + * @returns {(object|array)} event object. if you supplied `eventName` + * parameter then make new array and return it + * @private + */ + CustomEvents.prototype._safeEvent = function(eventName) { + var events = this.events; + var byName; + + if (!events) { + events = this.events = {}; + } + + if (eventName) { + byName = events[eventName]; + + if (!byName) { + byName = []; + events[eventName] = byName; + } + + events = byName; + } + + return events; + }; + + /** + * Get context array safely + * @returns {array} context array + * @private + */ + CustomEvents.prototype._safeContext = function() { + var context = this.contexts; + + if (!context) { + context = this.contexts = []; + } + + return context; + }; + + /** + * Get index of context + * @param {object} ctx - context that used for bind custom event + * @returns {number} index of context + * @private + */ + CustomEvents.prototype._indexOfContext = function(ctx) { + var context = this._safeContext(); + var index = 0; + + while (context[index]) { + if (ctx === context[index][0]) { + return index; + } + + index += 1; + } + + return -1; + }; + + /** + * Memorize supplied context for recognize supplied object is context or + * name: handler pair object when off() + * @param {object} ctx - context object to memorize + * @private + */ + CustomEvents.prototype._memorizeContext = function(ctx) { + var context, index; + + if (!type.isExisty(ctx)) { + return; + } + + context = this._safeContext(); + index = this._indexOfContext(ctx); + + if (index > -1) { + context[index][1] += 1; + } else { + context.push([ctx, 1]); + } + }; + + /** + * Forget supplied context object + * @param {object} ctx - context object to forget + * @private + */ + CustomEvents.prototype._forgetContext = function(ctx) { + var context, contextIndex; + + if (!type.isExisty(ctx)) { + return; + } + + context = this._safeContext(); + contextIndex = this._indexOfContext(ctx); + + if (contextIndex > -1) { + context[contextIndex][1] -= 1; + + if (context[contextIndex][1] <= 0) { + context.splice(contextIndex, 1); + } + } + }; + + /** + * Bind event handler + * @param {(string|{name:string, handler:function})} eventName - custom + * event name or an object {eventName: handler} + * @param {(function|object)} [handler] - handler function or context + * @param {object} [context] - context for binding + * @private + */ + CustomEvents.prototype._bindEvent = function(eventName, handler, context) { + var events = this._safeEvent(eventName); + this._memorizeContext(context); + events.push(this._getHandlerItem(handler, context)); + }; + + /** + * Bind event handlers + * @param {(string|{name:string, handler:function})} eventName - custom + * event name or an object {eventName: handler} + * @param {(function|object)} [handler] - handler function or context + * @param {object} [context] - context for binding + * //-- #1. Get Module --// + * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs + * var CustomEvents = tui.util.CustomEvents; // distribution file + * + * //-- #2. Use property --// + * // # 2.1 Basic Usage + * CustomEvents.on('onload', handler); + * + * // # 2.2 With context + * CustomEvents.on('onload', handler, myObj); + * + * // # 2.3 Bind by object that name, handler pairs + * CustomEvents.on({ + * 'play': handler, + * 'pause': handler2 + * }); + * + * // # 2.4 Bind by object that name, handler pairs with context object + * CustomEvents.on({ + * 'play': handler + * }, myObj); + */ + CustomEvents.prototype.on = function(eventName, handler, context) { + var self = this; + + if (type.isString(eventName)) { + // [syntax 1, 2] + eventName = eventName.split(R_EVENTNAME_SPLIT); + collection.forEach(eventName, function(name) { + self._bindEvent(name, handler, context); + }); + } else if (type.isObject(eventName)) { + // [syntax 3, 4] + context = handler; + collection.forEach(eventName, function(func, name) { + self.on(name, func, context); + }); + } + }; + + /** + * Bind one-shot event handlers + * @param {(string|{name:string,handler:function})} eventName - custom + * event name or an object {eventName: handler} + * @param {function|object} [handler] - handler function or context + * @param {object} [context] - context for binding + */ + CustomEvents.prototype.once = function(eventName, handler, context) { + var self = this; + + if (type.isObject(eventName)) { + context = handler; + collection.forEach(eventName, function(func, name) { + self.once(name, func, context); + }); + + return; + } + + function onceHandler() { // eslint-disable-line require-jsdoc + handler.apply(context, arguments); + self.off(eventName, onceHandler, context); + } + + this.on(eventName, onceHandler, context); + }; + + /** + * Splice supplied array by callback result + * @param {array} arr - array to splice + * @param {function} predicate - function return boolean + * @private + */ + CustomEvents.prototype._spliceMatches = function(arr, predicate) { + var i = 0; + var len; + + if (!type.isArray(arr)) { + return; + } + + for (len = arr.length; i < len; i += 1) { + if (predicate(arr[i]) === true) { + arr.splice(i, 1); + len -= 1; + i -= 1; + } + } + }; + + /** + * Get matcher for unbind specific handler events + * @param {function} handler - handler function + * @returns {function} handler matcher + * @private + */ + CustomEvents.prototype._matchHandler = function(handler) { + var self = this; + + return function(item) { + var needRemove = handler === item.handler; + + if (needRemove) { + self._forgetContext(item.context); + } + + return needRemove; + }; + }; + + /** + * Get matcher for unbind specific context events + * @param {object} context - context + * @returns {function} object matcher + * @private + */ + CustomEvents.prototype._matchContext = function(context) { + var self = this; + + return function(item) { + var needRemove = context === item.context; + + if (needRemove) { + self._forgetContext(item.context); + } + + return needRemove; + }; + }; + + /** + * Get matcher for unbind specific hander, context pair events + * @param {function} handler - handler function + * @param {object} context - context + * @returns {function} handler, context matcher + * @private + */ + CustomEvents.prototype._matchHandlerAndContext = function(handler, context) { + var self = this; + + return function(item) { + var matchHandler = (handler === item.handler); + var matchContext = (context === item.context); + var needRemove = (matchHandler && matchContext); + + if (needRemove) { + self._forgetContext(item.context); + } + + return needRemove; + }; + }; + + /** + * Unbind event by event name + * @param {string} eventName - custom event name to unbind + * @param {function} [handler] - handler function + * @private + */ + CustomEvents.prototype._offByEventName = function(eventName, handler) { + var self = this; + var forEach = collection.forEachArray; + var andByHandler = type.isFunction(handler); + var matchHandler = self._matchHandler(handler); + + eventName = eventName.split(R_EVENTNAME_SPLIT); + + forEach(eventName, function(name) { + var handlerItems = self._safeEvent(name); + + if (andByHandler) { + self._spliceMatches(handlerItems, matchHandler); + } else { + forEach(handlerItems, function(item) { + self._forgetContext(item.context); + }); + + self.events[name] = []; + } + }); + }; + + /** + * Unbind event by handler function + * @param {function} handler - handler function + * @private + */ + CustomEvents.prototype._offByHandler = function(handler) { + var self = this; + var matchHandler = this._matchHandler(handler); + + collection.forEach(this._safeEvent(), function(handlerItems) { + self._spliceMatches(handlerItems, matchHandler); + }); + }; + + /** + * Unbind event by object(name: handler pair object or context object) + * @param {object} obj - context or {name: handler} pair object + * @param {function} handler - handler function + * @private + */ + CustomEvents.prototype._offByObject = function(obj, handler) { + var self = this; + var matchFunc; + + if (this._indexOfContext(obj) < 0) { + collection.forEach(obj, function(func, name) { + self.off(name, func); + }); + } else if (type.isString(handler)) { + matchFunc = this._matchContext(obj); + + self._spliceMatches(this._safeEvent(handler), matchFunc); + } else if (type.isFunction(handler)) { + matchFunc = this._matchHandlerAndContext(handler, obj); + + collection.forEach(this._safeEvent(), function(handlerItems) { + self._spliceMatches(handlerItems, matchFunc); + }); + } else { + matchFunc = this._matchContext(obj); + + collection.forEach(this._safeEvent(), function(handlerItems) { + self._spliceMatches(handlerItems, matchFunc); + }); + } + }; + + /** + * Unbind custom events + * @param {(string|object|function)} eventName - event name or context or + * {name: handler} pair object or handler function + * @param {(function)} handler - handler function + * @example + * //-- #1. Get Module --// + * var CustomEvents = require('tui-code-snippet').CustomEvents; // node, commonjs + * var CustomEvents = tui.util.CustomEvents; // distribution file + * + * //-- #2. Use property --// + * // # 2.1 off by event name + * CustomEvents.off('onload'); + * + * // # 2.2 off by event name and handler + * CustomEvents.off('play', handler); + * + * // # 2.3 off by handler + * CustomEvents.off(handler); + * + * // # 2.4 off by context + * CustomEvents.off(myObj); + * + * // # 2.5 off by context and handler + * CustomEvents.off(myObj, handler); + * + * // # 2.6 off by context and event name + * CustomEvents.off(myObj, 'onload'); + * + * // # 2.7 off by an Object. that is {eventName: handler} + * CustomEvents.off({ + * 'play': handler, + * 'pause': handler2 + * }); + * + * // # 2.8 off the all events + * CustomEvents.off(); + */ + CustomEvents.prototype.off = function(eventName, handler) { + if (type.isString(eventName)) { + // [syntax 1, 2] + this._offByEventName(eventName, handler); + } else if (!arguments.length) { + // [syntax 8] + this.events = {}; + this.contexts = []; + } else if (type.isFunction(eventName)) { + // [syntax 3] + this._offByHandler(eventName); + } else if (type.isObject(eventName)) { + // [syntax 4, 5, 6] + this._offByObject(eventName, handler); + } + }; + + /** + * Fire custom event + * @param {string} eventName - name of custom event + */ + CustomEvents.prototype.fire = function(eventName) { // eslint-disable-line + this.invoke.apply(this, arguments); + }; + + /** + * Fire a event and returns the result of operation 'boolean AND' with all + * listener's results. + * + * So, It is different from {@link CustomEvents#fire}. + * + * In service code, use this as a before event in component level usually + * for notifying that the event is cancelable. + * @param {string} eventName - Custom event name + * @param {...*} data - Data for event + * @returns {boolean} The result of operation 'boolean AND' + * @example + * var map = new Map(); + * map.on({ + * 'beforeZoom': function() { + * // It should cancel the 'zoom' event by some conditions. + * if (that.disabled && this.getState()) { + * return false; + * } + * return true; + * } + * }); + * + * if (this.invoke('beforeZoom')) { // check the result of 'beforeZoom' + * // if true, + * // doSomething + * } + */ + CustomEvents.prototype.invoke = function(eventName) { + var events, args, index, item; + + if (!this.hasListener(eventName)) { + return true; + } + + events = this._safeEvent(eventName); + args = Array.prototype.slice.call(arguments, 1); + index = 0; + + while (events[index]) { + item = events[index]; + + if (item.handler.apply(item.context, args) === false) { + return false; + } + + index += 1; + } + + return true; + }; + + /** + * Return whether at least one of the handlers is registered in the given + * event name. + * @param {string} eventName - Custom event name + * @returns {boolean} Is there at least one handler in event name? + */ + CustomEvents.prototype.hasListener = function(eventName) { + return this.getListenerLength(eventName) > 0; + }; + + /** + * Return a count of events registered. + * @param {string} eventName - Custom event name + * @returns {number} number of event + */ + CustomEvents.prototype.getListenerLength = function(eventName) { + var events = this._safeEvent(eventName); + + return events.length; + }; + + module.exports = CustomEvents; + + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * @fileoverview This module provides a Enum Constructor. + * @author NHN. + * FE Development Lab + * @example + * // node, commonjs + * var Enum = require('tui-code-snippet').Enum; + * @example + * // distribution file, script + * + * + * + * + * + + + + + + + 본고딕-Bold Specimen + + + + + + +
    + + + +
    + + +
    + +
    +
    +
    본고딕-Bold
    +
    +
    + +
    +
    A​B​C​D​E​F​G​H​I​J​K​L​M​N​O​P​Q​R​S​T​U​V​W​X​Y​Z​a​b​c​d​e​f​g​h​i​j​k​l​m​n​o​p​q​r​s​t​u​v​w​x​y​z​1​2​3​4​5​6​7​8​9​0​&​.​,​?​!​@​(​)​#​$​%​*​+​-​=​:​;
    +
    +
    +
    + + + + + + + + + + + + + + + + +
    10다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    11다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    12다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    13다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    14다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    16다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    18다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    20다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    24다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    30다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    36다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    48다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    60다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    72다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    90다람쥐헌쳇바퀴에타고파ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    + +
    + +
    + + + +
    + + +
    +
    ◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼body
    body
    body
    body
    +
    + bodyNotoKR-Bold +
    +
    + bodyArial +
    +
    + bodyVerdana +
    +
    + bodyGeorgia +
    + + + +
    + + +
    + +
    +

    10.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    11.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    12.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    13.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    + +
    +
    +
    +

    14.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    16.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    18.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    + +
    + +
    + +
    +
    +

    20.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    +
    +
    +

    24.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    +
    + +
    + +
    + +
    +
    +

    30.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    +
    +
    + +
    + + + +
    +
    +

    10.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    11.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    12.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    13.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    + +
    + +
    +
    +

    14.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    16.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    +

    18.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    + +
    +
    + +
    + +
    +
    +

    20.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    +
    +
    +

    24.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    +
    + +
    + +
    + +
    +
    +

    30.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra augue.

    +
    +
    + +
    + + + + +
    + +
    + +
    + +
    +

    Lorem Ipsum Dolor

    +

    Etiam porta sem malesuada magna mollis euismod

    + + +
    +
    +
    +
    +

    Donec sed odio dui. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

    + + +

    Pellentesque ornare sem

    + +

    Maecenas sed diam eget risus varius blandit sit amet non magna. Maecenas faucibus mollis interdum. Donec ullamcorper nulla non metus auctor fringilla. Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam id dolor id nibh ultricies vehicula ut id elit.

    + +

    Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

    + +

    Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Aenean lacinia bibendum nulla sed consectetur.

    + +

    Nullam quis risus eget urna mollis ornare vel eu leo. Nullam quis risus eget urna mollis ornare vel eu leo. Maecenas sed diam eget risus varius blandit sit amet non magna. Donec ullamcorper nulla non metus auctor fringilla.

    + +

    Cras mattis consectetur

    + +

    Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean lacinia bibendum nulla sed consectetur. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Cras mattis consectetur purus sit amet fermentum.

    + +

    Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis ornare vel eu leo. Cras mattis consectetur purus sit amet fermentum.

    +
    + + +
    + +
    + + + + + + +
    +
    +
    + +

    Language Support

    +

    The subset of NotoKR-Bold in this kit supports the following languages:
    + + English

    +

    Glyph Chart

    +

    The subset of NotoKR-Bold in this kit includes all the glyphs listed below. Unicode entities are included above each glyph to help you insert individual characters into your layout.

    +
    + +

    &#32;

    +

    &#33;

    !
    +

    &#34;

    "
    +

    &#35;

    #
    +

    &#36;

    $
    +

    &#37;

    %
    +

    &#38;

    &
    +

    &#39;

    '
    +

    &#40;

    (
    +

    &#41;

    )
    +

    &#42;

    *
    +

    &#43;

    +
    +

    &#44;

    ,
    +

    &#45;

    -
    +

    &#46;

    .
    +

    &#47;

    /
    +

    &#48;

    0
    +

    &#49;

    1
    +

    &#50;

    2
    +

    &#51;

    3
    +

    &#52;

    4
    +

    &#53;

    5
    +

    &#54;

    6
    +

    &#55;

    7
    +

    &#56;

    8
    +

    &#57;

    9
    +

    &#58;

    :
    +

    &#59;

    ;
    +

    &#60;

    <
    +

    &#61;

    =
    +

    &#62;

    >
    +

    &#63;

    ?
    +

    &#64;

    @
    +

    &#65;

    A
    +

    &#66;

    B
    +

    &#67;

    C
    +

    &#68;

    D
    +

    &#69;

    E
    +

    &#70;

    F
    +

    &#71;

    G
    +

    &#72;

    H
    +

    &#73;

    I
    +

    &#74;

    J
    +

    &#75;

    K
    +

    &#76;

    L
    +

    &#77;

    M
    +

    &#78;

    N
    +

    &#79;

    O
    +

    &#80;

    P
    +

    &#81;

    Q
    +

    &#82;

    R
    +

    &#83;

    S
    +

    &#84;

    T
    +

    &#85;

    U
    +

    &#86;

    V
    +

    &#87;

    W
    +

    &#88;

    X
    +

    &#89;

    Y
    +

    &#90;

    Z
    +

    &#91;

    [
    +

    &#92;

    \
    +

    &#93;

    ]
    +

    &#94;

    ^
    +

    &#95;

    _
    +

    &#96;

    `
    +

    &#97;

    a
    +

    &#98;

    b
    +

    &#99;

    c
    +

    &#100;

    d
    +

    &#101;

    e
    +

    &#102;

    f
    +

    &#103;

    g
    +

    &#104;

    h
    +

    &#105;

    i
    +

    &#106;

    j
    +

    &#107;

    k
    +

    &#108;

    l
    +

    &#109;

    m
    +

    &#110;

    n
    +

    &#111;

    o
    +

    &#112;

    p
    +

    &#113;

    q
    +

    &#114;

    r
    +

    &#115;

    s
    +

    &#116;

    t
    +

    &#117;

    u
    +

    &#118;

    v
    +

    &#119;

    w
    +

    &#120;

    x
    +

    &#121;

    y
    +

    &#122;

    z
    +

    &#123;

    {
    +

    &#124;

    |
    +

    &#125;

    }
    +

    &#126;

    ~
    +

    &#44032;

    +

    &#44033;

    +

    &#44036;

    +

    &#44039;

    +

    &#44040;

    +

    &#44041;

    +

    &#44042;

    +

    &#44048;

    +

    &#44049;

    +

    &#44050;

    +

    &#44051;

    +

    &#44052;

    +

    &#44053;

    +

    &#44054;

    +

    &#44055;

    +

    &#44057;

    +

    &#44058;

    +

    &#44059;

    +

    &#44060;

    +

    &#44061;

    +

    &#44064;

    +

    &#44068;

    +

    &#44076;

    +

    &#44077;

    +

    &#44079;

    +

    &#44080;

    +

    &#44081;

    +

    &#44088;

    +

    &#44089;

    +

    &#44092;

    +

    &#44096;

    +

    &#44107;

    +

    &#44109;

    +

    &#44116;

    +

    &#44120;

    +

    &#44124;

    +

    &#44144;

    +

    &#44145;

    +

    &#44148;

    +

    &#44151;

    +

    &#44152;

    +

    &#44154;

    +

    &#44160;

    +

    &#44161;

    +

    &#44163;

    +

    &#44164;

    +

    &#44165;

    +

    &#44166;

    +

    &#44169;

    +

    &#44170;

    +

    &#44171;

    +

    &#44172;

    +

    &#44176;

    +

    &#44180;

    +

    &#44188;

    +

    &#44189;

    +

    &#44191;

    +

    &#44192;

    +

    &#44193;

    +

    &#44200;

    +

    &#44201;

    +

    &#44202;

    +

    &#44204;

    +

    &#44207;

    +

    &#44208;

    +

    &#44216;

    +

    &#44217;

    +

    &#44219;

    +

    &#44220;

    +

    &#44221;

    +

    &#44225;

    +

    &#44228;

    +

    &#44232;

    +

    &#44236;

    +

    &#44245;

    +

    &#44247;

    +

    &#44256;

    +

    &#44257;

    +

    &#44260;

    +

    &#44263;

    +

    &#44264;

    +

    &#44266;

    +

    &#44268;

    +

    &#44271;

    +

    &#44272;

    +

    &#44273;

    +

    &#44275;

    +

    &#44277;

    +

    &#44278;

    +

    &#44284;

    +

    &#44285;

    +

    &#44288;

    +

    &#44292;

    +

    &#44294;

    +

    &#44300;

    +

    &#44301;

    +

    &#44303;

    +

    &#44305;

    +

    &#44312;

    +

    &#44316;

    +

    &#44320;

    +

    &#44329;

    +

    &#44332;

    +

    &#44333;

    +

    &#44340;

    +

    &#44341;

    +

    &#44344;

    +

    &#44348;

    +

    &#44356;

    +

    &#44357;

    +

    &#44359;

    +

    &#44361;

    +

    &#44368;

    +

    &#44372;

    +

    &#44376;

    +

    &#44385;

    +

    &#44387;

    +

    &#44396;

    +

    &#44397;

    +

    &#44400;

    +

    &#44403;

    +

    &#44404;

    +

    &#44405;

    +

    &#44406;

    +

    &#44411;

    +

    &#44412;

    +

    &#44413;

    +

    &#44415;

    굿
    +

    &#44417;

    +

    &#44418;

    +

    &#44424;

    +

    &#44425;

    +

    &#44428;

    +

    &#44432;

    +

    &#44444;

    +

    &#44445;

    +

    &#44452;

    +

    &#44471;

    +

    &#44480;

    +

    &#44481;

    +

    &#44484;

    +

    &#44488;

    +

    &#44496;

    +

    &#44497;

    +

    &#44499;

    +

    &#44508;

    +

    &#44512;

    +

    &#44516;

    +

    &#44536;

    +

    &#44537;

    +

    &#44540;

    +

    &#44543;

    귿
    +

    &#44544;

    +

    &#44545;

    +

    &#44552;

    +

    &#44553;

    +

    &#44555;

    +

    &#44557;

    +

    &#44564;

    +

    &#44592;

    +

    &#44593;

    +

    &#44596;

    +

    &#44599;

    +

    &#44600;

    +

    &#44602;

    +

    &#44608;

    +

    &#44609;

    +

    &#44611;

    +

    &#44613;

    +

    &#44614;

    +

    &#44618;

    +

    &#44620;

    +

    &#44621;

    +

    &#44622;

    +

    &#44624;

    +

    &#44628;

    +

    &#44630;

    +

    &#44636;

    +

    &#44637;

    +

    &#44639;

    +

    &#44640;

    +

    &#44641;

    +

    &#44645;

    +

    &#44648;

    +

    &#44649;

    +

    &#44652;

    +

    &#44656;

    +

    &#44664;

    +

    &#44665;

    +

    &#44667;

    +

    &#44668;

    +

    &#44669;

    +

    &#44676;

    +

    &#44677;

    +

    &#44684;

    +

    &#44732;

    +

    &#44733;

    +

    &#44734;

    +

    &#44736;

    +

    &#44740;

    +

    &#44748;

    +

    &#44749;

    +

    &#44751;

    +

    &#44752;

    +

    &#44753;

    +

    &#44760;

    +

    &#44761;

    +

    &#44764;

    +

    &#44776;

    +

    &#44779;

    +

    &#44781;

    +

    &#44788;

    +

    &#44792;

    +

    &#44796;

    +

    &#44807;

    +

    &#44808;

    +

    &#44813;

    +

    &#44816;

    +

    &#44844;

    +

    &#44845;

    +

    &#44848;

    +

    &#44850;

    +

    &#44852;

    +

    &#44860;

    +

    &#44861;

    +

    &#44863;

    꼿
    +

    &#44865;

    +

    &#44866;

    +

    &#44867;

    +

    &#44872;

    +

    &#44873;

    +

    &#44880;

    +

    &#44892;

    +

    &#44893;

    +

    &#44900;

    +

    &#44901;

    +

    &#44921;

    +

    &#44928;

    +

    &#44932;

    +

    &#44936;

    +

    &#44944;

    +

    &#44945;

    +

    &#44949;

    +

    &#44956;

    +

    &#44984;

    +

    &#44985;

    +

    &#44988;

    +

    &#44992;

    +

    &#44999;

    +

    &#45000;

    +

    &#45001;

    +

    &#45003;

    +

    &#45005;

    +

    &#45006;

    +

    &#45012;

    +

    &#45020;

    +

    &#45032;

    +

    &#45033;

    +

    &#45040;

    +

    &#45041;

    +

    &#45044;

    +

    &#45048;

    +

    &#45056;

    뀀
    +

    &#45057;

    +

    &#45060;

    +

    &#45068;

    +

    &#45072;

    +

    &#45076;

    +

    &#45084;

    +

    &#45085;

    +

    &#45096;

    +

    &#45124;

    +

    &#45125;

    +

    &#45128;

    +

    &#45130;

    +

    &#45132;

    +

    &#45134;

    +

    &#45139;

    +

    &#45140;

    +

    &#45141;

    +

    &#45143;

    +

    &#45145;

    +

    &#45149;

    +

    &#45180;

    +

    &#45181;

    +

    &#45184;

    +

    &#45188;

    +

    &#45196;

    +

    &#45197;

    +

    &#45199;

    +

    &#45201;

    +

    &#45208;

    +

    &#45209;

    +

    &#45210;

    +

    &#45212;

    +

    &#45215;

    +

    &#45216;

    +

    &#45217;

    +

    &#45218;

    +

    &#45224;

    +

    &#45225;

    +

    &#45227;

    +

    &#45228;

    +

    &#45229;

    +

    &#45230;

    +

    &#45231;

    +

    &#45233;

    +

    &#45235;

    +

    &#45236;

    +

    &#45237;

    +

    &#45240;

    +

    &#45244;

    +

    &#45252;

    +

    &#45253;

    +

    &#45255;

    +

    &#45256;

    +

    &#45257;

    +

    &#45264;

    +

    &#45265;

    +

    &#45268;

    +

    &#45272;

    +

    &#45280;

    +

    &#45285;

    +

    &#45320;

    +

    &#45321;

    +

    &#45323;

    +

    &#45324;

    +

    &#45328;

    +

    &#45330;

    +

    &#45331;

    +

    &#45336;

    +

    &#45337;

    +

    &#45339;

    +

    &#45340;

    +

    &#45341;

    +

    &#45347;

    +

    &#45348;

    +

    &#45349;

    +

    &#45352;

    +

    &#45356;

    +

    &#45364;

    +

    &#45365;

    +

    &#45367;

    +

    &#45368;

    +

    &#45369;

    +

    &#45376;

    +

    &#45377;

    +

    &#45380;

    +

    &#45384;

    +

    &#45392;

    +

    &#45393;

    +

    &#45396;

    +

    &#45397;

    +

    &#45400;

    +

    &#45404;

    +

    &#45408;

    +

    &#45432;

    +

    &#45433;

    +

    &#45436;

    +

    &#45440;

    +

    &#45442;

    +

    &#45448;

    +

    &#45449;

    +

    &#45451;

    +

    &#45453;

    +

    &#45458;

    +

    &#45459;

    +

    &#45460;

    +

    &#45464;

    +

    &#45468;

    +

    &#45480;

    +

    &#45516;

    +

    &#45520;

    +

    &#45524;

    +

    &#45532;

    +

    &#45533;

    +

    &#45535;

    +

    &#45544;

    +

    &#45545;

    +

    &#45548;

    +

    &#45552;

    +

    &#45561;

    +

    &#45563;

    +

    &#45565;

    +

    &#45572;

    +

    &#45573;

    +

    &#45576;

    +

    &#45579;

    +

    &#45580;

    +

    &#45588;

    +

    &#45589;

    +

    &#45591;

    +

    &#45593;

    +

    &#45600;

    +

    &#45620;

    +

    &#45628;

    +

    &#45656;

    +

    &#45660;

    +

    &#45664;

    +

    &#45672;

    +

    &#45673;

    +

    &#45684;

    +

    &#45685;

    +

    &#45692;

    +

    &#45700;

    +

    &#45701;

    +

    &#45705;

    +

    &#45712;

    +

    &#45713;

    +

    &#45716;

    +

    &#45720;

    +

    &#45721;

    +

    &#45722;

    +

    &#45728;

    +

    &#45729;

    +

    &#45731;

    +

    &#45733;

    +

    &#45734;

    +

    &#45738;

    +

    &#45740;

    +

    &#45744;

    +

    &#45748;

    +

    &#45768;

    +

    &#45769;

    +

    &#45772;

    +

    &#45776;

    +

    &#45778;

    +

    &#45784;

    +

    &#45785;

    +

    &#45787;

    +

    &#45789;

    +

    &#45794;

    +

    &#45796;

    +

    &#45797;

    +

    &#45798;

    +

    &#45800;

    +

    &#45803;

    +

    &#45804;

    +

    &#45805;

    +

    &#45806;

    +

    &#45807;

    +

    &#45811;

    +

    &#45812;

    +

    &#45813;

    +

    &#45815;

    +

    &#45816;

    +

    &#45817;

    +

    &#45818;

    +

    &#45819;

    +

    &#45823;

    +

    &#45824;

    +

    &#45825;

    +

    &#45828;

    +

    &#45832;

    +

    &#45840;

    +

    &#45841;

    +

    &#45843;

    +

    &#45844;

    +

    &#45845;

    +

    &#45852;

    +

    &#45908;

    +

    &#45909;

    +

    &#45910;

    +

    &#45912;

    +

    &#45915;

    +

    &#45916;

    +

    &#45918;

    +

    &#45919;

    +

    &#45924;

    +

    &#45925;

    +

    &#45927;

    +

    &#45929;

    +

    &#45931;

    +

    &#45934;

    +

    &#45936;

    +

    &#45937;

    +

    &#45940;

    +

    &#45944;

    +

    &#45952;

    +

    &#45953;

    +

    &#45955;

    +

    &#45956;

    +

    &#45957;

    +

    &#45964;

    +

    &#45968;

    +

    &#45972;

    +

    &#45984;

    +

    &#45985;

    +

    &#45992;

    +

    &#45996;

    +

    &#46020;

    +

    &#46021;

    +

    &#46024;

    +

    &#46027;

    +

    &#46028;

    +

    &#46030;

    +

    &#46032;

    +

    &#46036;

    +

    &#46037;

    +

    &#46039;

    +

    &#46041;

    +

    &#46043;

    +

    &#46045;

    +

    &#46048;

    +

    &#46052;

    +

    &#46056;

    +

    &#46076;

    +

    &#46096;

    +

    &#46104;

    +

    &#46108;

    +

    &#46112;

    +

    &#46120;

    +

    &#46121;

    +

    &#46123;

    +

    &#46132;

    +

    &#46160;

    +

    &#46161;

    +

    &#46164;

    +

    &#46168;

    +

    &#46176;

    +

    &#46177;

    +

    &#46179;

    +

    &#46181;

    +

    &#46188;

    +

    &#46208;

    +

    &#46216;

    +

    &#46237;

    +

    &#46244;

    +

    &#46248;

    +

    &#46252;

    +

    &#46261;

    +

    &#46263;

    +

    &#46265;

    +

    &#46272;

    +

    &#46276;

    +

    &#46280;

    +

    &#46288;

    +

    &#46293;

    +

    &#46300;

    +

    &#46301;

    +

    &#46304;

    +

    &#46307;

    +

    &#46308;

    +

    &#46310;

    +

    &#46316;

    +

    &#46317;

    +

    &#46319;

    +

    &#46321;

    +

    &#46328;

    +

    &#46356;

    +

    &#46357;

    +

    &#46360;

    +

    &#46363;

    +

    &#46364;

    +

    &#46372;

    +

    &#46373;

    +

    &#46375;

    +

    &#46376;

    +

    &#46377;

    +

    &#46378;

    +

    &#46384;

    +

    &#46385;

    +

    &#46388;

    +

    &#46392;

    +

    &#46400;

    +

    &#46401;

    +

    &#46403;

    +

    &#46404;

    +

    &#46405;

    +

    &#46411;

    +

    &#46412;

    +

    &#46413;

    +

    &#46416;

    +

    &#46420;

    +

    &#46428;

    +

    &#46429;

    +

    &#46431;

    +

    &#46432;

    +

    &#46433;

    +

    &#46496;

    +

    &#46497;

    +

    &#46500;

    +

    &#46504;

    +

    &#46506;

    +

    &#46507;

    +

    &#46512;

    +

    &#46513;

    +

    &#46515;

    +

    &#46516;

    +

    &#46517;

    +

    &#46523;

    +

    &#46524;

    +

    &#46525;

    +

    &#46528;

    +

    &#46532;

    +

    &#46540;

    +

    &#46541;

    +

    &#46543;

    +

    &#46544;

    +

    &#46545;

    +

    &#46552;

    +

    &#46572;

    +

    &#46608;

    +

    &#46609;

    +

    &#46612;

    +

    &#46616;

    +

    &#46629;

    +

    &#46636;

    +

    &#46644;

    +

    &#46664;

    +

    &#46692;

    +

    &#46696;

    +

    &#46748;

    +

    &#46749;

    +

    &#46752;

    +

    &#46756;

    +

    &#46763;

    +

    &#46764;

    +

    &#46769;

    +

    &#46804;

    +

    &#46832;

    +

    &#46836;

    +

    &#46840;

    +

    &#46848;

    +

    &#46849;

    +

    &#46853;

    +

    &#46888;

    +

    &#46889;

    +

    &#46892;

    +

    &#46895;

    +

    &#46896;

    +

    &#46904;

    +

    &#46905;

    +

    &#46907;

    +

    &#46916;

    +

    &#46920;

    +

    &#46924;

    +

    &#46932;

    +

    &#46933;

    +

    &#46944;

    +

    &#46948;

    +

    &#46952;

    +

    &#46960;

    +

    &#46961;

    +

    &#46963;

    +

    &#46965;

    +

    &#46972;

    +

    &#46973;

    +

    &#46976;

    +

    &#46980;

    +

    &#46988;

    +

    &#46989;

    +

    &#46991;

    +

    &#46992;

    +

    &#46993;

    +

    &#46994;

    +

    &#46998;

    +

    &#46999;

    +

    &#47000;

    +

    &#47001;

    +

    &#47004;

    +

    &#47008;

    +

    &#47016;

    +

    &#47017;

    +

    &#47019;

    +

    &#47020;

    +

    &#47021;

    +

    &#47028;

    +

    &#47029;

    +

    &#47032;

    +

    &#47047;

    +

    &#47049;

    +

    &#47084;

    +

    &#47085;

    +

    &#47088;

    +

    &#47092;

    +

    &#47100;

    +

    &#47101;

    +

    &#47103;

    +

    &#47104;

    +

    &#47105;

    +

    &#47111;

    +

    &#47112;

    +

    &#47113;

    +

    &#47116;

    +

    &#47120;

    +

    &#47128;

    +

    &#47129;

    +

    &#47131;

    +

    &#47133;

    +

    &#47140;

    +

    &#47141;

    +

    &#47144;

    +

    &#47148;

    +

    &#47156;

    +

    &#47157;

    +

    &#47159;

    +

    &#47160;

    +

    &#47161;

    +

    &#47168;

    +

    &#47172;

    +

    &#47185;

    +

    &#47187;

    +

    &#47196;

    +

    &#47197;

    +

    &#47200;

    +

    &#47204;

    +

    &#47212;

    +

    &#47213;

    +

    &#47215;

    +

    &#47217;

    +

    &#47224;

    +

    &#47228;

    +

    &#47245;

    +

    &#47272;

    +

    &#47280;

    +

    &#47284;

    +

    &#47288;

    +

    &#47296;

    +

    &#47297;

    +

    &#47299;

    +

    &#47301;

    +

    &#47308;

    +

    &#47312;

    +

    &#47316;

    +

    &#47325;

    +

    &#47327;

    +

    &#47329;

    +

    &#47336;

    +

    &#47337;

    +

    &#47340;

    +

    &#47344;

    +

    &#47352;

    +

    &#47353;

    +

    &#47355;

    +

    &#47357;

    +

    &#47364;

    +

    &#47384;

    +

    &#47392;

    +

    &#47420;

    +

    &#47421;

    +

    &#47424;

    +

    &#47428;

    +

    &#47436;

    +

    &#47439;

    +

    &#47441;

    +

    &#47448;

    +

    &#47449;

    +

    &#47452;

    +

    &#47456;

    +

    &#47464;

    +

    &#47465;

    +

    &#47467;

    +

    &#47469;

    +

    &#47476;

    +

    &#47477;

    +

    &#47480;

    +

    &#47484;

    +

    &#47492;

    +

    &#47493;

    +

    &#47495;

    +

    &#47497;

    +

    &#47498;

    +

    &#47501;

    +

    &#47502;

    +

    &#47532;

    +

    &#47533;

    +

    &#47536;

    +

    &#47540;

    +

    &#47548;

    +

    &#47549;

    +

    &#47551;

    릿
    +

    &#47553;

    +

    &#47560;

    +

    &#47561;

    +

    &#47564;

    +

    &#47566;

    +

    &#47567;

    +

    &#47568;

    +

    &#47569;

    +

    &#47570;

    +

    &#47576;

    +

    &#47577;

    +

    &#47579;

    +

    &#47581;

    +

    &#47582;

    +

    &#47585;

    +

    &#47587;

    +

    &#47588;

    +

    &#47589;

    +

    &#47592;

    +

    &#47596;

    +

    &#47604;

    +

    &#47605;

    +

    &#47607;

    +

    &#47608;

    +

    &#47609;

    +

    &#47610;

    +

    &#47616;

    +

    &#47617;

    +

    &#47624;

    +

    &#47637;

    +

    &#47672;

    +

    &#47673;

    +

    &#47676;

    +

    &#47680;

    +

    &#47682;

    +

    &#47688;

    +

    &#47689;

    +

    &#47691;

    +

    &#47693;

    +

    &#47694;

    +

    &#47699;

    +

    &#47700;

    +

    &#47701;

    +

    &#47704;

    +

    &#47708;

    +

    &#47716;

    +

    &#47717;

    +

    &#47719;

    +

    &#47720;

    +

    &#47721;

    +

    &#47728;

    +

    &#47729;

    +

    &#47732;

    +

    &#47736;

    +

    &#47747;

    +

    &#47748;

    +

    &#47749;

    +

    &#47751;

    +

    &#47756;

    +

    &#47784;

    +

    &#47785;

    +

    &#47787;

    +

    &#47788;

    +

    &#47792;

    +

    &#47794;

    +

    &#47800;

    +

    &#47801;

    +

    &#47803;

    +

    &#47805;

    +

    &#47812;

    +

    &#47816;

    +

    &#47832;

    +

    &#47833;

    +

    &#47868;

    +

    &#47872;

    +

    &#47876;

    +

    &#47885;

    +

    &#47887;

    +

    &#47889;

    +

    &#47896;

    +

    &#47900;

    +

    &#47904;

    +

    &#47913;

    +

    &#47915;

    +

    &#47924;

    +

    &#47925;

    +

    &#47926;

    +

    &#47928;

    +

    &#47931;

    +

    &#47932;

    +

    &#47933;

    +

    &#47934;

    +

    &#47940;

    +

    &#47941;

    +

    &#47943;

    +

    &#47945;

    +

    &#47949;

    +

    &#47951;

    +

    &#47952;

    +

    &#47956;

    +

    &#47960;

    +

    &#47969;

    +

    &#47971;

    +

    &#47980;

    +

    &#48008;

    +

    &#48012;

    +

    &#48016;

    +

    &#48036;

    +

    &#48040;

    +

    &#48044;

    +

    &#48052;

    +

    &#48055;

    +

    &#48064;

    +

    &#48068;

    +

    &#48072;

    +

    &#48080;

    +

    &#48083;

    +

    &#48120;

    +

    &#48121;

    +

    &#48124;

    +

    &#48127;

    믿
    +

    &#48128;

    +

    &#48130;

    +

    &#48136;

    +

    &#48137;

    +

    &#48139;

    +

    &#48140;

    +

    &#48141;

    +

    &#48143;

    +

    &#48145;

    +

    &#48148;

    +

    &#48149;

    +

    &#48150;

    +

    &#48151;

    +

    &#48152;

    +

    &#48155;

    +

    &#48156;

    +

    &#48157;

    +

    &#48158;

    +

    &#48159;

    +

    &#48164;

    +

    &#48165;

    +

    &#48167;

    +

    &#48169;

    +

    &#48173;

    +

    &#48176;

    +

    &#48177;

    +

    &#48180;

    +

    &#48184;

    +

    &#48192;

    +

    &#48193;

    +

    &#48195;

    +

    &#48196;

    +

    &#48197;

    +

    &#48201;

    +

    &#48204;

    +

    &#48205;

    +

    &#48208;

    +

    &#48221;

    +

    &#48260;

    +

    &#48261;

    +

    &#48264;

    +

    &#48267;

    +

    &#48268;

    +

    &#48270;

    +

    &#48276;

    +

    &#48277;

    +

    &#48279;

    +

    &#48281;

    +

    &#48282;

    +

    &#48288;

    +

    &#48289;

    +

    &#48292;

    +

    &#48295;

    +

    &#48296;

    +

    &#48304;

    +

    &#48305;

    +

    &#48307;

    +

    &#48308;

    +

    &#48309;

    +

    &#48316;

    +

    &#48317;

    +

    &#48320;

    +

    &#48324;

    +

    &#48333;

    +

    &#48335;

    +

    &#48336;

    +

    &#48337;

    +

    &#48341;

    +

    &#48344;

    +

    &#48348;

    +

    &#48372;

    +

    &#48373;

    +

    &#48374;

    +

    &#48376;

    +

    &#48380;

    +

    &#48388;

    +

    &#48389;

    +

    &#48391;

    +

    &#48393;

    +

    &#48400;

    +

    &#48404;

    +

    &#48420;

    +

    &#48428;

    +

    &#48448;

    +

    &#48456;

    +

    &#48457;

    +

    &#48460;

    +

    &#48464;

    +

    &#48472;

    +

    &#48473;

    +

    &#48484;

    +

    &#48488;

    +

    &#48512;

    +

    &#48513;

    +

    &#48516;

    +

    &#48519;

    +

    &#48520;

    +

    &#48521;

    +

    &#48522;

    +

    &#48528;

    +

    &#48529;

    +

    &#48531;

    +

    &#48533;

    +

    &#48537;

    +

    &#48538;

    +

    &#48540;

    +

    &#48548;

    +

    &#48560;

    +

    &#48568;

    +

    &#48596;

    +

    &#48597;

    +

    &#48600;

    +

    &#48604;

    +

    &#48617;

    +

    &#48624;

    +

    &#48628;

    +

    &#48632;

    +

    &#48640;

    +

    &#48643;

    +

    &#48645;

    +

    &#48652;

    +

    &#48653;

    +

    &#48656;

    +

    &#48660;

    +

    &#48668;

    +

    &#48669;

    +

    &#48671;

    +

    &#48708;

    +

    &#48709;

    +

    &#48712;

    +

    &#48716;

    +

    &#48718;

    +

    &#48724;

    +

    &#48725;

    +

    &#48727;

    +

    &#48729;

    +

    &#48730;

    +

    &#48731;

    +

    &#48736;

    +

    &#48737;

    +

    &#48740;

    +

    &#48744;

    +

    &#48746;

    +

    &#48752;

    +

    &#48753;

    +

    &#48755;

    +

    &#48756;

    +

    &#48757;

    +

    &#48763;

    +

    &#48764;

    +

    &#48765;

    +

    &#48768;

    +

    &#48772;

    +

    &#48780;

    +

    &#48781;

    +

    &#48783;

    +

    &#48784;

    +

    &#48785;

    +

    &#48792;

    +

    &#48793;

    +

    &#48808;

    +

    &#48848;

    +

    &#48849;

    +

    &#48852;

    +

    &#48855;

    +

    &#48856;

    +

    &#48864;

    +

    &#48867;

    +

    &#48868;

    +

    &#48869;

    +

    &#48876;

    +

    &#48897;

    +

    &#48904;

    +

    &#48905;

    +

    &#48920;

    +

    &#48921;

    +

    &#48923;

    +

    &#48924;

    +

    &#48925;

    +

    &#48960;

    +

    &#48961;

    +

    &#48964;

    +

    &#48968;

    +

    &#48976;

    +

    &#48977;

    +

    &#48981;

    +

    &#49044;

    +

    &#49072;

    +

    &#49093;

    +

    &#49100;

    +

    &#49101;

    +

    &#49104;

    +

    &#49108;

    +

    &#49116;

    +

    &#49119;

    +

    &#49121;

    +

    &#49212;

    +

    &#49233;

    +

    &#49240;

    +

    &#49244;

    +

    &#49248;

    +

    &#49256;

    +

    &#49257;

    +

    &#49296;

    +

    &#49297;

    +

    &#49300;

    +

    &#49304;

    +

    &#49312;

    +

    &#49313;

    +

    &#49315;

    +

    &#49317;

    +

    &#49324;

    +

    &#49325;

    +

    &#49327;

    +

    &#49328;

    +

    &#49331;

    +

    &#49332;

    +

    &#49333;

    +

    &#49334;

    +

    &#49340;

    +

    &#49341;

    +

    &#49343;

    +

    &#49344;

    +

    &#49345;

    +

    &#49349;

    +

    &#49352;

    +

    &#49353;

    +

    &#49356;

    +

    &#49360;

    +

    &#49368;

    +

    &#49369;

    +

    &#49371;

    +

    &#49372;

    +

    &#49373;

    +

    &#49380;

    +

    &#49381;

    +

    &#49384;

    +

    &#49388;

    +

    &#49396;

    +

    &#49397;

    +

    &#49399;

    +

    &#49401;

    +

    &#49408;

    +

    &#49412;

    +

    &#49416;

    +

    &#49424;

    +

    &#49429;

    +

    &#49436;

    +

    &#49437;

    +

    &#49438;

    +

    &#49439;

    +

    &#49440;

    +

    &#49443;

    +

    &#49444;

    +

    &#49446;

    +

    &#49447;

    +

    &#49452;

    +

    &#49453;

    +

    &#49455;

    +

    &#49456;

    +

    &#49457;

    +

    &#49462;

    +

    &#49464;

    +

    &#49465;

    +

    &#49468;

    +

    &#49472;

    +

    &#49480;

    +

    &#49481;

    +

    &#49483;

    +

    &#49484;

    +

    &#49485;

    +

    &#49492;

    +

    &#49493;

    +

    &#49496;

    +

    &#49500;

    +

    &#49508;

    +

    &#49509;

    +

    &#49511;

    +

    &#49512;

    +

    &#49513;

    +

    &#49520;

    +

    &#49524;

    +

    &#49528;

    +

    &#49541;

    +

    &#49548;

    +

    &#49549;

    +

    &#49550;

    +

    &#49552;

    +

    &#49556;

    +

    &#49558;

    +

    &#49564;

    +

    &#49565;

    +

    &#49567;

    +

    &#49569;

    +

    &#49573;

    +

    &#49576;

    +

    &#49577;

    +

    &#49580;

    +

    &#49584;

    +

    &#49597;

    +

    &#49604;

    +

    &#49608;

    +

    &#49612;

    +

    &#49620;

    +

    &#49623;

    +

    &#49624;

    +

    &#49632;

    +

    &#49636;

    +

    &#49640;

    +

    &#49648;

    +

    &#49649;

    +

    &#49651;

    +

    &#49660;

    +

    &#49661;

    +

    &#49664;

    +

    &#49668;

    +

    &#49676;

    +

    &#49677;

    +

    &#49679;

    +

    &#49681;

    +

    &#49688;

    +

    &#49689;

    +

    &#49692;

    +

    &#49695;

    +

    &#49696;

    +

    &#49704;

    +

    &#49705;

    +

    &#49707;

    +

    &#49709;

    +

    &#49711;

    +

    &#49713;

    +

    &#49714;

    +

    &#49716;

    +

    &#49736;

    +

    &#49744;

    +

    &#49745;

    +

    &#49748;

    +

    &#49752;

    +

    &#49760;

    +

    &#49765;

    +

    &#49772;

    +

    &#49773;

    +

    &#49776;

    +

    &#49780;

    +

    &#49788;

    +

    &#49789;

    +

    &#49791;

    +

    &#49793;

    +

    &#49800;

    +

    &#49801;

    +

    &#49808;

    +

    &#49816;

    +

    &#49819;

    +

    &#49821;

    +

    &#49828;

    +

    &#49829;

    +

    &#49832;

    +

    &#49836;

    +

    &#49837;

    +

    &#49844;

    +

    &#49845;

    +

    &#49847;

    +

    &#49849;

    +

    &#49884;

    +

    &#49885;

    +

    &#49888;

    +

    &#49891;

    +

    &#49892;

    +

    &#49899;

    +

    &#49900;

    +

    &#49901;

    +

    &#49903;

    +

    &#49905;

    +

    &#49910;

    +

    &#49912;

    +

    &#49913;

    +

    &#49915;

    +

    &#49916;

    +

    &#49920;

    +

    &#49928;

    +

    &#49929;

    +

    &#49932;

    +

    &#49933;

    +

    &#49939;

    +

    &#49940;

    +

    &#49941;

    +

    &#49944;

    +

    &#49948;

    +

    &#49956;

    +

    &#49957;

    +

    &#49960;

    +

    &#49961;

    +

    &#49989;

    +

    &#50024;

    +

    &#50025;

    +

    &#50028;

    +

    &#50032;

    +

    &#50034;

    +

    &#50040;

    +

    &#50041;

    +

    &#50044;

    +

    &#50045;

    +

    &#50052;

    +

    &#50056;

    +

    &#50060;

    +

    &#50112;

    +

    &#50136;

    +

    &#50137;

    +

    &#50140;

    +

    &#50143;

    +

    &#50144;

    +

    &#50146;

    +

    &#50152;

    +

    &#50153;

    +

    &#50157;

    +

    &#50164;

    +

    &#50165;

    +

    &#50168;

    +

    &#50184;

    +

    &#50192;

    +

    &#50212;

    +

    &#50220;

    +

    &#50224;

    +

    &#50228;

    +

    &#50236;

    +

    &#50237;

    +

    &#50248;

    +

    &#50276;

    +

    &#50277;

    +

    &#50280;

    +

    &#50284;

    +

    &#50292;

    +

    &#50293;

    +

    &#50297;

    +

    &#50304;

    +

    &#50324;

    +

    &#50332;

    +

    &#50360;

    +

    &#50364;

    +

    &#50409;

    +

    &#50416;

    +

    &#50417;

    +

    &#50420;

    +

    &#50424;

    +

    &#50426;

    +

    &#50431;

    +

    &#50432;

    +

    &#50433;

    +

    &#50444;

    +

    &#50448;

    +

    &#50452;

    +

    &#50460;

    +

    &#50472;

    +

    &#50473;

    +

    &#50476;

    +

    &#50480;

    +

    &#50488;

    +

    &#50489;

    +

    &#50491;

    +

    &#50493;

    +

    &#50500;

    +

    &#50501;

    +

    &#50504;

    +

    &#50505;

    +

    &#50506;

    +

    &#50508;

    +

    &#50509;

    +

    &#50510;

    +

    &#50515;

    +

    &#50516;

    +

    &#50517;

    +

    &#50519;

    +

    &#50520;

    +

    &#50521;

    +

    &#50525;

    +

    &#50526;

    +

    &#50528;

    +

    &#50529;

    +

    &#50532;

    +

    &#50536;

    +

    &#50544;

    +

    &#50545;

    +

    &#50547;

    +

    &#50548;

    +

    &#50549;

    +

    &#50556;

    +

    &#50557;

    +

    &#50560;

    +

    &#50564;

    +

    &#50567;

    +

    &#50572;

    +

    &#50573;

    +

    &#50575;

    +

    &#50577;

    +

    &#50581;

    +

    &#50583;

    +

    &#50584;

    +

    &#50588;

    +

    &#50592;

    +

    &#50601;

    +

    &#50612;

    +

    &#50613;

    +

    &#50616;

    +

    &#50617;

    +

    &#50619;

    +

    &#50620;

    +

    &#50621;

    +

    &#50622;

    +

    &#50628;

    +

    &#50629;

    +

    &#50630;

    +

    &#50631;

    +

    &#50632;

    +

    &#50633;

    +

    &#50634;

    +

    &#50636;

    +

    &#50638;

    +

    &#50640;

    +

    &#50641;

    +

    &#50644;

    +

    &#50648;

    +

    &#50656;

    +

    &#50657;

    +

    &#50659;

    +

    &#50661;

    +

    &#50668;

    +

    &#50669;

    +

    &#50670;

    +

    &#50672;

    +

    &#50676;

    +

    &#50678;

    +

    &#50679;

    +

    &#50684;

    +

    &#50685;

    +

    &#50686;

    +

    &#50687;

    +

    &#50688;

    +

    &#50689;

    +

    &#50693;

    +

    &#50694;

    +

    &#50695;

    +

    &#50696;

    +

    &#50700;

    +

    &#50704;

    +

    &#50712;

    +

    &#50713;

    +

    &#50715;

    +

    &#50716;

    +

    &#50724;

    +

    &#50725;

    +

    &#50728;

    +

    &#50732;

    +

    &#50733;

    +

    &#50734;

    +

    &#50736;

    +

    &#50739;

    +

    &#50740;

    +

    &#50741;

    +

    &#50743;

    +

    &#50745;

    +

    &#50747;

    +

    &#50752;

    +

    &#50753;

    +

    &#50756;

    +

    &#50760;

    +

    &#50768;

    +

    &#50769;

    +

    &#50771;

    +

    &#50772;

    +

    &#50773;

    +

    &#50780;

    +

    &#50781;

    +

    &#50784;

    +

    &#50796;

    +

    &#50799;

    +

    &#50801;

    +

    &#50808;

    +

    &#50809;

    +

    &#50812;

    +

    &#50816;

    +

    &#50824;

    +

    &#50825;

    +

    &#50827;

    +

    &#50829;

    +

    &#50836;

    +

    &#50837;

    +

    &#50840;

    +

    &#50844;

    +

    &#50852;

    +

    &#50853;

    +

    &#50855;

    +

    &#50857;

    +

    &#50864;

    +

    &#50865;

    +

    &#50868;

    +

    &#50872;

    +

    &#50873;

    +

    &#50874;

    +

    &#50880;

    +

    &#50881;

    +

    &#50883;

    +

    &#50885;

    +

    &#50892;

    +

    &#50893;

    +

    &#50896;

    +

    &#50900;

    +

    &#50908;

    +

    &#50909;

    +

    &#50912;

    +

    &#50913;

    +

    &#50920;

    +

    &#50921;

    +

    &#50924;

    +

    &#50928;

    +

    &#50936;

    +

    &#50937;

    +

    &#50941;

    +

    &#50948;

    +

    &#50949;

    +

    &#50952;

    +

    &#50956;

    +

    &#50964;

    +

    &#50965;

    +

    &#50967;

    +

    &#50969;

    +

    &#50976;

    +

    &#50977;

    +

    &#50980;

    +

    &#50984;

    +

    &#50992;

    +

    &#50993;

    +

    &#50995;

    +

    &#50997;

    +

    &#50999;

    +

    &#51004;

    +

    &#51005;

    +

    &#51008;

    +

    &#51012;

    +

    &#51018;

    +

    &#51020;

    +

    &#51021;

    +

    &#51023;

    +

    &#51025;

    +

    &#51026;

    +

    &#51027;

    +

    &#51028;

    +

    &#51029;

    +

    &#51030;

    +

    &#51031;

    +

    &#51032;

    +

    &#51036;

    +

    &#51040;

    +

    &#51048;

    +

    &#51051;

    +

    &#51060;

    +

    &#51061;

    +

    &#51064;

    +

    &#51068;

    +

    &#51069;

    +

    &#51070;

    +

    &#51075;

    +

    &#51076;

    +

    &#51077;

    +

    &#51079;

    +

    &#51080;

    +

    &#51081;

    +

    &#51082;

    +

    &#51086;

    +

    &#51088;

    +

    &#51089;

    +

    &#51092;

    +

    &#51094;

    +

    &#51095;

    +

    &#51096;

    +

    &#51098;

    +

    &#51104;

    +

    &#51105;

    +

    &#51107;

    +

    &#51108;

    +

    &#51109;

    +

    &#51110;

    +

    &#51116;

    +

    &#51117;

    +

    &#51120;

    +

    &#51124;

    +

    &#51132;

    +

    &#51133;

    +

    &#51135;

    +

    &#51136;

    +

    &#51137;

    +

    &#51144;

    +

    &#51145;

    +

    &#51148;

    +

    &#51150;

    +

    &#51152;

    +

    &#51160;

    +

    &#51165;

    +

    &#51172;

    +

    &#51176;

    +

    &#51180;

    +

    &#51200;

    +

    &#51201;

    +

    &#51204;

    +

    &#51208;

    +

    &#51210;

    +

    &#51216;

    +

    &#51217;

    +

    &#51219;

    +

    &#51221;

    +

    &#51222;

    +

    &#51228;

    +

    &#51229;

    +

    &#51232;

    +

    &#51236;

    +

    &#51244;

    +

    &#51245;

    +

    &#51247;

    +

    &#51249;

    +

    &#51256;

    +

    &#51260;

    +

    &#51264;

    +

    &#51272;

    +

    &#51273;

    +

    &#51276;

    +

    &#51277;

    +

    &#51284;

    +

    &#51312;

    +

    &#51313;

    +

    &#51316;

    +

    &#51320;

    +

    &#51322;

    +

    &#51328;

    +

    &#51329;

    +

    &#51331;

    +

    &#51333;

    +

    &#51334;

    +

    &#51335;

    +

    &#51339;

    +

    &#51340;

    +

    &#51341;

    +

    &#51348;

    +

    &#51357;

    +

    &#51359;

    +

    &#51361;

    +

    &#51368;

    +

    &#51388;

    +

    &#51389;

    +

    &#51396;

    +

    &#51400;

    +

    &#51404;

    +

    &#51412;

    +

    &#51413;

    +

    &#51415;

    +

    &#51417;

    +

    &#51424;

    +

    &#51425;

    +

    &#51428;

    +

    &#51445;

    +

    &#51452;

    +

    &#51453;

    +

    &#51456;

    +

    &#51460;

    +

    &#51461;

    +

    &#51462;

    +

    &#51468;

    +

    &#51469;

    +

    &#51471;

    +

    &#51473;

    +

    &#51480;

    +

    &#51500;

    +

    &#51508;

    +

    &#51536;

    +

    &#51537;

    +

    &#51540;

    +

    &#51544;

    +

    &#51552;

    +

    &#51553;

    +

    &#51555;

    +

    &#51564;

    +

    &#51568;

    +

    &#51572;

    +

    &#51580;

    +

    &#51592;

    +

    &#51593;

    +

    &#51596;

    +

    &#51600;

    +

    &#51608;

    +

    &#51609;

    +

    &#51611;

    +

    &#51613;

    +

    &#51648;

    +

    &#51649;

    +

    &#51652;

    +

    &#51655;

    +

    &#51656;

    +

    &#51658;

    +

    &#51664;

    +

    &#51665;

    +

    &#51667;

    +

    &#51669;

    +

    &#51670;

    +

    &#51673;

    +

    &#51674;

    +

    &#51676;

    +

    &#51677;

    +

    &#51680;

    +

    &#51682;

    +

    &#51684;

    +

    &#51687;

    +

    &#51692;

    +

    &#51693;

    +

    &#51695;

    +

    &#51696;

    +

    &#51697;

    +

    &#51704;

    +

    &#51705;

    +

    &#51708;

    +

    &#51712;

    +

    &#51720;

    +

    &#51721;

    +

    &#51723;

    +

    &#51724;

    +

    &#51725;

    +

    &#51732;

    +

    &#51736;

    +

    &#51753;

    +

    &#51788;

    +

    &#51789;

    +

    &#51792;

    +

    &#51796;

    +

    &#51804;

    +

    &#51805;

    +

    &#51807;

    +

    &#51808;

    +

    &#51809;

    +

    &#51816;

    +

    &#51837;

    +

    &#51844;

    +

    &#51864;

    +

    &#51900;

    +

    &#51901;

    +

    &#51904;

    +

    &#51908;

    +

    &#51916;

    +

    &#51917;

    +

    &#51919;

    +

    &#51921;

    +

    &#51923;

    +

    &#51928;

    +

    &#51929;

    +

    &#51936;

    +

    &#51948;

    +

    &#51956;

    +

    &#51976;

    +

    &#51984;

    +

    &#51988;

    +

    &#51992;

    +

    &#52000;

    +

    &#52001;

    +

    &#52033;

    +

    &#52040;

    +

    &#52041;

    +

    &#52044;

    +

    &#52048;

    +

    &#52056;

    +

    &#52057;

    +

    &#52061;

    +

    &#52068;

    +

    &#52088;

    +

    &#52089;

    +

    &#52124;

    +

    &#52152;

    +

    &#52180;

    +

    &#52196;

    +

    &#52199;

    +

    &#52201;

    +

    &#52236;

    +

    &#52237;

    +

    &#52240;

    +

    &#52244;

    +

    &#52252;

    +

    &#52253;

    +

    &#52257;

    +

    &#52258;

    +

    &#52263;

    +

    &#52264;

    +

    &#52265;

    +

    &#52268;

    +

    &#52270;

    +

    &#52272;

    +

    &#52280;

    +

    &#52281;

    +

    &#52283;

    +

    &#52284;

    +

    &#52285;

    +

    &#52286;

    +

    &#52292;

    +

    &#52293;

    +

    &#52296;

    +

    &#52300;

    +

    &#52308;

    +

    &#52309;

    +

    &#52311;

    +

    &#52312;

    +

    &#52313;

    +

    &#52320;

    +

    &#52324;

    +

    &#52326;

    +

    &#52328;

    +

    &#52336;

    +

    &#52341;

    +

    &#52376;

    +

    &#52377;

    +

    &#52380;

    +

    &#52384;

    +

    &#52392;

    +

    &#52393;

    +

    &#52395;

    +

    &#52396;

    +

    &#52397;

    +

    &#52404;

    +

    &#52405;

    +

    &#52408;

    +

    &#52412;

    +

    &#52420;

    +

    &#52421;

    +

    &#52423;

    +

    &#52425;

    +

    &#52432;

    +

    &#52436;

    +

    &#52452;

    +

    &#52460;

    +

    &#52464;

    +

    &#52481;

    +

    &#52488;

    +

    &#52489;

    +

    &#52492;

    +

    &#52496;

    +

    &#52504;

    +

    &#52505;

    +

    &#52507;

    +

    &#52509;

    +

    &#52516;

    +

    &#52520;

    +

    &#52524;

    +

    &#52537;

    +

    &#52572;

    +

    &#52576;

    +

    &#52580;

    +

    &#52588;

    +

    &#52589;

    +

    &#52591;

    +

    &#52593;

    +

    &#52600;

    +

    &#52616;

    +

    &#52628;

    +

    &#52629;

    +

    &#52632;

    +

    &#52636;

    +

    &#52644;

    +

    &#52645;

    +

    &#52647;

    +

    &#52649;

    +

    &#52656;

    +

    &#52676;

    +

    &#52684;

    +

    &#52688;

    +

    &#52712;

    +

    &#52716;

    +

    &#52720;

    +

    &#52728;

    +

    &#52729;

    +

    &#52731;

    +

    &#52733;

    +

    &#52740;

    +

    &#52744;

    +

    &#52748;

    +

    &#52756;

    +

    &#52761;

    +

    &#52768;

    +

    &#52769;

    +

    &#52772;

    +

    &#52776;

    +

    &#52784;

    +

    &#52785;

    +

    &#52787;

    +

    &#52789;

    +

    &#52824;

    +

    &#52825;

    +

    &#52828;

    +

    &#52831;

    +

    &#52832;

    +

    &#52833;

    +

    &#52840;

    +

    &#52841;

    +

    &#52843;

    +

    &#52845;

    +

    &#52852;

    +

    &#52853;

    +

    &#52856;

    +

    &#52860;

    +

    &#52868;

    +

    &#52869;

    +

    &#52871;

    +

    &#52873;

    +

    &#52880;

    +

    &#52881;

    +

    &#52884;

    +

    &#52888;

    +

    &#52896;

    +

    &#52897;

    +

    &#52899;

    +

    &#52900;

    +

    &#52901;

    +

    &#52908;

    +

    &#52909;

    +

    &#52929;

    +

    &#52964;

    +

    &#52965;

    +

    &#52968;

    +

    &#52971;

    +

    &#52972;

    +

    &#52980;

    +

    &#52981;

    +

    &#52983;

    +

    &#52984;

    +

    &#52985;

    +

    &#52992;

    +

    &#52993;

    +

    &#52996;

    +

    &#53000;

    +

    &#53008;

    +

    &#53009;

    +

    &#53011;

    +

    &#53013;

    +

    &#53020;

    +

    &#53024;

    +

    &#53028;

    +

    &#53036;

    +

    &#53037;

    +

    &#53039;

    +

    &#53040;

    +

    &#53041;

    +

    &#53048;

    +

    &#53076;

    +

    &#53077;

    +

    &#53080;

    +

    &#53084;

    +

    &#53092;

    +

    &#53093;

    +

    &#53095;

    +

    &#53097;

    +

    &#53104;

    +

    &#53105;

    +

    &#53108;

    +

    &#53112;

    +

    &#53120;

    +

    &#53125;

    +

    &#53132;

    +

    &#53153;

    +

    &#53160;

    +

    &#53168;

    +

    &#53188;

    +

    &#53216;

    +

    &#53217;

    +

    &#53220;

    +

    &#53224;

    +

    &#53232;

    +

    &#53233;

    +

    &#53235;

    +

    &#53237;

    +

    &#53244;

    +

    &#53248;

    퀀
    +

    &#53252;

    +

    &#53265;

    +

    &#53272;

    +

    &#53293;

    +

    &#53300;

    +

    &#53301;

    +

    &#53304;

    +

    &#53308;

    +

    &#53316;

    +

    &#53317;

    +

    &#53319;

    +

    &#53321;

    +

    &#53328;

    +

    &#53332;

    +

    &#53336;

    +

    &#53344;

    +

    &#53356;

    +

    &#53357;

    +

    &#53360;

    +

    &#53364;

    +

    &#53372;

    +

    &#53373;

    +

    &#53377;

    +

    &#53412;

    +

    &#53413;

    +

    &#53416;

    +

    &#53420;

    +

    &#53428;

    +

    &#53429;

    +

    &#53431;

    +

    &#53433;

    +

    &#53440;

    +

    &#53441;

    +

    &#53444;

    +

    &#53448;

    +

    &#53449;

    +

    &#53456;

    +

    &#53457;

    +

    &#53459;

    +

    &#53460;

    +

    &#53461;

    +

    &#53468;

    +

    &#53469;

    +

    &#53472;

    +

    &#53476;

    +

    &#53484;

    +

    &#53485;

    +

    &#53487;

    +

    &#53488;

    +

    &#53489;

    +

    &#53496;

    +

    &#53517;

    +

    &#53552;

    +

    &#53553;

    +

    &#53556;

    +

    &#53560;

    +

    &#53562;

    +

    &#53568;

    +

    &#53569;

    +

    &#53571;

    +

    &#53572;

    +

    &#53573;

    +

    &#53580;

    +

    &#53581;

    +

    &#53584;

    +

    &#53588;

    +

    &#53596;

    +

    &#53597;

    +

    &#53599;

    +

    &#53601;

    +

    &#53608;

    +

    &#53612;

    +

    &#53628;

    +

    &#53636;

    +

    &#53640;

    +

    &#53664;

    +

    &#53665;

    +

    &#53668;

    +

    &#53672;

    +

    &#53680;

    +

    &#53681;

    +

    &#53683;

    +

    &#53685;

    +

    &#53690;

    +

    &#53692;

    +

    &#53696;

    +

    &#53720;

    +

    &#53748;

    +

    &#53752;

    +

    &#53767;

    +

    &#53769;

    +

    &#53776;

    +

    &#53804;

    +

    &#53805;

    +

    &#53808;

    +

    &#53812;

    +

    &#53820;

    +

    &#53821;

    +

    &#53823;

    +

    &#53825;

    +

    &#53832;

    +

    &#53852;

    +

    &#53860;

    +

    &#53888;

    +

    &#53889;

    +

    &#53892;

    +

    &#53896;

    +

    &#53904;

    +

    &#53905;

    +

    &#53909;

    +

    &#53916;

    +

    &#53920;

    +

    &#53924;

    +

    &#53932;

    +

    &#53937;

    +

    &#53944;

    +

    &#53945;

    +

    &#53948;

    +

    &#53951;

    +

    &#53952;

    +

    &#53954;

    +

    &#53960;

    +

    &#53961;

    +

    &#53963;

    +

    &#53972;

    +

    &#53976;

    +

    &#53980;

    +

    &#53988;

    +

    &#53989;

    +

    &#54000;

    +

    &#54001;

    +

    &#54004;

    +

    &#54008;

    +

    &#54016;

    +

    &#54017;

    +

    &#54019;

    +

    &#54021;

    +

    &#54028;

    +

    &#54029;

    +

    &#54030;

    +

    &#54032;

    +

    &#54036;

    +

    &#54038;

    +

    &#54044;

    +

    &#54045;

    +

    &#54047;

    +

    &#54048;

    +

    &#54049;

    +

    &#54053;

    +

    &#54056;

    +

    &#54057;

    +

    &#54060;

    +

    &#54064;

    +

    &#54072;

    +

    &#54073;

    +

    &#54075;

    +

    &#54076;

    +

    &#54077;

    +

    &#54084;

    +

    &#54085;

    +

    &#54140;

    +

    &#54141;

    +

    &#54144;

    +

    &#54148;

    +

    &#54156;

    +

    &#54157;

    +

    &#54159;

    +

    &#54160;

    +

    &#54161;

    +

    &#54168;

    +

    &#54169;

    +

    &#54172;

    +

    &#54176;

    +

    &#54184;

    +

    &#54185;

    +

    &#54187;

    +

    &#54189;

    +

    &#54196;

    +

    &#54200;

    +

    &#54204;

    +

    &#54212;

    +

    &#54213;

    +

    &#54216;

    +

    &#54217;

    +

    &#54224;

    +

    &#54232;

    +

    &#54241;

    +

    &#54243;

    +

    &#54252;

    +

    &#54253;

    +

    &#54256;

    +

    &#54260;

    +

    &#54268;

    +

    &#54269;

    +

    &#54271;

    +

    &#54273;

    +

    &#54280;

    +

    &#54301;

    +

    &#54336;

    +

    &#54340;

    +

    &#54364;

    +

    &#54368;

    +

    &#54372;

    +

    &#54381;

    +

    &#54383;

    +

    &#54392;

    +

    &#54393;

    +

    &#54396;

    +

    &#54399;

    +

    &#54400;

    +

    &#54402;

    +

    &#54408;

    +

    &#54409;

    +

    &#54411;

    +

    &#54413;

    +

    &#54420;

    +

    &#54441;

    +

    &#54476;

    +

    &#54480;

    +

    &#54484;

    +

    &#54492;

    +

    &#54495;

    +

    &#54504;

    +

    &#54508;

    +

    &#54512;

    +

    &#54520;

    +

    &#54523;

    +

    &#54525;

    +

    &#54532;

    +

    &#54536;

    +

    &#54540;

    +

    &#54548;

    +

    &#54549;

    +

    &#54551;

    +

    &#54588;

    +

    &#54589;

    +

    &#54592;

    +

    &#54596;

    +

    &#54604;

    +

    &#54605;

    +

    &#54607;

    +

    &#54609;

    +

    &#54616;

    +

    &#54617;

    +

    &#54620;

    +

    &#54624;

    +

    &#54629;

    +

    &#54632;

    +

    &#54633;

    +

    &#54635;

    +

    &#54637;

    +

    &#54644;

    +

    &#54645;

    +

    &#54648;

    +

    &#54652;

    +

    &#54660;

    +

    &#54661;

    +

    &#54663;

    +

    &#54664;

    +

    &#54665;

    +

    &#54672;

    +

    &#54693;

    +

    &#54728;

    +

    &#54729;

    +

    &#54732;

    +

    &#54736;

    +

    &#54738;

    +

    &#54744;

    +

    &#54745;

    +

    &#54747;

    +

    &#54749;

    +

    &#54756;

    +

    &#54757;

    +

    &#54760;

    +

    &#54764;

    +

    &#54772;

    +

    &#54773;

    +

    &#54775;

    +

    &#54777;

    +

    &#54784;

    +

    &#54785;

    +

    &#54788;

    +

    &#54792;

    +

    &#54800;

    +

    &#54801;

    +

    &#54803;

    +

    &#54804;

    +

    &#54805;

    +

    &#54812;

    +

    &#54816;

    +

    &#54820;

    +

    &#54829;

    +

    &#54840;

    +

    &#54841;

    +

    &#54844;

    +

    &#54848;

    +

    &#54853;

    +

    &#54856;

    +

    &#54857;

    +

    &#54859;

    +

    &#54861;

    +

    &#54865;

    +

    &#54868;

    +

    &#54869;

    +

    &#54872;

    +

    &#54876;

    +

    &#54887;

    +

    &#54889;

    +

    &#54896;

    +

    &#54897;

    +

    &#54900;

    +

    &#54915;

    +

    &#54917;

    +

    &#54924;

    +

    &#54925;

    +

    &#54928;

    +

    &#54932;

    +

    &#54941;

    +

    &#54943;

    +

    &#54945;

    +

    &#54952;

    +

    &#54956;

    +

    &#54960;

    +

    &#54969;

    +

    &#54971;

    +

    &#54980;

    +

    &#54981;

    +

    &#54984;

    +

    &#54988;

    +

    &#54993;

    +

    &#54996;

    +

    &#54999;

    +

    &#55001;

    +

    &#55008;

    +

    &#55012;

    +

    &#55016;

    +

    &#55024;

    +

    &#55029;

    +

    &#55036;

    +

    &#55037;

    +

    &#55040;

    +

    &#55044;

    +

    &#55057;

    +

    &#55064;

    +

    &#55065;

    +

    &#55068;

    +

    &#55072;

    +

    &#55080;

    +

    &#55081;

    +

    &#55083;

    +

    &#55085;

    +

    &#55092;

    +

    &#55093;

    +

    &#55096;

    +

    &#55100;

    +

    &#55108;

    +

    &#55111;

    +

    &#55113;

    +

    &#55120;

    +

    &#55121;

    +

    &#55124;

    +

    &#55126;

    +

    &#55127;

    +

    &#55128;

    +

    &#55129;

    +

    &#55136;

    +

    &#55137;

    +

    &#55139;

    +

    &#55141;

    +

    &#55145;

    +

    &#55148;

    +

    &#55152;

    +

    &#55156;

    +

    &#55164;

    +

    &#55165;

    +

    &#55169;

    +

    &#55176;

    +

    &#55177;

    +

    &#55180;

    +

    &#55184;

    +

    &#55192;

    +

    &#55193;

    +

    &#55195;

    +

    &#55197;

    +
    +
    + + +
    +
    + + +
    + +
    + +
    +
    +
    +

    Installing Webfonts

    + +

    Webfonts are supported by all major browser platforms but not all in the same way. There are currently four different font formats that must be included in order to target all browsers. This includes TTF, WOFF, EOT and SVG.

    + +

    1. Upload your webfonts

    +

    You must upload your webfont kit to your website. They should be in or near the same directory as your CSS files.

    + +

    2. Include the webfont stylesheet

    +

    A special CSS @font-face declaration helps the various browsers select the appropriate font it needs without causing you a bunch of headaches. Learn more about this syntax by reading the Fontspring blog post about it. The code for it is as follows:

    + + + +@font-face{ + font-family: 'MyWebFont'; + src: url('WebFont.eot'); + src: url('WebFont.eot?#iefix') format('embedded-opentype'), + url('WebFont.woff') format('woff'), + url('WebFont.ttf') format('truetype'), + url('WebFont.svg#webfont') format('svg'); +} + + +

    We've already gone ahead and generated the code for you. All you have to do is link to the stylesheet in your HTML, like this:

    + <link rel="stylesheet" href="stylesheet.css" type="text/css" charset="utf-8" /> + +

    3. Modify your own stylesheet

    +

    To take advantage of your new fonts, you must tell your stylesheet to use them. Look at the original @font-face declaration above and find the property called "font-family." The name linked there will be what you use to reference the font. Prepend that webfont name to the font stack in the "font-family" property, inside the selector you want to change. For example:

    +p { font-family: 'WebFont', Arial, sans-serif; } + +

    4. Test

    +

    Getting webfonts to work cross-browser can be tricky. Use the information in the sidebar to help you if you find that fonts aren't loading in a particular browser.

    +
    + + +
    + +
    + +
    + +
    + + diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.eot b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.eot new file mode 100644 index 00000000..4b3212a4 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.eot differ diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.svg b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.svg new file mode 100644 index 00000000..61b5f90e --- /dev/null +++ b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.svg @@ -0,0 +1,2457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.ttf b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.ttf new file mode 100644 index 00000000..94e878e2 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.ttf differ diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.woff b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.woff new file mode 100644 index 00000000..82eb37a0 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.woff differ diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.woff2 b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.woff2 new file mode 100644 index 00000000..bcae199f Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/notokr-bold.woff2 differ diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/easytabs.js b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/easytabs.js new file mode 100644 index 00000000..167f53b7 --- /dev/null +++ b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/easytabs.js @@ -0,0 +1,7 @@ +(function($){$.fn.easyTabs=function(option){var param=jQuery.extend({fadeSpeed:"fast",defaultContent:1,activeClass:'active'},option);$(this).each(function(){var thisId="#"+this.id;if(param.defaultContent==''){param.defaultContent=1;} +if(typeof param.defaultContent=="number") +{var defaultTab=$(thisId+" .tabs li:eq("+(param.defaultContent-1)+") a").attr('href').substr(1);}else{var defaultTab=param.defaultContent;} +$(thisId+" .tabs li a").each(function(){var tabToHide=$(this).attr('href').substr(1);$("#"+tabToHide).addClass('easytabs-tab-content');});hideAll();changeContent(defaultTab);function hideAll(){$(thisId+" .easytabs-tab-content").hide();} +function changeContent(tabId){hideAll();$(thisId+" .tabs li").removeClass(param.activeClass);$(thisId+" .tabs li a[href=#"+tabId+"]").closest('li').addClass(param.activeClass);if(param.fadeSpeed!="none") +{$(thisId+" #"+tabId).fadeIn(param.fadeSpeed);}else{$(thisId+" #"+tabId).show();}} +$(thisId+" .tabs li").click(function(){var tabId=$(this).find('a').attr('href').substr(1);changeContent(tabId);return false;});});}})(jQuery); \ No newline at end of file diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/grid_12-825-55-15.css b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/grid_12-825-55-15.css new file mode 100644 index 00000000..3d6aef78 --- /dev/null +++ b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/grid_12-825-55-15.css @@ -0,0 +1,129 @@ +/*Notes about grid: +Columns: 12 +Grid Width: 825px +Column Width: 55px +Gutter Width: 15px +-------------------------------*/ + + + +.section {margin-bottom: 18px; +} +.section:after {content: ".";display: block;height: 0;clear: both;visibility: hidden;} +.section {*zoom: 1;} + +.section .firstcolumn, +.section .firstcol {margin-left: 0;} + + +/* Border on left hand side of a column. */ +.border { + padding-left: 7px; + margin-left: 7px; + border-left: 1px solid #eee; +} + +/* Border with more whitespace, spans one column. */ +.colborder { + padding-left: 42px; + margin-left: 42px; + border-left: 1px solid #eee; +} + + + +/* The Grid Classes */ +.grid1, .grid1_2cols, .grid1_3cols, .grid1_4cols, .grid2, .grid2_3cols, .grid2_4cols, .grid3, .grid3_2cols, .grid3_4cols, .grid4, .grid4_3cols, .grid5, .grid5_2cols, .grid5_3cols, .grid5_4cols, .grid6, .grid6_4cols, .grid7, .grid7_2cols, .grid7_3cols, .grid7_4cols, .grid8, .grid8_3cols, .grid9, .grid9_2cols, .grid9_4cols, .grid10, .grid10_3cols, .grid10_4cols, .grid11, .grid11_2cols, .grid11_3cols, .grid11_4cols, .grid12 +{margin-left: 15px;float: left;display: inline; overflow: hidden;} + + +.width1, .grid1, .span-1 {width: 55px;} +.width1_2cols,.grid1_2cols {width: 20px;} +.width1_3cols,.grid1_3cols {width: 8px;} +.width1_4cols,.grid1_4cols {width: 2px;} +.input_width1 {width: 49px;} + +.width2, .grid2, .span-2 {width: 125px;} +.width2_3cols,.grid2_3cols {width: 31px;} +.width2_4cols,.grid2_4cols {width: 20px;} +.input_width2 {width: 119px;} + +.width3, .grid3, .span-3 {width: 195px;} +.width3_2cols,.grid3_2cols {width: 90px;} +.width3_4cols,.grid3_4cols {width: 37px;} +.input_width3 {width: 189px;} + +.width4, .grid4, .span-4 {width: 265px;} +.width4_3cols,.grid4_3cols {width: 78px;} +.input_width4 {width: 259px;} + +.width5, .grid5, .span-5 {width: 335px;} +.width5_2cols,.grid5_2cols {width: 160px;} +.width5_3cols,.grid5_3cols {width: 101px;} +.width5_4cols,.grid5_4cols {width: 72px;} +.input_width5 {width: 329px;} + +.width6, .grid6, .span-6 {width: 405px;} +.width6_4cols,.grid6_4cols {width: 90px;} +.input_width6 {width: 399px;} + +.width7, .grid7, .span-7 {width: 475px;} +.width7_2cols,.grid7_2cols {width: 230px;} +.width7_3cols,.grid7_3cols {width: 148px;} +.width7_4cols,.grid7_4cols {width: 107px;} +.input_width7 {width: 469px;} + +.width8, .grid8, .span-8 {width: 545px;} +.width8_3cols,.grid8_3cols {width: 171px;} +.input_width8 {width: 539px;} + +.width9, .grid9, .span-9 {width: 615px;} +.width9_2cols,.grid9_2cols {width: 300px;} +.width9_4cols,.grid9_4cols {width: 142px;} +.input_width9 {width: 609px;} + +.width10, .grid10, .span-10 {width: 685px;} +.width10_3cols,.grid10_3cols {width: 218px;} +.width10_4cols,.grid10_4cols {width: 160px;} +.input_width10 {width: 679px;} + +.width11, .grid11, .span-11 {width: 755px;} +.width11_2cols,.grid11_2cols {width: 370px;} +.width11_3cols,.grid11_3cols {width: 241px;} +.width11_4cols,.grid11_4cols {width: 177px;} +.input_width11 {width: 749px;} + +.width12, .grid12, .span-12 {width: 825px;} +.input_width12 {width: 819px;} + +/* Subdivided grid spaces */ +.emptycols_left1, .prepend-1 {padding-left: 70px;} +.emptycols_right1, .append-1 {padding-right: 70px;} +.emptycols_left2, .prepend-2 {padding-left: 140px;} +.emptycols_right2, .append-2 {padding-right: 140px;} +.emptycols_left3, .prepend-3 {padding-left: 210px;} +.emptycols_right3, .append-3 {padding-right: 210px;} +.emptycols_left4, .prepend-4 {padding-left: 280px;} +.emptycols_right4, .append-4 {padding-right: 280px;} +.emptycols_left5, .prepend-5 {padding-left: 350px;} +.emptycols_right5, .append-5 {padding-right: 350px;} +.emptycols_left6, .prepend-6 {padding-left: 420px;} +.emptycols_right6, .append-6 {padding-right: 420px;} +.emptycols_left7, .prepend-7 {padding-left: 490px;} +.emptycols_right7, .append-7 {padding-right: 490px;} +.emptycols_left8, .prepend-8 {padding-left: 560px;} +.emptycols_right8, .append-8 {padding-right: 560px;} +.emptycols_left9, .prepend-9 {padding-left: 630px;} +.emptycols_right9, .append-9 {padding-right: 630px;} +.emptycols_left10, .prepend-10 {padding-left: 700px;} +.emptycols_right10, .append-10 {padding-right: 700px;} +.emptycols_left11, .prepend-11 {padding-left: 770px;} +.emptycols_right11, .append-11 {padding-right: 770px;} +.pull-1 {margin-left: -70px;} +.push-1 {margin-right: -70px;margin-left: 18px;float: right;} +.pull-2 {margin-left: -140px;} +.push-2 {margin-right: -140px;margin-left: 18px;float: right;} +.pull-3 {margin-left: -210px;} +.push-3 {margin-right: -210px;margin-left: 18px;float: right;} +.pull-4 {margin-left: -280px;} +.push-4 {margin-right: -280px;margin-left: 18px;float: right;} \ No newline at end of file diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/specimen_stylesheet.css b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/specimen_stylesheet.css new file mode 100644 index 00000000..d4c8222a --- /dev/null +++ b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/specimen_files/specimen_stylesheet.css @@ -0,0 +1,396 @@ +@import url('grid_12-825-55-15.css'); + +/* + CSS Reset by Eric Meyer - Released under Public Domain + http://meyerweb.com/eric/tools/css/reset/ +*/ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, table, +caption, tbody, tfoot, thead, tr, th, td + {margin: 0;padding: 0;border: 0;outline: 0; + font-size: 100%;vertical-align: baseline; + background: transparent;} +body {line-height: 1;} +ol, ul {list-style: none;} +blockquote, q {quotes: none;} +blockquote:before, blockquote:after, +q:before, q:after {content: ''; content: none;} +:focus {outline: 0;} +ins {text-decoration: none;} +del {text-decoration: line-through;} +table {border-collapse: collapse;border-spacing: 0;} + + + + +body { + color: #000; + background-color: #dcdcdc; +} + +a { + text-decoration: none; + color: #1883ba; +} + +h1{ + font-size: 32px; + font-weight: normal; + font-style: normal; + margin-bottom: 18px; +} + +h2{ + font-size: 18px; +} + +#container { + width: 865px; + margin: 0px auto; +} + + +#header { + padding: 20px; + font-size: 36px; + background-color: #000; + color: #fff; +} + +#header span { + color: #666; +} +#main_content { + background-color: #fff; + padding: 60px 20px 20px; +} + + +#footer p { + margin: 0; + padding-top: 10px; + padding-bottom: 50px; + color: #333; + font: 10px Arial, sans-serif; +} + +.tabs { + width: 100%; + height: 31px; + background-color: #444; +} +.tabs li { + float: left; + margin: 0; + overflow: hidden; + background-color: #444; +} +.tabs li a { + display: block; + color: #fff; + text-decoration: none; + font: bold 11px/11px 'Arial'; + text-transform: uppercase; + padding: 10px 15px; + border-right: 1px solid #fff; +} + +.tabs li a:hover { + background-color: #00b3ff; + +} + +.tabs li.active a { + color: #000; + background-color: #fff; +} + + + +div.huge { + + font-size: 120px; + line-height: 1em; + padding: 0; + letter-spacing: -.02em; + overflow: hidden; +} +div.glyph_range { + font-size: 72px; + line-height: 1.1em; +} + +.size10{ font-size: 10px; } +.size11{ font-size: 11px; } +.size12{ font-size: 12px; } +.size13{ font-size: 13px; } +.size14{ font-size: 14px; } +.size16{ font-size: 16px; } +.size18{ font-size: 18px; } +.size20{ font-size: 20px; } +.size24{ font-size: 24px; } +.size30{ font-size: 30px; } +.size36{ font-size: 36px; } +.size48{ font-size: 48px; } +.size60{ font-size: 60px; } +.size72{ font-size: 72px; } +.size90{ font-size: 90px; } + + +.psample_row1 { height: 120px;} +.psample_row1 { height: 120px;} +.psample_row2 { height: 160px;} +.psample_row3 { height: 160px;} +.psample_row4 { height: 160px;} + +.psample { + overflow: hidden; + position: relative; +} +.psample p { + line-height: 1.3em; + display: block; + overflow: hidden; + margin: 0; +} + +.psample span { + margin-right: .5em; +} + +.white_blend { + width: 100%; + height: 61px; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAA9CAYAAAAH4BojAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1JREFUeNrs3TsKgFAMRUE/eer+NxztxMYuEWQG3ECKwwUF58ycAKixOAGAyAKILAAiCyCyACILgMgCiCyAyAIgsgAiCyCyAIgsgMgCiCwAIgsgsgAiC4DIAogsACIL0CWuZ3UGgLrIhjMA1EV2OAOAJQtgyQLwjOzmDAAiCyCyAIgsQFtkd2cAEFkAkQVAZAHaIns4A4AlC2DJAiCyACILILIAiCzAV5H1dQGAJQsgsgCILIDIAvwisl58AViyAJYsACILILIAIgvAe2T9EhxAZAFEFgCRBeiL7HAGgLrIhjMAWLIAliwAt1OAAQDwygTBulLIlQAAAABJRU5ErkJggg==); + position: absolute; + bottom: 0; +} +.black_blend { + width: 100%; + height: 61px; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAA9CAYAAAAH4BojAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPJJREFUeNrs3TEKhTAQRVGjibr/9QoxhY2N3Ywo50A28IrLwP9g6b1PAMSYTQAgsgAiC4DIAogsgMgCILIAIgsgsgCILIDIAogsACILILIAIguAyAKILIDIAiCyACILgMgCZCnjLWYAiFGvB0BQZJsZAFyyAC5ZAO6RXc0AILIAIguAyAKkRXYzA4DIAogsACILkBbZ3QwALlkAlywAIgsgsgAiC4DIArwVWf8uAHDJAogsACILILIAv4isH74AXLIALlkARBZAZAFEFoDnyPokOIDIAogsACILkBfZZgaAuMhWMwC4ZAE+p4x3mAEgxinAAJ+XBbPWGkwAAAAAAElFTkSuQmCC); + position: absolute; + bottom: 0; +} +.fullreverse { + background: #000 !important; + color: #fff !important; + margin-left: -20px; + padding-left: 20px; + margin-right: -20px; + padding-right: 20px; + padding: 20px; + margin-bottom:0; +} + + +.sample_table td { + padding-top: 3px; + padding-bottom:5px; + padding-left: 5px; + vertical-align: middle; + line-height: 1.2em; +} + +.sample_table td:first-child { + background-color: #eee; + text-align: right; + padding-right: 5px; + padding-left: 0; + padding: 5px; + font: 11px/12px "Courier New", Courier, mono; +} + +code { + white-space: pre; + background-color: #eee; + display: block; + padding: 10px; + margin-bottom: 18px; + overflow: auto; +} + + +.bottom,.last {margin-bottom:0 !important; padding-bottom:0 !important;} + +.box { + padding: 18px; + margin-bottom: 18px; + background: #eee; +} + +.reverse,.reversed { background: #000 !important;color: #fff !important; border: none !important;} + +#bodycomparison { + position: relative; + overflow: hidden; + font-size: 72px; + height: 90px; + white-space: nowrap; +} + +#bodycomparison div{ + font-size: 72px; + line-height: 90px; + display: inline; + margin: 0 15px 0 0; + padding: 0; +} + +#bodycomparison div span{ + font: 10px Arial; + position: absolute; + left: 0; +} +#xheight { + float: none; + position: absolute; + color: #d9f3ff; + font-size: 72px; + line-height: 90px; +} + +.fontbody { + position: relative; +} +.arialbody{ + font-family: Arial; + position: relative; +} +.verdanabody{ + font-family: Verdana; + position: relative; +} +.georgiabody{ + font-family: Georgia; + position: relative; +} + +/* @group Layout page + */ + +#layout h1 { + font-size: 36px; + line-height: 42px; + font-weight: normal; + font-style: normal; +} + +#layout h2 { + font-size: 24px; + line-height: 23px; + font-weight: normal; + font-style: normal; +} + +#layout h3 { + font-size: 22px; + line-height: 1.4em; + margin-top: 1em; + font-weight: normal; + font-style: normal; +} + + +#layout p.byline { + font-size: 12px; + margin-top: 18px; + line-height: 12px; + margin-bottom: 0; +} +#layout p { + font-size: 14px; + line-height: 21px; + margin-bottom: .5em; +} + +#layout p.large{ + font-size: 18px; + line-height: 26px; +} + +#layout .sidebar p{ + font-size: 12px; + line-height: 1.4em; +} + +#layout p.caption { + font-size: 10px; + margin-top: -16px; + margin-bottom: 18px; +} + +/* @end */ + +/* @group Glyphs */ + +#glyph_chart div{ + background-color: #d9f3ff; + color: black; + float: left; + font-size: 36px; + height: 1.2em; + line-height: 1.2em; + margin-bottom: 1px; + margin-right: 1px; + text-align: center; + width: 1.2em; + position: relative; + padding: .6em .2em .2em; +} + +#glyph_chart div p { + position: absolute; + left: 0; + top: 0; + display: block; + text-align: center; + font: bold 9px Arial, sans-serif; + background-color: #3a768f; + width: 100%; + color: #fff; + padding: 2px 0; +} + + +#glyphs h1 { + font-family: Arial, sans-serif; +} +/* @end */ + +/* @group Installing */ + +#installing { + font: 13px Arial, sans-serif; +} + +#installing p, +#glyphs p{ + line-height: 1.2em; + margin-bottom: 18px; + font: 13px Arial, sans-serif; +} + + + +#installing h3{ + font-size: 15px; + margin-top: 18px; +} + +/* @end */ + +#rendering h1 { + font-family: Arial, sans-serif; +} +.render_table td { + font: 11px "Courier New", Courier, mono; + vertical-align: middle; +} + + diff --git a/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/stylesheet.css b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/stylesheet.css new file mode 100644 index 00000000..63dcd8d3 --- /dev/null +++ b/src/main/webapp/resources/css/framework/xit/font/notoKR-Bold/stylesheet.css @@ -0,0 +1,16 @@ +/* Generated by Font Squirrel (http://www.fontsquirrel.com) on April 28, 2015 */ + + + +@font-face { + font-family: 'notokr-bold'; + src: url('notokr-bold.eot'); + src: url('notokr-bold.eot?#iefix') format('embedded-opentype'), + url('notokr-bold.woff2') format('woff2'), + url('notokr-bold.woff') format('woff'), + url('notokr-bold.ttf') format('truetype'), + url('notokr-bold.svg#notokr-bold') format('svg'); + font-weight: normal; + font-style: normal; + +} \ No newline at end of file diff --git a/src/main/webapp/resources/css/framework/xit/images/common/a_icon.png b/src/main/webapp/resources/css/framework/xit/images/common/a_icon.png new file mode 100644 index 00000000..2d6f0f79 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/a_icon.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/head_background.png b/src/main/webapp/resources/css/framework/xit/images/common/head_background.png new file mode 100644 index 00000000..d4c3b55f Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/head_background.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/head_background_back.png b/src/main/webapp/resources/css/framework/xit/images/common/head_background_back.png new file mode 100644 index 00000000..b02cc2f0 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/head_background_back.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/head_deco.png b/src/main/webapp/resources/css/framework/xit/images/common/head_deco.png new file mode 100644 index 00000000..bc5c47da Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/head_deco.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/icon_01.png b/src/main/webapp/resources/css/framework/xit/images/common/icon_01.png new file mode 100644 index 00000000..1664860d Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/icon_01.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/icon_04.png b/src/main/webapp/resources/css/framework/xit/images/common/icon_04.png new file mode 100644 index 00000000..1664860d Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/icon_04.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/logo.gif b/src/main/webapp/resources/css/framework/xit/images/common/logo.gif new file mode 100644 index 00000000..777dcf41 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/logo.gif differ diff --git a/src/main/webapp/resources/css/framework/xit/images/common/menu_b.png b/src/main/webapp/resources/css/framework/xit/images/common/menu_b.png new file mode 100644 index 00000000..f3e4833c Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/common/menu_b.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/deco_ico.png b/src/main/webapp/resources/css/framework/xit/images/main/deco_ico.png new file mode 100644 index 00000000..bfc869cb Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/deco_ico.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/main_ico01.png b/src/main/webapp/resources/css/framework/xit/images/main/main_ico01.png new file mode 100644 index 00000000..31187f04 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/main_ico01.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/main_ico02.png b/src/main/webapp/resources/css/framework/xit/images/main/main_ico02.png new file mode 100644 index 00000000..9193cf65 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/main_ico02.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/main_ico03.png b/src/main/webapp/resources/css/framework/xit/images/main/main_ico03.png new file mode 100644 index 00000000..f7635a6c Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/main_ico03.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/main_ico04.png b/src/main/webapp/resources/css/framework/xit/images/main/main_ico04.png new file mode 100644 index 00000000..f7350947 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/main_ico04.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/main_ico05.png b/src/main/webapp/resources/css/framework/xit/images/main/main_ico05.png new file mode 100644 index 00000000..86ed366b Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/main_ico05.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/main_ico06.png b/src/main/webapp/resources/css/framework/xit/images/main/main_ico06.png new file mode 100644 index 00000000..98d6b618 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/main_ico06.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/more_icon.png b/src/main/webapp/resources/css/framework/xit/images/main/more_icon.png new file mode 100644 index 00000000..f38a2e4e Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/more_icon.png differ diff --git a/src/main/webapp/resources/css/framework/xit/images/main/visual.png b/src/main/webapp/resources/css/framework/xit/images/main/visual.png new file mode 100644 index 00000000..1fd383b7 Binary files /dev/null and b/src/main/webapp/resources/css/framework/xit/images/main/visual.png differ diff --git a/src/main/webapp/resources/css/login.css b/src/main/webapp/resources/css/login.css new file mode 100644 index 00000000..4cae0d73 --- /dev/null +++ b/src/main/webapp/resources/css/login.css @@ -0,0 +1,342 @@ +@charset "utf-8"; + +@font-face { + font-family: "Nanumsquare_L"; + src: url("../font/nanumsquare/NanumSquare_acL.eot?") format("eot"), + url("../font/nanumsquare/NanumSquare_acL.woff") format("woff"), + url("../font/nanumsquare/NanumSquare_acL.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Nanumsquare_B"; + src: url("../font/nanumsquare/NanumSquare_acB.eot?") format("eot"), + url("../font/nanumsquare/NanumSquare_acB.woff") format("woff"), + url("../font/nanumsquare/NanumSquare_acB.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + +/* XitLoginUsr 로그인 */ +.login_bg { + background-color: white; + height: 100%; +} +.header_wrap .logo img{ + margin: 30px 0 0 45px; + display: inline-block; + width: 205px; +} +.login_text { + text-align: center; + max-width: 560px; + margin: 10px auto 0; +} +.login_text .l1 { + font-size: 70px; + color: #4d5769; + margin-top: 60px; + font-family: Nanumsquare_L; +} +.login_text .l2 { + font-size: 18px; + color: #959595; + margin-top: 10px; + font-family: Nanumsquare_L; +} +.login_text .l2 span{ + color: #006fbe; + font-weight: bold; +} +.login_text .input_wrap { + position: relative; + margin-top: 40px; + padding-right: 0px; +} +.login_text .input_wrap .typeText, +.login_text .input_wrap .typePassword { + display: inline-block; + padding: 0 0 0 30px; + width: 100%; + height: 54px; + box-sizing: border-box; + border: 2px solid #828282; + background: #fff; + font-size: 20px; + font-family: Nanumsquare_B; +} +.login_text .input_wrap input::placeholder { + color: rgba(205, 206, 206, 1); +} +.login_text .input_wrap input::-webkit-input-placeholder { + color: rgba(205, 206, 206, 1); +} +.login_text .input_wrap input:-ms-input-placeholder { + color: rgba(205, 206, 206, 1); +} +.login_text .input_wrap .typePassword { + margin-top: 10px; + background-image: url(/resources/images/login/lock.png); + background-position: right 25px center; + background-repeat: no-repeat; + background-size: 25px; + padding-right: 20px; +} +.login_text .input_wrap .typeButton { + position: absolute; + top: 0; + right: 0; + width: 145px; + height: 100px; + color: #fff; + font-size: 17px; + background: #006fbe; + border: 1px solid #d9d9d9; + box-sizing: border-box; +} +.login_text .input_wrap2 { + text-align: right; + margin-top: 6px; + font-size: 13px; +} +.login_text .input_wrap2 label { + margin-right: 30px; +} +.login_text .input_wrap2 a{ + display: inline-block; + font-size: 14px; + font-family: 'notokr-bold'; + font-weight: 700; + color: #959595; +} +.login_text .input_wrap2 a:hover { + text-decoration: underline; +} +.login_text .text_img img { + width : 160px; /* 2021.09.24 박소영 수정 as-is: width300px; */ +} +.login_text .main_img img { + width : 541px; + margin-top: 30px; +} +.login_bg a.line { + border-left: 2px solid #959595; + margin-left: 5px; + padding-left: 5px; + position: relative; +} +.login_bg a.line:before { + content: ''; + display: inline-block; + width: 2px; + height: 10px; + position: absolute; + left: -18px; + top: 2px; +} +.login_text .btn_wrap { + margin: 35px auto 40px; +} +.login_text .btn_wrap a{ + display: inline-block; + border: 1px solid #d9d9d9; + box-sizing: border-box; + background-color: #fff; + font-size: 17px; + height: 58px; + line-height: 58px; + width: 278px; +} +.login_text .btn_wrap a:hover { + background-color: #00a7ac; + border-color: #00a7ac; + color: #fff; +} +.login_text .btn_wrap .typeButton { + display: inline-block; + top: 0; + right: 0; + width: 80%; + height: 66px; + color: #fff; + font-size: 28px; + background: #004988; + border: 1px solid #d9d9d9; + box-sizing: border-box; + border-radius: 32px; + font-family: Nanumsquare_B; + cursor: pointer; +} +/*2021.09.24 박소영 새로추가*/ +.login_text .btn_wrap .typeButton:hover{ + background: #0369c1; + transition: all 0.3s; +} + +.login_bg .footer_wrap { + background-color: #fff; + padding-top: 5px; + border-top: 1px solid #e5e5e4; +} +.login_bg .footer_inner { + max-width: 560px; + margin: 0 auto; + position: relative; +} +.login_bg .footer_inner strong { + position: absolute; + font-size: 15px; +} +.login_bg .login_info { + background-color: #4d5769; + padding-top: 18px; + box-sizing: border-box; + height: 60px; +} +.login_bg .login_info strong { + color: #fff; + line-height: 25px; +} +.login_bg .login_info .notice_slider{ + padding-left: 130px; + height: 25px; +} +.login_bg .login_info .notice_slider .bx-wrapper{ + background: none; + border: none; + box-shadow: none; + margin-bottom: 0; +} +.login_bg .login_info ul li { + color: #fff; + position: relative; + padding-right: 100px; + box-sizing: border-box; + height: 25px; + line-height: 25px; + font-size: 13px; +} +.login_bg .login_info ul li a { + color: #fff; + font-size: 13px; +} +.login_bg .login_info ul li span { + position: absolute; + right: 0; +} +.login_bg .login_info2 { + padding-top: 35px; + padding-bottom: 60px; +} +.login_bg .login_info2 strong{ + color: #2d2d2d; +} +.login_bg .login_info2 p { + padding-left: 130px; + font-size: 13px; + line-height: 20px; + margin-bottom: 15px; +} +.login_bg .login_info2 p span { + color: #008ef0; +} +.login_bg .login_info2 .info_link { + margin-top: 30px; +} +.login_bg .login_info2 .info_link a { + color: #2d2d2d; + padding-left: 25px; + background-repeat: no-repeat; + background-position: 0 0; + line-height: 18px; + font-weight: bold; + display: inline-block; +} +.login_bg .login_info2 .info_link a.program { + background-image: url('/resources/images/main/link_program.png'); +} +.login_bg .login_info2 .info_link a.manual { + background-image: url('/resources/images/main/link_manual.png'); +} + + + + +.user_login { + background: none repeat scroll left center #F4F5F5; + border: 3px solid #E0E0E0; + clear: left; + margin: 0; + overflow: hidden; + padding: 36px 0 16px; + width: 550px; +} +.user_login .user_login_ultop { + float: left; + margin: 0; + padding: 0 0 28px 50px; + width: 600px; +} +.user_login .user_login_ultop ul { + float: left; + margin: 0; + padding: 0; + width: 270px; +} +.user_login .user_login_ultop ul li { + float: right; + margin: 0; + padding: 0 0 2px; +} +.user_login .user_login_ultop ul li img { + vertical-align: middle; +} +.user_login .user_login_ultop ul li input { + vertical-align: middle; +} +.user_login .user_login_ultop ul li > div { + width: 176px; + text-align: right; +} +.user_login .user_login_ultop ul li .input_style { + border: 2px solid #0958A5; + height: 17px; + margin: 0 0 0 9px; + padding: 2px 0 0 2px; + width: 176px; +} +.user_login .user_login_ultop .btn_style { + float: left; + height: 46px; + margin-left:5px; margin-top:1px; + width: 120px; +} + + +.user_login .user_login_btstyle { + float: left; + margin: 0; + padding: 14px 0 0 60px; + width: 754px; +} +.user_login .user_login_btstyle .bt_ulstyle1 { + float: left; + width: 75px; +} +.user_login .user_login_btstyle .bt_ulstyle1 li { + background: url("../images/member/bul_arrow.gif") no-repeat scroll 0 5px transparent; + color: #727475; + margin: 0 0 7px; + padding: 0 0 0 11px; +} +.user_login .user_login_btstyle .bt_ulstyle2 { + float: left; + width: 119px; +} +.user_login .user_login_btstyle .bt_ulstyle2 li { + margin: 0 0 7px; +} +.user_login .user_login_btstyle .bt_ulstyle2 li img { + vertical-align: middle; +} diff --git a/src/main/webapp/resources/css/popup.css b/src/main/webapp/resources/css/popup.css new file mode 100644 index 00000000..d7ee69e3 --- /dev/null +++ b/src/main/webapp/resources/css/popup.css @@ -0,0 +1,67 @@ +@charset "utf-8"; +*{margin:0; padding:0;margin:0; padding:0;} +img, fieldset, button{border:none;} +li{list-style-type:none;} +hr, button img{display:none;} +a{text-decoration:none;} +a:hover, a:active, a:focus{text-decoration:underline;} +textarea{overflow:auto;} +legend {position:absolute; top:0; left:0; width:0; height:0; overflow:hidden; visibility:hidden; font-size:0; line-height:0;} /* For Screen Reader */ +caption{display:none;} +img{border:0} +html, body{margin:0; padding:0; font-family:"돋움", Gulim, AppleGothic, Sans-serif;font-size:12px;} + +.popup {margin-left:10px;margin-right:10px;} +.popup table{clear:both; width:100%; border: 1px solid #dddddd; + line-height: 28px; + overflow: hidden; + white-space: nowrap; margin-top: 10px;margin-bottom:10px;} +.popup table th {background-color:#f2f2f2;border:1px solid #dddddd; + color:#0f438a; + height: 26px; + font-size:90%; + text-align:left; + padding-left:10px; + width:130px; +} +.popup table td{background-color:#ffffff;border:1px solid #dddddd; + color:#0f438a; + height: 26px;padding-left:10px;} + +.h_title{font-size:120%;font-weight:bold; color:#666666; padding-left:20px;padding-top:10px; margin-left:10px; background: url("/resources/images/bl_circle.gif") no-repeat scroll 0px 11px transparent;} +/* BUTTONS */ +.buttons a, .buttons button{margin: 0 auto; + display:block; + float:left; + margin:0 7px 0 0; + background-color:#f5f5f5; + border:1px solid #dedede; + border-top:1px solid #eee; + border-left:1px solid #eee; + font-size:100%; + line-height:130%; + text-decoration:none; + font-weight:bold; + color:#565656; + cursor:pointer; + padding:5px 10px 6px 7px; /* Links */ +} +.buttons button{ + width:auto; + overflow:visible; + padding:4px 10px 3px 7px; /* IE6 */ +} +.buttons button[type]{ + padding:5px 10px 5px 7px; /* Firefox */ + line-height:17px; /* Safari */ +} +*:first-child+html button[type]{ + padding:4px 10px 3px 7px; /* IE7 */ +} +.buttons button img, .buttons a img{ + margin:0 3px -3px 0 !important; + padding:0; + border:none; + width:16px; + height:16px; +} diff --git a/src/main/webapp/resources/css/style.css b/src/main/webapp/resources/css/style.css new file mode 100644 index 00000000..04d913fe --- /dev/null +++ b/src/main/webapp/resources/css/style.css @@ -0,0 +1,256 @@ +@charset "utf-8"; + +@font-face { + font-family: "Nanumsquare_L"; + src: url("../font/nanumsquare/NanumSquare_acL.eot?") format("eot"), + url("../font/nanumsquare/NanumSquare_acL.woff") format("woff"), + url("../font/nanumsquare/NanumSquare_acL.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Nanumsquare_B"; + src: url("../font/nanumsquare/NanumSquare_acB.eot?") format("eot"), + url("../font/nanumsquare/NanumSquare_acB.woff") format("woff"), + url("../font/nanumsquare/NanumSquare_acB.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + + +/*로그인 login*/ +.login_bg { + background-color: white; + height: 100%; +} +.header_wrap .logo img{ + margin: 30px 0 0 45px; + display: inline-block; + width: 230px; +} +.login_text { + text-align: center; + max-width: 560px; + margin: 60px auto 0; +} +.login_text .l1 { + font-size: 70px; + color: #4d5769; + margin-top: 60px; + font-family: Nanumsquare_L; +} +.login_text .l2 { + font-size: 18px; + color: #959595; + margin-top: 10px; + font-family: Nanumsquare_L; +} +.login_text .l2 span{ + color: #006fbe; + font-weight: bold; +} +.login_text .input_wrap { + position: relative; + margin-top: 40px; + padding-right: 0px; +} +.login_text .input_wrap .typeText, +.login_text .input_wrap .typePassword { + display: inline-block; + padding: 0 0 0 30px; + width: 100%; + height: 80px; + box-sizing: border-box; + border: 3px solid #67625c; + background: #fff; + font-size: 20px; + font-family: Nanumsquare_B; +} +.login_text .input_wrap input::placeholder { + color: rgba(205, 206, 206, 1); +} +.login_text .input_wrap input::-webkit-input-placeholder { + color: rgba(205, 206, 206, 1); +} +.login_text .input_wrap input:-ms-input-placeholder { + color: rgba(205, 206, 206, 1); +} +.login_text .input_wrap .typePassword { + margin-top: 10px; + background-image: url(/resources/images/login/lock.png); + background-position: right 25px center; + background-repeat: no-repeat; + background-size: 25px; + padding-right: 20px; +} +.login_text .input_wrap .typeButton { + position: absolute; + top: 0; + right: 0; + width: 145px; + height: 100px; + color: #fff; + font-size: 17px; + background: #006fbe; + border: 1px solid #d9d9d9; + box-sizing: border-box; +} +.login_text .input_wrap2 { + text-align: right; + margin-top: 15px; + font-size: 13px; +} +.login_text .input_wrap2 label { + margin-right: 30px; +} +.login_text .input_wrap2 a{ + display: inline-block; + font-size: 15px; + font-family: Nanumsquare_B; + color: #959595; +} +.login_text .input_wrap2 a:hover { + text-decoration: underline; +} +.login_text .text_img img { + width : 300px; +} +.login_text .main_img img { + width : 400px; + margin-top: 30px; +} +.login_bg a.line { + border-left: 2px solid #959595; + margin-left: 5px; + padding-left: 5px; + position: relative; +} +.login_bg a.line:before { + content: ''; + display: inline-block; + width: 2px; + height: 10px; + position: absolute; + left: -18px; + top: 2px; +} +.login_text .btn_wrap { + margin: 35px auto 40px; +} +.login_text .btn_wrap a{ + display: inline-block; + border: 1px solid #d9d9d9; + box-sizing: border-box; + background-color: #fff; + font-size: 17px; + height: 58px; + line-height: 58px; + width: 278px; +} +.login_text .btn_wrap a:hover { + background-color: #00a7ac; + border-color: #00a7ac; + color: #fff; +} +.login_text .btn_wrap .typeButton { + display: inline-block; + top: 0; + right: 0; + width: 100%; + height: 80px; + color: #fff; + font-size: 35px; + background: #004988; + border: 1px solid #d9d9d9; + box-sizing: border-box; + border-radius: 32px; + font-family: Nanumsquare_B; +} +.login_bg .footer_wrap { + background-color: #fff; + padding-top: 5px; + border-top: 1px solid #e5e5e4; +} +.login_bg .footer_inner { + max-width: 560px; + margin: 0 auto; + position: relative; +} +.login_bg .footer_inner strong { + position: absolute; + font-size: 15px; +} +.login_bg .login_info { + background-color: #4d5769; + padding-top: 18px; + box-sizing: border-box; + height: 60px; +} +.login_bg .login_info strong { + color: #fff; + line-height: 25px; +} +.login_bg .login_info .notice_slider{ + padding-left: 130px; + height: 25px; +} +.login_bg .login_info .notice_slider .bx-wrapper{ + background: none; + border: none; + box-shadow: none; + margin-bottom: 0; +} +.login_bg .login_info ul li { + color: #fff; + position: relative; + padding-right: 100px; + box-sizing: border-box; + height: 25px; + line-height: 25px; + font-size: 13px; +} +.login_bg .login_info ul li a { + color: #fff; + font-size: 13px; +} +.login_bg .login_info ul li span { + position: absolute; + right: 0; +} +.login_bg .login_info2 { + padding-top: 35px; + padding-bottom: 60px; +} +.login_bg .login_info2 strong{ + color: #2d2d2d; +} +.login_bg .login_info2 p { + padding-left: 130px; + font-size: 13px; + line-height: 20px; + margin-bottom: 15px; +} +.login_bg .login_info2 p span { + color: #008ef0; +} +.login_bg .login_info2 .info_link { + margin-top: 30px; +} +.login_bg .login_info2 .info_link a { + color: #2d2d2d; + padding-left: 25px; + background-repeat: no-repeat; + background-position: 0 0; + line-height: 18px; + font-weight: bold; + display: inline-block; +} +.login_bg .login_info2 .info_link a.program { + background-image: url('framework/images/main/link_program.png'); +} +.login_bg .login_info2 .info_link a.manual { + background-image: url('framework/images/main/link_manual.png'); +} + +/*메인 index*/ diff --git a/src/main/webapp/resources/css/zip.css b/src/main/webapp/resources/css/zip.css new file mode 100644 index 00000000..cd972a6c --- /dev/null +++ b/src/main/webapp/resources/css/zip.css @@ -0,0 +1,381 @@ +/* by 검증 디자이너 */ + +img {border:0;} +table {margin:0; padding:0;} + +.t_strong {font-weight:bold;} + +.TopMenuBg { + background-image:url('/resources/images/egovframework/com/cmm/uss/umt/menu_bg.jpg'); + background-repeat:no-repeat; + } + +.LeftMenuTitle { + font-size: 14px; + color: #fff; + text-align:center; + font-family:"돋움"; + font-weight:bold; + padding-top:20px; + padding-bottom:3px; + } + +.LeftMenuWelcome { + font-size: 12px; + color: #e6e6e6; + text-align:center; + font-family:"돋움"; + padding-top:6px; + } + +.LeftMenuBg { + font-size: 12px; + color: #7f9db9; + text-align:left; + font-family:"돋움"; + font-weight:bold; + padding-top:3px; + padding-left:50px; + background-image:url('/resources/images/egovframework/com/cmm/uss/umt/left_menu_bg.gif') + } + +.LeftMenuBtn { + text-align:center; + padding-top:5px; + padding-bottom:5px; + } + +.LeftMenuBgList { + font-size: 12px; + color: #fff; + text-align:left; + font-family:"돋움"; + padding-top:3px; + padding-left:60px; + background-image:url('/resources/images/egovframework/com/cmm/uss/umt/left_bg.gif'); + } + +.QuickLink { + font-size: 11px; + color: #7794be; + text-align:right; + font-family:"돋움"; + padding-top:3px; + } + +.PageTitle { + color: #000000; + text-align:left; + font-family:"돋움"; + font-weight:bold; + padding-left:45px; + background-image:url('/resources/images/egovframework/com/cmm/uss/umt/page_title.gif') + } + +.PageNumber { + text-align:center; + font-family:"돋움"; + } + +.checkbox { + background-color:#fff; +} +.BottomStyle { + font-size:11px; + color:#999999; + font-family: dotum; + } + +.LoginIdText { + margin-top:80px; + margin-left:400px; + font-size:12px; + font-family: dotum; + width:190px; + } +.LoginPassText { + margin-left:400px; + font-size:12px; + font-family: dotum; + width:180px; + } +.LoginJoinBtn { + margin-top:5px; + margin-left:400px; + font-size:12px; + font-family: dotum; + width:180px; + } + + +/* -----------------TopMenuBg------------ */ +.TopMenuBg { font-size: 12px; color: #888888 ; font-family: "돋움"} +.TopMenuBg a:link { font-size: 12px; color: #888888; font-family: "돋움"} +.TopMenuBg a:visited { font-size: 12px; color: #888888 ; font-family: "돋움"} +.TopMenuBg a:hover { font-size: 12px; color: #4791a5 ; font-family: "돋움"; font-weight:bold} +.TopMenuBg a:active { font-size: 12px; color: #86cd00 ; font-family: "돋움"; font-weight:bold} + + +/* -----------------LeftMenuBgList------------ */ +.LeftMenuBgList { font-size: 12px; color: #fff ; font-family: "돋움"} +.LeftMenuBgList a:link { font-size: 12px; color: #fff; font-family: "돋움"} +.LeftMenuBgList a:visited { font-size: 12px; color: #fff ; font-family: "돋움"} +.LeftMenuBgList a:hover { font-size: 12px; color: #fff ; font-family: "돋움"; font-weight:bold} +.LeftMenuBgList a:active { font-size: 12px; color: #fff ; font-family: "돋움"; font-weight:bold} + +/* -----------------LeftMenuBg------------ */ +.LeftMenuBg { font-size: 12px; color: #8594a8 ; font-family: "돋움"} +.LeftMenuBg a:link { font-size: 12px; color: #8594a8; font-family: "돋움"} +.LeftMenuBg a:visited { font-size: 12px; color: #8594a8 ; font-family: "돋움"} +.LeftMenuBg a:hover { font-size: 12px; color: #445b7b ; font-family: "돋움"; font-weight:bold} +.LeftMenuBg a:active { font-size: 12px; color: #445b7b ; font-family: "돋움"; font-weight:bold} + +/* -----------------QuickLink------------ */ +.QuickLink { font-size: 11px; color: #7794be ; font-family: "돋움" } +.QuickLink a:link { font-size: 11px; color: #7794be; font-family: "돋움" } +.QuickLink a:visited { font-size: 11px; color: #5877a4 ; font-family: "돋움" } +.QuickLink a:hover { font-size: 11px; color: #5877a4 ; font-family: "돋움"; font-weight:bold} +.QuickLink a:active { font-size: 11px; color: #5877a4 ; font-family: "돋움"; font-weight:bold} + + +/* board_list */ +.table_listA {margin-top:20px; margin-left:8px; padding:0 3px 0 3px; height:30px; font:11px Dotum; color:#626262;} +.table_listA th {margin-top:10px; height:40px; font:11px Dotum; font-weight:bold; color:#4f657d; background:url('/resources/images/egovframework/com/cmm/uss/umt/bg_list_th.gif')} +.table_listA tbody {height:35px; font:11px Dotum; color:#828282;} + +/* -----------------board_list------------ */ +.table_listA a:link { font-size: 11px; color: #828282; font-family: "돋움"; text-decoration:none} +.table_listA a:visited { font-size: 11px; color: #828282 ; font-family: "돋움"; text-decoration:none} +.table_listA a:hover { font-size: 11px; color: #a7a7a7 ; font-family: "돋움"; text-decoration:none} +.table_listA a:active { font-size: 11px; color: #828282 ; font-family: "돋움"; text-decoration:none} + + + +/* by 이삼섭 */ +/* Black 텍스트 Hyperlink Style */ +A:link { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:none; } +A:visited { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:none; } +A:active { font-size:9pt; font-family:"돋움";color:#ff0000; text-decoration:none; } +A:hover { font-size:9pt; font-family:"돋움";color:#ff0000;text-decoration:none;} + + +/* Gray 텍스트 Hyperlink Style */ +A.gr:link { font-size:9pt; font-family:"돋움";color:#58595B; text-decoration:none; } +A.gr:visited { font-size:9pt; font-family:"돋움";color:#58595B; text-decoration:none; } +A.gr:active { font-size:9pt; font-family:"돋움";color:#ff0000; text-decoration:none; } +A.gr:hover { font-size:9pt; font-family:"돋움";color:#ff0000 ;text-decoration:none;} + + +/* Black 텍스트 Hyperlink Style_언더라인 */ +A.underline:link { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:underline; } +A.underline:visited { font-size:9pt; font-family:"돋움";color:#000000; text-decoration:underline; } +A.underline:active { font-size:9pt; font-family:"돋움";color:#ff0000; text-decoration:underline; } +A.underline:hover { font-size:9pt; font-family:"돋움";color:#ff0000;text-decoration:underline;} + + +/* 스크롤 & margin */ +body { +margin-left:0px; margin-right:0px; margin-top:0px; margin-bottom:0px;} + +td {font-family: "돋움"; font-size: 9pt; color:#595959; font-weight:normal;} +th {font-family: "돋움"; font-size: 9pt; color:#000000; font-weight:normal;} + + +/* 흰색배경 inputbox */ + textarea, input, select + {padding-left:2px; color:#555555; border:1px solid #9BBED2; + font-family: "돋움"; font-size: 9pt; color:#595959;} + + + +/*list_text*/ +.lt_text { font-size:9pt; color:#000000; font-family:"돋움, Arial"; height:24px; text-align:left; vertical-align:middle; padding-left:10px; padding-right:10px;} +.lt_text2 { font-size:9pt; color:#444444; font-family:"돋움, Arial"; height:30px; text-align:left; vertical-align:middle; padding-left:10px; padding-right:10px; font-weight: bold;} +.lt_text3 { font-size:9pt; color:#000000; font-family:"돋움, Arial"; height:24px; text-align:center; vertical-align:middle;} +.lt_text4 { font-size:9pt; color:#000000; font-family:"돋움, Arial"; text-align:center; vertical-align:middle;} +.lt_text5 { font-size:9pt; color:#000000; font-family:"돋움, Arial"; height:24px; text-align:left; vertical-align:top; padding-left:10px; padding-right:10px; padding-top:10px; padding-bottom:10px;} + + + .button { + border-style:none; + background-color:transparent; + font-size:12px; + } + + /*------------------------------- textarea ------------------------------------------------*/ + + + textarea + {color:#000000; + padding-left:2px; + border-color:#9CBED3; + border-style:solid; } + + + + /* 콤보박스에 테두리선 빼기 */ +input.cb {background-color:transparent;border:0px;} + +/* 금액_흰색바탕_우측정열 inputbox */ +.input-r{border:1px solid #9BBED2; text-align:right;} + + + select + {color:#000000; + padding-left:2px; + border-color:#9CBED3; + border-style:solid; } + + select1 + {color:#000000; + padding-left:2px; + border-color:#9CBED3; + border-style:solid; } + + .select12 + { color:#000000; + padding-left:2px; + border-color:#9CBED3; + border-style:solid; } + + select1[appearance="full"] + { color:#000000; + padding-left:2px; + border-color:#9CBED3; + border-style:solid;} + + select[appearance="full"] + { color:#000000; + padding-left:2px; + border-color:#9CBED3; + border-style:solid;} + + .check2 + { color:#000000; + padding-left:2px; + border-color:#9CBED3; + background-color:transparent!important; + border-style:none !important;} + + .radio2 + { color:#000000; + padding-left:2px; + border-color:#9CBED3; + background-color:#EAEAEA!important; + border-style:none !important;} + + +/*페이징관련 버튼*/ + + .group_pagenav +{ vertical-align:middle; + background-color:transparent!important; + border-style:none; } + + .page_prevend + { width:13px; height:13px; top:3px; + background-color:transparent; + background-image:url(/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prevend.gif); + border-style:none; } + + .page_prev + { width:13px; height:13px; top:3px; + background-color:transparent; + background-image:url(/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prev.gif); + border-style:none; } + + .page_nextend + { width:13px; height:13px; top:3px; + background-color:transparent; + background-image:url(/resources/images/egovframework/com/cmm/uss/umt/icon/icon_nextend.gif); + border-style:none; } + + .page_next + { width:13px; height:13px; top:3px; + background-color:transparent; + background-image:url(/resources/images/egovframework/com/cmm/uss/umt/icon/icon_next.gif); + border-style:none; } + + .page_no + { width:30px; height:13px!important; top:3px; + text-align:center; + background-color:transparent; + border-style:none; } + + .page_sep + { width:13px; height:13px!important; top:3px; + text-align:center; + background-color:transparent; + border-style:none; } + + .group_pagenav>caption + {vertical-align:top!important; + background-color:transparent!important; + border-style:none!important; + padding-left:2px!important; + padding-top:1px!important; + text-align:left!important;} + + + +/****************************************** 텍스트 ************************************************************/ + +/* 로케이션_텍스트 */ +.location{ font-family:"돋움"; font-size:8pt; color:#6d6d6d ;padding-top:1px; padding-left:3px; + vertical-align: middle} + +/* 타이틀_볼드 */ +.title{ font-family:"돋움"; font-size:9pt; color:#000000 ; + font-weight: bold ; vertical-align: middle} + +/* 타이틀_볼드_좌측정렬 */ +.title_left{ font-family:"돋움"; font-size:9pt; color:#000000 ; + font-weight: bold ; vertical-align: middle; text-align:left } + +/* 팝업_타이틀_볼드 */ +.title_wh{ font-family:"돋움"; font-size:9pt; color:#ffffff ; + font-weight: bold ; vertical-align: middle} + +/* 버튼메뉴_타이틀_화이트_볼드 */ +.title_wh_b{ font-family:"돋움"; font-size:9pt; color:#ffffff ; + font-weight: bold ; vertical-align: middle} + +/* 필수 입력 항목 캡션 */ +.required_text { font-family:"돋움"; font-size:9pt; color:#2E4B90 ; + font-weight: bold ; padding-right:3px; text-align: right ; vertical-align: middle} + + +.text1{color:#FF8903; } +.text2{color:#A2A2A2; } +/****************************************** 테이블 & 텍스트 ************************************************************/ +/* 리스트 테이블 */ +.table-line{BORDER-TOP: #1A90D8 2px solid; BORDER-bottom: #BABABA 1px solid;border-collapse: collapse;} + .table-line th{BORDER-bottom: #A3A3A3 1px solid; padding-left:2px;padding-right:2px;background-color: #E4EAF8; height:20px;} + .table-line td{BORDER-bottom: #E0E0E0 1px solid; padding-left:2px;padding-right:2px;background-color: #F7F7F7; height:20px;} + + +/* 등록 테이블 */ +.table-register{BORDER-TOP: #D2D4D1 1px solid;BORDER-bottom: #D2D4D1 1px solid;BORDER-left: #D2D4D1 1px solid;BORDER-right: #D2D4D1 1px solid; border-collapse: collapse;} + .table-register th{ padding-left:2px;padding-right:5px;background-color: #E4EAF8; Text-align: right ;} + .table-register td{ padding-left:2px;padding-right:5px;background-color: #F7F7F7;} + + +/* 조회 테이블 +.table-search{BORDER-TOP: #D2D4D1 1px solid;BORDER-bottom: #D2D4D1 1px solid;BORDER-left: #D2D4D1 1px solid;BORDER-right: #D2D4D1 1px solid; border-collapse: collapse;} + .table-search th{ padding-left:2;padding-right:2;background-color: #E4EAF8; Text-align: center ;} + .table-search td{ padding-left:2;padding-right:2;background-color: #F7F7F7;} */ + +/* 투명 테이블 */ +.table-trans {BORDER-LEFT: 0px solid;BORDER-RIGHT:0px solid; BORDER-BOTTOM:0px solid; BORDER-TOP:0px solid; border-collapse:collapse;} + .table-trans td{border:0px solid;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;border:0px solid;border-collapse: collapse;} + +.btnBackground { +background-image : url(/resources/images/egovframework/com/sym/ccm/zip/btn/bu2_bg.gif); +} + +.btnNew { +border : 0 solid #000; +color : #000000; +background-image : url(/resources/images/egovframework/com/sym/ccm/zip/btn/bu2_bg.gif); +cursor : pointer; +} diff --git a/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.eot b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.eot new file mode 100644 index 00000000..c49d5bb2 Binary files /dev/null and b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.eot differ diff --git a/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.ttf b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.ttf new file mode 100644 index 00000000..c015d70f Binary files /dev/null and b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.ttf differ diff --git a/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.woff b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.woff new file mode 100644 index 00000000..61233f45 Binary files /dev/null and b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acB.woff differ diff --git a/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.eot b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.eot new file mode 100644 index 00000000..b94a5cc3 Binary files /dev/null and b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.eot differ diff --git a/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.ttf b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.ttf new file mode 100644 index 00000000..a569fa85 Binary files /dev/null and b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.ttf differ diff --git a/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.woff b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.woff new file mode 100644 index 00000000..61ea3145 Binary files /dev/null and b/src/main/webapp/resources/font/nanumsquare/NanumSquare_acL.woff differ diff --git a/src/main/webapp/resources/images/bg_boardhead.gif b/src/main/webapp/resources/images/bg_boardhead.gif new file mode 100644 index 00000000..74e705ba Binary files /dev/null and b/src/main/webapp/resources/images/bg_boardhead.gif differ diff --git a/src/main/webapp/resources/images/bg_h2.gif b/src/main/webapp/resources/images/bg_h2.gif new file mode 100644 index 00000000..d51bde3d Binary files /dev/null and b/src/main/webapp/resources/images/bg_h2.gif differ diff --git a/src/main/webapp/resources/images/bl_circle.gif b/src/main/webapp/resources/images/bl_circle.gif new file mode 100644 index 00000000..6b5196a3 Binary files /dev/null and b/src/main/webapp/resources/images/bl_circle.gif differ diff --git a/src/main/webapp/resources/images/bl_dot.gif b/src/main/webapp/resources/images/bl_dot.gif new file mode 100644 index 00000000..d113c8cb Binary files /dev/null and b/src/main/webapp/resources/images/bl_dot.gif differ diff --git a/src/main/webapp/resources/images/bl_dotbg.gif b/src/main/webapp/resources/images/bl_dotbg.gif new file mode 100644 index 00000000..a0cd7d7c Binary files /dev/null and b/src/main/webapp/resources/images/bl_dotbg.gif differ diff --git a/src/main/webapp/resources/images/bl_dotblack.gif b/src/main/webapp/resources/images/bl_dotblack.gif new file mode 100644 index 00000000..3af4c3bd Binary files /dev/null and b/src/main/webapp/resources/images/bl_dotblack.gif differ diff --git a/src/main/webapp/resources/images/bl_grayarrow.gif b/src/main/webapp/resources/images/bl_grayarrow.gif new file mode 100644 index 00000000..690d1b68 Binary files /dev/null and b/src/main/webapp/resources/images/bl_grayarrow.gif differ diff --git a/src/main/webapp/resources/images/bl_h2.gif b/src/main/webapp/resources/images/bl_h2.gif new file mode 100644 index 00000000..7a56831d Binary files /dev/null and b/src/main/webapp/resources/images/bl_h2.gif differ diff --git a/src/main/webapp/resources/images/bl_underline.gif b/src/main/webapp/resources/images/bl_underline.gif new file mode 100644 index 00000000..b33c4ed4 Binary files /dev/null and b/src/main/webapp/resources/images/bl_underline.gif differ diff --git a/src/main/webapp/resources/images/bl_underline2.gif b/src/main/webapp/resources/images/bl_underline2.gif new file mode 100644 index 00000000..e9c54a60 Binary files /dev/null and b/src/main/webapp/resources/images/bl_underline2.gif differ diff --git a/src/main/webapp/resources/images/blue_arrow.gif b/src/main/webapp/resources/images/blue_arrow.gif new file mode 100644 index 00000000..8b199104 Binary files /dev/null and b/src/main/webapp/resources/images/blue_arrow.gif differ diff --git a/src/main/webapp/resources/images/btn/btn_close.gif b/src/main/webapp/resources/images/btn/btn_close.gif new file mode 100644 index 00000000..a1231faf Binary files /dev/null and b/src/main/webapp/resources/images/btn/btn_close.gif differ diff --git a/src/main/webapp/resources/images/btn/btn_next.gif b/src/main/webapp/resources/images/btn/btn_next.gif new file mode 100644 index 00000000..828e2245 Binary files /dev/null and b/src/main/webapp/resources/images/btn/btn_next.gif differ diff --git a/src/main/webapp/resources/images/btn/btn_prev.gif b/src/main/webapp/resources/images/btn/btn_prev.gif new file mode 100644 index 00000000..33987463 Binary files /dev/null and b/src/main/webapp/resources/images/btn/btn_prev.gif differ diff --git a/src/main/webapp/resources/images/btn/bu5_close.gif b/src/main/webapp/resources/images/btn/bu5_close.gif new file mode 100644 index 00000000..4b7328af Binary files /dev/null and b/src/main/webapp/resources/images/btn/bu5_close.gif differ diff --git a/src/main/webapp/resources/images/btn/icon_aft_month.gif b/src/main/webapp/resources/images/btn/icon_aft_month.gif new file mode 100644 index 00000000..19d49009 Binary files /dev/null and b/src/main/webapp/resources/images/btn/icon_aft_month.gif differ diff --git a/src/main/webapp/resources/images/btn/icon_aft_year.gif b/src/main/webapp/resources/images/btn/icon_aft_year.gif new file mode 100644 index 00000000..4ae27e2c Binary files /dev/null and b/src/main/webapp/resources/images/btn/icon_aft_year.gif differ diff --git a/src/main/webapp/resources/images/btn/icon_pre_month.gif b/src/main/webapp/resources/images/btn/icon_pre_month.gif new file mode 100644 index 00000000..ac22850f Binary files /dev/null and b/src/main/webapp/resources/images/btn/icon_pre_month.gif differ diff --git a/src/main/webapp/resources/images/btn/icon_pre_year.gif b/src/main/webapp/resources/images/btn/icon_pre_year.gif new file mode 100644 index 00000000..f9c821ec Binary files /dev/null and b/src/main/webapp/resources/images/btn/icon_pre_year.gif differ diff --git a/src/main/webapp/resources/images/btn/icon_zip_search.gif b/src/main/webapp/resources/images/btn/icon_zip_search.gif new file mode 100644 index 00000000..0540eb4e Binary files /dev/null and b/src/main/webapp/resources/images/btn/icon_zip_search.gif differ diff --git a/src/main/webapp/resources/images/bu2_left.gif b/src/main/webapp/resources/images/bu2_left.gif new file mode 100644 index 00000000..21fa7194 Binary files /dev/null and b/src/main/webapp/resources/images/bu2_left.gif differ diff --git a/src/main/webapp/resources/images/bu2_right.gif b/src/main/webapp/resources/images/bu2_right.gif new file mode 100644 index 00000000..4eed2e6a Binary files /dev/null and b/src/main/webapp/resources/images/bu2_right.gif differ diff --git a/src/main/webapp/resources/images/calendar.gif b/src/main/webapp/resources/images/calendar.gif new file mode 100644 index 00000000..f2e4262d Binary files /dev/null and b/src/main/webapp/resources/images/calendar.gif differ diff --git a/src/main/webapp/resources/images/cross.png b/src/main/webapp/resources/images/cross.png new file mode 100644 index 00000000..1514d51a Binary files /dev/null and b/src/main/webapp/resources/images/cross.png differ diff --git a/src/main/webapp/resources/images/danger.jpg b/src/main/webapp/resources/images/danger.jpg new file mode 100644 index 00000000..9ce70f1c Binary files /dev/null and b/src/main/webapp/resources/images/danger.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/TAB_01.gif b/src/main/webapp/resources/images/egovframework/com/TAB_01.gif new file mode 100644 index 00000000..906eb29b Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/TAB_01.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/TAB_01_o.gif b/src/main/webapp/resources/images/egovframework/com/TAB_01_o.gif new file mode 100644 index 00000000..90c59323 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/TAB_01_o.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/TAB_02.gif b/src/main/webapp/resources/images/egovframework/com/TAB_02.gif new file mode 100644 index 00000000..7c962a06 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/TAB_02.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/TAB_02_o.gif b/src/main/webapp/resources/images/egovframework/com/TAB_02_o.gif new file mode 100644 index 00000000..99ea512e Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/TAB_02_o.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/TAB_03.gif b/src/main/webapp/resources/images/egovframework/com/TAB_03.gif new file mode 100644 index 00000000..d01f1600 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/TAB_03.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/TAB_03_o.gif b/src/main/webapp/resources/images/egovframework/com/TAB_03_o.gif new file mode 100644 index 00000000..1918bc92 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/TAB_03_o.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/bg_list_th.gif b/src/main/webapp/resources/images/egovframework/com/bg_list_th.gif new file mode 100644 index 00000000..87f4a1c3 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/bg_list_th.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/bg_list_thEnd.gif b/src/main/webapp/resources/images/egovframework/com/bg_list_thEnd.gif new file mode 100644 index 00000000..c8767873 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/bg_list_thEnd.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/bottom_bg.gif b/src/main/webapp/resources/images/egovframework/com/bottom_bg.gif new file mode 100644 index 00000000..69ccb7fc Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/bottom_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/botttom_address.gif b/src/main/webapp/resources/images/egovframework/com/botttom_address.gif new file mode 100644 index 00000000..2cd3fc70 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/botttom_address.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/botttom_logo.gif b/src/main/webapp/resources/images/egovframework/com/botttom_logo.gif new file mode 100644 index 00000000..076cc8dd Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/botttom_logo.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/btn_kne.gif b/src/main/webapp/resources/images/egovframework/com/btn_kne.gif new file mode 100644 index 00000000..e4da397a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/btn_kne.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/btn_logout.gif b/src/main/webapp/resources/images/egovframework/com/btn_logout.gif new file mode 100644 index 00000000..b52e7b5a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/btn_logout.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/bu_icon_delete.gif b/src/main/webapp/resources/images/egovframework/com/bu_icon_delete.gif new file mode 100644 index 00000000..9d4760c2 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/bu_icon_delete.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/blue_bg.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/blue_bg.jpg new file mode 100644 index 00000000..bd71e98c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/blue_bg.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2.jpg new file mode 100644 index 00000000..4097f6e7 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_bg.gif new file mode 100644 index 00000000..e268aade Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_left.gif b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_left.gif new file mode 100644 index 00000000..21fa7194 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_left.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_right.gif b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_right.gif new file mode 100644 index 00000000..4eed2e6a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/btn/bu2_right.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2.jpg new file mode 100644 index 00000000..4097f6e7 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_bg.gif new file mode 100644 index 00000000..e268aade Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_left.gif b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_left.gif new file mode 100644 index 00000000..21fa7194 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_left.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_right.gif b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_right.gif new file mode 100644 index 00000000..4eed2e6a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/button/bu2_right.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart1.JPG b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart1.JPG new file mode 100644 index 00000000..d0a3c5e5 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart1.JPG differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart2.JPG b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart2.JPG new file mode 100644 index 00000000..5e7eaae8 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart2.JPG differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart3.JPG b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart3.JPG new file mode 100644 index 00000000..cda1afa2 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart3.JPG differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart4.JPG b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart4.JPG new file mode 100644 index 00000000..d0a3c5e5 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart4.JPG differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart5.JPG b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart5.JPG new file mode 100644 index 00000000..5e7eaae8 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart5.JPG differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart6.JPG b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart6.JPG new file mode 100644 index 00000000..cda1afa2 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/chart/chart6.JPG differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/danger.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/danger.jpg new file mode 100644 index 00000000..9ce70f1c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/danger.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/er_logo.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/er_logo.jpg new file mode 100644 index 00000000..b80747d3 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/er_logo.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/fms/icon/bu5_close.gif b/src/main/webapp/resources/images/egovframework/com/cmm/fms/icon/bu5_close.gif new file mode 100644 index 00000000..4b7328af Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/fms/icon/bu5_close.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/fms/icon/bu_icon_delete.gif b/src/main/webapp/resources/images/egovframework/com/cmm/fms/icon/bu_icon_delete.gif new file mode 100644 index 00000000..9d4760c2 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/fms/icon/bu_icon_delete.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/go_history.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/go_history.jpg new file mode 100644 index 00000000..92c256ca Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/go_history.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/go_main.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/go_main.jpg new file mode 100644 index 00000000..397295db Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/go_main.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif new file mode 100644 index 00000000..45e228ce Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/bu_icon_carlendar.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_next.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_next.gif new file mode 100644 index 00000000..58981c16 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_next.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_nextend.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_nextend.gif new file mode 100644 index 00000000..a1506aa4 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_nextend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_prev.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_prev.gif new file mode 100644 index 00000000..7f54efdc Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_prev.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_prevend.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_prevend.gif new file mode 100644 index 00000000..3352f3b1 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/icon_prevend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/no_required.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/no_required.gif new file mode 100644 index 00000000..a93d4b20 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/no_required.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/reply_arrow.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/reply_arrow.gif new file mode 100644 index 00000000..d139cd3a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/reply_arrow.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/required.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/required.gif new file mode 100644 index 00000000..3b0d0a83 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/required.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/search.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/search.gif new file mode 100644 index 00000000..05f08577 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/search.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/tit_icon.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/tit_icon.gif new file mode 100644 index 00000000..b7ebd40c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/tit_icon.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/icon/tit_icon_pop.gif b/src/main/webapp/resources/images/egovframework/com/cmm/icon/tit_icon_pop.gif new file mode 100644 index 00000000..0bc070cd Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/icon/tit_icon_pop.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/img/search2.gif b/src/main/webapp/resources/images/egovframework/com/cmm/img/search2.gif new file mode 100644 index 00000000..05f08577 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/img/search2.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/left_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/left_bg.gif new file mode 100644 index 00000000..1c950617 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/left_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/left_menu_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/left_menu_bg.gif new file mode 100644 index 00000000..42699c60 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/left_menu_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/main/bg_footer.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/main/bg_footer.jpg new file mode 100644 index 00000000..1c7bce18 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/main/bg_footer.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/main/bg_header.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/main/bg_header.jpg new file mode 100644 index 00000000..293b1fd5 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/main/bg_header.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/main/h1_logo.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/main/h1_logo.jpg new file mode 100644 index 00000000..ce58acdf Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/main/h1_logo.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_next.gif b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_next.gif new file mode 100644 index 00000000..58981c16 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_next.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_nextend.gif b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_nextend.gif new file mode 100644 index 00000000..a1506aa4 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_nextend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_prev.gif b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_prev.gif new file mode 100644 index 00000000..7f54efdc Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_prev.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_prevend.gif b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_prevend.gif new file mode 100644 index 00000000..3352f3b1 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/mod/icon/icon_prevend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/search2.gif b/src/main/webapp/resources/images/egovframework/com/cmm/search2.gif new file mode 100644 index 00000000..05f08577 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/search2.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bg_list_th.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bg_list_th.gif new file mode 100644 index 00000000..87f4a1c3 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bg_list_th.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bg_list_thEnd.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bg_list_thEnd.gif new file mode 100644 index 00000000..c8767873 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bg_list_thEnd.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/btn_kne.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/btn_kne.gif new file mode 100644 index 00000000..e4da397a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/btn_kne.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/btn_logout.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/btn_logout.gif new file mode 100644 index 00000000..b52e7b5a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/btn_logout.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bu2.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bu2.jpg new file mode 100644 index 00000000..4097f6e7 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/bu2.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_bg.gif new file mode 100644 index 00000000..e268aade Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_left.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_left.gif new file mode 100644 index 00000000..21fa7194 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_left.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_right.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_right.gif new file mode 100644 index 00000000..4eed2e6a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/button/bu2_right.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/contents.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/contents.jpg new file mode 100644 index 00000000..bfb14e27 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/contents.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_next.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_next.gif new file mode 100644 index 00000000..58981c16 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_next.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_nextend.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_nextend.gif new file mode 100644 index 00000000..a1506aa4 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_nextend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prev.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prev.gif new file mode 100644 index 00000000..7f54efdc Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prev.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prevend.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prevend.gif new file mode 100644 index 00000000..3352f3b1 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/icon_prevend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/no_required.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/no_required.gif new file mode 100644 index 00000000..a93d4b20 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/no_required.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/required.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/required.gif new file mode 100644 index 00000000..3b0d0a83 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/required.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/search.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/search.gif new file mode 100644 index 00000000..05f08577 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/search.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/tit_icon.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/tit_icon.gif new file mode 100644 index 00000000..b7ebd40c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/tit_icon.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/tit_icon_pop.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/tit_icon_pop.gif new file mode 100644 index 00000000..0bc070cd Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/icon/tit_icon_pop.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/index_login.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/index_login.gif new file mode 100644 index 00000000..6f928e68 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/index_login.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/index_login.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/index_login.jpg new file mode 100644 index 00000000..ffd89c68 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/index_login.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/join_btn.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/join_btn.gif new file mode 100644 index 00000000..c45e7fe1 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/join_btn.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_bg.gif new file mode 100644 index 00000000..1c950617 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_bg.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_bg.gif new file mode 100644 index 00000000..919c083b Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_btm.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_btm.gif new file mode 100644 index 00000000..f23d657c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_btm.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_top.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_top.gif new file mode 100644 index 00000000..4eea5244 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/left_menu_top.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_bg01.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_bg01.gif new file mode 100644 index 00000000..edaf03df Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_bg01.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_btn.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_btn.gif new file mode 100644 index 00000000..cc9ea047 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_btn.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_id_save.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_id_save.gif new file mode 100644 index 00000000..64d92bef Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/login_id_save.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/logo.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/logo.gif new file mode 100644 index 00000000..1e3969d8 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/logo.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/menu_bg.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/menu_bg.jpg new file mode 100644 index 00000000..7eb135f7 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/menu_bg.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/page_title.gif b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/page_title.gif new file mode 100644 index 00000000..74bcc9b2 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/uss/umt/page_title.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/btn/bu2.jpg b/src/main/webapp/resources/images/egovframework/com/cmm/utl/btn/bu2.jpg new file mode 100644 index 00000000..4097f6e7 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/btn/bu2.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_base.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_base.gif new file mode 100644 index 00000000..9ac0b117 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_base.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_cd.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_cd.gif new file mode 100644 index 00000000..75038194 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_cd.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_empty.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_empty.gif new file mode 100644 index 00000000..b5cf5237 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_empty.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_folder.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_folder.gif new file mode 100644 index 00000000..eb129763 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_folder.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_folderopen.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_folderopen.gif new file mode 100644 index 00000000..c5c31102 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_folderopen.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_globe.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_globe.gif new file mode 100644 index 00000000..57123d0e Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_globe.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_imgfolder.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_imgfolder.gif new file mode 100644 index 00000000..e6d88034 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_imgfolder.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_join.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_join.gif new file mode 100644 index 00000000..34dd4761 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_join.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_joinbottom.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_joinbottom.gif new file mode 100644 index 00000000..48b81c80 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_joinbottom.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_line.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_line.gif new file mode 100644 index 00000000..1a259eea Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_line.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_minus.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_minus.gif new file mode 100644 index 00000000..3d212a97 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_minus.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_minusbottom.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_minusbottom.gif new file mode 100644 index 00000000..dc3198be Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_minusbottom.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_musicfolder.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_musicfolder.gif new file mode 100644 index 00000000..f620789f Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_musicfolder.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_nolines_minus.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_nolines_minus.gif new file mode 100644 index 00000000..2592ac20 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_nolines_minus.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_nolines_plus.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_nolines_plus.gif new file mode 100644 index 00000000..f258ce21 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_nolines_plus.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_page.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_page.gif new file mode 100644 index 00000000..42d7318c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_page.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_plus.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_plus.gif new file mode 100644 index 00000000..b2c99723 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_plus.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_plusbottom.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_plusbottom.gif new file mode 100644 index 00000000..b5671d89 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_plusbottom.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_question.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_question.gif new file mode 100644 index 00000000..dd4e6850 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_question.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_trash.gif b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_trash.gif new file mode 100644 index 00000000..cfa0f000 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/cmm/utl/menu_trash.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/ency.gif b/src/main/webapp/resources/images/egovframework/com/ency.gif new file mode 100644 index 00000000..5766fe78 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/ency.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/icon_next.gif b/src/main/webapp/resources/images/egovframework/com/icon_next.gif new file mode 100644 index 00000000..58981c16 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/icon_next.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/icon_nextend.gif b/src/main/webapp/resources/images/egovframework/com/icon_nextend.gif new file mode 100644 index 00000000..a1506aa4 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/icon_nextend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/icon_prev.gif b/src/main/webapp/resources/images/egovframework/com/icon_prev.gif new file mode 100644 index 00000000..7f54efdc Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/icon_prev.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/icon_prevend.gif b/src/main/webapp/resources/images/egovframework/com/icon_prevend.gif new file mode 100644 index 00000000..3352f3b1 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/icon_prevend.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/index_login.gif b/src/main/webapp/resources/images/egovframework/com/index_login.gif new file mode 100644 index 00000000..6f928e68 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/index_login.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/index_login.jpg b/src/main/webapp/resources/images/egovframework/com/index_login.jpg new file mode 100644 index 00000000..ffd89c68 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/index_login.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/join_btn.gif b/src/main/webapp/resources/images/egovframework/com/join_btn.gif new file mode 100644 index 00000000..c45e7fe1 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/join_btn.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/left_bg.gif b/src/main/webapp/resources/images/egovframework/com/left_bg.gif new file mode 100644 index 00000000..1c950617 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/left_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/left_menu_bg.gif b/src/main/webapp/resources/images/egovframework/com/left_menu_bg.gif new file mode 100644 index 00000000..99304c0e Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/left_menu_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/left_menu_btm.gif b/src/main/webapp/resources/images/egovframework/com/left_menu_btm.gif new file mode 100644 index 00000000..f23d657c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/left_menu_btm.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/left_menu_top.gif b/src/main/webapp/resources/images/egovframework/com/left_menu_top.gif new file mode 100644 index 00000000..4eea5244 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/left_menu_top.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/login_bg01.gif b/src/main/webapp/resources/images/egovframework/com/login_bg01.gif new file mode 100644 index 00000000..774adcf8 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/login_bg01.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/login_btn.gif b/src/main/webapp/resources/images/egovframework/com/login_btn.gif new file mode 100644 index 00000000..cc9ea047 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/login_btn.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/login_id_save.gif b/src/main/webapp/resources/images/egovframework/com/login_id_save.gif new file mode 100644 index 00000000..64d92bef Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/login_id_save.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/logo.gif b/src/main/webapp/resources/images/egovframework/com/logo.gif new file mode 100644 index 00000000..1e3969d8 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/logo.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/logo_01.gif b/src/main/webapp/resources/images/egovframework/com/logo_01.gif new file mode 100644 index 00000000..06519d69 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/logo_01.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/logout_btn.gif b/src/main/webapp/resources/images/egovframework/com/logout_btn.gif new file mode 100644 index 00000000..07ad8264 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/logout_btn.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/main_top.gif b/src/main/webapp/resources/images/egovframework/com/main_top.gif new file mode 100644 index 00000000..ad12aa0a Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/main_top.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/main_top02.jpg b/src/main/webapp/resources/images/egovframework/com/main_top02.jpg new file mode 100644 index 00000000..03bf1189 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/main_top02.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/menu_bg.jpg b/src/main/webapp/resources/images/egovframework/com/menu_bg.jpg new file mode 100644 index 00000000..7eb135f7 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/menu_bg.jpg differ diff --git a/src/main/webapp/resources/images/egovframework/com/navi_bg.gif b/src/main/webapp/resources/images/egovframework/com/navi_bg.gif new file mode 100644 index 00000000..84827e0b Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/navi_bg.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/page_title.gif b/src/main/webapp/resources/images/egovframework/com/page_title.gif new file mode 100644 index 00000000..74bcc9b2 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/page_title.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/required.gif b/src/main/webapp/resources/images/egovframework/com/required.gif new file mode 100644 index 00000000..3b0d0a83 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/required.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/terms.gif b/src/main/webapp/resources/images/egovframework/com/terms.gif new file mode 100644 index 00000000..47b60e6e Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/terms.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/tit_icon.gif b/src/main/webapp/resources/images/egovframework/com/tit_icon.gif new file mode 100644 index 00000000..b7ebd40c Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/tit_icon.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/tit_icon_pop.gif b/src/main/webapp/resources/images/egovframework/com/tit_icon_pop.gif new file mode 100644 index 00000000..0bc070cd Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/tit_icon_pop.gif differ diff --git a/src/main/webapp/resources/images/egovframework/com/yellow_bull.gif b/src/main/webapp/resources/images/egovframework/com/yellow_bull.gif new file mode 100644 index 00000000..9c6cf6c0 Binary files /dev/null and b/src/main/webapp/resources/images/egovframework/com/yellow_bull.gif differ diff --git a/src/main/webapp/resources/images/er_logo.jpg b/src/main/webapp/resources/images/er_logo.jpg new file mode 100644 index 00000000..b80747d3 Binary files /dev/null and b/src/main/webapp/resources/images/er_logo.jpg differ diff --git a/src/main/webapp/resources/images/footer/img_mois.png b/src/main/webapp/resources/images/footer/img_mois.png new file mode 100644 index 00000000..73dbe1b4 Binary files /dev/null and b/src/main/webapp/resources/images/footer/img_mois.png differ diff --git a/src/main/webapp/resources/images/footer/img_nia.png b/src/main/webapp/resources/images/footer/img_nia.png new file mode 100644 index 00000000..02fe7f22 Binary files /dev/null and b/src/main/webapp/resources/images/footer/img_nia.png differ diff --git a/src/main/webapp/resources/images/framework/cmmn/ajax-loading.gif b/src/main/webapp/resources/images/framework/cmmn/ajax-loading.gif new file mode 100644 index 00000000..1f4580d7 Binary files /dev/null and b/src/main/webapp/resources/images/framework/cmmn/ajax-loading.gif differ diff --git a/src/main/webapp/resources/images/framework/cmmn/error_monitor.png b/src/main/webapp/resources/images/framework/cmmn/error_monitor.png new file mode 100644 index 00000000..a37c0034 Binary files /dev/null and b/src/main/webapp/resources/images/framework/cmmn/error_monitor.png differ diff --git a/src/main/webapp/resources/images/framework/common/all_menu.png b/src/main/webapp/resources/images/framework/common/all_menu.png new file mode 100644 index 00000000..9551d7dc Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/all_menu.png differ diff --git a/src/main/webapp/resources/images/framework/common/all_menu_close.png b/src/main/webapp/resources/images/framework/common/all_menu_close.png new file mode 100644 index 00000000..502e7042 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/all_menu_close.png differ diff --git a/src/main/webapp/resources/images/framework/common/arr_next.png b/src/main/webapp/resources/images/framework/common/arr_next.png new file mode 100644 index 00000000..7d853a93 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/arr_next.png differ diff --git a/src/main/webapp/resources/images/framework/common/arr_prev.png b/src/main/webapp/resources/images/framework/common/arr_prev.png new file mode 100644 index 00000000..ffce76c9 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/arr_prev.png differ diff --git a/src/main/webapp/resources/images/framework/common/btnX_1.png b/src/main/webapp/resources/images/framework/common/btnX_1.png new file mode 100644 index 00000000..65841436 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btnX_1.png differ diff --git a/src/main/webapp/resources/images/framework/common/btnX_2.png b/src/main/webapp/resources/images/framework/common/btnX_2.png new file mode 100644 index 00000000..a8475bff Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btnX_2.png differ diff --git a/src/main/webapp/resources/images/framework/common/btn_next.png b/src/main/webapp/resources/images/framework/common/btn_next.png new file mode 100644 index 00000000..fba4e322 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btn_next.png differ diff --git a/src/main/webapp/resources/images/framework/common/btn_nextAll.png b/src/main/webapp/resources/images/framework/common/btn_nextAll.png new file mode 100644 index 00000000..a62011d0 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btn_nextAll.png differ diff --git a/src/main/webapp/resources/images/framework/common/btn_prev.png b/src/main/webapp/resources/images/framework/common/btn_prev.png new file mode 100644 index 00000000..056c8285 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btn_prev.png differ diff --git a/src/main/webapp/resources/images/framework/common/btn_prevAll.png b/src/main/webapp/resources/images/framework/common/btn_prevAll.png new file mode 100644 index 00000000..5db93f17 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btn_prevAll.png differ diff --git a/src/main/webapp/resources/images/framework/common/btn_x.gif b/src/main/webapp/resources/images/framework/common/btn_x.gif new file mode 100644 index 00000000..eb7a2c82 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btn_x.gif differ diff --git a/src/main/webapp/resources/images/framework/common/btn_x2.gif b/src/main/webapp/resources/images/framework/common/btn_x2.gif new file mode 100644 index 00000000..24e39c56 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/btn_x2.gif differ diff --git a/src/main/webapp/resources/images/framework/common/busstop.png b/src/main/webapp/resources/images/framework/common/busstop.png new file mode 100644 index 00000000..70887e1a Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/busstop.png differ diff --git a/src/main/webapp/resources/images/framework/common/busstop_red.png b/src/main/webapp/resources/images/framework/common/busstop_red.png new file mode 100644 index 00000000..e6fd1301 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/busstop_red.png differ diff --git a/src/main/webapp/resources/images/framework/common/clip.png b/src/main/webapp/resources/images/framework/common/clip.png new file mode 100644 index 00000000..c752c950 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/clip.png differ diff --git a/src/main/webapp/resources/images/framework/common/content_header.png b/src/main/webapp/resources/images/framework/common/content_header.png new file mode 100644 index 00000000..f6866b2d Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/content_header.png differ diff --git a/src/main/webapp/resources/images/framework/common/dp2_on.png b/src/main/webapp/resources/images/framework/common/dp2_on.png new file mode 100644 index 00000000..2cb4daaf Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/dp2_on.png differ diff --git a/src/main/webapp/resources/images/framework/common/dp3_off.png b/src/main/webapp/resources/images/framework/common/dp3_off.png new file mode 100644 index 00000000..a6eb5403 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/dp3_off.png differ diff --git a/src/main/webapp/resources/images/framework/common/dp3_on.png b/src/main/webapp/resources/images/framework/common/dp3_on.png new file mode 100644 index 00000000..d0f488c4 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/dp3_on.png differ diff --git a/src/main/webapp/resources/images/framework/common/dp4_off.png b/src/main/webapp/resources/images/framework/common/dp4_off.png new file mode 100644 index 00000000..c1c700fe Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/dp4_off.png differ diff --git a/src/main/webapp/resources/images/framework/common/dp4_on.png b/src/main/webapp/resources/images/framework/common/dp4_on.png new file mode 100644 index 00000000..e12a0526 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/dp4_on.png differ diff --git a/src/main/webapp/resources/images/framework/common/excel.png b/src/main/webapp/resources/images/framework/common/excel.png new file mode 100644 index 00000000..73ec3bc9 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/excel.png differ diff --git a/src/main/webapp/resources/images/framework/common/favicon.ico b/src/main/webapp/resources/images/framework/common/favicon.ico new file mode 100644 index 00000000..8e1ff5be Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/favicon.ico differ diff --git a/src/main/webapp/resources/images/framework/common/ico_calendar.png b/src/main/webapp/resources/images/framework/common/ico_calendar.png new file mode 100644 index 00000000..2ceeea64 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/ico_calendar.png differ diff --git a/src/main/webapp/resources/images/framework/common/ico_calendar2.png b/src/main/webapp/resources/images/framework/common/ico_calendar2.png new file mode 100644 index 00000000..bbd33dc9 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/ico_calendar2.png differ diff --git a/src/main/webapp/resources/images/framework/common/ico_next.png b/src/main/webapp/resources/images/framework/common/ico_next.png new file mode 100644 index 00000000..e3256fb6 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/ico_next.png differ diff --git a/src/main/webapp/resources/images/framework/common/ico_prev.png b/src/main/webapp/resources/images/framework/common/ico_prev.png new file mode 100644 index 00000000..36017d86 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/ico_prev.png differ diff --git a/src/main/webapp/resources/images/framework/common/line.png b/src/main/webapp/resources/images/framework/common/line.png new file mode 100644 index 00000000..fd9f9927 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/line.png differ diff --git a/src/main/webapp/resources/images/framework/common/list_check.png b/src/main/webapp/resources/images/framework/common/list_check.png new file mode 100644 index 00000000..cb62300c Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/list_check.png differ diff --git a/src/main/webapp/resources/images/framework/common/loadicon.png b/src/main/webapp/resources/images/framework/common/loadicon.png new file mode 100644 index 00000000..e654f40a Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/loadicon.png differ diff --git a/src/main/webapp/resources/images/framework/common/logo.png b/src/main/webapp/resources/images/framework/common/logo.png new file mode 100644 index 00000000..848d4c2f Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/logo.png differ diff --git a/src/main/webapp/resources/images/framework/common/more.png b/src/main/webapp/resources/images/framework/common/more.png new file mode 100644 index 00000000..360450dd Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/more.png differ diff --git a/src/main/webapp/resources/images/framework/common/print.png b/src/main/webapp/resources/images/framework/common/print.png new file mode 100644 index 00000000..69ccebc1 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/print.png differ diff --git a/src/main/webapp/resources/images/framework/common/search.png b/src/main/webapp/resources/images/framework/common/search.png new file mode 100644 index 00000000..845ed961 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/search.png differ diff --git a/src/main/webapp/resources/images/framework/common/sidebar_off.png b/src/main/webapp/resources/images/framework/common/sidebar_off.png new file mode 100644 index 00000000..79c75f6d Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/sidebar_off.png differ diff --git a/src/main/webapp/resources/images/framework/common/sidebar_on.png b/src/main/webapp/resources/images/framework/common/sidebar_on.png new file mode 100644 index 00000000..fb7709c0 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/sidebar_on.png differ diff --git a/src/main/webapp/resources/images/framework/common/sort.png b/src/main/webapp/resources/images/framework/common/sort.png new file mode 100644 index 00000000..2c39b60a Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/sort.png differ diff --git a/src/main/webapp/resources/images/framework/common/sort_asc.png b/src/main/webapp/resources/images/framework/common/sort_asc.png new file mode 100644 index 00000000..0679ddf1 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/sort_asc.png differ diff --git a/src/main/webapp/resources/images/framework/common/sort_desc.png b/src/main/webapp/resources/images/framework/common/sort_desc.png new file mode 100644 index 00000000..fd7210d3 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/sort_desc.png differ diff --git a/src/main/webapp/resources/images/framework/common/update.png b/src/main/webapp/resources/images/framework/common/update.png new file mode 100644 index 00000000..5bb1fca8 Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/update.png differ diff --git a/src/main/webapp/resources/images/framework/common/upload.png b/src/main/webapp/resources/images/framework/common/upload.png new file mode 100644 index 00000000..8e848fbd Binary files /dev/null and b/src/main/webapp/resources/images/framework/common/upload.png differ diff --git a/src/main/webapp/resources/images/go_history.jpg b/src/main/webapp/resources/images/go_history.jpg new file mode 100644 index 00000000..92c256ca Binary files /dev/null and b/src/main/webapp/resources/images/go_history.jpg differ diff --git a/src/main/webapp/resources/images/header/limg_lt_pas_logo.gif b/src/main/webapp/resources/images/header/limg_lt_pas_logo.gif new file mode 100644 index 00000000..40f31746 Binary files /dev/null and b/src/main/webapp/resources/images/header/limg_lt_pas_logo.gif differ diff --git a/src/main/webapp/resources/images/header/logo.jpg b/src/main/webapp/resources/images/header/logo.jpg new file mode 100644 index 00000000..e4ac2bed Binary files /dev/null and b/src/main/webapp/resources/images/header/logo.jpg differ diff --git a/src/main/webapp/resources/images/icon_next.gif b/src/main/webapp/resources/images/icon_next.gif new file mode 100644 index 00000000..58981c16 Binary files /dev/null and b/src/main/webapp/resources/images/icon_next.gif differ diff --git a/src/main/webapp/resources/images/icon_nextend.gif b/src/main/webapp/resources/images/icon_nextend.gif new file mode 100644 index 00000000..a1506aa4 Binary files /dev/null and b/src/main/webapp/resources/images/icon_nextend.gif differ diff --git a/src/main/webapp/resources/images/icon_prev.gif b/src/main/webapp/resources/images/icon_prev.gif new file mode 100644 index 00000000..7f54efdc Binary files /dev/null and b/src/main/webapp/resources/images/icon_prev.gif differ diff --git a/src/main/webapp/resources/images/icon_prevend.gif b/src/main/webapp/resources/images/icon_prevend.gif new file mode 100644 index 00000000..3352f3b1 Binary files /dev/null and b/src/main/webapp/resources/images/icon_prevend.gif differ diff --git a/src/main/webapp/resources/images/img_search.gif b/src/main/webapp/resources/images/img_search.gif new file mode 100644 index 00000000..bb7b7c0a Binary files /dev/null and b/src/main/webapp/resources/images/img_search.gif differ diff --git a/src/main/webapp/resources/images/index/bg_board01.gif b/src/main/webapp/resources/images/index/bg_board01.gif new file mode 100644 index 00000000..8608f2bb Binary files /dev/null and b/src/main/webapp/resources/images/index/bg_board01.gif differ diff --git a/src/main/webapp/resources/images/index/bg_board02.gif b/src/main/webapp/resources/images/index/bg_board02.gif new file mode 100644 index 00000000..b47ed2c9 Binary files /dev/null and b/src/main/webapp/resources/images/index/bg_board02.gif differ diff --git a/src/main/webapp/resources/images/index/bg_board03.gif b/src/main/webapp/resources/images/index/bg_board03.gif new file mode 100644 index 00000000..a75429be Binary files /dev/null and b/src/main/webapp/resources/images/index/bg_board03.gif differ diff --git a/src/main/webapp/resources/images/index/btn_more.gif b/src/main/webapp/resources/images/index/btn_more.gif new file mode 100644 index 00000000..827fc778 Binary files /dev/null and b/src/main/webapp/resources/images/index/btn_more.gif differ diff --git a/src/main/webapp/resources/images/index/img_maintitle.jpg b/src/main/webapp/resources/images/index/img_maintitle.jpg new file mode 100644 index 00000000..d3f0bfde Binary files /dev/null and b/src/main/webapp/resources/images/index/img_maintitle.jpg differ diff --git a/src/main/webapp/resources/images/index/img_new.gif b/src/main/webapp/resources/images/index/img_new.gif new file mode 100644 index 00000000..78db612c Binary files /dev/null and b/src/main/webapp/resources/images/index/img_new.gif differ diff --git a/src/main/webapp/resources/images/index/img_subtitle01.gif b/src/main/webapp/resources/images/index/img_subtitle01.gif new file mode 100644 index 00000000..011b931b Binary files /dev/null and b/src/main/webapp/resources/images/index/img_subtitle01.gif differ diff --git a/src/main/webapp/resources/images/index/img_subtitle02.gif b/src/main/webapp/resources/images/index/img_subtitle02.gif new file mode 100644 index 00000000..ee14d8cd Binary files /dev/null and b/src/main/webapp/resources/images/index/img_subtitle02.gif differ diff --git a/src/main/webapp/resources/images/index/img_subtitle03.gif b/src/main/webapp/resources/images/index/img_subtitle03.gif new file mode 100644 index 00000000..3ee5e1e9 Binary files /dev/null and b/src/main/webapp/resources/images/index/img_subtitle03.gif differ diff --git a/src/main/webapp/resources/images/left_bg.gif b/src/main/webapp/resources/images/left_bg.gif new file mode 100644 index 00000000..1c950617 Binary files /dev/null and b/src/main/webapp/resources/images/left_bg.gif differ diff --git a/src/main/webapp/resources/images/leftmenu/bl_depth01.gif b/src/main/webapp/resources/images/leftmenu/bl_depth01.gif new file mode 100644 index 00000000..ee55ce6c Binary files /dev/null and b/src/main/webapp/resources/images/leftmenu/bl_depth01.gif differ diff --git a/src/main/webapp/resources/images/leftmenu/leftmenu_bottom.gif b/src/main/webapp/resources/images/leftmenu/leftmenu_bottom.gif new file mode 100644 index 00000000..7bfcf5e9 Binary files /dev/null and b/src/main/webapp/resources/images/leftmenu/leftmenu_bottom.gif differ diff --git a/src/main/webapp/resources/images/leftmenu/leftmenu_repeat.gif b/src/main/webapp/resources/images/leftmenu/leftmenu_repeat.gif new file mode 100644 index 00000000..28ae6a20 Binary files /dev/null and b/src/main/webapp/resources/images/leftmenu/leftmenu_repeat.gif differ diff --git a/src/main/webapp/resources/images/leftmenu/leftmenu_top.gif b/src/main/webapp/resources/images/leftmenu/leftmenu_top.gif new file mode 100644 index 00000000..94712977 Binary files /dev/null and b/src/main/webapp/resources/images/leftmenu/leftmenu_top.gif differ diff --git a/src/main/webapp/resources/images/leftmenu/login.jpg b/src/main/webapp/resources/images/leftmenu/login.jpg new file mode 100644 index 00000000..86147a3e Binary files /dev/null and b/src/main/webapp/resources/images/leftmenu/login.jpg differ diff --git a/src/main/webapp/resources/images/leftmenu/logout.jpg b/src/main/webapp/resources/images/leftmenu/logout.jpg new file mode 100644 index 00000000..a4b0a0eb Binary files /dev/null and b/src/main/webapp/resources/images/leftmenu/logout.jpg differ diff --git a/src/main/webapp/resources/images/login/bg_login.gif b/src/main/webapp/resources/images/login/bg_login.gif new file mode 100644 index 00000000..9ef31640 Binary files /dev/null and b/src/main/webapp/resources/images/login/bg_login.gif differ diff --git a/src/main/webapp/resources/images/login/btn_findidpw.gif b/src/main/webapp/resources/images/login/btn_findidpw.gif new file mode 100644 index 00000000..c4ef335b Binary files /dev/null and b/src/main/webapp/resources/images/login/btn_findidpw.gif differ diff --git a/src/main/webapp/resources/images/login/btn_login.gif b/src/main/webapp/resources/images/login/btn_login.gif new file mode 100644 index 00000000..0ad72092 Binary files /dev/null and b/src/main/webapp/resources/images/login/btn_login.gif differ diff --git a/src/main/webapp/resources/images/login/btn_regist.gif b/src/main/webapp/resources/images/login/btn_regist.gif new file mode 100644 index 00000000..667df8c2 Binary files /dev/null and b/src/main/webapp/resources/images/login/btn_regist.gif differ diff --git a/src/main/webapp/resources/images/login/img_idtext.gif b/src/main/webapp/resources/images/login/img_idtext.gif new file mode 100644 index 00000000..e5ba5514 Binary files /dev/null and b/src/main/webapp/resources/images/login/img_idtext.gif differ diff --git a/src/main/webapp/resources/images/login/img_logintitle.gif b/src/main/webapp/resources/images/login/img_logintitle.gif new file mode 100644 index 00000000..7c81225f Binary files /dev/null and b/src/main/webapp/resources/images/login/img_logintitle.gif differ diff --git a/src/main/webapp/resources/images/login/img_pwtext.gif b/src/main/webapp/resources/images/login/img_pwtext.gif new file mode 100644 index 00000000..ddb573a4 Binary files /dev/null and b/src/main/webapp/resources/images/login/img_pwtext.gif differ diff --git a/src/main/webapp/resources/images/login/lock.png b/src/main/webapp/resources/images/login/lock.png new file mode 100644 index 00000000..623dbb52 Binary files /dev/null and b/src/main/webapp/resources/images/login/lock.png differ diff --git a/src/main/webapp/resources/images/login/loginDeco.png b/src/main/webapp/resources/images/login/loginDeco.png new file mode 100644 index 00000000..b39a2272 Binary files /dev/null and b/src/main/webapp/resources/images/login/loginDeco.png differ diff --git a/src/main/webapp/resources/images/login/loginDeco_02.png b/src/main/webapp/resources/images/login/loginDeco_02.png new file mode 100644 index 00000000..bf82eada Binary files /dev/null and b/src/main/webapp/resources/images/login/loginDeco_02.png differ diff --git a/src/main/webapp/resources/images/login/loginLogo.png b/src/main/webapp/resources/images/login/loginLogo.png new file mode 100644 index 00000000..39a5c686 Binary files /dev/null and b/src/main/webapp/resources/images/login/loginLogo.png differ diff --git a/src/main/webapp/resources/images/login/logo.png b/src/main/webapp/resources/images/login/logo.png new file mode 100644 index 00000000..fcbff853 Binary files /dev/null and b/src/main/webapp/resources/images/login/logo.png differ diff --git a/src/main/webapp/resources/images/login/mainLogo.png b/src/main/webapp/resources/images/login/mainLogo.png new file mode 100644 index 00000000..d32e87bb Binary files /dev/null and b/src/main/webapp/resources/images/login/mainLogo.png differ diff --git a/src/main/webapp/resources/images/login/mainLogo_02.png b/src/main/webapp/resources/images/login/mainLogo_02.png new file mode 100644 index 00000000..69b27527 Binary files /dev/null and b/src/main/webapp/resources/images/login/mainLogo_02.png differ diff --git a/src/main/webapp/resources/images/login/main_img.png b/src/main/webapp/resources/images/login/main_img.png new file mode 100644 index 00000000..7e4737b4 Binary files /dev/null and b/src/main/webapp/resources/images/login/main_img.png differ diff --git a/src/main/webapp/resources/images/login/mobileLogo.png b/src/main/webapp/resources/images/login/mobileLogo.png new file mode 100644 index 00000000..fcea5f2a Binary files /dev/null and b/src/main/webapp/resources/images/login/mobileLogo.png differ diff --git a/src/main/webapp/resources/images/login/title.png b/src/main/webapp/resources/images/login/title.png new file mode 100644 index 00000000..c100bc14 Binary files /dev/null and b/src/main/webapp/resources/images/login/title.png differ diff --git a/src/main/webapp/resources/images/mainDeco_01.png b/src/main/webapp/resources/images/mainDeco_01.png new file mode 100644 index 00000000..e3ddc66a Binary files /dev/null and b/src/main/webapp/resources/images/mainDeco_01.png differ diff --git a/src/main/webapp/resources/images/mainDeco_02.png b/src/main/webapp/resources/images/mainDeco_02.png new file mode 100644 index 00000000..034205c6 Binary files /dev/null and b/src/main/webapp/resources/images/mainDeco_02.png differ diff --git a/src/main/webapp/resources/images/mainDeco_03.png b/src/main/webapp/resources/images/mainDeco_03.png new file mode 100644 index 00000000..9f6cdc49 Binary files /dev/null and b/src/main/webapp/resources/images/mainDeco_03.png differ diff --git a/src/main/webapp/resources/images/mainDeco_04.png b/src/main/webapp/resources/images/mainDeco_04.png new file mode 100644 index 00000000..e2a84f17 Binary files /dev/null and b/src/main/webapp/resources/images/mainDeco_04.png differ diff --git a/src/main/webapp/resources/images/mainDeco_05.png b/src/main/webapp/resources/images/mainDeco_05.png new file mode 100644 index 00000000..7eb58cb8 Binary files /dev/null and b/src/main/webapp/resources/images/mainDeco_05.png differ diff --git a/src/main/webapp/resources/images/menu_ebt.jpg b/src/main/webapp/resources/images/menu_ebt.jpg new file mode 100644 index 00000000..05902954 Binary files /dev/null and b/src/main/webapp/resources/images/menu_ebt.jpg differ diff --git a/src/main/webapp/resources/images/question.jpg b/src/main/webapp/resources/images/question.jpg new file mode 100644 index 00000000..509f417e Binary files /dev/null and b/src/main/webapp/resources/images/question.jpg differ diff --git a/src/main/webapp/resources/images/reply_arrow.gif b/src/main/webapp/resources/images/reply_arrow.gif new file mode 100644 index 00000000..d139cd3a Binary files /dev/null and b/src/main/webapp/resources/images/reply_arrow.gif differ diff --git a/src/main/webapp/resources/images/required.gif b/src/main/webapp/resources/images/required.gif new file mode 100644 index 00000000..3b0d0a83 Binary files /dev/null and b/src/main/webapp/resources/images/required.gif differ diff --git a/src/main/webapp/resources/images/search.gif b/src/main/webapp/resources/images/search.gif new file mode 100644 index 00000000..05f08577 Binary files /dev/null and b/src/main/webapp/resources/images/search.gif differ diff --git a/src/main/webapp/resources/images/tit_icon.gif b/src/main/webapp/resources/images/tit_icon.gif new file mode 100644 index 00000000..b7ebd40c Binary files /dev/null and b/src/main/webapp/resources/images/tit_icon.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_base.gif b/src/main/webapp/resources/images/tree/menu_base.gif new file mode 100644 index 00000000..9ac0b117 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_base.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_cd.gif b/src/main/webapp/resources/images/tree/menu_cd.gif new file mode 100644 index 00000000..75038194 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_cd.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_empty.gif b/src/main/webapp/resources/images/tree/menu_empty.gif new file mode 100644 index 00000000..b5cf5237 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_empty.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_folder.gif b/src/main/webapp/resources/images/tree/menu_folder.gif new file mode 100644 index 00000000..eb129763 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_folder.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_folderopen.gif b/src/main/webapp/resources/images/tree/menu_folderopen.gif new file mode 100644 index 00000000..c5c31102 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_folderopen.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_globe.gif b/src/main/webapp/resources/images/tree/menu_globe.gif new file mode 100644 index 00000000..57123d0e Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_globe.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_imgfolder.gif b/src/main/webapp/resources/images/tree/menu_imgfolder.gif new file mode 100644 index 00000000..e6d88034 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_imgfolder.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_join.gif b/src/main/webapp/resources/images/tree/menu_join.gif new file mode 100644 index 00000000..34dd4761 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_join.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_joinbottom.gif b/src/main/webapp/resources/images/tree/menu_joinbottom.gif new file mode 100644 index 00000000..48b81c80 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_joinbottom.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_line.gif b/src/main/webapp/resources/images/tree/menu_line.gif new file mode 100644 index 00000000..1a259eea Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_line.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_minus.gif b/src/main/webapp/resources/images/tree/menu_minus.gif new file mode 100644 index 00000000..3d212a97 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_minus.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_minusbottom.gif b/src/main/webapp/resources/images/tree/menu_minusbottom.gif new file mode 100644 index 00000000..dc3198be Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_minusbottom.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_musicfolder.gif b/src/main/webapp/resources/images/tree/menu_musicfolder.gif new file mode 100644 index 00000000..f620789f Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_musicfolder.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_nolines_minus.gif b/src/main/webapp/resources/images/tree/menu_nolines_minus.gif new file mode 100644 index 00000000..2592ac20 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_nolines_minus.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_nolines_plus.gif b/src/main/webapp/resources/images/tree/menu_nolines_plus.gif new file mode 100644 index 00000000..f258ce21 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_nolines_plus.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_page.gif b/src/main/webapp/resources/images/tree/menu_page.gif new file mode 100644 index 00000000..42d7318c Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_page.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_plus.gif b/src/main/webapp/resources/images/tree/menu_plus.gif new file mode 100644 index 00000000..b2c99723 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_plus.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_plusbottom.gif b/src/main/webapp/resources/images/tree/menu_plusbottom.gif new file mode 100644 index 00000000..b5671d89 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_plusbottom.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_question.gif b/src/main/webapp/resources/images/tree/menu_question.gif new file mode 100644 index 00000000..dd4e6850 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_question.gif differ diff --git a/src/main/webapp/resources/images/tree/menu_trash.gif b/src/main/webapp/resources/images/tree/menu_trash.gif new file mode 100644 index 00000000..cfa0f000 Binary files /dev/null and b/src/main/webapp/resources/images/tree/menu_trash.gif differ diff --git a/src/main/webapp/resources/images/util/menu_base.gif b/src/main/webapp/resources/images/util/menu_base.gif new file mode 100644 index 00000000..9ac0b117 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_base.gif differ diff --git a/src/main/webapp/resources/images/util/menu_cd.gif b/src/main/webapp/resources/images/util/menu_cd.gif new file mode 100644 index 00000000..75038194 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_cd.gif differ diff --git a/src/main/webapp/resources/images/util/menu_empty.gif b/src/main/webapp/resources/images/util/menu_empty.gif new file mode 100644 index 00000000..b5cf5237 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_empty.gif differ diff --git a/src/main/webapp/resources/images/util/menu_folder.gif b/src/main/webapp/resources/images/util/menu_folder.gif new file mode 100644 index 00000000..eb129763 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_folder.gif differ diff --git a/src/main/webapp/resources/images/util/menu_folderopen.gif b/src/main/webapp/resources/images/util/menu_folderopen.gif new file mode 100644 index 00000000..c5c31102 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_folderopen.gif differ diff --git a/src/main/webapp/resources/images/util/menu_globe.gif b/src/main/webapp/resources/images/util/menu_globe.gif new file mode 100644 index 00000000..57123d0e Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_globe.gif differ diff --git a/src/main/webapp/resources/images/util/menu_imgfolder.gif b/src/main/webapp/resources/images/util/menu_imgfolder.gif new file mode 100644 index 00000000..e6d88034 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_imgfolder.gif differ diff --git a/src/main/webapp/resources/images/util/menu_join.gif b/src/main/webapp/resources/images/util/menu_join.gif new file mode 100644 index 00000000..34dd4761 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_join.gif differ diff --git a/src/main/webapp/resources/images/util/menu_joinbottom.gif b/src/main/webapp/resources/images/util/menu_joinbottom.gif new file mode 100644 index 00000000..48b81c80 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_joinbottom.gif differ diff --git a/src/main/webapp/resources/images/util/menu_line.gif b/src/main/webapp/resources/images/util/menu_line.gif new file mode 100644 index 00000000..1a259eea Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_line.gif differ diff --git a/src/main/webapp/resources/images/util/menu_minus.gif b/src/main/webapp/resources/images/util/menu_minus.gif new file mode 100644 index 00000000..3d212a97 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_minus.gif differ diff --git a/src/main/webapp/resources/images/util/menu_minusbottom.gif b/src/main/webapp/resources/images/util/menu_minusbottom.gif new file mode 100644 index 00000000..dc3198be Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_minusbottom.gif differ diff --git a/src/main/webapp/resources/images/util/menu_musicfolder.gif b/src/main/webapp/resources/images/util/menu_musicfolder.gif new file mode 100644 index 00000000..f620789f Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_musicfolder.gif differ diff --git a/src/main/webapp/resources/images/util/menu_nolines_minus.gif b/src/main/webapp/resources/images/util/menu_nolines_minus.gif new file mode 100644 index 00000000..2592ac20 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_nolines_minus.gif differ diff --git a/src/main/webapp/resources/images/util/menu_nolines_plus.gif b/src/main/webapp/resources/images/util/menu_nolines_plus.gif new file mode 100644 index 00000000..f258ce21 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_nolines_plus.gif differ diff --git a/src/main/webapp/resources/images/util/menu_page.gif b/src/main/webapp/resources/images/util/menu_page.gif new file mode 100644 index 00000000..42d7318c Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_page.gif differ diff --git a/src/main/webapp/resources/images/util/menu_plus.gif b/src/main/webapp/resources/images/util/menu_plus.gif new file mode 100644 index 00000000..b2c99723 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_plus.gif differ diff --git a/src/main/webapp/resources/images/util/menu_plusbottom.gif b/src/main/webapp/resources/images/util/menu_plusbottom.gif new file mode 100644 index 00000000..b5671d89 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_plusbottom.gif differ diff --git a/src/main/webapp/resources/images/util/menu_question.gif b/src/main/webapp/resources/images/util/menu_question.gif new file mode 100644 index 00000000..dd4e6850 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_question.gif differ diff --git a/src/main/webapp/resources/images/util/menu_trash.gif b/src/main/webapp/resources/images/util/menu_trash.gif new file mode 100644 index 00000000..cfa0f000 Binary files /dev/null and b/src/main/webapp/resources/images/util/menu_trash.gif differ diff --git a/src/main/webapp/resources/js/framework/cmmn/CmmPopup.js b/src/main/webapp/resources/js/framework/cmmn/CmmPopup.js new file mode 100644 index 00000000..8ae298f4 --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/CmmPopup.js @@ -0,0 +1,366 @@ +const CmmPopup = { + defaultOpenOptions: { + /** + *
    +         * 창의 높이.
    +         * 
    + * + * @attribute {Number} (open) height + */ + height: 200 + + /** + *
    +         * 창의 넓이.
    +         * 
    + * + * @attribute {Number} (open) width + */ + , width: 400 + + /** + *
    +         * 창 위치(y좌표).
    +         * 
    + * + * @attribute {Number} (open) top + */ + , top: 0 + + /** + *
    +         * 창 위치(x좌표).
    +         * 
    + * + * @attribute {Number} (open) left + */ + , left: 0 + + /** + *
    +         * 메뉴바 사용 여부. 파일, 편집, 보기 등의 버튼이 있는 줄. yes or no (안 됨)
    +         * 
    + * + * @attribute {Object} (open) menubar + */ + , menubar: "no" + + /** + *
    +         * 툴바 사용 여부. 뒤로, 앞으로, 검색, 즐겨찾기 등의 버튼이 나오는 줄. yes or no
    +         * 
    + * + * @attribute {Object} (open) toolbar + */ + , toolbar: "no" + + /** + *
    +         * 주소창 변경 여부. URL입력하는 곳. yes or no
    +         * 
    + * + * @attribute {Object} (open) location + */ + , location: "no" + + /** + *
    +         * 리사이징 가능 여부. 새창이 떴을 시에 최소화, 최대화 등을 비롯해 마우스로 창의 크기를 조절 가능 여부. yes or no
    +         * 
    + * + * @attribute {Object} (open) resizable + */ + , resizable: "no" + + /** + *
    +         * 창 아래 링크 사용 여부. 인터넷 창 아래부분 보면 회색깔의 링크 주소 나오는 부분. yes or no
    +         * 
    + * + * @attribute {Object} (open) status + */ + , status: "no" + + /** + *
    +         * 스크롤바 사용여부. 우측부분과 하단 부분에 생기는 스크롤바를 지칭. yes or no
    +         * 
    + * + * @attribute {Object} (open) scrollbars + */ + , scrollbars: "yes" + + /** + *
    +         * 창 최대화로 띄움. yes or no
    +         * 
    + * + * @attribute {Object} (open) fullscreen + */ + , fullscreen: "no" + + /** + *
    +         * 가운데 정렬 여부. true 일 경우 top과 left를 자동 계산한다.
    +         * 
    + * + * @attribute {Object} (open) useCenterLocation + */ + , useCenterLocation: true + + /** + *
    +         * method type. post일 경우 form을 생성하고 data attribute의 값을 넣어 전송.
    +         * 
    + * + * @attribute {Object} (open) method + */ + , method: "get" + + /** + *
    +         * parameter data
    +         * 
    + * + * @attribute {Object} (open) data + */ + , data: null + } + + , defaultModalDaialogOptions: { + /** + *
    +         * 창의 높이.
    +         * 
    + * + * @attribute {Number} (modal) dialogHeight + */ + dialogHeight: 200 + + /** + *
    +         * 창의 넓이.
    +         * 
    + * + * @attribute {Number} (modal) dialogWidth + */ + , dialogWidth: 400 + + /** + *
    +         * 창 위치(y좌표).
    +         * 
    + * + * @attribute {Number} (modal) dialogTop + */ + , dialogTop: 0 + + /** + *
    +         * 창 위치(x좌표).
    +         * 
    + * + * @attribute {Number} (modal) dialogLeft + */ + , dialogLeft: 0 + + /** + *
    +         * 가운데 정렬 여부. yes/no, 1/0, on/off (정확하지 않음. useCenterLocation 이용 권장.)
    +         * 
    + * + * @attribute {String} (modal) center + */ + , center: "no" + + /** + *
    +         * 도움말 사용 여부. yes/no, 1/0, on/off
    +         * 
    + * + * @attribute {String} (modal) help + */ + , help: "no" + + /** + *
    +         * 리사이징 가능 여부. 새창이 떴을 시에 최소화, 최대화 등을 비롯해 마우스로 창의 크기를 조절 가능 여부. yes/no, 1/0, on/off
    +         * 
    + * + * @attribute {String} (modal) resizable + */ + , resizable: "no" + + /** + *
    +         * 스크롤바 사용여부. 우측부분과 하단 부분에 생기는 스크롤바를 지칭. yes or no
    +         * 
    + * + * @attribute {String} (modal) scroll + */ + , scroll: "yes" + + /** + *
    +         * 메뉴바 사용 여부. 파일, 편집, 보기 등의 버튼이 있는 줄. yes or no (안 됨)
    +         * 
    + * + * @attribute {String} (modal) menubar + */ + , menubar: "no" + + /** + *
    +         * 툴바 사용 여부. 뒤로, 앞으로, 검색, 즐겨찾기 등의 버튼이 나오는 줄. yes or no
    +         * 
    + * + * @attribute {String} (modal) toolbar + */ + , toolbar: "no" + + /** + *
    +         * 주소창 변경 여부. URL입력하는 곳. yes or no
    +         * 
    + * + * @attribute {String} (modal) location + */ + , locationbars: "no" + + /** + *
    +         * 상태바 사용여부. yes/no, 1/0, on/off
    +         * 
    + * + * @attribute {String} (modal) status + */ + , status: "no" + + /** + *
    +         * 가운데 정렬 여부. true 일 경우 top과 left를 자동 계산한다.
    +         * 
    + * + * @attribute {Boolean} (modal) useCenterLocation + */ + , useCenterLocation: true + }, + + /** + * modaless CmmPopup.open(). options에 추가적으로 사용할 option 값을 json 객체의 필드 형태로 넘기면 된다. + * @method open + * @param {String} url 문서의 주소 + * @param {Object} options 추가적으로 사용할 option 값을 담은 json 객체 + * @param {Object} params parameter json object + * @param {String} target default 'nonamePopup' + * @param {String} method default 'get' + * @returns {object} 새로 열린 팝업창의 윈도우 객체. + */ + open: function (url, params, options, target = 'nonamePopup', method = 'get') { + let extendOptions = $.extend({}, this.defaultOpenOptions, options); + + // 가운데 정렬 계산. + if (extendOptions.useCenterLocation) { + const centerPosition = this.getCenterPosition(extendOptions.width, extendOptions.height); + extendOptions.left = centerPosition.left; + extendOptions.top = centerPosition.top; + } + + // status 문자열 생성. + let optionsString = ""; + for (let i in extendOptions) { + optionsString += i + "=" + extendOptions[i] + ", "; + } + method = method.toLowerCase(); + let popup; + + switch (method) { + case "post": + popup = window.open("", target, optionsString); + const form = this._getForm(url, target, method, params ? params : {}); + form.submit(); + break; + case "get": + default: + url += params ? "?" + $.param(params) : ""; + popup = window.open(url, target, optionsString); + break; + } + if (popup) popup.focus(); + return popup; + }, + + /** + * modal CmmPopup.showModalDialog(). options에 추가적으로 사용할 option 값을 json 객체의 필드 형태로 넘기면 된다. + * @method showModalDialog + * @param {String} url 문서의 주소 + * @param {Object} argument 팝업창으로 넘길 데이터. + * @param {Object} options 추가적으로 사용할 option 값을 담은 json 객체 + * @returns {object} 자식창에서 리턴하는 값. + */ + showModalDialog: function (url, argument, options) { + let extendOptions = $.extend({}, this.defaultModalDaialogOptions, options); + + // 가운데 정렬 계산. + if (extendOptions.useCenterLocation) { + let centerPosition = this.getCenterPosition(extendOptions.dialogWidth, extendOptions.dialogHeight); + extendOptions.dialogLeft = centerPosition.left + "px"; + extendOptions.dialogTop = centerPosition.top + "px"; + } + extendOptions.dialogWidth += "px"; + extendOptions.dialogHeight += "px"; + + // status 문자열 생성. + let optionsString = ""; + for (let i in extendOptions) { + optionsString += i + "=" + extendOptions[i] + "; "; + } + + return window.showModalDialog(url, argument, optionsString); + }, + + /** + * 현재 브라우저에서 주어진 높이와 넓이를 가지는 창이 가운데에 위치되는 좌표 값을 구한다. + * @method getCenterPosition + * @param {Integer} width 넓이 + * @param {Integer} height 높이. + * @returns {object} 해당 창이 가운데에 위치되는 좌표 값. + */ + getCenterPosition : function(width, height) { + const offsetX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft; + const offsetY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop; + const browserWidth = typeof window.outerWidth!='undefined' ? window.outerWidth : document.documentElement.clientWidth; + const browserHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight: (document.documentElement.clientHeight - 22); + const shownBrowserWidth = (offsetX < 0) ? window.screen.width + offsetX : offsetX; + const left = parseInt(shownBrowserWidth + ((browserWidth - width) / 2), 10); + const top = parseInt(offsetY + ((browserHeight - height) / 2), 10); + return {left:left, top:top}; + }, + + /** + * 폼생성 + * @method getProperty + * @param {String} url 문서의 주소 + * @param {String} target 목표창 이름 + * @param {String} method form method type(get, post, etc) + * @param {Object} data 서버로 전송할 parameter data + * @returns {object} 새로 열린 팝업창의 윈도우 객체. + */ + _getForm: function(url, target, method, data) { + if($("#PopupForm").length) { + $("#PopupForm").remove(); + } + const form = $("
    ").attr("method", method) + .attr("target", target) + .attr("action", url); + for(const i in data) { + const input = $("").attr("type", "hidden") + .attr("name", i) + .attr("value", data[i]); + form.append(input); + } + $("body").append(form); + + return form; + } +} diff --git a/src/main/webapp/resources/js/framework/cmmn/XitCmmnUtil.js b/src/main/webapp/resources/js/framework/cmmn/XitCmmnUtil.js new file mode 100644 index 00000000..dbb51de7 --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/XitCmmnUtil.js @@ -0,0 +1,456 @@ + +/** + * XitFrame 공통 Util + */ +var XitCmmnUtil = { + /* =================================== + * 동적 Form 생성 + * -설명: 객체에 담긴 key,value를 form으로 생성하여 반환 + * @author 박민규 + =================================== */ + createForm : function(obj){ + var form = document.createElement("form"); + + for(key in obj){ + var param = document.createElement('input'); + param.setAttribute('type', 'hidden'); + param.setAttribute('name', key); + param.setAttribute('value', obj[key]); + form.appendChild(param); + } + + return form; + }, + + + /*=================================== + * 엑셀 export + * -설명: SheetJS를 이용한 Excel export + * -참조: https://github.com/hhurz/tableExport.jquery.plugin + * https://www.npmjs.com/package/tableexport.jquery.plugin + * @author 박민규 + * + * [Options] + * TableExport(document.getElementsByTagName("table"), { + * headers: true, // (Boolean), display table headers (th or td elements) in the , (default: true) + * footers: true, // (Boolean), display table footers (th or td elements) in the , (default: false) + * formats: ["xls", "csv", "txt"], // (String[]), filetype(s) for the export, (default: ['xls', 'csv', 'txt']) + * filename: "id", // (id, String), filename for the downloaded file, (default: 'id') + * bootstrap: false, // (Boolean), style buttons using bootstrap, (default: true) + * exportButtons: true, // (Boolean), automatically generate the built-in export buttons for each of the specified formats (default: true) + * position: "bottom", // (top, bottom), position of the caption element relative to table, (default: 'bottom') + * ignoreRows: null, // (Number, Number[]), row indices to exclude from the exported file(s) (default: null) + * ignoreCols: null, // (Number, Number[]), column indices to exclude from the exported file(s) (default: null) + * trimWhitespace: true // (Boolean), remove all leading/trailing newlines, spaces, and tabs from cell text in the exported file(s) (default: false) + * }); + ===================================*/ + excelExport : function(fileName){ + //selector 설정 + var _sltHead = '#div_thead'; + var _sltBody = '#div_tbody'; + var _sltFoot = '#div_tfoot'; + var _htmlColgroup = $('#div_thead > table > colgroup').html();; + var _htmlHead = $(_sltHead+' > table > thead').html(); + var _htmlBody = $(_sltBody+' > table > tbody').html(); + + + //필수조건 확인 + if($(_sltHead).length==0){ + alert('헤더 데이터는 필수조건 입니다.'); + return false; + } + if($(_sltBody).length==0){ + alert('바디 데이터는 필수조건 입니다.'); + return false; + } + + + //소유자번호 유무 확인 + var arrCellsOfOwnerNo = new Array(); + $(_sltHead+' table tr:last-child th').each(function(){ + if(this.innerHTML.indexOf('주민번호')>-1 + ||this.innerHTML.indexOf('주민등록번호')>-1 + ||this.innerHTML.indexOf('소유자번호')>-1 + ||this.innerHTML.indexOf('소유자주민번호')>-1 + ||this.innerHTML.indexOf('주민/법인번호')>-1 + ) + arrCellsOfOwnerNo.push(this.cellIndex); + }); + //소유자번호 마스킹 처리 + if(arrCellsOfOwnerNo.length>0){ + var isMask = confirm('개인정보를 마스킹처리 하시겠습니까?'); + var _maskBody = ''; + $(_htmlBody).each(function(){ + var row = this; + arrCellsOfOwnerNo.forEach(function(cellIdx){ + var cell = $(row).find('td:eq('+cellIdx+')').text(); + $(row).find('td:eq('+cellIdx+')').text(nvl(cell).fmtJuminNo(isMask)); + }); + _maskBody += ''+$(row).html()+''; + }); + _htmlBody = _maskBody; + } + + + //파일명 설정 + if(fileName==undefined || fileName==null || fileName=='') + fileName = $('#docTitleNm').text(); + + //테이블 설정 + var colgroup = ''+ _htmlColgroup +''; + var thead = ''+ _htmlHead +''; + var tbody = ''+ _htmlBody +''; + if($(_sltBody+' > table > tfoot').length>0) + tbody += ''+$(_sltBody+' > table > tfoot').html()+''; + var tfoot = $(_sltFoot).length==0?'':''+$(_sltFoot+' > table > tfoot').html()+''; + var table = ''+colgroup+thead+tbody+tfoot+'
    '; + + ExcelUtil.download(table, fileName); + + }, + + pdfExport : function(fileName, selector){ + //pdf_wrap을 canvas객체로 변환 + html2canvas($(selector)[0]).then(function(canvas) { + var doc = new jsPDF('p', 'mm', 'a4'); //jspdf객체 생성 + var imgData = canvas.toDataURL('image/png'); //캔버스를 이미지로 변환 + doc.addImage(imgData, 'PNG', 0, 0, doc.internal.pageSize.getWidth(), doc.internal.pageSize.getHeight()); //이미지를 기반으로 pdf생성 + doc.addPage(); + doc.save(fileName+'.pdf'); //pdf저장 + }); + + + }, + + wordExport : function(fileName){ + + }, + + pptExport : function(fileName){ + + } +} + + + +var DateUtil = { + /*============================ + * 현재날짜로부터 월 단위로 계산된 날짜(yyyymmdd) 반환 + * -addMonth가 0 이면 현재월 + * -음의 숫자면 전월 (ex: -1 전월, -2 전전월, -3 ...) + * -양의 숫자면 차월 (ex: 1 차월, 2 차차월, 3 ...) + ============================*/ + getDate : function(){ + var result = new Object(); + switch (arguments.length) { + case 1: + result = calcDate(arguments[0]); + break; + case 2: + result = calcDate(arguments[0], arguments[1]); + break; + default: + result = calcDate(); + break; + } + return result; + + //날짜 계산 + function calcDate(addMonth, stdDay){ + if(addMonth!=undefined) + addMonth = addMonth + 1; + addMonth = addMonth==undefined?1:addMonth; + + + /* + * 필수값 설정 + * -날짜 설정 + * -ago OR after 여부 설정 + */ + var date = new Date(); + var yyyy = date.getFullYear(); + var mm = ( date.getMonth() + (addMonth) ); + var dd = date.getDate(); + if(stdDay!=undefined){ + stdDay = stdDay.replace(/[^0-9]/gi,''); + yyyy = stdDay.substring(0,4); + mm = stdDay.substring(4,6); + dd = stdDay.substring(6,8); + + if(addMonth==13) + yyyy = Number(yyyy)+1; + } + + var isAfter = false; + if((addMonth*1)>0) + isAfter = true; + + /* + * 유효성 처리 + * -해(year) 넘김 처리 + * -말일(last day) 처리 + */ + var newYear = DateUtil.getNewYear(isAfter, yyyy, mm); + yyyy = newYear.yyyy; + mm = newYear.mm; + var ago_last_dd = DateUtil.getEndOfMonthDay(yyyy, mm); + dd = dd>ago_last_dd?ago_last_dd:dd; + + + /* + * format 설정 + */ + if( (''+dd).length == 1 ) + dd = "0"+ dd; + + + /* + * 결과 반환 + */ + var obj = new Object(); + obj.date = ""+yyyy+mm+dd; + obj.yyyy = ""+yyyy; + obj.mm = ""+mm; + obj.dd = ""+dd; + return obj; + } + }, + + //+ 한달 후 말일 계산 + getAddMonth : function(stdDay){ + //날짜 계산 + + var rtnVal = calcDate(0,stdDay); + return rtnVal; + + + function calcDate(addMonth, stdDay){ + if(addMonth!=undefined) + addMonth = addMonth + 1; + addMonth = addMonth==undefined?1:addMonth; + + + /* + * 필수값 설정 + * -날짜 설정 + * -ago OR after 여부 설정 + */ + stdDay = stdDay.replace(/[^0-9]/gi,''); + var yyyy = stdDay.substring(0,4); + var mm = stdDay.substring(4,6); + var dd = stdDay.substring(6,8); + mm = Number(mm)+addMonth; + if(addMonth==13) + yyyy = Number(yyyy)+1; + + var isAfter = false; + if((addMonth*1)>0) + isAfter = true; + + /* + * 유효성 처리 + * -해(year) 넘김 처리 + * -말일(last day) 처리 + */ + var newYear = DateUtil.getNewYear(isAfter, yyyy, mm); + yyyy = newYear.yyyy; + mm = newYear.mm; + var ago_last_dd = DateUtil.getEndOfMonthDay(yyyy, mm); + dd = ago_last_dd; + + + /* + * format 설정 + */ + if( (''+dd).length == 1 ) + dd = "0"+ dd; + + + /* + * 결과 반환 + */ + var obj = new Object(); + obj.date = ""+yyyy+mm+dd; + obj.yyyy = ""+yyyy; + obj.mm = ""+mm; + obj.dd = ""+dd; + return obj; + } + }, + + /*============================ + * 현재날짜(or 기준일)로부터 일 단위로 계산된 날짜(yyyymmdd) 반환 + * -addDay가 0 이면 금일 + * -음의 숫자면 전일 (ex: -1 작일, -2 재작일, -3 ...) + * -양의 숫자면 차일 (ex: 1 명일, 2 재명일, 3 ...) + ============================*/ + getDateDay: function(addDay){ + var result = new Object(); + switch (arguments.length) { + case 1: + result = calcDate(arguments[0], DateUtil.getDate().date); + break; + default: + result = calcDate(0, DateUtil.getDate().date); + break; + } + return result; + + + //날짜 계산 + function calcDate(addDay, stdDay){ + addDay = addDay==undefined||addDay==null?0:addDay*1; + + /* + * 필수값 설정 + * -날짜 설정 + * -ago OR after 여부 설정 + */ + var yyyy = stdDay.substring(0,4); + var mm = stdDay.substring(4,6); + var dd = stdDay.substring(6,8); + var date = new Date(yyyy, (mm-1)*1, dd*1); + date.setDate(date.getDate()+(addDay)); + + yyyy = date.getFullYear(); + mm = date.getMonth()+1; + dd = date.getDate(); + + if( (''+mm).length == 1 ) + mm = "0"+ mm; + if( (''+dd).length == 1 ) + dd = "0"+ dd; + + /* + * 결과 반환 + */ + var obj = new Object(); + obj.date = ""+yyyy+"."+mm+"."+dd; + obj.yyyy = yyyy; + obj.mm = mm; + obj.dd = dd; + return obj; + } + }, + /*============================ + * 달의 마지막 날짜(dd) 반환 + ============================*/ + getEndOfMonthDay : function(yy, mm){ + var max_days=0; + if(mm == 1 || mm == '01') { + max_days = 31 ; + } else if(mm == 2 || mm == '02') { + if ((( yy % 4 == 0) && (yy % 100 != 0)) || (yy % 400 == 0)) + max_days = 29; + else + max_days = 28; + } + else if (mm == 3 || mm == '03')   max_days = 31; + else if (mm == 4 || mm == '04')   max_days = 30; + else if (mm == 5 || mm == '05')   max_days = 31; + else if (mm == 6 || mm == '06')   max_days = 30; + else if (mm == 7 || mm == '07')   max_days = 31; + else if (mm == 8 || mm == '08')   max_days = 31; + else if (mm == 9 || mm == '09')   max_days = 30; + else if (mm == 10 || mm == '10')  max_days = 31; + else if (mm == 11 || mm == '11')  max_days = 30; + else if (mm == 12 || mm == '12')  max_days = 31; + else                return ''; + return max_days; + }, + + /*============================ + * 해(year) 넘김 처리 + ============================*/ + getNewYear : function(isAfter, yyyy, mm){ + /* + * 해(year) 넘김 처리 + */ + if(isAfter){ + if(mm>12){ + var formula = Math.floor(mm/12); + yyyy = Number(yyyy)+(formula); + mm = mm - ((formula)*12); + } + }else{ + if(mm<1){ + var formula = Math.floor((mm*(-1))/12)+1; + yyyy = yyyy-(formula); + mm = mm + ((formula)*12); + } + } + + /* + * 포맷 설정 + * -월(month) 두자리 설정 + */ + if( (''+mm).length == 1 ) + mm = "0"+ mm; + + /* + * 결과 반환 + */ + var obj = new Object(); + obj.yyyy = ''+yyyy; + obj.mm = ''+mm; + return obj; + }, + + +} + +/** + * + * @param {Object} formEliment form eliment : document. + * @param {Object} params json + * @returns {Object} form data + params = serialize data return + */ +const fnAddPageInfo = (formEliment, params) => { + let serializeParam = $(formEliment).serialize(); + for(var key in params){ + if(key=='perPage'){ + if(params[key]==undefined) + serializeParam +='&'+key+'=-1'; + else + serializeParam +='&'+key+'='+params[key]; + }else + serializeParam +='&'+key+'='+params[key]; + } + return serializeParam; +} + + +const fnDateTimeFormat = (srcDate, delimiter = '-') => { + if(srcDate.length == 8) { + return srcDate.substring(0, 4)+delimiter+srcDate.substring(4, 6)+delimiter+srcDate.substring(6, 8); + }else if(srcDate.length == 14){ + return srcDate.substring(0, 4)+delimiter+srcDate.substring(4, 6)+delimiter+srcDate.substring(6, 8) + + ' ' + srcDate.substring(8, 10) + ':' + srcDate.substring(10, 12) + ':' + srcDate.substring(12); + }else{ + return srcDate; + } +} + +const fnDateFormat = (srcDate, delimiter = '-') => { + if(srcDate.length >= 8) { + return srcDate.substring(0, 4)+delimiter+srcDate.substring(4, 6)+delimiter+srcDate.substring(6, 8); + }else{ + return srcDate; + } +} + + +/** + * toStringByFormatting(new Date(2021, 0, 1)); + * + * @param source + * @param delimiter + * @returns {string} + */ +function toStringByFormatting(source, delimiter = '-') { + const year = source.getFullYear(); + const month = leftPad(source.getMonth() + 1); + const day = leftPad(source.getDate()); + + return [year, month, day].join(delimiter); +} diff --git a/src/main/webapp/resources/js/framework/cmmn/XitExportUtil.js b/src/main/webapp/resources/js/framework/cmmn/XitExportUtil.js new file mode 100644 index 00000000..b1703fd5 --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/XitExportUtil.js @@ -0,0 +1,472 @@ +/*===================================================================== + * + * File Export 도구 Script + * -XitFileExportUtil.exportExcel() 기능을 사용하기 위해선 "xlsx.full.min.js"와 "Filesaver.min.js" 라이브러리가 반드시 필요 하다. + * @date 2020.02.27 + * @author 박민규 + * + =====================================================================*/ +/** + * Xit 파일 Export 도구 + * @author 박민규 + * @date 2020.05.29. + */ +var XitFileExportUtil = function(fileName, dataType, dataSet, ext){ + this._fileName = fileName; //파일명 + this._dataType = dataType; //Data 타입(table, json, array) + this._dataSet = dataSet; //DataSet( Object 또는 Array ) +} +XitFileExportUtil.prototype.setFileName = function(fileName){ this._fileName = fileName; } +XitFileExportUtil.prototype.setDataType = function(dataType){ this._dataType = dataType; } +XitFileExportUtil.prototype.setDataSet = function(arrDataSet){ this._dataSet = dataSet; } +XitFileExportUtil.prototype.exportExcel = function(){ + // 변수 declare + var _fileName = fnIsEmpty(this._fileName)?'noname':this._fileName; + var _dataType = this._dataType; + var _dataSet = this._dataSet; + var _isMultiSheet = this._dataSet instanceof Array; + var _sheetName = 'Sheet'; + + + + // step 1. workbook 생성 + var wb = XLSX.utils.book_new(); + if(_isMultiSheet){ + _dataSet.forEach(function(data, idx){ + // step 2. 시트 만들기 + var worksheet = createWorkSheet(data); + // step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다. + XLSX.utils.book_append_sheet(wb, worksheet, _sheetName+(idx+1)); + }); + }else{ + // step 2. 시트 만들기 + var worksheet = createWorkSheet(_dataSet); + // step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다. + XLSX.utils.book_append_sheet(wb, worksheet, _sheetName+'1'); + } + // step 4. 엑셀 파일 만들기 + var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'}); + // step 5. 엑셀 파일 내보내기 + saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), _fileName+'.xlsx'); + + + + + // function Declare + function fnIsEmpty(val){ + if(val==undefined||val==null||val==''||val=={}||val==[]) + return true; + return false; + } + function createWorkSheet(data){ + var result; + + switch (_dataType) { + case 'table': + result = XLSX.utils.table_to_sheet(data);//table타입 data( ex: ...
    ) + break; + case 'json': + result = XLSX.utils.json_to_sheet(data);//json타입 data( ex: [{'이름':'홍길동', '나이':'18세', '출생연도':'1443'}, ... ] ) + break; + case 'array': + result = XLSX.utils.aoa_to_sheet(data);//배열타입 data( ex: [['이름', '나이', '출생연도'],['홍길동', '18세', '1443'], ... ] ) + break; + default: + result = ''; + break; + } + + return result; + } + function s2ab(s) { + var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer + var view = new Uint8Array(buf); //create uint8array as viewer + for (var i=0; ithead draw + var thead = document.createElement('thead'); + for(var i=0; i'+arrHead[i]+''); + } + table.appendChild(thead); + //table>tbody draw + var tbody = document.createElement('tbody'); + for(var i=0; i'+arrBody[i]+''); + } + table.appendChild(tbody); + //table>tfoot draw + var tfoot = document.createElement('tfoot'); + for(var i=0; i'+arrFoot[i]+''); + } + table.appendChild(tfoot); + //전체 테이블영역에 append + var div = document.createElement('div'); + div.appendChild(table); + + + /*=================== + * After 처리 + ===================*/ + div = this.afterProc(div); + + + return div; + }, + + + /* + * case2. 전체 테이블 영역 내 테이블이 n개 인 경우 + * @date 2020.02.27 + * @author 박민규 + */ + case2 : function(includeEntireTableId){ + /*=================== + * DATA 생성 + ===================*/ + var arrTable = new Array(); + $('#'+includeEntireTableId+' table').each(function(tableidx, table){ + //head 데이터 설정 + var arrHead = new Array(); + $(table).find('thead > tr').each(function(rowidx, row){ + /* 주석처리사유: tr 영역 내 input[type="hidden"] 과 같은 엘리먼트가 포함되어 있을 경우 레이아웃이 틀어 짐*/ +// if(arrHead[rowidx]==undefined) arrHead[rowidx] = row.innerHTML; +// else arrHead[rowidx] += row.innerHTML; + $(row).find('th, td').each(function(cellidx, cell){ + if(arrHead[rowidx]==undefined) arrHead[rowidx] = cell.outerHTML; + else arrHead[rowidx] += cell.outerHTML; + }); + }); +// console.log(arrHead); + //body 데이터 설정 + var arrBody = new Array(); + $(table).find('tbody > tr').each(function(rowidx, row){ + /* 주석처리사유: tr 영역 내 input[type="hidden"] 과 같은 엘리먼트가 포함되어 있을 경우 레이아웃이 틀어 짐*/ +// if(arrBody[rowidx]==undefined) arrBody[rowidx] = row.innerHTML; +// else arrBody[rowidx] += row.innerHTML; + $(row).find('th, td').each(function(cellidx, cell){ + if(arrBody[rowidx]==undefined) arrBody[rowidx] = cell.outerHTML; + else arrBody[rowidx] += cell.outerHTML; + }); + }); +// console.log(arrBody); + //body 데이터 설정 + var arrFoot = new Array(); + $(table).find('tfoot > tr').each(function(rowidx, row){ + /* 주석처리사유: tr 영역 내 input[type="hidden"] 과 같은 엘리먼트가 포함되어 있을 경우 레이아웃이 틀어 짐*/ +// if(arrFoot[rowidx]==undefined) arrFoot[rowidx] = row.innerHTML; +// else arrFoot[rowidx] += row.innerHTML; + $(row).find('th, td').each(function(cellidx, cell){ + if(arrFoot[rowidx]==undefined) arrFoot[rowidx] = cell.outerHTML; + else arrFoot[rowidx] += cell.outerHTML; + }); + }); +// console.log(arrBody); + //table 데이터 설정 + var tableData = new Object(); + tableData['thead'] = arrHead; + tableData['tbody'] = arrBody; + tableData['tfoot'] = arrFoot; + arrTable[tableidx] = tableData; + }); +// console.log(arrTable); + + + /*=================== + * TABLE 그리기 + ===================*/ + //div draw + var div = document.createElement('div'); + arrTable.forEach(function(table, tableidx){ + var arrHead = arrTable[tableidx].thead; + var arrBody = arrTable[tableidx].tbody; + var arrFoot = arrTable[tableidx].tfoot; + + //table draw + var table = document.createElement('table'); + //table>thead draw + var thead = document.createElement('thead'); + for(var i=0; i'+arrHead[i]+''); + } + table.appendChild(thead); + //table>tbody draw + var tbody = document.createElement('tbody'); + for(var i=0; i'+arrBody[i]+''); + } + table.appendChild(tbody); + //table>tfoot draw + var tfoot = document.createElement('tfoot'); + for(var i=0; i'+arrFoot[i]+''); + } + table.appendChild(tfoot); + //전체 테이블영역에 append + div.appendChild(table); + }); + + + /*=================== + * After 처리 + ===================*/ + div = this.afterProc(div); + + + return div; + }, + + + + + /* + * 완료된 Table Data에 대한 후처리 + * @date 2020.02.27 + * @author 박민규 + */ + afterProc : function(div){ + //checkbox 처리 + $(div).find('table tr > td > input[type="checkbox"]').each(function(cellidx, cell){ + if($(cell).is(':checked')) + $(cell).parent().html('?'); + else + $(cell).parent().html('?'); + }); + //selectbox 처리 + $(div).find('table tr > td > select').each(function(cellidx, cell){ + $(cell).parent().html(cell.options[cell.selectedIndex].text); + }); + //특정 단어가 포함된 열(col) index 설정 + var arrCellsOfOwnerNo = new Array(); + var arrCellOfAdres = new Array(); + $(div).find('table thead tr th').each(function(){ + if(this.innerHTML.indexOf('주민번호')>-1 + ||this.innerHTML.indexOf('주민등록번호')>-1 + ||this.innerHTML.indexOf('소유자번호')>-1 + ||this.innerHTML.indexOf('소유자주민번호')>-1 + ||this.innerHTML.indexOf('주민/법인번호')>-1 + ) + arrCellsOfOwnerNo.push(this.cellIndex); + + if(this.innerHTML.indexOf('주소')>-1||this.innerHTML.indexOf('번호')>-1) + arrCellOfAdres.push(this.cellIndex); + }); + //소유자번호 마스킹 처리 + if(arrCellsOfOwnerNo.length>0){ + var isMask = confirm('개인정보를 마스킹처리 하시겠습니까?\n -[확인] 선택 시 마스킹 처리\n -[취소] 선택 시 전체 노출'); + + arrCellsOfOwnerNo.forEach(function(value){ + $(div).find('table tbody tr td:nth-child('+(Number(value)+1)+')').each(function(cellidx, cell){ + cell.innerHTML = fmtOwnerNo(cell.innerHTML, isMask); + }); + }); + } + //일부 주소데이터의 날짜 타입변환 방지 처리(case는 아래주석 참조) + //case1. 서울 종로구 홍지문길 84-5 -> (as-is)1984-05-01 -> (to-be)서울 종로구 홍지문길 84 - 5 + //case2. 서울 종로구 창신길 33-4 -> (as-is)2033-04-01 -> (to-be)서울 종로구 창신길 33 - 4 + if(arrCellOfAdres.length>0){ + arrCellOfAdres.forEach(function(value){ + $(div).find('table tbody tr td:nth-child('+(Number(value)+1)+')').each(function(cellidx, cell){ + cell.innerHTML = cell.innerHTML.replace(/[-]/gi, ' - '); + }); + }); + } + +// console.log(div); + return div; + } + + +}; + + + + + +/** + * 테이블 유형별 json타입 엑셀데이터 생성 + */ +var excelJsonDataCreateByCase; + + + +/** + * 테이블 유형별 배열(array)타입 엑셀데이터 생성 + */ +var excelArrayDataCreateByCase; + + + + + + +/** + * 소유자번호 포맷설정 및 마스킹 처리 + * @param ownerNo 소유자번호 + * @param isMask 마스킹처리여부 + * @returns + * @date 2020.02.27. + * @author 박민규 + */ +function fmtOwnerNo(ownerNo, isMask){ + if(ownerNo==null||ownerNo==undefined||ownerNo=='') + return ownerNo; + if(isMask==null||isMask==undefined||isMask=='') + isMask=false; + + + var value = ownerNo.replace(/[-]/gi,''); + if(value.length == 13) //주민번호 + if(isMask) + value = value.substring(0, 6) + '-' +'*******'; + else + value = value.substring(0, 6) + '-' +value.substring(6, 13); + else if(value.length == 10) //사업자번호 + value = value.substring(0, 3) + '-' +value.substring(3, 5) + '-' + value.substring(5, 10); + + + return value; +} \ No newline at end of file diff --git a/src/main/webapp/resources/js/framework/cmmn/common-navbar.js b/src/main/webapp/resources/js/framework/cmmn/common-navbar.js new file mode 100644 index 00000000..d382c818 --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/common-navbar.js @@ -0,0 +1,182 @@ +$(document).ready(function(){ + if($(".navbar .dp1 > li").hasClass("active")){ + $(".wrapper").addClass("spi") + } + if($(".left_menu .dp4").length){ + $(".left_menu .dp4").parent("li").addClass("hasSub") + } + if($(".left_menu .dp3").length){ + $(".main_sidebar").show(); + }else{ +// $(".main_sidebar").hide(); +// $(".content_wrapper").css({"margin-left":"0"}) + } + +// $(".sidebar_btn").addClass("active"); +// $(".main_sidebar").addClass("active"); +// $(".content_wrapper").addClass("active"); + $('.mainDepth').hover(function(e){ + $('.nav_wrap, .menu_dep2, .secDiv').show(); + /*if( !$('.nav_wrap, .menu_dep2, .secDiv').has(e.target).length )*/ + }); + + $('.content_body, .nav_wrap').mouseout(function(e){ + /*if( !$('.nav_wrap, .menu_dep2, .secDiv').has(e.target).length )*/ { + $(".secDiv, .menu_dep2, .nav_wrap").slideUp(5,function(){ + /*divHeightFlat($(".secDiv"));*/ + }); + } + }); + +}) + +$(function(){ + $(".navbar .dp1 > li").on("click", function(){ + $(".navbar .dp1 > li").removeClass("active") + $(this).addClass("active") + if($(".navbar .dp1 > li").hasClass("active")){ + $(".wrapper").addClass("spi") + } + }) + $(".navbar .dp2 > li").on("click", function(){ + $(".navbar .dp2 > li").removeClass("active") + $(this).addClass("active") + }) + $(".left_menu .dp3 > li").on("click", function(){ + $(".left_menu .dp3 > li").removeClass("active") + $(this).addClass("active") + }) + $(".left_menu .dp4 > li").on("click", function(){ + $(".left_menu .dp4 > li").removeClass("active") + $(this).addClass("active") + }) + $(".sidebar_btn").on("click", function(){ + $(this).toggleClass("active"); + $(".main_sidebar").toggleClass("active"); + $(".content_wrapper").toggleClass("active"); + + //사이드바 접기/펼치기 상태값 설정 + var sidebar_stts = $(".sidebar_btn.active").length>0?'active':''; + sessionStorage.setItem("sidebar_stts", sidebar_stts); + + /* + * 2020.11.02. 박민규 + * tui-grid layout refresh + * -사유: 사이드바 접기/펼치기 시 사이드바 만큼 늘어나고 줄어든 grid 영역에 대해 값이 출력되지 않는 이슈에 대한 처리 + */ + for(var i=0; i<=10; i++){ + try { + if(i==0) + instance.refreshLayout(); + else + eval("instance"+[i]+".refreshLayout()"); + } catch (e) { +// console.log(e); + } + } + + }) + $(".all_menu").on("click", function(){ + $(".all_menu_wrap").show(); + }) + $(".all_menu_wrap .close").on("click", function(){ + $(".all_menu_wrap").hide(); + }) +}) + + /* + * 2020-08-18 최유수 + * 신규 네비게이션 이벤트 추가 + */ + var navEventFunction = { + init : function(){ + /* + 1뎁스 메뉴 클릭시 드롭다운 + */ + navEventFunction.DivHeightFlat($(".secDiv")); + /*$(".mainDepth").click(function() { + var flag = $('.hold').length == 0 ? true:false; + $(".secDiv, .nav_wrap").stop().slideToggle(350, 'swing', function(){ + }); + $(".hold").removeClass("hold"); + $(".ancrHold").removeClass("ancrHold"); + if(flag){ + $(this).addClass("ancrHold"); + $(this).find(".secDiv").addClass("hold"); + } + });*/ //[2020.09.17 박소영 주석처리/메뉴 클릭기능을 지움] + /* + * 1뎁스 Hover 이벤트 + */ + $(".mainDepth").hover(function() { + if($(".secDiv").attr("display") == "none"){ + $(".secDiv, .nav_wrap").stop().slideToggle(350, 'swing', function(){ + divHeightFlat($(".secDiv")); + }); + } + $(this).addClass("ancrOntoggle"); + $(this).find(".secDiv").addClass("onToggle"); + }, function(){ + $(".onToggle").removeClass("onToggle"); + $(".ancrOntoggle").removeClass("ancrOntoggle"); + }); + + /* + 2뎁스 메뉴 클릭시 드롭다운 + 현재 사용하지 않음. + */ + $(".secDepth").click(function(e){ + //수정할 높이의 크기 + var updateHeight = 0; + //수정할 네비게이션 DIV의 높이 + var height = $(".secDiv").height(); + var open = true; + var shut = true; + if($(this).find(".trdOn").length == 1){ + updateHeight = $(".trdOn").height(); + $(this).next().css("margin-top",0); + height = height - updateHeight + open = false; + }else if($("ul").hasClass("trdOn")){ + updateHeight = $(".trdOn").height(); + $(".secOn").next().css("margin-top",0); + height = height - updateHeight + }else{ + + } + + if(shut){ + $(".trdOn").css("display","none"); + $(".trdOn").removeClass("trdOn"); + $(".secOn").removeClass("secOn"); + } + if(open){ + updateHeight = $(this).find(".trdDepthMenu").height(); + $(this).next().css("margin-top",updateHeight) + height = height + updateHeight; + + $(this).find(".trdDepthMenu").css("display","block"); + $(this).find(".trdDepthMenu").addClass("trdOn"); + $(this).addClass("secOn"); + } + $(".secDiv").height(height); + $(".nav_wrap").height(height); + //이벤트 버블링 방지 + e.stopPropagation(); + }); + } + ,DivHeightFlat : function(obj){ + var maxHeight = 0; + obj.each(function(index, item){ + if (maxHeight < $(item).find('li').length){ + maxHeight = $(item).find('li').length; + } + }); + maxHeight = maxHeight * 20; + obj.each(function(index, item){ + $(item).height(maxHeight); + $(".secDiv").height(maxHeight); + }); + $(".nav_wrap").height(maxHeight); + } + } \ No newline at end of file diff --git a/src/main/webapp/resources/js/framework/cmmn/validator.js b/src/main/webapp/resources/js/framework/cmmn/validator.js new file mode 100644 index 00000000..3a80e7ff --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/validator.js @@ -0,0 +1,535 @@ +/*************************************************************************************************** + * Daon Soft 폼 검증 툴 + * Designed By xanadu (방기배) + * 사용방법 : + * HTML - + * 아래 예와 같이 속성명을 정의하고, Form Elements 에 class 속성으로 사용한다. + * + * 예를 들어 반드시 입력해야 하며, 숫자만으로 되어있어야 하며, white space가 없어야 한다면, + * 아래와 같이 사용한다. + * + * + * SCRIPT - + * 폼 전체 적용 + * if(Validator.validate(검증대상Form객체)){ + * 문제가 없다면 수행할 코드.... + * form.submit(); + * } + * + * 한 항목씩 사용 + * var message = Validator["validate-full-jumin"](str); + * // 오류가 있으면 메시지를 반환 + * if(message) { + * alert(message); + * return false; + * } + ***************************************************************************************************/ + + + +$(document).ready(function(){ + /** + * ime-mode 설정 + */ + $('.validate-digits').css("ime-mode","disabled"); //숫자만 입력 가능 + $('.validate-digits-').css("ime-mode","disabled"); //숫자 및 하이픈(-)만 입력 가능 + $('.validate-digits-dot').css("ime-mode","disabled"); //숫자 및 도트(.)만 입력 가능 + $('.validate-digits-comma').css("ime-mode","disabled"); //숫자 및 콤마(.)만 입력 가능 + $('.validate-digits-comma-dot').css("ime-mode","disabled"); //숫자 및 콤마(,),도트(.)만 입력 가능 + $('.validate-amount').css("ime-mode","disabled"); //금액만 입력 가능(숫자 및 콤마(,),포인트(.)) + $('.validate-id-format').css("ime-mode","disabled"); //아이디-영문으로 시작하고 영문(대소문자),숫자.,_만 입력 가능 + $('.validate-nickname-format').css("ime-mode","active"); //닉네임-한글,영문(대,소),숫자만 입력 가능 + $('.validate-alpha').css("ime-mode","disabled"); //영문으로 시작-알파뱃만 입력 가능 + $('.validate-basic-char').css("ime-mode","disabled"); //영문,슛자,언더바(_)만 입력 가능 + $('.validate-alpha-num').css("ime-mode","disabled"); //영문 및 숫자만 입력 가능 + $('.validate-kr-digits').css("ime-mode","active"); //한글 및 숫자 조합만 입력 가능 + $('.validate-date').css("ime-mode","disabled"); //날짜입력 + $('.validate-email').css("ime-mode","disabled"); //유효한 이메일 + $('.validate-url').css("ime-mode","disabled"); //유효한 url + $('.validate-front-jumin').css("ime-mode","disabled"); //주민번호 앞자리 + $('.validate-back-jumin').css("ime-mode","disabled"); //주민번호 뒷자리 + $('.validate-full-jumin').css("ime-mode","disabled"); //전체 주민번호 + $('.validate-tel-num').css("ime-mode","disabled"); //전화번호 + $('.validate-biz-num').css("ime-mode","disabled"); //사업자번호 + $('.validate-ip').css("ime-mode","disabled"); //ip address +}); + + +//*항목별 유효성검사 class 적용 +// -필수입력 항목 +// :required +// -날짜 항목 +// :validate-date +// -금액 항목 +// :validate-amount +// -이메일 항목 +// :validate-email +// -숫자 입력 항목 +// :validate-digits //숫자만 입력 +// :validate-digits- //숫자 및 하이픈(-)만 입력 가능 +// :validate-digits-comma //숫자 및 콤마(,)만 입력 가능 +// :validate-digits-dot //숫자 및 도트(.)만 입력 가능 +// :validate-digits-comma-dot //숫자 및 콤마(,),도트(.)만 입력 가능 + +/** + * text input에 사용자가 입력한 데이터 전체를 자동 validation 한다. + * validator.js를 참고해서 input태그의 class="속성1 속성2 속성3"을 입력하면 자동체크됨. + * 예) class="required validate-digits validate-white-space" + * 값 존재여부. 숫자만 입력됐는지 체크. 공백만 입력됐는지 체크. *validator.js에서 체크항목 확인 + * @param obj (jquery object) + * @param value (jquery object value) + */ +function fn_setInputFormat_default(obj){ + fn_setInputFormat(obj, obj.value); +} +function fn_setInputFormat(obj, value){ + var classVal = $(obj).attr("class"); + var classList = classVal.split(' '); + for(i=0;i= 0) { + var tmpArray = className.split("_"); + className = tmpArray[0]; + tmpArray.shift(); + + if(tmpArray == null || tmpArray.length == 0) { + param = ""; + } else if(tmpArray.length == 1) { + param = tmpArray[0]; + } else { + param = tmpArray; + } + } + + // 클래스명과 일치하는 메서드가 있으면... + if(Validator[className]) { + var message = Validator[className](el.value,el,param); + // 오류가 있으면 메시지를 반환 + if(message) { + Validator._handleError(message, el); + return false; + } + } + } + } + return true; + }, + + /** + * 오류 제어 + * @param {String} message + * @param {HTMLFormElement} el + */ + _handleError : function(message, el) { + var title = Validator._getTitle(el); + if(title != "") + alert(title +"(은)는 " + message); + else + alert(message); + el.style.backgroundColor="#fdfde4"; + el.focus(); + + }, + + _getTitle : function (el) { + if (el.title) + return el.title; + else + return ""; + }, + + // 필수입력(or선택) + "required" : function(v,elm) { + switch (elm.tagName) { + case 'INPUT': + var type = elm.type; + if('checkbox'==type||'radio'==type){ + return validCheckboxOrRadio(v,elm); + } + else + return validInput(v); + break; + case 'SELECT': + return validSelectbox(v, elm); + break; + default: + break; + } + //Input Tag + function validInput(v){ + return !v ? "반드시 입력하셔야 합니다." : false; + } + //Checkbox or Radio Tag + function validCheckboxOrRadio(v,elm) { + var field_obj = document.getElementsByName(elm.name); +// var field_obj = elm; + if (field_obj.length > 1) { + for (var idx = 0; idx < field_obj.length; idx++) { + if (field_obj[idx].checked) return false; + } + } else { + if (field_obj.checked) return false; + } + return "항목을 선택하셔야 합니다."; + } + //Selectbox Tag + function validSelectbox(v, elm) { + var field_obj = document.getElementById(elm.name); +// var field_obj = elm; + + if(field_obj.options[field_obj.selectedIndex].value != "") + return false; + return "항목을 선택하셔야 합니다."; + } + }, + // white space 없이 입력 + "validate-white-space" : function(v) { + return /\s+/.test(v) ? "공백없이 입력되야 합니다." : false; + }, + // 숫자만 입력 + "validate-digits" : function(v) { + return isNaN(v) || /[^\d]/.test(v)? "숫자만 입력하셔야 합니다." : false; + }, + // 숫자와 하이픈(-)만 입력 + "validate-digits-" : function(v) { + v = v.replace(/-/g, ""); + return isNaN(v) || /[^\d]/.test(v)? "숫자, 하이픈(-)만 입력하셔야 합니다." : false; + }, + // 숫자와 포인트(.)만 입력 + "validate-digits-dot" : function(v) { + v = v.replace(/\./g, ""); + return isNaN(v) || /[^\d]/.test(v)? "숫자, 포인트(.)만 입력하셔야 합니다." : false; + }, + // 숫자와 콤마(,)만 입력 + "validate-digits-comma" : function(v) { + v = v.replace(/\,/g, ""); + return isNaN(v) || /[^\d]/.test(v)? "숫자, 콤마(,)만 입력하셔야 합니다." : false; + }, + // 숫자와 콤마(,),포인트(.)만 입력 + "validate-digits-comma-dot" : function(v) { + v = v.replace(/\,\./g, ""); + return isNaN(v) || /[^\d]/.test(v)? "숫자, 콤마(,),포인트(.)만 입력하셔야 합니다." : false; + }, + // 금액만 입력 가능(validate-digits-comma와 동일, 세자리콤마 자동추가 이벤트리스너 적용을 위해 추가 함) + "validate-amount" : function(v) { + v = v.replace(/\,/g, ""); + return isNaN(v) || /[^\d]/.test(v)? "숫자, 콤마(,)만 입력하셔야 합니다." : false; + }, + // 아이디 형태 영문으로 시작하고 영문, 숫자, ., _ 를 사용 + "validate-id-format" : function(v){ + var ptrn1 = /^[^a-zA-Z]/; //false가 정상 + var ptrn2 = /[^a-zA-Z0-9._]/; //false가 정상 + + return (ptrn1.test(v) || ptrn2.test(v)) ? "영문으로시작하고 영문(대소문자), 숫자, ., _ 만 입력 가능합니다." : false; + }, + // 닉네임 + "validate-nickname-format" : function(v){ + var ptrn = /[^(가-힣a-zA-Z0-9)]/; + return (ptrn.test(v)) ? "한글, 영문(대,소), 숫자만 입력 가능합니다." : false; + }, + // 닉네임 + 스페이스 추가 + "validate-nickname-space-format" : function(v){ + var ptrn = /[^(가-힣a-zA-Z0-9\s+)]/; + return (ptrn.test(v)) ? "한글, 영문(대,소), 숫자, 공백만 입력 가능합니다." : false; + }, + // 차대번호 + "validate-vin-format" : function(v){ + var ptrn = /[^(A-Z0-9)]/; + return (ptrn.test(v)) ? "영문(대문자), 숫자만 입력 가능합니다." : false; + }, + // 영문으로 시작 입력 + "validate-alpha" : function(v) { + return /[^a-zA-Z]+$/.test(v) ? "알파뱃으로 시작되도록 입력하셔야 합니다." : false; + }, + // 영문, 숫자, _(언더바) 만 입력 + "validate-basic-char" : function(v) { + return !/[a-zA-Z0-9_]/.test(v) ? "알파뱃, 숫자, 언더바(_)만 입력하셔야 합니다." : false; + }, + // 영문과 숫자만 입력 + "validate-alpha-num" : function(v) { + return /\W/.test(v) ? "알파뱃과 숫자만 입력하셔야 합니다." : false; + }, + // 한글+ 숫자 조합만 입력 + "validate-kr-digits" : function(v){ + var ptrnKr = /[(가-힣)]/; + var ptrnDigits = /[(0-9)]/; + return (ptrnKr.test(v) && ptrnDigits.test(v)) ? false : "한글 + 숫자만 입력 가능합니다."; + }, + // 날자 사용가능한 숫자 입력 + "validate-date" : function(v) { + if("" != v){ + var date = new Date(v); + return (isNaN(date.getFullYear()) || isNaN(date.getMonth()) || isNaN(date.getDate()) ) ? "올바른 날짜를 입력하셔야 합니다.(예 2001-01-01)" : false; + } + }, + // 유효한 email 입력 + "validate-email" : function(v) { + if(v == "") return false; + return !/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v) ? "바른 이메일 주소를 입력하셔야 합니다." : false; + }, + // 유효한 URL 입력 + "validate-url" : function(v) { + if(v) { + return !/^(http|https|ftp):\/\/(([a-zA-Z0-9][a-zA-Z0-9_-]*)(\.[a-zA-Z0-9][a-zA-Z0-9_-]*)?)(:(\d+))?\/?/i.test(v) ? "http://또는https://를 포함한 바른 URL을 입력하셔야 합니다." : false; + } + return false; + }, + // 유효한 주민번호 앞자리 검증 + "validate-front-jumin" : function(v) { + + if (/[^\d]/.test(v) || v.length !=6 || isNaN(v)) { + return "숫자 6자리여야 합니다."; + } + + return false ; + }, + // 유요한 주민번호 뒷자리 검증 + "validate-back-jumin" : function(v) { + var check_digit2; + + if (/[^\d]/.test(v) || v.length!=7 || isNaN(v)) { + return "숫자 7자리여야 합니다."; + } + + return false; + }, + // 유효한 전체 주민번호 검증 + "validate-full-jumin" : function(v) { + + val = v.replace(/-/g, ""); + + pin1 = val.substring(0,6); + pin2 = val.substring(6,13); + + if (pin1.length!=6 || isNaN(pin1)) { + return " 앞자리는 6자리 숫자여야 합니다."; + } + + var a1=pin1.substring(0,1) + var a2=pin1.substring(1,2) + var a3=pin1.substring(2,3) + var a4=pin1.substring(3,4) + var a5=pin1.substring(4,5) + var a6=pin1.substring(5,6) + + check_digit1 = a1*2 + a2*3 + a3*4 + a4*5 + a5*6 + a6*7; + + if (pin2.length!=7 || isNaN(pin2)) { + return " 뒷자리는 7자리 숫자여야 합니다."; + } + + var b1=pin2.substring(0,1) + var b2=pin2.substring(1,2) + var b3=pin2.substring(2,3) + var b4=pin2.substring(3,4) + var b5=pin2.substring(4,5) + var b6=pin2.substring(5,6) + var b7=pin2.substring(6,7) + + check_digit2 = check_digit1 + b1*8 + b2*9 + b3*2 + b4*3 + b5*4 + b6*5; + + check_digit2 = check_digit2 % 11 + check_digit2 = 11 - check_digit2 + check_digit2 = check_digit2 % 10 + + if (check_digit2 != b7){ + return "유효하지 않는 주민등록번호입니다."; + } + + return false; + }, + // BYTE 단위로 최대 글자수를 제한 + "validate-max-length" : function(v, elm, length) { + var maxSize = parseInt(length, 10); + var len = 0; + var str = v.substring(0); + if(str == null) return "길이를 확인할 값이 없습니다."; + for(var i=0; i len) { + return "최소 "+minSize+" byte 를 입력 해야 합니다."; + } + return false; + }, + // BYTE 단위로 범위내의 글자수를 체크 + "validate-limit-length" : function(v, elm, param) { + if(param.length == 2) { + var minSize = parseInt(param[0], 10); + var maxSize = parseInt(param[1], 10); + var len = 0; + var str = v.substring(0); + if(str == null) return "길이를 확인 할 값이 없습니다."; + for(var i=0; i len || maxSize < len) { + //return "최소 "+minSize+" byte 보다 같거나 크고, "+maxSize+" 보다 같거나 작아야 합니다."; + return "최소 "+minSize+"자 이상, "+maxSize+"자 이하여야 합니다."; + } + } else { + return "최소 값과 최대 값 두개의 배열 인자가 필요합니다."; + } + + return false; + }, + // 전화번호 유효성 체크 02-222-2222 형식 '-' 토큰으로 잘라서 검증함 + "validate-tel-num" : function(v, elm, param) { + if(v) { + val = v.replace(/-/g, ""); + + if(isNaN(val)) { + return "숫자, - 만 입력하셔야 합니다."; + } + + var tmpArray = v.split("-"); + if(tmpArray.length != 3) { + return "-를 포함하여 정확히 입력하셔야 합니다."; + } + + for(i = 0; i < tmpArray.length; i++ ) { + if(tmpArray[i] == "") return "정확히 입력하셔야 합니다."; + if(tmpArray[i].length <2 || tmpArray[i].size >4) return "정확히 입력하셔야 합니다."; + } + + } + + return false; + }, + // 사업자번호 유효성 체크 000-00-00000 형식 '-' 토큰으로 잘라서 검증함 + "validate-biz-num" : function(v, elm, param) { + if(v) { + val = v.replace(/-/g, ""); + + if(isNaN(val)) { + return "숫자, - 만 입력하셔야 합니다."; + } + + var tmpArray = v.split("-"); + if(tmpArray.length != 3) { + return "-를 포함하여 정확히 입력하셔야 합니다."; + } + + for(i = 0; i < tmpArray.length; i++ ) { + if(tmpArray[i] == "") return "정확히 입력하셔야 합니다."; + if(tmpArray[i].length <2 || tmpArray[i].size >5) return "정확히 입력하셔야 합니다."; + } + + } + + return false; + }, + // 웹상에서 사용가능한 이미지 파일 종류인지 확인한다. gif, jpg, png 만 인정함 + "validate-is-image" : function(v) { + if(v) { + var ext = ""; + if(v.indexOf(".") >= 0) { + ext = v.substring(v.lastIndexOf(".")+1); + ext = ext.toLowerCase(); + if(ext.length != 3 || !(ext == "gif" || ext == "jpg" || ext == "jpeg" || ext == "png" || ext == "bmp")) + return "파일은 gif, jpg, png 파일만 등록을 하실수 있습니다."; + } else { + return "파일의 확장자가 없습니다."; + } + } + return false; + }, + "validate-ip" :function(v){ + if(v){ + var ip4Ptrn = /^((25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){2,3}[,]?)+$/; + if(!ip4Ptrn.test(v)){ + return "아이피 형식이 아닙니다. x.x.x 또는 x.x.x.x 형식으로 입력해주세요."; + } + } + return false; + } + + } \ No newline at end of file diff --git a/src/main/webapp/resources/js/framework/cmmn/xit-tui-grid.js b/src/main/webapp/resources/js/framework/cmmn/xit-tui-grid.js new file mode 100644 index 00000000..9974e88f --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/xit-tui-grid.js @@ -0,0 +1,620 @@ +const Grid = tui.Grid; + +/** + * tui Grid 도구 + * -참조사이트 + * ->듀토리얼: https://github.com/nhn/tui.grid/tree/master/packages/toast-ui.grid/docs/ko + * ->예제: http://nhn.github.io/tui.grid/latest/tutorial-example01-basic + * @author 박민규 + * @date 2020.05.25. + */ + +function deepCopy(obj) { + if(typeof obj !== 'object' || obj === null) { + return obj; + } + + if(obj instanceof Date) { + return new Date(obj.getTime()); + } + + if(obj instanceof Array) { + return obj.reduce((arr, item, i) => { + arr[i] = deepCopy(item); + return arr; + }, []); + } + + if(obj instanceof Object) { + return Object.keys(obj).reduce((newObj, key) => { + newObj[key] = deepCopy(obj[key]); + return newObj; + }, {}) + } +} + +const customTheme = { + selection: { + background: '#4daaf9', + border: '#004082' + }, + scrollbar: { + background: '#f5f5f5', + thumb: '#d9d9d9', + active: '#c1c1c1' + }, + row: { + even: { + background: '#f3ffe3' + }, + hover: { + background: '#ccc' + } + }, + cell: { + normal: { + background: '#fbfbfb', + border: '#e0e0e0', + showVerticalBorder: true + }, + header: { + background: '#eee', + border: '#ccc', + showVerticalBorder: true + }, + rowHeader: { + border: '#ccc', + showVerticalBorder: true + }, + editable: { + background: '#fbfbfb' + }, + selectedHeader: { + background: '#d8d8d8' + }, + focused: { + border: '#418ed4' + }, + disabled: { + text: '#b0b0b0' + } + } +} + +const TuiGrid = { + instance: null, + elId: null, + defaultOptions: { + el: document.getElementById('grid'), + //[선택]DataSource 정보(readData|createData|updateData|modifyData|deleteData 등) + data: { + headers: { + AJAX: true + }, + withCredentials: false, + initialRequest: false, + api: { + readData: { + contentType: 'application/json', + dataType: 'json', + method: 'get', + initParams: {page: 1, perPage: 15} + } + , createData: {url: '', method: 'POST'} + , updateData: {url: '', method: 'PUT'} + , modifyData: {url: '', method: 'PUT'} + , deleteData: {url: '', method: 'DELETE'} + } + }, + header: {}, //[선택]헤더정보(헤더 명칭 및 매핑 field) + columns: [], //[필수]컬럼정보(헤더 명칭 및 매핑 field) + rowHeaders: [], //[선택]ROW 헤더 타입(rowNum: 순번, checkbox: 체크박스) + bodyHeight: 350, //[선택]Grid 높이 (number(단위: px)|'auto'|'fitToParent') + minBodyHeight: 350, //[선택]Grid 최소 높이 (단위: px) + rowHeight: 30, //[선택]Grid row 높이 (number(단위: px)|'auto' ) + minRowHeight: 25, //[선택]Grid row 최소 높이 (단위: px) + pageOptions: { + useClient: false, + page: 1, + perPage: 15 + }, //[선택]한 페이지에 출력할 건수 + columnOptions: { //[선택]고정 컬럼 + frozenCount: 1 //고정컬럼 갯수 + , frozenBorderWidth: 2 //고정컬럼 보더(border) 두께 + , resizable: true + , minWidth: 100 //최소 사이즈 + }, + summary: [], //[선택]하단합계 + treeColumnOptions: {}, //[선택]tree 구조 grid + }, + + of: function(options, dataSource, successCallback) { + this.defaultOptions = $.extend(true, this.defaultOptions, options, {data: dataSource}); + this.defaultOptions.el = document.getElementById(options.el); + this.elId = options.el; + this.instance = new tui.Grid(this.defaultOptions); + // language + tui.Grid.setLanguage('ko'); + // theme + tui.Grid.applyTheme('custom', eval(customTheme)); + //Grid.applyTheme('custom', customTheme); + //Grid.applyTheme('striped'); + + this.instance.on('successResponse', function(ev){ + console.log(`successResponse >>>>>>>>>>>>>>>>>> `,ev); + var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지 + console.log(msg); + //if($('#totCnt span')){ + if(document.getElementById('totCnt')){ + $('#totCnt span').text(JSON.parse(ev.xhr.response).data.pagination.totalCount); + console.log('totCnt >>>>> ',$('#totCnt span').text()) + } + + if(successCallback) successCallback(JSON.parse(ev.xhr.response)); + }); + // 결과가 false인 경우 발생한 경우 + this.instance.on('failResponse', function(ev){ + console.log(`failResponse >>>>>>>>>>>>>>>>>> `,ev); + try { + var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지 + if(fnIsEmpty(msg)) + msg = JSON.parse(ev.xhr.response).resp.resultMsg; + if(!fnIsEmpty(msg)) + alert(msg); + } catch (e) { + } + }); + // 오류가 발생한 경우 + this.instance.on('errorResponse', function(ev){ + console.log(`errorResponse >>>>>>>>>>>>>>>>>> `,ev); + try { + var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지 + if(fnIsEmpty(msg)) + msg = JSON.parse(ev.xhr.response).resp.resultMsg; + if(!fnIsEmpty(msg)) + alert(msg); + } catch (e) { + } + }); + + return this.instance; + }, + + + /** Excel Export */ + exportExcel : function(_instance, fileName, rowHeader){ + /* 필수값 설정 */ + var _gridId = _instance.el.id; + var _frstColTyp = rowHeader; + var _arrHeader = []; + var _arrName = []; + var _mCustomRenderer = {}; + /* ================= + * 2021.04.30. 박민규 + * 컬럼 취득 방법 변경 + * AsIs: GridConfig 에 설정한 Columns 정보 + * ToBe: instance 에 설정된 Columns 정보 + ================= */ + //2021.04.30. 주석처리 +// this.getOptColumns().forEach(function(opt, idx){ + _instance.getColumns().forEach(function(opt, idx){ + _arrHeader.push(opt.header); + _arrName.push(opt.name); + //2021.04.30. 주석처리 +// if(!fnIsEmpty(opt.renderer)){ + if(!(fnIsEmpty(opt.renderer)||'DefaultRenderer'==opt.renderer.type.name||fnIsEmpty(opt.renderer.type.name))){ //브라우저별 opt.renderer.type.name 값의 차이 => Chrome: "DefaultRenderer", IE: undefined + _mCustomRenderer[opt.name] = opt.renderer; + } + }); + + + + /* grid head Setting */ + var elementTHEAD = document.createElement('table'); + var $sltHeader = $('#'+_gridId+' .tui-grid-header-area > table.tui-grid-table').clone(); + //head 처리(table 고정셀 이용 시) + if($sltHeader.length>1){ + //좌측 table의 head Selector + var firstTableTh = $sltHeader.find('tr:last-child th'); + //우측 table row의 헤드(th)를 좌측 table row에 병합 + for(var i=1; i<$sltHeader.length; i++){ + $sltHeader.eq(i).find('tr').each(function(idx, row){ + var firstTableRow = $sltHeader.eq(0).find('tr:eq('+idx+')'); + if(firstTableRow.length == 0){ + // 신규생성 + var tr = document.createElement('tr'); + tr.innerHTML = row.innerHTML; + $sltHeader.eq(0).append(tr); + //firstTable 의 rowspan 변경 + for(var j=0; j element 생성( 첫번째 컬럼타입 설정 시 ) + if(!fnIsEmpty(_frstColTyp)) + elementTR.appendChild(fnCreateTdByFrstCol(_frstColTyp, row)); + // element 생성 + _arrName.forEach(function(columnName, idxColumn){ + var columnVal = ''; + var customRenderer = _mCustomRenderer[columnName]; + if(fnIsEmpty(customRenderer)){ + //column Value 설정 + columnVal = fnNvl(row[columnName]); + }else{ + //prop 객체 생성 + var columnInfo = {}; + columnInfo['renderer'] = customRenderer; + columnInfo['name'] = columnName; + var props = {}; + props['columnInfo'] = columnInfo; + props['rowKey'] = row.rowKey; + props['grid'] = _instance; + + //렌더러 호출 + customRenderer.type(props); + + //column Value 설정 + columnVal = fnNvl(row[columnName]); + if(row.rowKey<15){ +// console.log('[export]rowKey->'+row.rowKey+'/ column->'+columnName+' / value->'+row[columnName]); +// console.log(_instance.getRow(row.rowKey)); + } + } + + var elementTD = document.createElement('td'); + elementTD.innerHTML = columnVal; + elementTR.appendChild(elementTD); + }); + elementTBODY.appendChild(elementTR); + }); + + + + /* grid table Setting */ + var elementTABLE = document.createElement('table'); + elementTABLE.appendChild(elementTHEAD); + elementTABLE.appendChild(elementTBODY); + + + + /* export Excel */ + var fileUtil = new XitFileExportUtil(fileName, 'table', elementTABLE); + fileUtil.exportExcel(); + + + + + + + + /* member Function Declare */ + //isEmpty Function + function fnIsEmpty(val){ + if(val==undefined||val==null||val==''||val=={}||val==[]) + return true; + return false; + } + //nvl Function + function fnNvl(val, replaceVal){ + replaceVal = fnIsEmpty(replaceVal)?'':replaceVal; + val = fnIsEmpty(val)?replaceVal:val; + return val; + } + // element 생성 Function + function fnCreateTdByFrstCol(colType, row){ + var returnVal = ''; + + /* column 타입별 value 설정 */ + switch (colType) { + case 'rowNum': + returnVal = row._attributes.rowNum; + break; + case 'checkbox': + if(row._attributes.checked) + returnVal = '☑'; + else + returnVal = '□'; + break; + default: + return returnVal; + break; + } + + /* element 생성 */ + var elementFrstTD = document.createElement('td'); + elementFrstTD.innerHTML = returnVal; + + + return elementFrstTD; + } + } +} + + + + + + + + +/** + * Button 렌더러 + * -설명: Grid의 cell에 Button을 생성 한다. + * 버튼명칭에 format 사용이 가능하며 사용방법은 아래와 같다. + * ex) value: 'A is {0}. B is {1}. {0}!={1}', + * listColumns: ['컬럼1', '컬럼2'] + * @param value 버튼에 출력 할 명칭 + * @param listColumns format에 매칭할 컬럼 목록 + * @param callbackFnc 버튼 클릭 시 호출 할 함수명 + * @author 박민규 + * @date 2020.05.28. + */ +var XitButtonRenderer = function(props){ +// console.log('XitButtonRenderer Called!!-> '+props.columnInfo.name); + //options get + var opt = props.columnInfo.renderer.options; + var value = opt.value; + var callbackFnc = opt.callbackFnc; + var args = opt.listColumns; + + //"value" Formatting + if(args != undefined){ + var row = props.grid.getRow(props.rowKey); + for(var i=0; i'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.value); + } + //DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 ) + props.grid.setValue(props.rowKey, props.columnInfo.name, el.value, false); +} +XitButtonRenderer.prototype.getElement = function(){ + return this.el; +} +XitButtonRenderer.prototype.render = function(props){ + this.el.value = props.value; +} + + + + +/** + * column 병합 렌더러 + * -설명: 다수의 Column을 하나의 Column으로 병합하여 cell에 출력 한다. + * 필요 시 format 사용이 가능하며 사용방법은 아래와 같다. (※포맷 사용 시 "구분자(separator)"는 적용되지 않는다) + * [단순 컬럼 병합] + * ex) listColumns: ['컬럼1', '컬럼2'], + * separator: '/' + * [포맷사용 컬럼 병합] + * ex) listColumns: ['컬럼1', '컬럼2'], + * format: 'A is {0}. B is {1}. {0}!={1}' + * @param listColumns 병합할 컬럼 name 목록 + * @param separator 컬럼 연결 구분자(default: 공백(' ')) + * @param format 출력 포맷 + * @author 박민규 + * @date 2020.05.28. + */ +var XitColumnMergeRenderer = function(props){ +// console.log('XitColumnMergeRenderer Called!!-> '+props.columnInfo.name); + //options get + var opt = props.columnInfo.renderer.options; + var args = opt.listColumns; + var separator = opt.separator; + if(fnIsEmpty(separator)) + separator = ' '; + var value = opt.format; + + //Columns merge + if(fnIsEmpty(value)){ + var arrStr = []; + var row = props.grid.getRow(props.rowKey); + args.forEach(function(column){ + arrStr.push(row[column]); + }); + value = arrStr.join(separator); + }else{ + var row = props.grid.getRow(props.rowKey); + for(var i=0; i'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.innerHTML); + } + + //DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 ) + props.grid.setValue(props.rowKey, props.columnInfo.name, el.innerHTML, false); +} +XitColumnMergeRenderer.prototype.getElement = function(){ + return this.el; +} +XitColumnMergeRenderer.prototype.render = function(props){ + this.el.value = props.value; +} + + +/** + * Button 렌더러 + * @author 최유수 + * @date 2020.07.15. + * formatter : 셀 안에 입력될 문자열. + ,eventType : 셀에 걸 이벤트. + ,eventFunction : 이벤트에 부여될 함수. + + element 속성 + element : 생성 엘리먼트 속성 + type : 생성 엘리먼트의 타입 + value : 들어갈 텍스트 + */ +/** + * 요구사항 + * 셀 속성을 부여할때 + * + * 1.셀에 개발자가 원하는 Element를 생성 할 수 있음 + * 2.1의 속성에 개발자가 원하는 이벤트를 부여 할 수 있음 + * 3. 2의 이벤트에 개발자가 원하는 함수를 부여 할 수 있음 + * 4. 개발자가 원하는만큼 유형을 추가 할 수 있음.(유형이 여러개일수도 아닐수도 있음) + */ +var CustomButtonRenderer = function(props){ + //options get + var opt = props.columnInfo.renderer.options; + //formatter를 구성할 인자값(해당 인자값은 함수형일때 배열일 수 있음.) + var formatter = opt.formatter; + //이벤트로 사용할 함수 + var eventFunction = opt.eventFunction; + //이벤트 속성 + var eventType = opt.eventType; + //객체 유형 + var element = opt.element; + //객체 속성 + var type = opt.type; + + + var formattObject = formatter; + if(typeof formatter =="function"){ + //formatter가 함수에 의해 구현이됨, Return값은 Arr, Objcect임; + //Object는 formatter : Text 와 Element로 구성됨. + formattObject = formatter(props); + }else{ + //formatter가 단순 텍스트임. + formattObject = opt; + } + + var ele = cellMaker(formattObject , eventFunction , eventType , element , type , props); + this.el = ele; +} +CustomButtonRenderer.prototype.getElement = function(){ + return this.el; +} + +//셀을 만듦. +var cellMaker = function(formattObject , eventFunction , eventType , element , type , props){ + var spanEle = document.createElement("span"); + var ele; + + //셀에 1개 이상의 데이터가 들어가는 경우 + if(formattObject instanceof Array && formattObject.length != 0){ + formattObject.forEach(function(elementObject , index , arrays){ + elementObject["eventFunction"] = eventFunction; + elementObject["eventType"] = eventType; + ele = elMaker(elementObject , props); + $(spanEle).append(ele); + //객체가 다수이면 띄어쓰기 함 + if(index < formattObject.length -1){ + $(spanEle).append(document.createTextNode('\u00a0 // \u00a0')); + } + }); + } + + //셀에 데이터가 1개이지만 함수로 Obj를 가져와서 만듦 + if(formattObject instanceof Object){ + formattObject["eventFunction"] = eventFunction; + formattObject["eventType"] = eventType; + ele = elMaker(formattObject , props); + spanEle.appendChild(ele); + } + + return spanEle; +} + +var elMaker = function(elementObject, props){ + var text = elementObject.formatter + var eventType = elementObject.eventType + var element = elementObject.element + var eventFunction = elementObject.eventFunction + var type = elementObject.type + + var ele; + if(element == "text"){ + ele = document.createElement("p"); + ele.style.whiteSpace = 'nowrap'; + ele.style.display = 'inline-block'; + ele.style.fontSize = '11px'; + ele.style.fontFamily = 'Nanum Barun Gothic'; + ele.appendChild(document.createTextNode(text)); + }else{ + ele = document.createElement(element); + ele.type = type; + ele.value = text; + } + //이벤트가 함수이면 이벤트 부여함. + if(typeof eventFunction =="function"){ + ele.addEventListener(eventType, function(event){eventFunction(props, event)}); + } + + return ele; +} + +var RowNumberRenderer = function(props){ + var el = document.createElement('span'); + el.innerHTML = props.rowKey + 1 + this.el = el; + + getElement = function(){ + return this.el; + } + + render = function(props){ + this.el.innerHTML = props.rowKey + 1 + } +} + +RowNumberRenderer.prototype.getElement = function(){ + return this.el; +} + + + diff --git a/src/main/webapp/resources/js/framework/cmmn/xit-tui-grid2.js b/src/main/webapp/resources/js/framework/cmmn/xit-tui-grid2.js new file mode 100644 index 00000000..0863c6a5 --- /dev/null +++ b/src/main/webapp/resources/js/framework/cmmn/xit-tui-grid2.js @@ -0,0 +1,789 @@ + +const customTheme = { + selection: { + background: '#4daaf9', + border: '#004082' + }, + scrollbar: { + background: '#f5f5f5', + thumb: '#d9d9d9', + active: '#c1c1c1' + }, + row: { + even: { + background: '#f3ffe3' + }, + hover: { + background: '#ccc' + } + }, + cell: { + normal: { + background: '#fbfbfb', + border: '#e0e0e0', + showVerticalBorder: true + }, + header: { + background: '#eee', + border: '#ccc', + showVerticalBorder: true + }, + rowHeader: { + border: '#ccc', + showVerticalBorder: true + }, + editable: { + background: '#fbfbfb' + }, + selectedHeader: { + background: '#d8d8d8' + }, + focused: { + border: '#418ed4' + }, + disabled: { + text: '#b0b0b0' + } + } +} + +let perPage = 15; + +const initDataSource = { + headers: { + AJAX: true + }, + withCredentials: false, + initialRequest: false, + api: { + readData: { + contentType: 'application/json;charset=UTF-8', + dataType: 'json', + initParams: {page: 1, perPage} + } + ,createData: { url: '', method: 'POST'} + ,updateData: { url: '', method: 'PUT'} + ,modifyData: { url: '', method: 'PUT'} + ,deleteData: { url: '', method: 'DELETE'} + } +}; + +let initColumnOptions = { //[선택]고정 컬럼 + frozenCount: 1 //고정컬럼 갯수 + , frozenBorderWidth: 2 //고정컬럼 보더(border) 두께 + , resizable: true + , minWidth: 100 //최소 사이즈 +}; + +let initPageOptions = { + useClient: false, + perPage +}; + +let initHederType = 'rowNum'; + +/** + * tui Grid 도구 + * -참조사이트 + * ->듀토리얼: https://github.com/nhn/tui.grid/tree/master/packages/toast-ui.grid/docs/ko + * ->예제: http://nhn.github.io/tui.grid/latest/tutorial-example01-basic + * @author 박민규 + * @date 2020.05.25. + */ +var XitTuiGridConfig = function(){ + var _instance; + var _gridId = 'grid'; //[필수]Grid를 출력할 Element Id + var _data = {}; //[선택]DataSource 정보(readData|createData|updateData|modifyData|deleteData 등) + var _header = {}; //[선택]헤더정보(헤더 명칭 및 매핑 field) + var _columns = []; //[필수]컬럼정보(헤더 명칭 및 매핑 field) + var _rowHeaders = 'rowNum'; //[선택]ROW 헤더 타입(rowNum: 순번, checkbox: 체크박스) + var _bodyHeight = 350; //[선택]Grid 높이 (number(단위: px)|'auto'|'fitToParent') + var _minBodyHeight; //[선택]Grid 최소 높이 (단위: px) + var _rowHeight = 27; //[선택]Grid row 높이 (number(단위: px)|'auto' ) + var _minRowHeight = 25; //[선택]Grid row 최소 높이 (단위: px) + var _pageOptions = {}; //[선택]한 페이지에 출력할 건수 + let _columnOptions = {} + var _summary; //[선택]하단합계 + var _treeColumnOptions = {}; //[선택]tree 구조 grid + + + + return { + /** gridId 값을 설정 한다. */ + setOptGridId : function(val){ + this._gridId = val; + }, + /** gridId 값을 반환 한다. */ + getOptGridId : function(){ + return this._gridId; + }, + /** data 값을 설정 한다. */ + setOptDataSource : function(val){ + this._data = $.extend(true, initDataSource, val); + }, + /** data 값을 반환 한다. */ + getOptDataSource : function(){ + return this._data; + }, + /** gridHeight 값을 설정 한다. */ + setOptGridHeight : function(val){ + this._bodyHeight = val; + }, + /** gridHeight 값을 반환 한다. */ + getOptGridHeight : function(){ + return this._bodyHeight; + }, + /** minGridHeight 값을 설정 한다. */ + setOptMinGridHeight : function(val){ + this._minBodyHeight = val; + }, + /** minGridHeight 값을 반환 한다. */ + getOptMinGridHeight : function(){ + return this._minBodyHeight; + }, + /** rowHeight 값을 설정 한다. */ + setOptRowHeight : function(val){ + this._rowHeight = val; + }, + /** rowHeight 값을 반환 한다. */ + getOptRowHeight : function(){ + return this._rowHeight; + }, + /** minRowHeight 값을 설정 한다. */ + setOptMinRowHeight : function(val){ + this._minRowHeight = val; + }, + /** minRowHeight 값을 반환 한다. */ + getOptMinRowHeight : function(){ + return this._minRowHeight; + }, + /** header 값을 설정 한다. */ + setOptHeader : function(val){ + this._header = val; + }, + /** header 값을 반환 한다. */ + getOptHeader : function(){ + return this._header; + }, + /** columns 값을 설정 한다. */ + setOptColumns : function(val){ + this._columns = val; + }, + /** columns 값을 반환 한다. */ + getOptColumns : function(){ + return this._columns; + }, + /** rowHeaderType 값을 설정 한다. */ + setOptRowHeaderType : function(val){ + this._rowHeaders = val; + }, + /** rowHeaderType 값을 반환 한다. */ + getOptRowHeaderType : function(){ + //return [...initHederType, this._rowHeaders]; + //return ['rowNum']; + return this._rowHeaders; + }, + /** pageOptions 값을 설정 한다. */ + setOptPageOptions : function(val){ + this._pageOptions = Object.assign({}, initPageOptions, val); + }, + /** pageOptions 값을 반환 한다. */ + getOptPageOptions : function(){ + return Object.assign(initPageOptions, this._pageOptions); + }, + /** columnOptions 값을 설정 한다. */ + setOptColumnOptions : function(val){ + this._columnOptions = $.extend(true, initColumnOptions, val); + }, + /** columnOptions 값을 반환 한다. */ + getOptColumnOptions : function(){ + return $.extend(true, initColumnOptions, this._columnOptions); + }, + /** summary 값을 설정 한다. */ + setOptSummary: function(val){ + this._summary = val; + }, + /** summary 값을 반환 한다. */ + getOptSummary: function(){ + return this._summary; + }, + /** treeColumnOptions 값을 설정 한다. */ + setOptTreeColumnOptions: function(val){ + this._treeColumnOptions = val; + }, + /** treeColumnOptions 값을 반환 한다. */ + getOptTreeColumnOptions: function(){ + return this._treeColumnOptions; + }, + /** instance 객체를 설정 한다. */ + setInstance : function(val){ + this._instance = val; + }, + /** instance 객체를 반환 한다. */ + getInstance : function(){ + return this._instance; + }, + /** tui Grid Instance */ + instance : function(){ + //Option Set + var option = new Object(); + option.scrollX = true; + option.scrollY = true; + option.el = fnIsEmpty(this.getOptGridId())?document.getElementById(_gridId):document.getElementById(this.getOptGridId()); + if(!fnIsEmpty(this.getOptDataSource())) option.data = this.getOptDataSource(); + if(!fnIsEmpty(this.getOptHeader())) option.header = 100; //this.getOptHeader(); + if(!fnIsEmpty(this.getOptColumns())) option.columns = this.getOptColumns(); + if(!fnIsEmpty(this.getOptRowHeaderType())) option.rowHeaders = [this.getOptRowHeaderType()]; + if(!fnIsEmpty(this.getOptGridHeight())) option.bodyHeight = Number(this.getOptGridHeight()); + if(!fnIsEmpty(this.getOptMinGridHeight())) option.minBodyHeight = Number(this.getOptMinGridHeight()); + option.rowHeight = fnIsEmpty(this.getOptRowHeight()) ?_rowHeight:Number(this.getOptRowHeight()); + option.minRowHeight = fnIsEmpty(this.getOptMinRowHeight())?_minRowHeight:Number(this.getOptMinRowHeight()); + if(!fnIsEmpty(this.getOptPageOptions())) option.pageOptions = this.getOptPageOptions(); + if(!fnIsEmpty(this.getOptColumnOptions())) option.columnOptions = this.getOptColumnOptions(); + if(!fnIsEmpty(this.getOptSummary())) option.summary = this.getOptSummary(); + if(!fnIsEmpty(this.getOptTreeColumnOptions())) option.treeColumnOptions = this.getOptTreeColumnOptions(); + + + //2020.11.06 박민규 - 요청에 대한 Response 및 Exception 처리를 위한 "AJAX" 헤더 추가 + /* + if(!fnIsEmpty(option.data)){ + var headers = { 'AJAX': true }; + option.data['headers'] = headers; + } + */ + //Grid Instance + var instance = new tui.Grid(option); + + // language + tui.Grid.setLanguage('ko'); + // theme + tui.Grid.applyTheme('custom', eval(customTheme)); + //Grid.applyTheme('custom', customTheme); + //Grid.applyTheme('striped'); + + //instance Grid Set + this.setInstance(instance); + + //2020.11.06 박민규 - Api 호출결과 메시지 출력 이벤트 리스너 추가. + //Api Call Result EventListener Set + // 결과가 false인 경우 발생한 경우 + instance.on('successResponse', function(ev){ + console.log(`successResponse >>>>>>>>>>>>>>>>>> `,ev); + var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지 + console.log(msg); + }); + // 결과가 false인 경우 발생한 경우 + instance.on('failResponse', function(ev){ + console.log(`failResponse >>>>>>>>>>>>>>>>>> `,ev); + try { + var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지 + if(fnIsEmpty(msg)) + msg = JSON.parse(ev.xhr.response).resp.resultMsg; + if(!fnIsEmpty(msg)) + alert(msg); + } catch (e) { + } + }); + // 오류가 발생한 경우 + instance.on('errorResponse', function(ev){ + console.log(`errorResponse >>>>>>>>>>>>>>>>>> `,ev); + try { + var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지 + if(fnIsEmpty(msg)) + msg = JSON.parse(ev.xhr.response).resp.resultMsg; + if(!fnIsEmpty(msg)) + alert(msg); + } catch (e) { + } + }); + + + + /* 공백(empty) 여부 확인 */ + function fnIsEmpty(val){ + if(val==undefined||val==null||val==''||val==[]||val=={}) + return true; + else + return false; + } + + return instance; + }, + /** column 순서 변경 */ + fnColumnMove : function(curIdx, moveIdx){ + /* + * 유효성 확인 + */ + if(curIdx == moveIdx) + return false; + + /* + * 순서 변경 + */ + var _columns = this.getOptColumns(); + var columnsRecordered = []; + var isMoveRight = Number(curIdx) < Number(moveIdx); + var isMoveLeft = Number(curIdx) > Number(moveIdx); + for(var i=0; i<_columns.length; i++){ + if(isMoveLeft){ + if(i == moveIdx) + columnsRecordered.push(_columns[curIdx]); + } + + if(i != curIdx) + columnsRecordered.push(_columns[i]); + + if(isMoveRight){ + if(i == moveIdx) + columnsRecordered.push(_columns[curIdx]); + } + } + + /* + * 결과 반영 + */ + this.getInstance().setColumns(columnsRecordered); + this.setOptColumns(columnsRecordered); + }, + /** Excel Export */ + exportExcel : function(fileName){ + /* 필수값 설정 */ + var _gridId = this.getOptGridId(); + var _instance = this.getInstance(); + var _frstColTyp = this.getOptRowHeaderType(); + var _arrHeader = []; + var _arrName = []; + var _mCustomRenderer = {}; + /* ================= + * 2021.04.30. 박민규 + * 컬럼 취득 방법 변경 + * AsIs: GridConfig 에 설정한 Columns 정보 + * ToBe: instance 에 설정된 Columns 정보 + ================= */ + //2021.04.30. 주석처리 +// this.getOptColumns().forEach(function(opt, idx){ + _instance.getColumns().forEach(function(opt, idx){ + _arrHeader.push(opt.header); + _arrName.push(opt.name); + //2021.04.30. 주석처리 +// if(!fnIsEmpty(opt.renderer)){ + if(!(fnIsEmpty(opt.renderer)||'DefaultRenderer'==opt.renderer.type.name||fnIsEmpty(opt.renderer.type.name))){ //브라우저별 opt.renderer.type.name 값의 차이 => Chrome: "DefaultRenderer", IE: undefined + _mCustomRenderer[opt.name] = opt.renderer; + } + }); + + + + /* grid head Setting */ + var elementTHEAD = document.createElement('table'); + var $sltHeader = $('#'+_gridId+' .tui-grid-header-area > table.tui-grid-table').clone(); + //head 처리(table 고정셀 이용 시) + if($sltHeader.length>1){ + //좌측 table의 head Selector + var firstTableTh = $sltHeader.find('tr:last-child th'); + //우측 table row의 헤드(th)를 좌측 table row에 병합 + for(var i=1; i<$sltHeader.length; i++){ + $sltHeader.eq(i).find('tr').each(function(idx, row){ + var firstTableRow = $sltHeader.eq(0).find('tr:eq('+idx+')'); + if(firstTableRow.length == 0){ + // 신규생성 + var tr = document.createElement('tr'); + tr.innerHTML = row.innerHTML; + $sltHeader.eq(0).append(tr); + //firstTable 의 rowspan 변경 + for(var j=0; j element 생성( 첫번째 컬럼타입 설정 시 ) + if(!fnIsEmpty(_frstColTyp)) + elementTR.appendChild(fnCreateTdByFrstCol(_frstColTyp, row)); + // element 생성 + _arrName.forEach(function(columnName, idxColumn){ + var columnVal = ''; + var customRenderer = _mCustomRenderer[columnName]; + if(fnIsEmpty(customRenderer)){ + //column Value 설정 + columnVal = fnNvl(row[columnName]); + }else{ + //prop 객체 생성 + var columnInfo = {}; + columnInfo['renderer'] = customRenderer; + columnInfo['name'] = columnName; + var props = {}; + props['columnInfo'] = columnInfo; + props['rowKey'] = row.rowKey; + props['grid'] = _instance; + + //렌더러 호출 + customRenderer.type(props); + + //column Value 설정 + columnVal = fnNvl(row[columnName]); + if(row.rowKey<15){ +// console.log('[export]rowKey->'+row.rowKey+'/ column->'+columnName+' / value->'+row[columnName]); +// console.log(_instance.getRow(row.rowKey)); + } + } + + var elementTD = document.createElement('td'); + elementTD.innerHTML = columnVal; + elementTR.appendChild(elementTD); + }); + elementTBODY.appendChild(elementTR); + }); + + + + /* grid table Setting */ + var elementTABLE = document.createElement('table'); + elementTABLE.appendChild(elementTHEAD); + elementTABLE.appendChild(elementTBODY); + + + + /* export Excel */ + var fileUtil = new XitFileExportUtil(fileName, 'table', elementTABLE); + fileUtil.exportExcel(); + + + + + + + + /* member Function Declare */ + //isEmpty Function + function fnIsEmpty(val){ + if(val==undefined||val==null||val==''||val=={}||val==[]) + return true; + return false; + } + //nvl Function + function fnNvl(val, replaceVal){ + replaceVal = fnIsEmpty(replaceVal)?'':replaceVal; + val = fnIsEmpty(val)?replaceVal:val; + return val; + } + // element 생성 Function + function fnCreateTdByFrstCol(colType, row){ + var returnVal = ''; + + /* column 타입별 value 설정 */ + switch (colType) { + case 'rowNum': + returnVal = row._attributes.rowNum; + break; + case 'checkbox': + if(row._attributes.checked) + returnVal = '☑'; + else + returnVal = '□'; + break; + default: + return returnVal; + break; + } + + /* element 생성 */ + var elementFrstTD = document.createElement('td'); + elementFrstTD.innerHTML = returnVal; + + + return elementFrstTD; + } + } + + + } +} + + + + + + + + +/** + * Button 렌더러 + * -설명: Grid의 cell에 Button을 생성 한다. + * 버튼명칭에 format 사용이 가능하며 사용방법은 아래와 같다. + * ex) value: 'A is {0}. B is {1}. {0}!={1}', + * listColumns: ['컬럼1', '컬럼2'] + * @param value 버튼에 출력 할 명칭 + * @param listColumns format에 매칭할 컬럼 목록 + * @param callbackFnc 버튼 클릭 시 호출 할 함수명 + * @author 박민규 + * @date 2020.05.28. + */ +var XitButtonRenderer = function(props){ +// console.log('XitButtonRenderer Called!!-> '+props.columnInfo.name); + //options get + var opt = props.columnInfo.renderer.options; + var value = opt.value; + var callbackFnc = opt.callbackFnc; + var args = opt.listColumns; + + //"value" Formatting + if(args != undefined){ + var row = props.grid.getRow(props.rowKey); + for(var i=0; i'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.value); + } + //DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 ) + props.grid.setValue(props.rowKey, props.columnInfo.name, el.value, false); +} +XitButtonRenderer.prototype.getElement = function(){ + return this.el; +} +XitButtonRenderer.prototype.render = function(props){ + this.el.value = props.value; +} + + + + +/** + * column 병합 렌더러 + * -설명: 다수의 Column을 하나의 Column으로 병합하여 cell에 출력 한다. + * 필요 시 format 사용이 가능하며 사용방법은 아래와 같다. (※포맷 사용 시 "구분자(separator)"는 적용되지 않는다) + * [단순 컬럼 병합] + * ex) listColumns: ['컬럼1', '컬럼2'], + * separator: '/' + * [포맷사용 컬럼 병합] + * ex) listColumns: ['컬럼1', '컬럼2'], + * format: 'A is {0}. B is {1}. {0}!={1}' + * @param listColumns 병합할 컬럼 name 목록 + * @param separator 컬럼 연결 구분자(default: 공백(' ')) + * @param format 출력 포맷 + * @author 박민규 + * @date 2020.05.28. + */ +var XitColumnMergeRenderer = function(props){ +// console.log('XitColumnMergeRenderer Called!!-> '+props.columnInfo.name); + //options get + var opt = props.columnInfo.renderer.options; + var args = opt.listColumns; + var separator = opt.separator; + if(fnIsEmpty(separator)) + separator = ' '; + var value = opt.format; + + //Columns merge + if(fnIsEmpty(value)){ + var arrStr = []; + var row = props.grid.getRow(props.rowKey); + args.forEach(function(column){ + arrStr.push(row[column]); + }); + value = arrStr.join(separator); + }else{ + var row = props.grid.getRow(props.rowKey); + for(var i=0; i'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.innerHTML); + } + + //DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 ) + props.grid.setValue(props.rowKey, props.columnInfo.name, el.innerHTML, false); +} +XitColumnMergeRenderer.prototype.getElement = function(){ + return this.el; +} +XitColumnMergeRenderer.prototype.render = function(props){ + this.el.value = props.value; +} + + +/** + * Button 렌더러 + * @author 최유수 + * @date 2020.07.15. + * formatter : 셀 안에 입력될 문자열. + ,eventType : 셀에 걸 이벤트. + ,eventFunction : 이벤트에 부여될 함수. + + element 속성 + element : 생성 엘리먼트 속성 + type : 생성 엘리먼트의 타입 + value : 들어갈 텍스트 + */ +/** + * 요구사항 + * 셀 속성을 부여할때 + * + * 1.셀에 개발자가 원하는 Element를 생성 할 수 있음 + * 2.1의 속성에 개발자가 원하는 이벤트를 부여 할 수 있음 + * 3. 2의 이벤트에 개발자가 원하는 함수를 부여 할 수 있음 + * 4. 개발자가 원하는만큼 유형을 추가 할 수 있음.(유형이 여러개일수도 아닐수도 있음) + */ +var CustomButtonRenderer = function(props){ + //options get + var opt = props.columnInfo.renderer.options; + //formatter를 구성할 인자값(해당 인자값은 함수형일때 배열일 수 있음.) + var formatter = opt.formatter; + //이벤트로 사용할 함수 + var eventFunction = opt.eventFunction; + //이벤트 속성 + var eventType = opt.eventType; + //객체 유형 + var element = opt.element; + //객체 속성 + var type = opt.type; + + + var formattObject = formatter; + if(typeof formatter =="function"){ + //formatter가 함수에 의해 구현이됨, Return값은 Arr, Objcect임; + //Object는 formatter : Text 와 Element로 구성됨. + formattObject = formatter(props); + }else{ + //formatter가 단순 텍스트임. + formattObject = opt; + } + + var ele = cellMaker(formattObject , eventFunction , eventType , element , type , props); + this.el = ele; +} +CustomButtonRenderer.prototype.getElement = function(){ + return this.el; +} + +//셀을 만듦. +var cellMaker = function(formattObject , eventFunction , eventType , element , type , props){ + var spanEle = document.createElement("span"); + var ele; + + //셀에 1개 이상의 데이터가 들어가는 경우 + if(formattObject instanceof Array && formattObject.length != 0){ + formattObject.forEach(function(elementObject , index , arrays){ + elementObject["eventFunction"] = eventFunction; + elementObject["eventType"] = eventType; + ele = elMaker(elementObject , props); + $(spanEle).append(ele); + //객체가 다수이면 띄어쓰기 함 + if(index < formattObject.length -1){ + $(spanEle).append(document.createTextNode('\u00a0 // \u00a0')); + } + }); + } + + //셀에 데이터가 1개이지만 함수로 Obj를 가져와서 만듦 + if(formattObject instanceof Object){ + formattObject["eventFunction"] = eventFunction; + formattObject["eventType"] = eventType; + ele = elMaker(formattObject , props); + spanEle.appendChild(ele); + } + + return spanEle; +} + +var elMaker = function(elementObject, props){ + var text = elementObject.formatter + var eventType = elementObject.eventType + var element = elementObject.element + var eventFunction = elementObject.eventFunction + var type = elementObject.type + + var ele; + if(element == "text"){ + ele = document.createElement("p"); + ele.style.whiteSpace = 'nowrap'; + ele.style.display = 'inline-block'; + ele.style.fontSize = '11px'; + ele.style.fontFamily = 'Nanum Barun Gothic'; + ele.appendChild(document.createTextNode(text)); + }else{ + ele = document.createElement(element); + ele.type = type; + ele.value = text; + } + //이벤트가 함수이면 이벤트 부여함. + if(typeof eventFunction =="function"){ + ele.addEventListener(eventType, function(event){eventFunction(props, event)}); + } + + return ele; +} + +var RowNumberRenderer = function(props){ + var el = document.createElement('span'); + el.innerHTML = props.rowKey + 1 + this.el = el; + + getElement = function(){ + return this.el; + } + + render = function(props){ + this.el.innerHTML = props.rowKey + 1 + } +} + +RowNumberRenderer.prototype.getElement = function(){ + return this.el; +} + + + + diff --git a/src/main/webapp/resources/js/framework/egov/EgovBBSMng.js b/src/main/webapp/resources/js/framework/egov/EgovBBSMng.js new file mode 100644 index 00000000..f04b9016 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/EgovBBSMng.js @@ -0,0 +1,30 @@ +/**************************************************************** + * + * 파일명 : EgovBBSMng.js + * 설 명 : 전자정부 공통서비스 로그관리 기능 사용 JavaScript + * + * 수정일 수정자 Version Function 명 + * ------------ --------- ------------- ---------------------------- + * 2009.03.10 이삼섭 1.0 최초생성 + * + * + * **************************************************************/ + +function fn_egov_trim(str) { + if (str == null) { + return ''; + } + var count = str.length; + var len = count; + var st = 0; + + while ((st < len) && (str.charAt(st) <= ' ')) { + st++; + } + + while ((st < len) && (str.charAt(len - 1) <= ' ')) { + len--; + } + + return ((st > 0) || (len < count)) ? str.substring(st, len) : str; +} diff --git a/src/main/webapp/resources/js/framework/egov/EgovCalPopup.js b/src/main/webapp/resources/js/framework/egov/EgovCalPopup.js new file mode 100644 index 00000000..38098457 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/EgovCalPopup.js @@ -0,0 +1,106 @@ +/**************************************************************** + * + * 파일명 : EgovCalPopup.js + * 설 명 : 전자정부 공통서비스 달력 팝업 JavaScript + * + * 수정일 수정자 Version Function 명 + * ------------ --------- ------------- ---------------------------- + * 2009.03.30 이중호 1.0 최초생성 + * + * + */ +function dirname(path) { + if (path.lastIndexOf("/") == -1) + return "./"; + return path.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '') + "/"; +} + +function getActiveScript() { + var d = document.getElementsByTagName("script"); + var path = dirname(d[d.length - 1].src); + delete d; + + var offset=path.indexOf(location.host)+location.host.length; + return path.substring(offset); +} + + +function getContextPath(){ + var offset=location.href.indexOf(location.host)+location.host.length; + var ctxPath=location.href.substring(offset, location.href.indexOf('/',offset+1)); + + if ((/^\/js/).test(getActiveScript())) { + return ""; + } + + return ctxPath; +} + +function loadScript(src, f) { + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement("script"); + script.src = src; + var done = false; + script.onload = script.onreadystatechange = function() { + // attach to both events for cross browser finish detection: + if ( !done && (!this.readyState || + this.readyState == "loaded" || this.readyState == "complete") ) { + done = true; + if (typeof f == 'function') f(); + // cleans up a little memory: + script.onload = script.onreadystatechange = null; + head.removeChild(script); + } + }; + head.appendChild(script); +} + +loadScript(getContextPath() + '/resources/js/showModalDialog.js'); + +function fn_egov_NormalCalendar(frm, sDate, vDate) { + var retVal; + + var url = frm.cal_url.value; + var varParam = new Object(); + varParam.sDate = sDate.value; + + // IE + //var openParam = "dialogWidth:252px;dialogHeight:175px;scroll:no;status:no;center:yes;resizable:yes;"; + // FIREFOX + var openParam = ""; + var sAppName = navigator.appName ; + + if( sAppName.indexOf("Netscape") > -1){ + openParam = "dialogWidth:275px;dialogHeight:200px;scroll:no;status:no;center:yes;resizable:yes;"; + }else if(sAppName.indexOf("Microsoft") > -1){ + openParam = "dialogWidth:275px;dialogHeight:200px;scroll:no;status:no;center:yes;resizable:yes;"; + }else{ + openParam = "dialogWidth:275px;dialogHeight:200px;scroll:no;status:no;center:yes;resizable:yes;"; + } + +retVal = window.showModalDialog(url, varParam, openParam, "calendarCallback"); + + otherParameters[0] = fn_egov_NormalCalendar.arguments.length; + otherParameters[1] = sDate; + otherParameters[2] = vDate; + + if(retVal) { + if(fn_egov_NormalCalendar.arguments.length == 2){ + sDate.value = retVal.vDate; + }else{ + sDate.value = retVal.sDate; + vDate.value = retVal.vDate; + } + } +} + +function calendarCallback(retVal) { + if (retVal) { + if (otherParameters[0] == 2) { + otherParameters[1].value = retVal.vDate; + } else { + otherParameters[1].value = retVal.sDate; + otherParameters[2].value = retVal.vDate; + } + } +} diff --git a/src/main/webapp/resources/js/framework/egov/EgovCmmUtl.js b/src/main/webapp/resources/js/framework/egov/EgovCmmUtl.js new file mode 100644 index 00000000..493a7448 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/EgovCmmUtl.js @@ -0,0 +1,83 @@ +/* + * 요소기술 스크립트 + */ + +// 숫자체크 +function isNumber(control, msg) { + + var val = control; + var Num = "1234567890"; + for (i=0; i="0001" && varCk1<="9999" && varCk2>="01" && varCk2<="12") { + febDays = "29"; + if ((parseInt(varCk1,10) % 4) == 0) { + if ((parseInt(varCk1,10) % 100) == 0 && (parseInt(varCk1,10) % 400) != 0){ + febDays = "28"; + } + }else{ + febDays = "28"; + } + if (varCk2=="01" && varCk3>="01" && varCk3<="31") return true; + if (varCk2=="02" && varCk3>="01" && varCk3<=febDays) return true; + if (varCk2=="03" && varCk3>="01" && varCk3<="31") return true; + if (varCk2=="04" && varCk3>="01" && varCk3<="30") return true; + if (varCk2=="05" && varCk3>="01" && varCk3<="31") return true; + if (varCk2=="06" && varCk3>="01" && varCk3<="30") return true; + if (varCk2=="07" && varCk3>="01" && varCk3<="31") return true; + if (varCk2=="08" && varCk3>="01" && varCk3<="31") return true; + if (varCk2=="09" && varCk3>="01" && varCk3<="30") return true; + if (varCk2=="10" && varCk3>="01" && varCk3<="31") return true; + if (varCk2=="11" && varCk3>="01" && varCk3<="30") return true; + if (varCk2=="12" && varCk3>="01" && varCk3<="31") return true; + } + alert(msg + " 유효하지 않은 년,월,일(YYYYMMDD)입니다. 다시 확인해 주세요!"); + return false; +} \ No newline at end of file diff --git a/src/main/webapp/resources/js/framework/egov/EgovMainMenu.js b/src/main/webapp/resources/js/framework/egov/EgovMainMenu.js new file mode 100644 index 00000000..0122a485 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/EgovMainMenu.js @@ -0,0 +1,177 @@ +/* + * 노드 , 트리 구성 정보 선언 + */ +var treeNodes = new Array();; +var openTreeNodes = new Array(); +var treeIcons = new Array(6); +var imgpath = "/resources/images/egovframework/com/cmm/utl/"; +var treeYeobu = false; +var chkValue = ""; +var vHtmlCode = ""; + +/* + * 노드 , 트리 구성 이미지 정보 + */ +function preloadIcons() { + treeIcons[0] = new Image(); + treeIcons[0].src = imgpath+"menu_plus.gif"; + treeIcons[1] = new Image(); + treeIcons[1].src = imgpath+"menu_plusbottom.gif"; + treeIcons[2] = new Image(); + treeIcons[2].src = imgpath+"menu_minus.gif"; + treeIcons[3] = new Image(); + treeIcons[3].src = imgpath+"menu_minusbottom.gif"; + treeIcons[4] = new Image(); + treeIcons[4].src = imgpath+"menu_folder.gif"; + treeIcons[5] = new Image(); + treeIcons[5].src = imgpath+"menu_folderopen.gif"; +} +/* +* 트리생성함수 +*/ +function createTree(arrName, vYeobu, checkValue) { + var startNode, openNode; + treeNodes = arrName; + treeYeobu = vYeobu; + chkValue = checkValue;//"2000000" + startNode = chkValue; + if (treeNodes.length > 0) { + preloadIcons(); + + //vHtmlCode +=""; + //vHtmlCode +="" + } else { + //vHtmlCode +="메뉴목록
    "; + } + var recursedNodes = new Array(); + addTreeNode(startNode, recursedNodes); + //vHtmlCode +="
    "; + + if (startNode == null) startNode = 0; + if (openNode != 0 || openNode != null) setOpenTreeNodes(openNode); + if (startNode !=0) { + var _getTreeArrayId = getTreeArrayId(startNode) + var nodeValues = treeNodes[getTreeArrayId(startNode)].split("|"); + //vHtmlCode +="
    " + nodeValues[2] + "
     
    "; + document.write("
      "+vHtmlCode+"
    "); + } +} +/* +* 노드위치 확인 +*/ +function getTreeArrayId(node) { + for (i=0; i"; + } + + if (lastSibling) recursedNodes.push(0); + else recursedNodes.push(1); + + if (hasChildNode) { + vHtmlCode +=vHtmlCodeBg+""+nodeValues[2]+""; + } else{ + // Start link + if(recursedNodes.length==1){ + vHtmlCode +=vHtmlCodeBg+""+nodeValues[2]+""; + }else{ + vHtmlCode +=vHtmlCodeBgList+""+nodeValues[2]+""; + } + } + + if (hasChildNode) { + vHtmlCode +="
    0) { + preloadIcons(); + if (startNode == null) startNode = 0; + if (openNode != 0 || openNode != null) setOpenTreeNodes(openNode); + if (startNode !=0) { + var nodeValues = treeNodes[getTreeArrayId(startNode)].split("|"); + } else document.write("메뉴목록
    "); + var recursedNodes = new Array(); + addTreeNode(startNode, recursedNodes); + } +} +/* +* 노드위치 확인 +*/ +function getTreeArrayId(node) { + for (i=0; i"); + if (hasChildNode) { + document.write("Folder"); + } else document.write("Page"); + document.write(""); + document.write(nodeValues[2]); + document.write("
    "); + if (hasChildNode) { + document.write(""); + } + recursedNodes.pop(); + } + } +} +/* +* 트리노드 액션(열기,닫기) +*/ +function openCloseEx(node, bottom) { + var treeDiv = document.getElementById("div" + node); + var treeJoin = document.getElementById("join" + node); + var treeIcon = document.getElementById("icon" + node); + + if (treeDiv.style.display == 'none') { + if (bottom==1) treeJoin.src = treeIcons[3].src; + else treeJoin.src = treeIcons[2].src; + treeIcon.src = treeIcons[5].src; + treeDiv.style.display = ''; + } else { + if (bottom==1) treeJoin.src = treeIcons[1].src; + else treeJoin.src = treeIcons[0].src; + treeIcon.src = treeIcons[4].src; + treeDiv.style.display = 'none'; + } +} +if(!Array.prototype.push) { + function fnArrayPush() { + for(var i=0;i 1) { + for(var i=0; i < checkField.length; i++) { + checkField[i].checked = true; + } + } else { + checkField.checked = true; + } + } + } else { + if(checkField) { + if(checkField.length > 1) { + for(var j=0; j < checkField.length; j++) { + checkField[j].checked = false; + } + } else { + checkField.checked = false; + } + } + } +} + +/* ******************************************************** + * 모두선택 처리 함수 + ******************************************************** */ +function fCheckDir(fCheckYB, fValue, fPath){ + var checkField = document.getElementsByName(fCheckYB); +} diff --git a/src/main/webapp/resources/js/framework/egov/EgovMultiFile.js b/src/main/webapp/resources/js/framework/egov/EgovMultiFile.js new file mode 100644 index 00000000..ffd869f5 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/EgovMultiFile.js @@ -0,0 +1,140 @@ +/** + * Convert a single file-input element into a 'multiple' input list + * Usage: + * + * 1. Create a file input element (no name) + * eg. + * + * 2. Create a DIV for the output to be written to + * eg.
    + * + * 3. Instantiate a MultiSelector object, passing in the DIV and an (optional) maximum number of files + * eg. var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 3 ); + * + * 4. Add the first element + * eg. multi_selector.addElement( document.getElementById( 'first_file_element' ) ); + */ + +function MultiSelector( list_target, max ){ + + // Where to write the list + this.list_target = list_target; + // How many elements? + this.count = 0; + // How many elements? + this.id = 0; + // Is there a maximum? + if( max ){ + this.max = max; + } else { + this.max = -1; + }; + + /** + * Add a new file input element + */ + this.addElement = function( element ){ + + // Make sure it's a file input element + if( element.tagName == 'INPUT' && element.type == 'file' ){ + + // Element name -- what number am I? + element.name = 'file_' + this.id++; + + // Add reference to this object + element.multi_selector = this; + + // What to do when a file is selected + element.onchange = function(){ + + // New file input + var new_element = document.createElement( 'input' ); + new_element.type = 'file'; + + // Add new element + this.parentNode.insertBefore( new_element, this ); + + // Apply 'update' to element + this.multi_selector.addElement( new_element ); + + // Update list + this.multi_selector.addListRow( this ); + + // Hide this: we can't use display:none because Safari doesn't like it + this.style.position = 'absolute'; + this.style.left = '-1000px'; + this.style.top = '-1000px'; + this.style.display = 'none'; + this.style.visibility = 'hidden'; + this.style.width = '0'; + this.style.height = '0'; + this.style.overflow = 'hidden'; + + new_element.onkeypress = function(){ + return false; + }; + + }; + // If we've reached maximum number, disable input element + if( this.max != -1 && this.count >= this.max ){ + element.disabled = true; + }; + + // File element counter + this.count++; + // Most recent element + this.current_element = element; + + } else { + // This can only be applied to file input elements! + alert( 'Error: not a file input element' ); + }; + + }; + + /** + * Add a new row to the list of files + */ + this.addListRow = function( element ){ + + // Row div + var new_row = document.createElement( 'div' ); + + // Delete button + var new_row_button = document.createElement( 'input' ); + new_row_button.type = 'button'; + new_row_button.value = 'Delete'; + + // References + new_row.element = element; + + // Delete function + new_row_button.onclick= function(){ + + // Remove element from form + this.parentNode.element.parentNode.removeChild( this.parentNode.element ); + + // Remove this row from the list + this.parentNode.parentNode.removeChild( this.parentNode ); + + // Decrement counter + this.parentNode.element.multi_selector.count--; + + // Re-enable input element (if it's disabled) + this.parentNode.element.multi_selector.current_element.disabled = false; + + // which nixes your already queued uploads + return false; + }; + + // Set row value + new_row.innerHTML = element.value; + + // Add button + new_row.appendChild( new_row_button ); + + // Add it to the list + this.list_target.appendChild( new_row ); + }; + +}; \ No newline at end of file diff --git a/src/main/webapp/resources/js/framework/egov/EgovZipPopup.js b/src/main/webapp/resources/js/framework/egov/EgovZipPopup.js new file mode 100644 index 00000000..e6577898 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/EgovZipPopup.js @@ -0,0 +1,105 @@ +/**************************************************************** + * + * 파일명 : EgovZipPopup.js + * 설 명 : 전자정부 공통서비스 달력 팝업 JavaScript + * + * 수정일 수정자 Version Function 명 + * ------------ --------- ------------- ---------------------------- + * 2009.03.30 이중호 1.0 최초생성 + * + * + */ + + +function dirname(path) { + if (path.lastIndexOf("/") == -1) + return "./"; + return path.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '') + "/"; +} + +function getActiveScript() { + var d = document.getElementsByTagName("script"); + var path = dirname(d[d.length - 1].src); + delete d; + + var offset=path.indexOf(location.host)+location.host.length; + return path.substring(offset); +} + + +function getContextPath(){ + var offset=location.href.indexOf(location.host)+location.host.length; + var ctxPath=location.href.substring(offset, location.href.indexOf('/',offset+1)); + + if ((/^\/js/).test(getActiveScript())) { + return ""; + } + + return ctxPath; +} + +function loadScript(src, f) { + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement("script"); + script.src = src; + var done = false; + script.onload = script.onreadystatechange = function() { + // attach to both events for cross browser finish detection: + if ( !done && (!this.readyState || + this.readyState == "loaded" || this.readyState == "complete") ) { + done = true; + if (typeof f == 'function') f(); + // cleans up a little memory: + script.onload = script.onreadystatechange = null; + head.removeChild(script); + } + }; + head.appendChild(script); +} + +loadScript(getContextPath() + '/resources/js/showModalDialog.js'); + +/********************************************** + * 함수명 : fn_egov_ZipSearch + * 설 명 : 우편번호찾기 팝업 호출 - form별로 이름이 다른 경우 사용 + * 인 자 : 사용할 Form 객체, 우편번호(123456), 우편번호(123-456), 주소 + * 사용법 : fn_egov_ZipSearch(frm, sZip, vZip, sAddr) + * + * 수정일 수정자 수정내용 + * ------ ------ ------------------- + * 2009.03.30 이중호 신규작업 + * + */ +function fn_egov_ZipSearch(frm, sZip, vZip, sAddr) { + var retVal; + + var url = frm.zip_url.value; + var varParam = new Object(); + varParam.sZip = sZip.value; + + // IE + //var openParam = "dialogWidth:500px;dialogHeight:325px;scroll:no;status:no;center:yes;resizable:yes;"; + // FIREFOX + var openParam = "dialogWidth:550px;dialogHeight:365px;scroll:no;status:no;center:yes;resizable:yes;"; + + retVal = window.showModalDialog(url, varParam, openParam, "zipCallback"); + + otherParameters[0] = sZip; + otherParameters[1] = vZip; + otherParameters[2] = sAddr; + + if(retVal) { + sZip.value = retVal.sZip; + vZip.value = retVal.vZip; + sAddr.value = retVal.sAddr; + } +} + + +function zipCallback(retVal) { + if (retVal) { + otherParameters[0].value = retVal.sZip; + otherParameters[1].value = retVal.vZip; + otherParameters[2].value = retVal.sAddr; + } +} diff --git a/src/main/webapp/resources/js/framework/egov/showModalDialog.js b/src/main/webapp/resources/js/framework/egov/showModalDialog.js new file mode 100644 index 00000000..8f50d4ca --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/showModalDialog.js @@ -0,0 +1,81 @@ +/**************************************************************** + * + * 파일명 : showModalDialog.js + * 설 명 : showModalDialog 기능을 대체하는 JavaScript + * + * 수정일 수정자 Version Function 명 + * ------------ --------- ------------- ---------------------------- + * 2014.09.25 Vincent Han 1.0 최초생성 + * + */ +// fix for deprecated method in Chrome 37 + +this.otherParameters = new Array(); +this.showModalDialogSupported = true; + +this.callbackMethod = null; + +if (!window.showModalDialog) { + + showModalDialogSupported = false; + + window.showModalDialog = function(arg1, arg2, arg3, callback) { + + var w; + var h; + var resizable = "no"; + var scroll = "no"; + var status = "no"; + + // get the modal specs + var mdattrs = arg3.split(";"); + for (i = 0; i < mdattrs.length; i++) { + var mdattr = mdattrs[i].split(":"); + + var n = mdattr[0]; + var v = mdattr[1]; + if (n) { + n = n.trim().toLowerCase(); + } + if (v) { + v = v.trim().toLowerCase(); + } + + if (n == "dialogheight") { + h = v.replace("px", ""); + } else if (n == "dialogwidth") { + w = v.replace("px", ""); + } else if (n == "resizable") { + resizable = v; + } else if (n == "scroll") { + scroll = v; + } else if (n == "status") { + status = v; + } else { + // no-op + } + } + + var left = window.screenX + (window.outerWidth / 2) - (w / 2); + var top = window.screenY + (window.outerHeight / 2) - (h / 2); + var targetWin = window.open(arg1, "ShowModalDialog" + arg1, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + + dialogArguments = arg2; + + if (callback != null) { + callbackMethod = callback; + } else { + callbackMethod = null; + } + + targetWin.focus(); + }; + + window.getDialogArgumentsInner = function() { + return dialogArguments; + }; + + window.getCallbackMethodName = function() { + return callbackMethod; + } + } \ No newline at end of file diff --git a/src/main/webapp/resources/js/framework/egov/showModalDialogCallee.js b/src/main/webapp/resources/js/framework/egov/showModalDialogCallee.js new file mode 100644 index 00000000..d901a8f4 --- /dev/null +++ b/src/main/webapp/resources/js/framework/egov/showModalDialogCallee.js @@ -0,0 +1,68 @@ +/**************************************************************** + * + * 파일명 : showModalDialogCallee.js + * 설 명 : showModalDialog 기능을 대체하는 JavaScript + * + * 수정일 수정자 Version Function 명 + * ------------ --------- ------------- ---------------------------- + * 2014.09.25 Vincent Han 1.0 최초생성 + * + */ + +//---------------------- +//popped up page +//---------------------- +function getDialogArguments() { + if (!window.showModalDialog) { + if (opener != null && !opener.closed) { + try { + window.dialogArguments = opener.getDialogArgumentsInner(); + } catch (err) { + alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err); + } + } else if (parent.opener != null && !parent.opener.closed) { + try { + window.dialogArguments = parent.opener.getDialogArgumentsInner(); + parent.window.dialogArguments = window.dialogArguments; + } catch (err) { + alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err); + } + } else { + alert('업무 화면에 대한 변동이 있습니다. 다시 시도해 주십시오.'); + } + } +} + +function setReturnValue(obj) { + if (!window.showModalDialog) { + if (opener != null && !opener.closed) { + + var callbackMethod = opener.getCallbackMethodName(); + + try { + if (callbackMethod != null) { + opener[callbackMethod](obj); + } else { + opener.showModalDialogCallback(obj); + } + } catch (err) { + alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err); + } + } else if (parent.opener != null && !parent.opener.closed) { + + var callbackMethod = parent.opener.getCallbackMethodName(); + + try { + if (callbackMethod != null) { + parent.opener[callbackMethod](obj); + } else { + parent.opener.showModalDialogCallback(obj); + } + } catch (err) { + alert('팝업 처리 시 오류가 발생하였습니다. \n오류내용 : ' + err); + } + } else { + alert('업무 화면에 대한 변동이 있습니다. 다시 시도해 주십시오.'); + } + } +} \ No newline at end of file diff --git a/src/main/webapp/ubi4/check/datasource.jsp b/src/main/webapp/ubi4/check/datasource.jsp new file mode 100644 index 00000000..ce560123 --- /dev/null +++ b/src/main/webapp/ubi4/check/datasource.jsp @@ -0,0 +1,293 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %> +<% + request.setCharacterEncoding("UTF-8"); //2020.09.25. 박민규- 캐릭터셋 설정 + + String uri = request.getRequestURI(); + + String type = request.getParameter("type"); + String dsNm = request.getParameter("dsNm"); + + String driver = request.getParameter("driver"); + String url = request.getParameter("url"); + String user = request.getParameter("user"); + String password = request.getParameter("password"); + + String sql = request.getParameter("sql"); + + if( type == null || type.equalsIgnoreCase("null") ) type = ""; + if( dsNm == null || dsNm.equalsIgnoreCase("null") ) dsNm = ""; + + if( driver == null || driver.equalsIgnoreCase("null") ) driver = ""; + if( url == null || url.equalsIgnoreCase("null") ) url = ""; + if( user == null || user.equalsIgnoreCase("null") ) user = ""; + if( password == null || password.equalsIgnoreCase("null") ) password = ""; + + if( sql == null || sql.equalsIgnoreCase("null") ) sql = ""; + + String msg = ""; + + Connection conn = null; + PreparedStatement ps = null; + ResultSet rs = null; + +%> + + + + +DataSource 확인 + + + + +

    Check DataSource

    +
    + + + + + + + + + + + + + + + + + + + +
    WAS 유형 + + DataSource +
    + +
    +
    Driver + + URL + +
    User + + Password + +
    + + + + +
    + +
    +<% + if( type.equals("lookup") || type.equals("nonlookup") || type.equals("direct") ) { + + try { + + if( type.equals("lookup") ) { //lookup type (Tomcat, resin, Jrun ...) + + Context ctx = new InitialContext(); + Context env = (Context)ctx.lookup("java:comp/env"); + DataSource ds = (DataSource)env.lookup(dsNm); + conn = ds.getConnection(); + } + else if( type.equals("nonlookup") ) { //nonlookup type (Jeus, WebLogic, WebSphere ...) + + Context ctx = new InitialContext(); + DataSource ds = (DataSource)ctx.lookup(dsNm); + conn = ds.getConnection(); + } + else { //direct + + Class.forName(driver); + conn = DriverManager.getConnection(url, user, password); + } + + if( conn == null ) msg = "Connection Fail!!!"; + else msg = "Connection Success!!!"; + } + catch(Exception e) { + + msg = e.getMessage(); + } + finally { +%> + + + + + + + +
    Result(<%= type %>)
    <%= msg %>
    + +<% + if( conn != null ) { +%> +
    + + + + + + + +
    SQL
    + +
    + + + + +
    + +
    + +<% + if( sql != null && !sql.equals("") ) { +%> + +<% + try { + + ps = conn.prepareStatement(sql); + rs = ps.executeQuery(); + + ResultSetMetaData rsmd = rs.getMetaData(); + int cnt = rsmd.getColumnCount(); + + out.println(""); + for(int i = 0; i <= cnt; i++) { + + if( i == 0 ) out.println(""); + else out.println(""); + } + + int row_cnt = 0; + while( rs.next() ) { + + out.println(""); + for(int i = 0; i <= cnt; i++) { + + if( i == 0 ) out.println(""); + else out.println(""); + } + out.println(""); + } + + if( row_cnt == 0 ) { + + out.println(""); + } + } + catch(Exception ee) { + + out.println(""); + out.println(""); + } +%> + +
    No" + rsmd.getColumnLabel(i) + "
    " + ++row_cnt + "" + rs.getString(i) + "
    조회 내역이 없습니다.
    Error Message
    " + ee.getMessage() + "
    + +<% + } + if( rs != null ) try{ rs.close(); rs = null; } catch (Exception ex) {} + if( ps != null ) try{ ps.close(); ps = null; } catch (Exception ex) {} + if( conn != null ) try { conn.close(); conn = null; } catch(Exception e) {} + } + } + } +%> +
    + + + diff --git a/src/main/webapp/ubi4/check/fontinfo.jsp b/src/main/webapp/ubi4/check/fontinfo.jsp new file mode 100644 index 00000000..a2d0aa75 --- /dev/null +++ b/src/main/webapp/ubi4/check/fontinfo.jsp @@ -0,0 +1,24 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@ page import="java.awt.*" %> + + + + + +Font 정보 + + +<% + //System.setProperty("sun.java2d.fontpath", "font_location_path"); + // System.setProperty("java.awt.headless", "true"); + String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + for (int i=0; i"); + } +%> + + diff --git a/src/main/webapp/ubi4/check/hostname.jsp b/src/main/webapp/ubi4/check/hostname.jsp new file mode 100644 index 00000000..8f8f46b8 --- /dev/null +++ b/src/main/webapp/ubi4/check/hostname.jsp @@ -0,0 +1,19 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@ page import="java.net.*" %> + + + + + +Hostname 확인 + + + +

    Hostname Check

    + + Hostname : [<%= InetAddress.getLocalHost().getHostName() %>]
    + AppPath : [<%= getServletContext().getRealPath("/") %>] + + diff --git a/src/main/webapp/ubi4/check/jarcheck.jsp b/src/main/webapp/ubi4/check/jarcheck.jsp new file mode 100644 index 00000000..5fbee915 --- /dev/null +++ b/src/main/webapp/ubi4/check/jarcheck.jsp @@ -0,0 +1,100 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@ page import="java.util.jar.*, java.io.File" %> +<% + + String appPath = ""; + try { appPath = request.getRealPath("/"); } catch(Exception e) {} + if( appPath == null || appPath.equals("") ) + try { appPath = this.getClass().getResource("/").getPath(); } catch(Exception e) {} + + boolean checkFlag = false; + String jar = request.getParameter("jar"); + String version = ""; + + if( jar == null || jar.equalsIgnoreCase("null") || jar.equals("") ) { + + checkFlag = false; + jar = appPath + "WEB-INF" + File.separator + "lib" + File.separator + "UbiServer.jar"; + } + else { + + try { + + JarFile fJar = new JarFile(jar); + Manifest manifest = fJar.getManifest(); + Attributes attrs = manifest.getMainAttributes(); + version = attrs.getValue("version"); + } + catch(Exception e) { + + version = e.getMessage(); + } + finally { + checkFlag = true; + } + } + + +%> + + + + +Jar 버전 확인 + + + + + +

    Jar Version Check

    +
    + + + + + + + + + +<% + if( checkFlag ) { +%> + + + +<% + } +%> +
    App Home<%= appPath %>
    Jar File + +
    <%= version %>
    + + + + + +
    + +
    +
    + + diff --git a/src/main/webapp/ubi4/check/javaenv.jsp b/src/main/webapp/ubi4/check/javaenv.jsp new file mode 100644 index 00000000..7f2516dd --- /dev/null +++ b/src/main/webapp/ubi4/check/javaenv.jsp @@ -0,0 +1,26 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> + + + + +Java Environment 확인 + + +<% + java.util.Enumeration e = System.getProperties().propertyNames(); + while(e.hasMoreElements()) { + + String key = (String)e.nextElement(); + if( key.indexOf("class.path") != -1 || key.indexOf("loader") != -1 ) out.print("
  • " + key + " : " + System.getProperty(key) + "
  • "); + else out.print("
  • " + key + " : " + System.getProperty(key) + "
    "); + } +%> + + \ No newline at end of file diff --git a/src/main/webapp/ubi4/check/urlcheck.jsp b/src/main/webapp/ubi4/check/urlcheck.jsp new file mode 100644 index 00000000..72acb03d --- /dev/null +++ b/src/main/webapp/ubi4/check/urlcheck.jsp @@ -0,0 +1,134 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@ page import="java.net.*, java.io.*" %> + +<% + String NL = System.getProperty("line.separator"); + + String sReqType = request.getParameter("req_type"); + String sUrl = request.getParameter("url"); + + if( sReqType == null || sReqType.equalsIgnoreCase("null") ) { + + sReqType = "GET"; + } + if( sUrl == null || sUrl.equalsIgnoreCase("null") ) { + + sUrl = ""; + } + + StringBuffer contents = new StringBuffer(); + + if( !sUrl.equals("") ) { + + try { + + URL url = new URL(sUrl); + contents.append(">> URL(" + sUrl + ") Connecting...").append(NL); + HttpURLConnection uc = (HttpURLConnection)url.openConnection(); + + uc.setDoOutput(true); + uc.setDoInput(true); + uc.setUseCaches(false); + uc.setRequestMethod(sReqType); + + StringBuffer sb = new StringBuffer(); + + InputStream is = uc.getInputStream(); + contents.append(">> Reading Contents...").append(NL); + + BufferedReader in = new BufferedReader(new InputStreamReader(is)); + + int buffSize = 1024 * 8; + char[] buff; + int insize = 0; + while ((insize = in.read(buff = new char[buffSize], 0, buffSize)) != -1) { + + sb.append((new String(buff, 0, insize))); + } + String receivestr = sb.toString().trim(); + + contents.append(">> Contents").append(NL); + contents.append("------------------------------------------").append(NL); + contents.append(sb.toString().trim()).append(NL); + contents.append("------------------------------------------").append(NL); + contents.append(">> End").append(NL); + } + catch(FileNotFoundException fnfe){ + + contents.append(">> FileNotFoundException").append(NL); + contents.append("------------------------------------------").append(NL); + contents.append(fnfe.getMessage()).append(NL); + contents.append("------------------------------------------").append(NL); + contents.append(">> End").append(NL); + fnfe.printStackTrace(); + } + catch(Exception e){ + + contents.append(">> Exception").append(NL); + contents.append("------------------------------------------").append(NL); + contents.append(e.getMessage()).append(NL); + contents.append("------------------------------------------").append(NL); + contents.append(">> End").append(NL); + e.printStackTrace(); + } + } + +%> + + + + +URL 확인 + + + + +

    Check URL

    +
    + + + + + + + + + +
    REQ TYPE + +
    URL + +
    + + + + +
    + +
    +
    + + Result
    + + + \ No newline at end of file diff --git a/src/main/webapp/ubi4/js/images/button.jpg b/src/main/webapp/ubi4/js/images/button.jpg new file mode 100644 index 00000000..74f40953 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/button.jpg differ diff --git a/src/main/webapp/ubi4/js/images/downloading.gif b/src/main/webapp/ubi4/js/images/downloading.gif new file mode 100644 index 00000000..c2a31ee8 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/downloading.gif differ diff --git a/src/main/webapp/ubi4/js/images/login.png b/src/main/webapp/ubi4/js/images/login.png new file mode 100644 index 00000000..90b4668b Binary files /dev/null and b/src/main/webapp/ubi4/js/images/login.png differ diff --git a/src/main/webapp/ubi4/js/images/onbutton.jpg b/src/main/webapp/ubi4/js/images/onbutton.jpg new file mode 100644 index 00000000..3bdf0a60 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/onbutton.jpg differ diff --git a/src/main/webapp/ubi4/js/images/page_loading.gif b/src/main/webapp/ubi4/js/images/page_loading.gif new file mode 100644 index 00000000..715db96e Binary files /dev/null and b/src/main/webapp/ubi4/js/images/page_loading.gif differ diff --git a/src/main/webapp/ubi4/js/images/page_waiting.gif b/src/main/webapp/ubi4/js/images/page_waiting.gif new file mode 100644 index 00000000..9c874449 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/page_waiting.gif differ diff --git a/src/main/webapp/ubi4/js/images/printGuide_kr.html b/src/main/webapp/ubi4/js/images/printGuide_kr.html new file mode 100644 index 00000000..dfd88e28 --- /dev/null +++ b/src/main/webapp/ubi4/js/images/printGuide_kr.html @@ -0,0 +1,39 @@ + + + +HTML Print Guide + + + +

    IE에서 가로 양식 출력 절차

    +
    +
    1. 인쇄 범위 설정 후 확인 클릭
    +
    + +
    +
    2. 마우스 우측 - 팝업 메뉴에서 인쇄 미리 보기 클릭
    +
    + +
    +
    3. 미리 보기 결과 확인
    +
    + +
    +
    4. 가로로 용지 설정 변경
    +
    + +
    +
    5. 인쇄
    +
    + +
    +
    + + diff --git a/src/main/webapp/ubi4/js/images/printGuide_us.html b/src/main/webapp/ubi4/js/images/printGuide_us.html new file mode 100644 index 00000000..32f25bd3 --- /dev/null +++ b/src/main/webapp/ubi4/js/images/printGuide_us.html @@ -0,0 +1,39 @@ + + + +HTML Print Guide + + + +

    Procedure for printing the landscape form in IE

    +
    +
    1. Click OK after setting the print range
    +
    + +
    +
    2. Right click - click Print Preview in the pop-up menu
    +
    + +
    +
    3. Check the print preview results
    +
    + +
    +
    4. Change landscape paper settings
    +
    + +
    +
    5. Print
    +
    + +
    +
    + + diff --git a/src/main/webapp/ubi4/js/images/progress_bg_gray.png b/src/main/webapp/ubi4/js/images/progress_bg_gray.png new file mode 100644 index 00000000..1c7ebf47 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/progress_bg_gray.png differ diff --git a/src/main/webapp/ubi4/js/images/progress_center.png b/src/main/webapp/ubi4/js/images/progress_center.png new file mode 100644 index 00000000..46f0120d Binary files /dev/null and b/src/main/webapp/ubi4/js/images/progress_center.png differ diff --git a/src/main/webapp/ubi4/js/images/progress_left.png b/src/main/webapp/ubi4/js/images/progress_left.png new file mode 100644 index 00000000..f3a3cc1d Binary files /dev/null and b/src/main/webapp/ubi4/js/images/progress_left.png differ diff --git a/src/main/webapp/ubi4/js/images/progress_right.png b/src/main/webapp/ubi4/js/images/progress_right.png new file mode 100644 index 00000000..47b09f14 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/progress_right.png differ diff --git a/src/main/webapp/ubi4/js/images/sub_tab_on.jpg b/src/main/webapp/ubi4/js/images/sub_tab_on.jpg new file mode 100644 index 00000000..0460fc96 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/sub_tab_on.jpg differ diff --git a/src/main/webapp/ubi4/js/images/sub_tab_out.jpg b/src/main/webapp/ubi4/js/images/sub_tab_out.jpg new file mode 100644 index 00000000..bd5c26c5 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/sub_tab_out.jpg differ diff --git a/src/main/webapp/ubi4/js/images/tableft.gif b/src/main/webapp/ubi4/js/images/tableft.gif new file mode 100644 index 00000000..8b04c02f Binary files /dev/null and b/src/main/webapp/ubi4/js/images/tableft.gif differ diff --git a/src/main/webapp/ubi4/js/images/tabright.gif b/src/main/webapp/ubi4/js/images/tabright.gif new file mode 100644 index 00000000..ec83a0ec Binary files /dev/null and b/src/main/webapp/ubi4/js/images/tabright.gif differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/btnarrow.gif b/src/main/webapp/ubi4/js/images/toolbar/btnarrow.gif new file mode 100644 index 00000000..69d1d34c Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/btnarrow.gif differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/btnarrow_dis.gif b/src/main/webapp/ubi4/js/images/toolbar/btnarrow_dis.gif new file mode 100644 index 00000000..0aef49c8 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/btnarrow_dis.gif differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/cell.png b/src/main/webapp/ubi4/js/images/toolbar/cell.png new file mode 100644 index 00000000..8838b794 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/cell.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/cell_black.png b/src/main/webapp/ubi4/js/images/toolbar/cell_black.png new file mode 100644 index 00000000..6d037a25 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/cell_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/cell_d.png b/src/main/webapp/ubi4/js/images/toolbar/cell_d.png new file mode 100644 index 00000000..ffdae603 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/cell_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/cell_o.png b/src/main/webapp/ubi4/js/images/toolbar/cell_o.png new file mode 100644 index 00000000..f487e447 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/cell_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/default_form.png b/src/main/webapp/ubi4/js/images/toolbar/default_form.png new file mode 100644 index 00000000..4d62f353 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/default_form.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/default_form_d.png b/src/main/webapp/ubi4/js/images/toolbar/default_form_d.png new file mode 100644 index 00000000..ef922df7 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/default_form_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/default_form_o.png b/src/main/webapp/ubi4/js/images/toolbar/default_form_o.png new file mode 100644 index 00000000..8112415e Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/default_form_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/first.png b/src/main/webapp/ubi4/js/images/toolbar/first.png new file mode 100644 index 00000000..f71bc943 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/first.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/first_d.png b/src/main/webapp/ubi4/js/images/toolbar/first_d.png new file mode 100644 index 00000000..d1b75bb6 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/first_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/first_o.png b/src/main/webapp/ubi4/js/images/toolbar/first_o.png new file mode 100644 index 00000000..f2a1f207 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/first_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/html.png b/src/main/webapp/ubi4/js/images/toolbar/html.png new file mode 100644 index 00000000..adec598e Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/html.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/html_d.png b/src/main/webapp/ubi4/js/images/toolbar/html_d.png new file mode 100644 index 00000000..f9f1e255 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/html_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/html_o.png b/src/main/webapp/ubi4/js/images/toolbar/html_o.png new file mode 100644 index 00000000..445b4f74 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/html_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/hwp.png b/src/main/webapp/ubi4/js/images/toolbar/hwp.png new file mode 100644 index 00000000..f90ce116 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/hwp.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/hwp_black.png b/src/main/webapp/ubi4/js/images/toolbar/hwp_black.png new file mode 100644 index 00000000..c2df0cc4 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/hwp_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/hwp_d.png b/src/main/webapp/ubi4/js/images/toolbar/hwp_d.png new file mode 100644 index 00000000..b4cfdee4 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/hwp_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/hwp_o.png b/src/main/webapp/ubi4/js/images/toolbar/hwp_o.png new file mode 100644 index 00000000..8cd6c77d Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/hwp_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/image.png b/src/main/webapp/ubi4/js/images/toolbar/image.png new file mode 100644 index 00000000..8b0ed4ef Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/image.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/image_d.png b/src/main/webapp/ubi4/js/images/toolbar/image_d.png new file mode 100644 index 00000000..40fa929b Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/image_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/image_o.png b/src/main/webapp/ubi4/js/images/toolbar/image_o.png new file mode 100644 index 00000000..c8cb4926 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/image_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/info.png b/src/main/webapp/ubi4/js/images/toolbar/info.png new file mode 100644 index 00000000..32207385 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/info.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/info_d.png b/src/main/webapp/ubi4/js/images/toolbar/info_d.png new file mode 100644 index 00000000..22b1f4bb Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/info_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/info_o.png b/src/main/webapp/ubi4/js/images/toolbar/info_o.png new file mode 100644 index 00000000..32636334 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/info_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/last.png b/src/main/webapp/ubi4/js/images/toolbar/last.png new file mode 100644 index 00000000..8ff7359a Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/last.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/last_d.png b/src/main/webapp/ubi4/js/images/toolbar/last_d.png new file mode 100644 index 00000000..65df5550 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/last_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/last_o.png b/src/main/webapp/ubi4/js/images/toolbar/last_o.png new file mode 100644 index 00000000..de41bbe2 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/last_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/left_arrow.gif b/src/main/webapp/ubi4/js/images/toolbar/left_arrow.gif new file mode 100644 index 00000000..e0f5e146 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/left_arrow.gif differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/next.png b/src/main/webapp/ubi4/js/images/toolbar/next.png new file mode 100644 index 00000000..eb72e3a7 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/next.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/next_d.png b/src/main/webapp/ubi4/js/images/toolbar/next_d.png new file mode 100644 index 00000000..d02a730c Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/next_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/next_o.png b/src/main/webapp/ubi4/js/images/toolbar/next_o.png new file mode 100644 index 00000000..308861ce Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/next_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/pdf.png b/src/main/webapp/ubi4/js/images/toolbar/pdf.png new file mode 100644 index 00000000..c2c75439 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/pdf.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/pdf_black.png b/src/main/webapp/ubi4/js/images/toolbar/pdf_black.png new file mode 100644 index 00000000..9851c979 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/pdf_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/pdf_d.png b/src/main/webapp/ubi4/js/images/toolbar/pdf_d.png new file mode 100644 index 00000000..b2f076f6 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/pdf_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/pdf_o.png b/src/main/webapp/ubi4/js/images/toolbar/pdf_o.png new file mode 100644 index 00000000..be47c247 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/pdf_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/plugin.png b/src/main/webapp/ubi4/js/images/toolbar/plugin.png new file mode 100644 index 00000000..f4545239 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/plugin.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/plugin_d.png b/src/main/webapp/ubi4/js/images/toolbar/plugin_d.png new file mode 100644 index 00000000..30f28eee Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/plugin_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/plugin_o.png b/src/main/webapp/ubi4/js/images/toolbar/plugin_o.png new file mode 100644 index 00000000..cb387e72 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/plugin_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ppt.png b/src/main/webapp/ubi4/js/images/toolbar/ppt.png new file mode 100644 index 00000000..31d72210 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ppt.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ppt_black.png b/src/main/webapp/ubi4/js/images/toolbar/ppt_black.png new file mode 100644 index 00000000..25e99d81 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ppt_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ppt_d.png b/src/main/webapp/ubi4/js/images/toolbar/ppt_d.png new file mode 100644 index 00000000..6637f2be Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ppt_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ppt_o.png b/src/main/webapp/ubi4/js/images/toolbar/ppt_o.png new file mode 100644 index 00000000..ec183cb5 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ppt_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/previous.png b/src/main/webapp/ubi4/js/images/toolbar/previous.png new file mode 100644 index 00000000..986ccf23 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/previous.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/previous_d.png b/src/main/webapp/ubi4/js/images/toolbar/previous_d.png new file mode 100644 index 00000000..d4512395 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/previous_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/previous_o.png b/src/main/webapp/ubi4/js/images/toolbar/previous_o.png new file mode 100644 index 00000000..5ef95859 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/previous_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/print.png b/src/main/webapp/ubi4/js/images/toolbar/print.png new file mode 100644 index 00000000..99bfece1 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/print.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/print_d.png b/src/main/webapp/ubi4/js/images/toolbar/print_d.png new file mode 100644 index 00000000..adb550f3 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/print_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/print_form.png b/src/main/webapp/ubi4/js/images/toolbar/print_form.png new file mode 100644 index 00000000..cae30677 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/print_form.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/print_form_d.png b/src/main/webapp/ubi4/js/images/toolbar/print_form_d.png new file mode 100644 index 00000000..72c6f474 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/print_form_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/print_form_o.png b/src/main/webapp/ubi4/js/images/toolbar/print_form_o.png new file mode 100644 index 00000000..2a6233f0 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/print_form_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/print_o.png b/src/main/webapp/ubi4/js/images/toolbar/print_o.png new file mode 100644 index 00000000..925bd0a8 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/print_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/printset.png b/src/main/webapp/ubi4/js/images/toolbar/printset.png new file mode 100644 index 00000000..cf171a95 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/printset.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/printset_d.png b/src/main/webapp/ubi4/js/images/toolbar/printset_d.png new file mode 100644 index 00000000..f2b968ec Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/printset_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/printset_o.png b/src/main/webapp/ubi4/js/images/toolbar/printset_o.png new file mode 100644 index 00000000..e67f8545 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/printset_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/refresh.png b/src/main/webapp/ubi4/js/images/toolbar/refresh.png new file mode 100644 index 00000000..f5e97094 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/refresh.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/refresh_d.png b/src/main/webapp/ubi4/js/images/toolbar/refresh_d.png new file mode 100644 index 00000000..3d6cac05 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/refresh_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/refresh_o.png b/src/main/webapp/ubi4/js/images/toolbar/refresh_o.png new file mode 100644 index 00000000..d9e90c50 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/refresh_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/right_arrow.gif b/src/main/webapp/ubi4/js/images/toolbar/right_arrow.gif new file mode 100644 index 00000000..949433ce Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/right_arrow.gif differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/rtf.png b/src/main/webapp/ubi4/js/images/toolbar/rtf.png new file mode 100644 index 00000000..7a9dbb49 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/rtf.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/rtf_black.png b/src/main/webapp/ubi4/js/images/toolbar/rtf_black.png new file mode 100644 index 00000000..2e180f8c Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/rtf_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/rtf_d.png b/src/main/webapp/ubi4/js/images/toolbar/rtf_d.png new file mode 100644 index 00000000..1c751084 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/rtf_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/rtf_o.png b/src/main/webapp/ubi4/js/images/toolbar/rtf_o.png new file mode 100644 index 00000000..5fd9b2e0 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/rtf_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/save.png b/src/main/webapp/ubi4/js/images/toolbar/save.png new file mode 100644 index 00000000..22370965 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/save.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/save_d.png b/src/main/webapp/ubi4/js/images/toolbar/save_d.png new file mode 100644 index 00000000..df3b3c51 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/save_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/save_o.png b/src/main/webapp/ubi4/js/images/toolbar/save_o.png new file mode 100644 index 00000000..c86500ce Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/save_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/select_arr.gif b/src/main/webapp/ubi4/js/images/toolbar/select_arr.gif new file mode 100644 index 00000000..c96c2ac8 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/select_arr.gif differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/txt_2.png b/src/main/webapp/ubi4/js/images/toolbar/txt_2.png new file mode 100644 index 00000000..440a2ea8 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/txt_2.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/txt_2_black.png b/src/main/webapp/ubi4/js/images/toolbar/txt_2_black.png new file mode 100644 index 00000000..86c93788 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/txt_2_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/txt_2_d.png b/src/main/webapp/ubi4/js/images/toolbar/txt_2_d.png new file mode 100644 index 00000000..919cd318 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/txt_2_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/txt_2_press.png b/src/main/webapp/ubi4/js/images/toolbar/txt_2_press.png new file mode 100644 index 00000000..cef60cc6 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/txt_2_press.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer.png b/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer.png new file mode 100644 index 00000000..252f5a21 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer_d.png b/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer_d.png new file mode 100644 index 00000000..e54f15a0 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer_o.png b/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer_o.png new file mode 100644 index 00000000..7d11ab2a Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/ubi_viewer_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/xls.png b/src/main/webapp/ubi4/js/images/toolbar/xls.png new file mode 100644 index 00000000..7e53cfb7 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/xls.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/xls_black.png b/src/main/webapp/ubi4/js/images/toolbar/xls_black.png new file mode 100644 index 00000000..3a2a2e33 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/xls_black.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/xls_d.png b/src/main/webapp/ubi4/js/images/toolbar/xls_d.png new file mode 100644 index 00000000..00393a0e Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/xls_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/xls_o.png b/src/main/webapp/ubi4/js/images/toolbar/xls_o.png new file mode 100644 index 00000000..64b58107 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/xls_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/zoomin.png b/src/main/webapp/ubi4/js/images/toolbar/zoomin.png new file mode 100644 index 00000000..4474fef8 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/zoomin.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/zoomin_d.png b/src/main/webapp/ubi4/js/images/toolbar/zoomin_d.png new file mode 100644 index 00000000..8b0d220f Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/zoomin_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/zoomin_o.png b/src/main/webapp/ubi4/js/images/toolbar/zoomin_o.png new file mode 100644 index 00000000..ff01134d Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/zoomin_o.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/zoomout.png b/src/main/webapp/ubi4/js/images/toolbar/zoomout.png new file mode 100644 index 00000000..515b1731 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/zoomout.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/zoomout_d.png b/src/main/webapp/ubi4/js/images/toolbar/zoomout_d.png new file mode 100644 index 00000000..cb9a21c6 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/zoomout_d.png differ diff --git a/src/main/webapp/ubi4/js/images/toolbar/zoomout_o.png b/src/main/webapp/ubi4/js/images/toolbar/zoomout_o.png new file mode 100644 index 00000000..2ea94cd2 Binary files /dev/null and b/src/main/webapp/ubi4/js/images/toolbar/zoomout_o.png differ diff --git a/src/main/webapp/ubi4/js/msg.js b/src/main/webapp/ubi4/js/msg.js new file mode 100644 index 00000000..0194afe8 --- /dev/null +++ b/src/main/webapp/ubi4/js/msg.js @@ -0,0 +1,407 @@ +var _ubi_msg = { + +//================================================================================ +//Korean Message +//================================================================================ +'korean':{ + + "Menu_SAVE": "저장", + "Menu_PRINT": "인쇄", + "Menu_PRINTSET": "인쇄설정", + "Menu_PDF": "pdf파일", + "Menu_EXCEL": "xls파일", + "Menu_RTF": "rtf파일", + "Menu_HWP": "hwp파일", + "Menu_HML": "hml파일", + "Menu_PPTX": "pptx파일", + "Menu_DOCX": "docx파일", + "Menu_EXCEL_TYPE1": "인쇄모양", + "Menu_EXCEL_TYPE2": "기본모양", + "Menu_PRINT_PDF": "pdf인쇄", + "Menu_PRINT_HTML": "기본인쇄", + + "StreamingMsg": "현재 스트리밍 리포트를 생성 중입니다.", + "StreamingMsg2": "페이지 생성 중...", + "StreamingMsg3": "페이지 중 ", + "CompleteMsg": "스트리밍 리포트 생성이 완료되었습니다.", + "CreateErrMsg": "리포트가 생성되지 않았습니다.", + "TotalpageErrMsg": "전체 페이지 정보를 가져오는 중 오류가 발생하였습니다.", + "UnknownErrMsg": "알 수 없는 오류가 발생하였습니다.", + "ErrMsg": "오류가 발생하였습니다.", + + "ExportMsg" : "파일을 생성 중입니다.", + "ExportMsg2" : "전용 뷰어 모드에서 지원하지 않는 저장 타입입니다.", + "StatusWaitMsg" : "잠시만 기다려 주세요.", + + "PrintDlgTitle": "인쇄 범위를 설정합니다.", + "PrintDlgRange": "페이지 범위", + "PrintDlgAll": "모두", + "PrintDlgCurrent": "현재 페이지", + "PrintDlgFromTo": "페이지 지정", + "PrintDlgFrom": "부터", + "PrintDlgTo": "까지", + "PrintDlgMent": "※ 인쇄량이 많아서 부분인쇄만 가능합니다.", + "PrintDlgMaxMent" : "최대 페이지 수 : ", + "PrintDlgHMent": "Internet Explorer에서 가로 양식은 인쇄 미리 보기", + "PrintDlgHMent2": "옵션에서 용지 방향을 변경하여 인쇄하세요.", + "PrintDlgLink": "자세히 보기", + + "PrintDlgHTMLRangeErr": "HTML인쇄 허용 페이지 범위를 벗어났습니다.", + "PrintDlgRangeErr": "페이지 범위를 벗어났습니다.", + "PrintDlgEnter": "\n다시 입력하여 주십시오.", + + "Button_OK": "확인", + "Button_Cancel": "취소", + + "PdfCheckMsg9": "Adobe Reader의 버전이 설치되어있지 않거나, 9 버전 이하의 오래된 버전만 설치되어 있습니다.", + "PdfCheckMsg6": "Adobe Reader의 버전이 설치되어있지 않거나, 6 버전 이하의 오래된 버전만 설치되어 있습니다.", + "PdfGuideMsg": "어도비 홈페이지에서 최신 Adobe Reader를 설치하시기 바랍니다.", + + "PdfDownloadMsg" : "현재 사용 중인 ^browser^ 브라우저는 PDF 파일이 다운로드됩니다.
    인쇄를 원하는 경우 저장 버튼을 이용하여 파일 저장 후 인쇄할 수 있습니다.", + "PdfInstallMsg1" : "현재 브라우저에서 Adobe Reader를 찾을 수 없습니다.", + "PdfInstallMsg2" : "현재 설치된 Adobe Reader의 버전이 낮거나 정상적으로 설치되지 않았습니다.", + "PdfInstallMsg3" : "정상적인 인쇄를 위해서는 Adobe Reader 10 버전 이상을 설치해야 합니다.
    브라우저 종료 후 아래 사이트를 통해서 설치하기 바랍니다.

    https://get.adobe.com/kr/reader

    설치 없이 인쇄하기를 원한다면 저장 버튼을 이용하여 파일 저장 후 인쇄할 수 있습니다.", + "SaveFileMsg1" : "  ※ 별도의 설치 없이 파일을 PC로 다운로드 합니다.", + "SaveFileMsg2" : "  ※ 페이지 수가 많은 경우 일반 저장보다 빠르게 저장이 가능합니다.
      프로그램 설치가 필요하며 해당 프로그램이 설치되어 있지 않은 경우
      설치 작업이 진행됩니다.", + "SaveDialogTitle" : "파일 저장", + "SaveDialogType" : "저장 방식", + "SaveDialogFileType" : "파일 유형", + "SaveDialogDefault" : "일반 저장", + "SaveDialogUbiViewer" : "전용 뷰어 저장", + "PrintPDFTitle" : "PDF 인쇄 안내", + "PrintHTMLTitle" : "HTML 인쇄 안내", + "PrintHTMLMsg_Edge" : "인쇄하기 전 ‘머리글 및 바닥글’에서 ‘끔’을 선택하고 인쇄 버튼을 누르면 됩니다.", + "PrintHTMLMsg_FF" : "인쇄하기 전 브라우저 설정이 필요합니다.
    브라우저의 [파일] 메뉴 > 페이지 설정 > 여백 및 머리글/바닥글에서 머리글, 바닥글을 ‘공백’으로 설정한 후 인쇄하기 바랍니다.", + "PrintHTMLMsg_Chrome" : "인쇄하기 전 ‘설정 더보기’에서 ‘머리글과 바닥글’ 옵션을 해제한 후 인쇄 버튼을 누르면 됩니다.", + "PrintHTMLMsg_Opera" : "인쇄하기 전 ‘추가 옵션’에서 ‘머리글과 바닥글’ 옵션을 해제한 후 인쇄 버튼을 누르면 됩니다.", + "PrintHTMLMsg_IE" : "인쇄하기 전 브라우저 설정이 필요합니다.
    브라우저의 [파일] 메뉴 > 페이지 설정 > 머리글/바닥글을 ‘비어 있음’으로 설정한 후 인쇄하기 바랍니다.", + "PrintHTMLMsg_IEObj" : "인쇄하기 전 '페이지 설정(Alt + U)'에서
    머리글 및 바닥글 ‘비어 있음’을 선택 후 인쇄하기 바랍니다.", + + "ExportOption" : "저장 옵션", + "ExportFormat" : "포맷", + "TiffOption" : "Tiff 압축 방식", + "TiffPageOption" : "페이지별 Tiff 이미지 생성", + "ZipFileMsg" : "※ 이미지는 압축 파일(*.zip)로 다운로드됩니다.", + +'END_OF_LINE':'============================================================'}, + + +//================================================================================ +//English Message +//================================================================================ +'english':{ + "Menu_SAVE": "Save", + "Menu_PRINT": "Print", + + "StreamingMsg": "Generating streaming report.", + "StreamingMsg2": " page is generating...", + "CompleteMsg": "Streaming report generation is complete.", + "CreateErrMsg": "The report was not generated.", + "TotalpageErrMsg": "Total page request error.", + "UnknownErrMsg": "An unknown error occurred.", + "UnknownErrMsg": "An unknown error occurred.", + "ErrMsg": "An error occurred.", + + "ExportMsg" : "Creating file.", + "ExportMsg2" : "This export type is not supported in a UbiViewer.", + "StatusWaitMsg" : "Please wait.", + + "PrintDlgTitle": "Input the page to print", + "PrintDlgRange": "Page range", + "PrintDlgAll": "all pages", + "PrintDlgCurrent": "current page", + "PrintDlgFromTo": "pages to print", + "PrintDlgFrom": "~", + "PrintDlgTo": ".", + "PrintDlgMent": "※ You can print only a part page.", + "PrintDlgMaxMent" : "Maximum pages : ", + "PrintDlgHMent": "Horizontal from in Internet Explorer print preview", + "PrintDlgHMent2": "Print by changing the orientation of the paper in the options.", + "PrintDlgLink": "Read More", + + "PrintDlgHTMLRangeErr": "Out of HTML print range.", + "PrintDlgRangeErr": "Out of page range.", + "PrintDlgEnter": "\nPlease enter again.", + + "Button_OK": "Ok", + "Button_Cancel": "Cancel", + + "PdfCheckMsg9": "Adobe Reader not installed or it is a lower version.", + "PdfCheckMsg6": "Adobe Reader not installed or it is a lower version.", + "PdfGuideMsg": "You can download from Adobe website.", + + "PdfDownloadMsg" : "Your current browser(^browser^) will download the PDF file.
    If you want to print, save the file using the Save button, and then print.", + "PdfInstallMsg1" : "Could not find Adobe Reader in the current browser.", + "PdfInstallMsg2" : "The version of Adobe Reader currently installed is low or not installed correctly.", + "PdfInstallMsg3" : "You must install Adobe Reader version 10 or later to print.
    Please close the browser and install via the website below.
    https://get.adobe.com/kr/reader
    If you want to print without installation, save the file using the Save button and then print.", + "SaveFileMsg1" : "  ※ Download the file to your PC without installation.", + "SaveFileMsg2" : "  ※ Save files using the UbiViewer module.
      If the UbiViewer module is not installed, the installation will proceed.", + "SaveDialogTitle" : "Save file", + "SaveDialogType" : "Save Types", + "SaveDialogFileType" : "File Types", + "SaveDialogDefault" : "Default", + "SaveDialogUbiViewer" : "Using UbiViewer", + "PrintPDFTitle" : "PDF Print Guide", + "PrintHTMLTitle" : "HTML Print Guide", + "PrintHTMLMsg_Edge" : "Set 'Headers & Footers' to 'Off' before printing.", + "PrintHTMLMsg_FF" : "You need browser settings before printing.
    Go to [File] menu > Page setup > Margins & Header/Footer tab. And set 'Headers & Footers' to '-blank-'.", + "PrintHTMLMsg_Chrome" : "Please click 'More settings' and uncheck the 'Headers and footers' option before printing and press the Print button.", + "PrintHTMLMsg_Opera" : "Please click 'More options' and uncheck the 'Headers and footers' option before printing and press the Print button.", + "PrintHTMLMsg_IE" : "You need browser settings before printing.
    Go to [File] menu > 'Page setup'. And set 'Headers/Footers' to 'Empty'.", + "PrintHTMLMsg_IEObj" : "Click the 'Page setup' button before printing. And set 'Headers and footers' to 'Empty'.", + + "ExportOption" : "export options", + "ExportFormat" : "Format", + "TiffOption" : "TIFF Compression type", + "TiffPageOption" : "Create Tiff Image by page", + "ZipFileMsg" : "※ The image is downloaded to a zip file.", + +'END_OF_LINE':'============================================================'}, + + +//================================================================================ +//Spanish Message +//================================================================================ +'spanish':{ + + "Menu_SAVE": "Salvar", + "Menu_PRINT": "Impresion", + + "StreamingMsg": "informe de streaming se esta generando ...", + "StreamingMsg2": "pagina esta generando...", + "CompleteMsg": "La generacion de informes de streaming esta completa.", + "CreateErrMsg": "El informe no fue generado.", + "TotalpageErrMsg": "Total page request error.", + "UnknownErrMsg": "Un error desconocido ocurrio.", + "ErrMsg": "Ha ocurrido un error.", + + "ExportMsg" : "Creando archivo.", + "ExportMsg2" : "Este tipo de exportacion no es compatible con UbiViewer.", + "StatusWaitMsg" : "Por favor espera.", + + "PrintDlgTitle": "Ingrese la pagina para imprimir", + "PrintDlgRange": "Rango de paginas", + "PrintDlgAll": "todas las paginas", + "PrintDlgCurrent": "pagina actual", + "PrintDlgFromTo": "paginas para imprimir", + "PrintDlgFrom": "~", + "PrintDlgTo": ".", + "PrintDlgMent": "※ Puedes imprimir solo parte de la pagina.", + "PrintDlgMaxMent" : "Paginas maximas : ", + "PrintDlgHMent": "Vista preliminar de impresion horizontal desde Internet Explorer", + "PrintDlgHMent2": "Imprime cambiando la orientacion del papel en las opciones.", + "PrintDlgLink": "Lee mas", + + "PrintDlgHTMLRangeErr": "Fuera del rango de impresion HTML.", + "PrintDlgRangeErr": "Fuera de rango de pagina.", + "PrintDlgEnter": "\nPor favor ingrese nuevamente.", + + "Button_OK": "De acuerdo", + "Button_Cancel": "Cancelar", + + "PdfCheckMsg9": "Adobe Reader no esta instalado o es una version inferior.", + "PdfCheckMsg6": "Adobe Reader no esta instalado o es una version inferior.", + "PdfGuideMsg": "Puede descargar desde el sitio web de Adobe.", + + "PdfDownloadMsg" : "Su navegador actual (^ browser ^) descargara el archivo PDF .
    Si desea imprimir, guarde el archivo con el boton Guardar y luego imprima.", + "PdfInstallMsg1" : " No se pudo encontrar Adobe Reader en el navegador actual. ", + "PdfInstallMsg2" : " La version de Adobe Reader actualmente instalada es baja o no esta instalada correctamente. ", + "PdfInstallMsg3" : "Debe instalar Adobe Reader version 10 o posterior para imprimir.
    Cierre el navegador e instalelo a traves del siguiente sitio web.https://get.adobe.com/kr/reader
    Si quieres imprimir sin instalar Guardar boton y luego imprimir.", + "SaveFileMsg1" : "  ※ Descarga el archivo a tu PC sin necesidad de instalacion.", + "SaveFileMsg2" : " ※ Guarde los archivos utilizando el modulo UbiViewer.
      Si el modulo UbiViewer no esta instalado, la instalacion continuara.", + "SaveDialogTitle" : "Guardar el archivo", + "SaveDialogType" : "tipos de guardar", + "SaveDialogFileType" : "Tipos de archivo", + "SaveDialogDefault" : "Almacenamiento general", + "SaveDialogUbiViewer" : "Usando UbiViewer", + "PrintPDFTitle" : "Guia de impresion en PDF", + "PrintHTMLTitle" : "Guia de impresion en HTML", + "PrintHTMLMsg_Edge" : "Configure 'Encabezados y pies de pagina' en 'Desactivado' antes de imprimir.", + "PrintHTMLMsg_FF" : "Necesita la configuracion del navegador antes de imprimir.
    El menu [Archivo] del navegador > Configuracion de pagina > Margenes y pestana Encabezado / Pie de pagina. Y establezca 'Encabezados y pies de pagina' en '-blank-'.", + "PrintHTMLMsg_Chrome" : "Haga clic en 'Mas configuraciones' y desmarque la opcion 'Encabezados y pies de pagina' antes de imprimir y presione el boton Imprimir.", + "PrintHTMLMsg_Opera" : "Haga clic en 'Mas opciones' y desmarque la opcion 'Encabezados y pies de pagina' antes de imprimir y presione el boton Imprimir.", + "PrintHTMLMsg_IE" : "Necesita la configuracion del navegador antes de imprimir.
    El menu [Archivo] del navegador > Configuracion de pagina > Margenes y pestana Encabezado / Pie de pagina. Y establezca 'Encabezados y pies de pagina' en '-blank-'.", + "PrintHTMLMsg_IEObj" : "Haga clic en el boton 'Configurar pagina(Alt + U)' antes de imprimir. Y establezca 'Encabezados y pies de pagina' en 'Vaciar'.", + + "ExportOption" : "Guardar opciones", + "ExportFormat" : "Formato", + "TiffOption" : "Tipo de compresion TIFF", + "TiffPageOption" : "Crear Tiff imagen por pagina", + "ZipFileMsg" : "※ La imagen se descarga en un archivo zip.", + +'END_OF_LINE':'============================================================'}, + + + +//================================================================================ +//Arabic Message +//================================================================================ +'arabic':{ + "StreamingMsg": "Generating streaming report.", + "StreamingMsg2": " page is generating...", + "CompleteMsg": "Streaming report generation is complete.", + "CreateErrMsg": "The report was not generated.", + "TotalpageErrMsg": "Total page request error.", + "UnknownErrMsg": "An unknown error occurred.", + "UnknownErrMsg": "An unknown error occurred.", + "ErrMsg": "An error occurred.", + + "ExportMsg" : "Creating file.", + "ExportMsg2" : "This export type is not supported in a UbiViewer.", + "StatusWaitMsg" : "Please wait.", + + "PrintDlgTitle": "????? ???? ???????", + "PrintDlgRange": "???? ??????", + "PrintDlgAll": "????", + "PrintDlgCurrent": "?????? ???????", + "PrintDlgFromTo": "????? ???????", + "PrintDlgFrom": "~", + "PrintDlgTo": ".", + "PrintDlgMent": "※ You can print only a part page.", + "PrintDlgMaxMent" : "Maximum pages : ", + "PrintDlgHMent": "Horizontal from in Internet Explorer print preview", + "PrintDlgHMent2": "Print by changing the orientation of the paper in the options", + "PrintDlgLink": "Read More", + + "PrintDlgHTMLRangeErr": "Out of HTML print range.", + "PrintDlgRangeErr": "Out of page range.", + "PrintDlgEnter": "\nPlease enter again.", + + "Button_OK": "Ok", + "Button_Cancel": "Cancel", + + "PdfCheckMsg9": "Adobe Reader not installed or it is a lower version.", + "PdfCheckMsg6": "Adobe Reader not installed or it is a lower version.", + "PdfGuideMsg": "You can download from Adobe website.", + + "PdfDownloadMsg" : "Your current browser(^browser^) will download the PDF file.
    If you want to print, save the file using the Save button, and then print.", + "PdfInstallMsg1" : "Could not find Adobe Reader in the current browser.", + "PdfInstallMsg2" : "The version of Adobe Reader currently installed is low or not installed correctly.", + "PdfInstallMsg3" : "You must install Adobe Reader version 10 or later to print.
    Please close the browser and install via the website below.
    https://get.adobe.com/kr/reader
    If you want to print without installation, save the file using the Save button and then print.", + "SaveFileMsg1" : "  ※ Download the file to your PC without installation.", + "SaveFileMsg2" : "  ※ Save files using the UbiViewer module.
      If the UbiViewer module is not installed, the installation will proceed.", + + "SaveDialogTitle" : "Save file", + "SaveDialogType" : "Save Types", + "SaveDialogFileType" : "File Types", + "SaveDialogDefault" : "Default", + "SaveDialogUbiViewer" : "Using UbiViewer", + "PrintPDFTitle" : "PDF Print Guide", + "PrintHTMLTitle" : "HTML Print Guide", + "PrintHTMLMsg_Edge" : "Set 'Headers & Footers' to 'Off' before printing.", + "PrintHTMLMsg_FF" : "You need browser settings before printing.
    Go to [File] menu > Page setup > Margins & Header/Footer tab. And set 'Headers & Footers' to '-blank-'.", + "PrintHTMLMsg_Chrome" : "Please click 'More settings' and uncheck the 'Headers and footers' option before printing and press the Print button.", + "PrintHTMLMsg_Opera" : "Please click 'More options' and uncheck the 'Headers and footers' option before printing and press the Print button.", + "PrintHTMLMsg_IE" : "You need browser settings before printing.
    Go to [File] menu > 'Page setup'. And set 'Headers/Footers' to 'Empty'.", + "PrintHTMLMsg_IEObj" : "Click the 'Page setup' button before printing. And set 'Headers and footers' to 'Empty'.", + + "ExportOption" : "export options", + "ExportFormat" : "Format", + "TiffOption" : "TIFF Compression type", + "TiffPageOption" : "Create Tiff Image by page", + "ZipFileMsg" : "※ The image is downloaded to a zip file.", + +'END_OF_LINE':'============================================================'}, + + +'END_OF_MESSAGE':''}; + + + +/** + * 웹소켓/전용 뷰어 관련 메시지 + */ +var _ubinonax_msg = { + + 'korean' : { + "BTN_OK" : "확인", + "BTN_Cancel" : "취소", + "BTN_Download" : "다운로드", + + "HelpSafari" : "ㆍSafari 브라우저에서는 설치 후에 브라우저를 닫았다가 다시 접속하시기 바랍니다.
    ", + "HelpFireFox" : "ㆍFireFox 브라우저에서 실행 권한을 요구하는 경우 반드시 [허가]→[허가하고 기억] 버튼을 차례대로 눌러주십시오.
    ㆍ설치가 안된다면 플러그인 차단 여부를 확인해 주십시오.
    ", + "HelpChrome" : "ㆍChrome 브라우저에서 실행 권한이 필요하다고 요구하는 경우 반드시 [이 사이트에서 항상 실행] 버튼을 눌러주십시오.
    ㆍ설치가 안된다면 플러그인 차단 여부를 확인해 주십시오.
    ", + "HelpOpera" : "ㆍOpera 브라우저입니다. 다운로드 받은 파일을 직접 실행하여 주십시오.
    ", + "HelpIE" : "ㆍIE 브라우저에서 파일 다운로드가 차단된 경우 [다운로드] 로 실행하여 주십시오.
    ", + + "Update_Title" : "프로그램 업데이트 안내 ", + "Install_Title" : "프로그램 설치 안내 ", + "Guide_Title" : "프로그램 안내", + + "Update_Subject" : "UbiViewer 인쇄를 위해 프로그램 업데이트가 필요합니다.", + "Install_Subject" : "UbiViewer 인쇄를 위해 프로그램 설치가 필요합니다.", + "Update_Contents" : "ㆍ 파일 다운로드 클릭
    ㆍ 저장 후 파일 실행 및 설치(브라우저 자동 종료)
    ㆍ 브라우저 재시작 후 인쇄/저장

    ※ 설치 안내 메시지가 계속 나오는 경우 설치 파일에서 마우스 우 클릭 후
       관리자 권한으로 실행
    ", + "Install_Contents" : "ㆍ 파일 다운로드 클릭
    ㆍ 저장 후 파일 실행 및 설치
    ㆍ 브라우저 새로고침(F5) 후 인쇄/저장

    ※ 설치 안내 메시지가 계속 나오는 경우 설치 파일에서 마우스 우 클릭 후
       관리자 권한으로 실행
    ", + + "64_Subject" : "64비트 브라우저 미지원 안내", + "64_Contents" : "ㆍ 이 브라우저는 64비트 브라우저 입니다.
    ㆍ 32비트 브라우저를 사용하여 주십시오.

    ", + "Plugin_Subject" : "플러그인 미지원 브라우저", + "Plugin_Contents" : "ㆍ 해당 브라우저는 플러그인을 지원하지 않습니다.
    ㆍ 다른 브라우저를 사용하시기 바랍니다.
    ㆍ 미지원 브라우저 : Edge, Chrome 45버전 이상, Opera 33버전 이상.", + "WS_Subject" : "웹소켓 미지원 브라우저", + "WS_Contents" : "ㆍ 해당 브라우저는 웹소켓 방식의 뷰어를 지원하지 않습니다.
    ㆍ 다른 브라우져를 사용 하시기 바랍니다.

    ", + + "Print_Stanby_Title" : "인쇄 준비 중", + "Print_Stanby_Subject" : "
    사용자 PC환경 및 페이지양에 따라 5초~1분 정도 소요됩니다.

    잠시만 기다려 주세요.

    ", + "Print_Complete_Title" : "인쇄 완료", + "Print_Complete_Subject" : "
    인쇄가 완료 되었습니다.

    확인을 클릭하여 창을 닫아주세요.
    ", + "Print_Cancel_Title" : "인쇄 취소", + "Print_Cancel_Subject" : "
    인쇄가 취소 되었습니다.

    확인을 클릭하여 창을 닫아주세요.
    ", + "Print_Fail_Title" : "인쇄 오류", + "Print_Fail_Subject" : "
    인쇄 정보를 받아오는 도중에 오류가 발생하였습니다.

    확인을 클릭하여 창을 닫은 후 재조회(refresh) 후 다시 시도해 주세요.
    ", + + "Export_Standby_Title" : "파일 저장 준비 중", + "Export_Standby_Subject" : "
    사용자 PC 환경에 따라 5초 ~ 1분 정도 소요됩니다.

    잠시만 기다려 주세요.

    ", + "Export_Complete_Title" : "파일 저장 완료", + "Export_Complete_Subject" : "
    파일 저장이 완료 되었습니다.

    확인을 클릭하여 창을 닫아주세요.
    ", + "Export_Cancel_Title" : "파일 저장 취소", + "Export_Cancel_Subject" : "
    파일 저장이 취소 되었습니다.

    확인을 클릭하여 창을 닫아주세요.
    ", + "Export_Fail_Title" : "파일 저장 오류", + "Export_Fail_Subject" : "
    파일 저장 정보를 받아오는 도중에 오류가 발생하였습니다.

    확인을 클릭하여 창을 닫은 후 재조회(refresh) 후 다시 시도해 주세요.
    " + }, + + 'english' : { + "BTN_OK" : "OK", + "BTN_Cancel" : "Cancel", + "BTN_Download" : "Download", + + "HelpSafari" : "ㆍIn the Safari browser, please close and re-openyour browser after installation.
    ", + "HelpFireFox" : "ㆍIf you require permission to execute in the FireFox browser, be sure to click the [Permission] → [Permit and Remember] button.
    ㆍIf installation does not work, check if plug-in is blocked.
    ", + "HelpChrome" : "ㆍIf you require permission to run in your Chrome browser, be sure to click the [Always run on this site] button.
    ㆍIf installation does not work, check if plug-in is blocked.
    ", + "HelpOpera" : "ㆍOpera browser. Please run the downloaded file directly.
    ", + "HelpIE" : "ㆍIf the file download is blocked in IE browser, please run [Download].
    ", + + "Update_Title" : "Program Update Guide", + "Install_Title" : "Program Installation Guide", + "Guide_Title" : "Program Guide", + + "Update_Subject" : "Program updates are required for the UbiViewer printing.", + "Install_Subject" : "You need to install the program for Ubiviewer printing.", + "Update_Contents" : "ㆍ Click File Download
    ㆍ Run files and install after Save (Automatic browser shutdown)
    ㆍ Print / Save after Browser restart

    ※ If the installation guide message continues to appear, right-click on the installation file, and then click [Run as administrator].", + "Install_Contents" : "ㆍ Click File Download
    ㆍ Run files and install after Save
    ㆍ Print / Save after browser refresh (F5)

    ※ If the installation guide message continues to appear, right-click on the installation file, and then click [Run as administrator].", + + "64_Subject" : "64-bit browser not supported", + "64_Contents" : "ㆍ This browser is a 64-bit browser.
    ㆍ Please use a 32-bit browser.

    ", + "Plugin_Subject" : "Plug-in unsupported browser", + "Plugin_Contents" : "ㆍ This browser does not support plugins.
    ㆍ Please use a different browser.
    ㆍ Not supported Browsers : Edge, Chrome 45+, Opera 33+.", + "WS_Subject" : "Websocket unsupported browser", + "WS_Contents" : "ㆍ This browser does not support viewer of Websocket.
    ㆍ Please use a different browser.

    ", + + "Print_Stanby_Title" : "Preparing to print", + "Print_Stanby_Subject" : "
    It takes 5 seconds ~ 1 minute depending on the PC environment and page size.

    Please wait a moment.

    ", + "Print_Complete_Title" : "Printing Complete", + "Print_Complete_Subject" : "
    Printing has been completed.

    Click OK to close the window.
    ", + "Print_Cancel_Title" : "Cancel printing", + "Print_Cancel_Subject" : "
    Printing has been canceled.

    Click OK to close the window.
    ", + "Print_Fail_Title" : "Printing Error", + "Print_Fail_Subject" : "
    An error occurred while getting print information.

    Click OK to close the window, then refresh your browser and try again.
    ", + + "Export_Standby_Title" : "Preparing to save file", + "Export_Standby_Subject" : "
    It takes 5 seconds ~ 1 minute for your PC environment.

    Please wait a moment.

    ", + "Export_Complete_Title" : "File Save Completed", + "Export_Complete_Subject" : "
    File save has been completed.

    Click OK to close the window.
    ", + "Export_Cancel_Title" : "Cancel file save", + "Export_Cancel_Subject" : "
    File save has been canceled.

    Click OK to close the window.
    ", + "Export_Fail_Title" : "File Save Error", + "Export_Fail_Subject" : "
    An error occurred while getting save information.

    Click OK to close the window, then refresh your browser and try again.
    " + } +}; \ No newline at end of file diff --git a/src/main/webapp/ubi4/js/ubiexcanvas.js b/src/main/webapp/ubi4/js/ubiexcanvas.js new file mode 100644 index 00000000..c5bdcb8d --- /dev/null +++ b/src/main/webapp/ubi4/js/ubiexcanvas.js @@ -0,0 +1 @@ +if (typeof nexacro == 'undefined' || (typeof nexacro.Browser != 'undefined' && nexacro.Browser != 'Runtime') || (typeof nexacro._Browser != 'undefined' && nexacro._Browser != 'Runtime')){if (!document.createElement('canvas').getContext) {(function() { var m=Math; var mr=m.round; var ms=m.sin; var mc=m.cos; var abs=m.abs; var sqrt=m.sqrt; var Z=10; var Z2=Z / 2; var IE_VERSION=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1]; function getContext() { return this.context_ || (this.context_=new CanvasRenderingContext2D_(this)); } var slice=Array.prototype.slice; function bind(f, obj, var_args) { var a=slice.call(arguments, 2); return function() { return f.apply(obj, a.concat(slice.call(arguments))); }; } function encodeHtmlAttribute(s) { return String(s).replace(/&/g, '&').replace(/"/g, '"'); } function addNamespace(doc, prefix, urn) { if (!doc.namespaces[prefix]) { doc.namespaces.add(prefix, urn, '#default#VML'); } } function addNamespacesAndStylesheet(doc) { addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml'); addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office'); if (!doc.styleSheets['ex_canvas_']) { var ss=doc.createStyleSheet(); ss.owningElement.id='ex_canvas_'; ss.cssText='canvas{display:inline-block;overflow:hidden;' + 'text-align:left;width:300px;height:150px}'; } } addNamespacesAndStylesheet(document); var G_vmlCanvasManager_={ init: function(opt_doc) { var doc=opt_doc || document; doc.createElement('canvas'); doc.attachEvent('onreadystatechange', bind(this.init_, this, doc)); }, init_: function(doc) { var els=doc.getElementsByTagName('canvas'); for (var i=0; i < els.length; i++) { this.initElement(els[i]); } }, initElement: function(el) { if (!el.getContext) { el.getContext=getContext; addNamespacesAndStylesheet(el.ownerDocument); el.innerHTML=''; el.attachEvent('onpropertychange', onPropertyChange); el.attachEvent('onresize', onResize); var attrs=el.attributes; if (attrs.width && attrs.width.specified) { el.style.width=attrs.width.nodeValue + 'px'; } else { el.width=el.clientWidth; } if (attrs.height && attrs.height.specified) { el.style.height=attrs.height.nodeValue + 'px'; } else { el.height=el.clientHeight; } } return el; } }; function onPropertyChange(e) { var el=e.srcElement; switch (e.propertyName) { case 'width': el.getContext().clearRect(); el.style.width=el.attributes.width.nodeValue + 'px'; el.firstChild.style.width=el.clientWidth + 'px'; break; case 'height': el.getContext().clearRect(); el.style.height=el.attributes.height.nodeValue + 'px'; el.firstChild.style.height=el.clientHeight + 'px'; break; } } function onResize(e) { var el=e.srcElement; if (el.firstChild) { el.firstChild.style.width=el.clientWidth + 'px'; el.firstChild.style.height=el.clientHeight + 'px'; } } G_vmlCanvasManager_.init(); var decToHex=[]; for (var i=0; i < 16; i++) { for (var j=0; j < 16; j++) { decToHex[i * 16 + j]=i.toString(16) + j.toString(16); } } function createMatrixIdentity() { return [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ]; } function matrixMultiply(m1, m2) { var result=createMatrixIdentity(); for (var x=0; x < 3; x++) { for (var y=0; y < 3; y++) { var sum=0; for (var z=0; z < 3; z++) { sum += m1[x][z] * m2[z][y]; } result[x][y]=sum; } } return result; } function copyState(o1, o2) { o2.fillStyle=o1.fillStyle; o2.lineCap=o1.lineCap; o2.lineJoin=o1.lineJoin; o2.lineWidth=o1.lineWidth; o2.miterLimit=o1.miterLimit; o2.shadowBlur=o1.shadowBlur; o2.shadowColor=o1.shadowColor; o2.shadowOffsetX=o1.shadowOffsetX; o2.shadowOffsetY=o1.shadowOffsetY; o2.strokeStyle=o1.strokeStyle; o2.globalAlpha=o1.globalAlpha; o2.font=o1.font; o2.textAlign=o1.textAlign; o2.textBaseline=o1.textBaseline; o2.arcScaleX_=o1.arcScaleX_; o2.arcScaleY_=o1.arcScaleY_; o2.lineScale_=o1.lineScale_; } var colorData={ aliceblue: '#F0F8FF', antiquewhite: '#FAEBD7', aquamarine: '#7FFFD4', azure: '#F0FFFF', beige: '#F5F5DC', bisque: '#FFE4C4', black: '#000000', blanchedalmond: '#FFEBCD', blueviolet: '#8A2BE2', brown: '#A52A2A', burlywood: '#DEB887', cadetblue: '#5F9EA0', chartreuse: '#7FFF00', chocolate: '#D2691E', coral: '#FF7F50', cornflowerblue: '#6495ED', cornsilk: '#FFF8DC', crimson: '#DC143C', cyan: '#00FFFF', darkblue: '#00008B', darkcyan: '#008B8B', darkgoldenrod: '#B8860B', darkgray: '#A9A9A9', darkgreen: '#006400', darkgrey: '#A9A9A9', darkkhaki: '#BDB76B', darkmagenta: '#8B008B', darkolivegreen: '#556B2F', darkorange: '#FF8C00', darkorchid: '#9932CC', darkred: '#8B0000', darksalmon: '#E9967A', darkseagreen: '#8FBC8F', darkslateblue: '#483D8B', darkslategray: '#2F4F4F', darkslategrey: '#2F4F4F', darkturquoise: '#00CED1', darkviolet: '#9400D3', deeppink: '#FF1493', deepskyblue: '#00BFFF', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1E90FF', firebrick: '#B22222', floralwhite: '#FFFAF0', forestgreen: '#228B22', gainsboro: '#DCDCDC', ghostwhite: '#F8F8FF', gold: '#FFD700', goldenrod: '#DAA520', grey: '#808080', greenyellow: '#ADFF2F', honeydew: '#F0FFF0', hotpink: '#FF69B4', indianred: '#CD5C5C', indigo: '#4B0082', ivory: '#FFFFF0', khaki: '#F0E68C', lavender: '#E6E6FA', lavenderblush: '#FFF0F5', lawngreen: '#7CFC00', lemonchiffon: '#FFFACD', lightblue: '#ADD8E6', lightcoral: '#F08080', lightcyan: '#E0FFFF', lightgoldenrodyellow: '#FAFAD2', lightgreen: '#90EE90', lightgrey: '#D3D3D3', lightpink: '#FFB6C1', lightsalmon: '#FFA07A', lightseagreen: '#20B2AA', lightskyblue: '#87CEFA', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#B0C4DE', lightyellow: '#FFFFE0', limegreen: '#32CD32', linen: '#FAF0E6', magenta: '#FF00FF', mediumaquamarine: '#66CDAA', mediumblue: '#0000CD', mediumorchid: '#BA55D3', mediumpurple: '#9370DB', mediumseagreen: '#3CB371', mediumslateblue: '#7B68EE', mediumspringgreen: '#00FA9A', mediumturquoise: '#48D1CC', mediumvioletred: '#C71585', midnightblue: '#191970', mintcream: '#F5FFFA', mistyrose: '#FFE4E1', moccasin: '#FFE4B5', navajowhite: '#FFDEAD', oldlace: '#FDF5E6', olivedrab: '#6B8E23', orange: '#FFA500', orangered: '#FF4500', orchid: '#DA70D6', palegoldenrod: '#EEE8AA', palegreen: '#98FB98', paleturquoise: '#AFEEEE', palevioletred: '#DB7093', papayawhip: '#FFEFD5', peachpuff: '#FFDAB9', peru: '#CD853F', pink: '#FFC0CB', plum: '#DDA0DD', powderblue: '#B0E0E6', rosybrown: '#BC8F8F', royalblue: '#4169E1', saddlebrown: '#8B4513', salmon: '#FA8072', sandybrown: '#F4A460', seagreen: '#2E8B57', seashell: '#FFF5EE', sienna: '#A0522D', skyblue: '#87CEEB', slateblue: '#6A5ACD', slategray: '#708090', slategrey: '#708090', snow: '#FFFAFA', springgreen: '#00FF7F', steelblue: '#4682B4', tan: '#D2B48C', thistle: '#D8BFD8', tomato: '#FF6347', turquoise: '#40E0D0', violet: '#EE82EE', wheat: '#F5DEB3', whitesmoke: '#F5F5F5', yellowgreen: '#9ACD32' }; function getRgbHslContent(styleString) { var start=styleString.indexOf('(', 3); var end=styleString.indexOf(')', start + 1); var parts=styleString.substring(start + 1, end).split(','); if (parts.length != 4 || styleString.charAt(3) != 'a') { parts[3]=1; } return parts; } function percent(s) { return parseFloat(s) / 100; } function clamp(v, min, max) { return Math.min(max, Math.max(min, v)); } function hslToRgb(parts){ var r, g, b, h, s, l; h=parseFloat(parts[0]) / 360 % 360; if (h < 0) h++; s=clamp(percent(parts[1]), 0, 1); l=clamp(percent(parts[2]), 0, 1); if (s == 0) { r=g=b=l; } else { var q=l < 0.5 ? l * (1 + s) : l + s - l * s; var p=2 * l - q; r=hueToRgb(p, q, h + 1 / 3); g=hueToRgb(p, q, h); b=hueToRgb(p, q, h - 1 / 3); } return '#' + decToHex[Math.floor(r * 255)] + decToHex[Math.floor(g * 255)] + decToHex[Math.floor(b * 255)]; } function hueToRgb(m1, m2, h) { if (h < 0) h++; if (h > 1) h--; if (6 * h < 1) return m1 + (m2 - m1) * 6 * h; else if (2 * h < 1) return m2; else if (3 * h < 2) return m1 + (m2 - m1) * (2 / 3 - h) * 6; else return m1; } var processStyleCache={}; function processStyle(styleString) { if (styleString in processStyleCache) { return processStyleCache[styleString]; } var str, alpha=1; styleString=String(styleString); if (styleString.charAt(0) == '#') { str=styleString; } else if (/^rgb/.test(styleString)) { var parts=getRgbHslContent(styleString); var str='#', n; for (var i=0; i < 3; i++) { if (parts[i].indexOf('%') != -1) { n=Math.floor(percent(parts[i]) * 255); } else { n=+parts[i]; } str += decToHex[clamp(n, 0, 255)]; } alpha=+parts[3]; } else if (/^hsl/.test(styleString)) { var parts=getRgbHslContent(styleString); str=hslToRgb(parts); alpha=parts[3]; } else { str=colorData[styleString] || styleString; } return processStyleCache[styleString]={color: str, alpha: alpha}; } var DEFAULT_STYLE={ style: 'normal', variant: 'normal', weight: 'normal', size: 10, family: 'sans-serif' }; var fontStyleCache={}; function processFontStyle(styleString) { if (fontStyleCache[styleString]) { return fontStyleCache[styleString]; } var el=document.createElement('div'); var style=el.style; try { style.font=styleString; } catch (ex) { } return fontStyleCache[styleString]={ style: style.fontStyle || DEFAULT_STYLE.style, variant: style.fontVariant || DEFAULT_STYLE.variant, weight: style.fontWeight || DEFAULT_STYLE.weight, size: style.fontSize || DEFAULT_STYLE.size, family: style.fontFamily || DEFAULT_STYLE.family }; } function getComputedStyle(style, element) { var computedStyle={}; for (var p in style) { computedStyle[p]=style[p]; } var canvasFontSize=parseFloat(element.currentStyle.fontSize), fontSize=parseFloat(style.size); if (typeof style.size == 'number') { computedStyle.size=style.size; } else if (style.size.indexOf('px') != -1) { computedStyle.size=fontSize; } else if (style.size.indexOf('em') != -1) { computedStyle.size=canvasFontSize * fontSize; } else if(style.size.indexOf('%') != -1) { computedStyle.size=(canvasFontSize / 100) * fontSize; } else if (style.size.indexOf('pt') != -1) { computedStyle.size=fontSize / .75; } else { computedStyle.size=canvasFontSize; } computedStyle.size *= 0.981; return computedStyle; } function buildStyle(style) { return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + style.size + 'px ' + style.family; } var lineCapMap={ 'butt': 'flat', 'round': 'round' }; function processLineCap(lineCap) { return lineCapMap[lineCap] || 'square'; } function CanvasRenderingContext2D_(canvasElement) { this.m_=createMatrixIdentity(); this.mStack_=[]; this.aStack_=[]; this.currentPath_=[]; this.strokeStyle='#000'; this.fillStyle='#000'; this.lineWidth=1; this.lineJoin='miter'; this.lineCap='butt'; this.miterLimit=Z * 1; this.globalAlpha=1; this.font='10px sans-serif'; this.textAlign='left'; this.textBaseline='alphabetic'; this.canvas=canvasElement; var cssText='width:' + canvasElement.clientWidth + 'px;height:' + canvasElement.clientHeight + 'px;overflow:hidden;position:absolute'; var el=canvasElement.ownerDocument.createElement('div'); el.style.cssText=cssText; canvasElement.appendChild(el); var overlayEl=el.cloneNode(false); overlayEl.style.backgroundColor='red'; overlayEl.style.filter='alpha(opacity=0)'; canvasElement.appendChild(overlayEl); this.element_=el; this.arcScaleX_=1; this.arcScaleY_=1; this.lineScale_=1; } var contextPrototype=CanvasRenderingContext2D_.prototype; contextPrototype.clearRect=function() { if (this.textMeasureEl_) { this.textMeasureEl_.removeNode(true); this.textMeasureEl_=null; } this.element_.innerHTML=''; }; contextPrototype.beginPath=function() { this.currentPath_=[]; }; contextPrototype.moveTo=function(aX, aY) { var p=getCoords(this, aX, aY); this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y}); this.currentX_=p.x; this.currentY_=p.y; }; contextPrototype.lineTo=function(aX, aY) { var p=getCoords(this, aX, aY); this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y}); this.currentX_=p.x; this.currentY_=p.y; }; contextPrototype.bezierCurveTo=function(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { var p=getCoords(this, aX, aY); var cp1=getCoords(this, aCP1x, aCP1y); var cp2=getCoords(this, aCP2x, aCP2y); bezierCurveTo(this, cp1, cp2, p); }; function bezierCurveTo(self, cp1, cp2, p) { self.currentPath_.push({ type: 'bezierCurveTo', cp1x: cp1.x, cp1y: cp1.y, cp2x: cp2.x, cp2y: cp2.y, x: p.x, y: p.y }); self.currentX_=p.x; self.currentY_=p.y; } contextPrototype.quadraticCurveTo=function(aCPx, aCPy, aX, aY) { var cp=getCoords(this, aCPx, aCPy); var p=getCoords(this, aX, aY); var cp1={ x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_), y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_) }; var cp2={ x: cp1.x + (p.x - this.currentX_) / 3.0, y: cp1.y + (p.y - this.currentY_) / 3.0 }; bezierCurveTo(this, cp1, cp2, p); }; contextPrototype.arc=function(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { aRadius *= Z; var arcType=aClockwise ? 'at' : 'wa'; var xStart=aX + mc(aStartAngle) * aRadius - Z2; var yStart=aY + ms(aStartAngle) * aRadius - Z2; var xEnd=aX + mc(aEndAngle) * aRadius - Z2; var yEnd=aY + ms(aEndAngle) * aRadius - Z2; if (xStart == xEnd && !aClockwise) { xStart += 0.125; } var p=getCoords(this, aX, aY); var pStart=getCoords(this, xStart, yStart); var pEnd=getCoords(this, xEnd, yEnd); this.currentPath_.push({type: arcType, x: p.x, y: p.y, radius: aRadius, xStart: pStart.x, yStart: pStart.y, xEnd: pEnd.x, yEnd: pEnd.y}); }; contextPrototype.rect=function(aX, aY, aWidth, aHeight) { this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); }; contextPrototype.strokeRect=function(aX, aY, aWidth, aHeight) { var oldPath=this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.stroke(); this.currentPath_=oldPath; }; contextPrototype.fillRect=function(aX, aY, aWidth, aHeight) { var oldPath=this.currentPath_; this.beginPath(); this.moveTo(aX, aY); this.lineTo(aX + aWidth, aY); this.lineTo(aX + aWidth, aY + aHeight); this.lineTo(aX, aY + aHeight); this.closePath(); this.fill(); this.currentPath_=oldPath; }; contextPrototype.createLinearGradient=function(aX0, aY0, aX1, aY1) { var gradient=new CanvasGradient_('gradient'); gradient.x0_=aX0; gradient.y0_=aY0; gradient.x1_=aX1; gradient.y1_=aY1; return gradient; }; contextPrototype.createRadialGradient=function(aX0, aY0, aR0, aX1, aY1, aR1) { var gradient=new CanvasGradient_('gradientradial'); gradient.x0_=aX0; gradient.y0_=aY0; gradient.r0_=aR0; gradient.x1_=aX1; gradient.y1_=aY1; gradient.r1_=aR1; return gradient; }; contextPrototype.drawImage=function(image, var_args) { var dx, dy, dw, dh, sx, sy, sw, sh; var oldRuntimeWidth=image.runtimeStyle.width; var oldRuntimeHeight=image.runtimeStyle.height; image.runtimeStyle.width='auto'; image.runtimeStyle.height='auto'; var w=image.width; var h=image.height; image.runtimeStyle.width=oldRuntimeWidth; image.runtimeStyle.height=oldRuntimeHeight; if (arguments.length == 3) { dx=arguments[1]; dy=arguments[2]; sx=sy=0; sw=dw=w; sh=dh=h; } else if (arguments.length == 5) { dx=arguments[1]; dy=arguments[2]; dw=arguments[3]; dh=arguments[4]; sx=sy=0; sw=w; sh=h; } else if (arguments.length == 9) { sx=arguments[1]; sy=arguments[2]; sw=arguments[3]; sh=arguments[4]; dx=arguments[5]; dy=arguments[6]; dw=arguments[7]; dh=arguments[8]; } else { throw Error('Invalid number of arguments'); } var d=getCoords(this, dx, dy); var w2=sw / 2; var h2=sh / 2; var vmlStr=[]; var W=10; var H=10; vmlStr.push(' ' , '', ''); this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join('')); }; contextPrototype.stroke=function(aFill) { var lineStr=[]; var lineOpen=false; var W=10; var H=10; lineStr.push(''); if (!aFill) { appendStroke(this, lineStr); } else { appendFill(this, lineStr, min, max); } lineStr.push(''); this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); }; function appendStroke(ctx, lineStr) { var a=processStyle(ctx.strokeStyle); var color=a.color; var opacity=a.alpha * ctx.globalAlpha; var lineWidth=ctx.lineScale_ * ctx.lineWidth; if (lineWidth < 1) { opacity *= lineWidth; } lineStr.push( '' ); } function appendFill(ctx, lineStr, min, max) { var fillStyle=ctx.fillStyle; var arcScaleX=ctx.arcScaleX_; var arcScaleY=ctx.arcScaleY_; var width=max.x - min.x; var height=max.y - min.y; if (fillStyle instanceof CanvasGradient_) { var angle=0; var focus={x: 0, y: 0}; var shift=0; var expansion=1; if (fillStyle.type_ == 'gradient') { var x0=fillStyle.x0_ / arcScaleX; var y0=fillStyle.y0_ / arcScaleY; var x1=fillStyle.x1_ / arcScaleX; var y1=fillStyle.y1_ / arcScaleY; var p0=getCoords(ctx, x0, y0); var p1=getCoords(ctx, x1, y1); var dx=p1.x - p0.x; var dy=p1.y - p0.y; angle=Math.atan2(dx, dy) * 180 / Math.PI; if (angle < 0) { angle += 360; } if (angle < 1e-6) { angle=0; } } else { var p0=getCoords(ctx, fillStyle.x0_, fillStyle.y0_); focus={ x: (p0.x - min.x) / width, y: (p0.y - min.y) / height }; width /= arcScaleX * Z; height /= arcScaleY * Z; var dimension=m.max(width, height); shift=2 * fillStyle.r0_ / dimension; expansion=2 * fillStyle.r1_ / dimension - shift; } var stops=fillStyle.colors_; stops.sort(function(cs1, cs2) { return cs1.offset - cs2.offset; }); var length=stops.length; var color1=stops[0].color; var color2=stops[length - 1].color; var opacity1=stops[0].alpha * ctx.globalAlpha; var opacity2=stops[length - 1].alpha * ctx.globalAlpha; var colors=[]; for (var i=0; i < length; i++) { var stop=stops[i]; colors.push(stop.offset * expansion + shift + ' ' + stop.color); } lineStr.push(''); } else if (fillStyle instanceof CanvasPattern_) { if (width && height) { var deltaLeft=-min.x; var deltaTop=-min.y; lineStr.push(''); } } else { var a=processStyle(ctx.fillStyle); var color=a.color; var opacity=a.alpha * ctx.globalAlpha; lineStr.push(''); } } contextPrototype.fill=function() { this.stroke(true); }; contextPrototype.closePath=function() { this.currentPath_.push({type: 'close'}); }; function getCoords(ctx, aX, aY) { var m=ctx.m_; return { x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2, y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2 }; }; contextPrototype.save=function() { var o={}; copyState(this, o); this.aStack_.push(o); this.mStack_.push(this.m_); this.m_=matrixMultiply(createMatrixIdentity(), this.m_); }; contextPrototype.restore=function() { if (this.aStack_.length) { copyState(this.aStack_.pop(), this); this.m_=this.mStack_.pop(); } }; function matrixIsFinite(m) { return isFinite(m[0][0]) && isFinite(m[0][1]) && isFinite(m[1][0]) && isFinite(m[1][1]) && isFinite(m[2][0]) && isFinite(m[2][1]); } function setM(ctx, m, updateLineScale) { if (!matrixIsFinite(m)) { return; } ctx.m_=m; if (updateLineScale) { var det=m[0][0] * m[1][1] - m[0][1] * m[1][0]; ctx.lineScale_=sqrt(abs(det)); } } contextPrototype.translate=function(aX, aY) { var m1=[ [1, 0, 0], [0, 1, 0], [aX, aY, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.rotate=function(aRot) { var c=mc(aRot); var s=ms(aRot); var m1=[ [c, s, 0], [-s, c, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), false); }; contextPrototype.scale=function(aX, aY) { this.arcScaleX_ *= aX; this.arcScaleY_ *= aY; var m1=[ [aX, 0, 0], [0, aY, 0], [0, 0, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.transform=function(m11, m12, m21, m22, dx, dy) { var m1=[ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, matrixMultiply(m1, this.m_), true); }; contextPrototype.setTransform=function(m11, m12, m21, m22, dx, dy) { var m=[ [m11, m12, 0], [m21, m22, 0], [dx, dy, 1] ]; setM(this, m, true); }; contextPrototype.drawText_=function(text, x, y, maxWidth, stroke) { var m=this.m_, delta=1000, left=0, right=delta, offset={x: 0, y: 0}, lineStr=[]; var fontStyle=getComputedStyle(processFontStyle(this.font), this.element_); var fontStyleString=buildStyle(fontStyle); var elementStyle=this.element_.currentStyle; var textAlign=this.textAlign.toLowerCase(); switch (textAlign) { case 'left': case 'center': case 'right': break; case 'end': textAlign=elementStyle.direction == 'ltr' ? 'right' : 'left'; break; case 'start': textAlign=elementStyle.direction == 'rtl' ? 'right' : 'left'; break; default: textAlign='left'; } switch (this.textBaseline) { case 'hanging': case 'top': offset.y=fontStyle.size / 1.75; break; case 'middle': break; default: case null: case 'alphabetic': case 'ideographic': case 'bottom': offset.y=-fontStyle.size / 2.25; break; } switch(textAlign) { case 'right': left=delta; right=0.05; break; case 'center': left=right=delta / 2; break; } var d=getCoords(this, x + offset.x, y + offset.y); lineStr.push(''); if (stroke) { appendStroke(this, lineStr); } else { appendFill(this, lineStr, {x: -left, y: 0}, {x: right, y: fontStyle.size}); } var skewM=m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0'; var skewOffset=mr(d.x / Z) + ',' + mr(d.y / Z); lineStr.push('', '', ''); this.element_.insertAdjacentHTML('beforeEnd', lineStr.join('')); }; contextPrototype.fillText=function(text, x, y, maxWidth) { this.drawText_(text, x, y, maxWidth, false); }; contextPrototype.strokeText=function(text, x, y, maxWidth) { this.drawText_(text, x, y, maxWidth, true); }; contextPrototype.measureText=function(text) { if (!this.textMeasureEl_) { var s=''; this.element_.insertAdjacentHTML('beforeEnd', s); this.textMeasureEl_=this.element_.lastChild; } var doc=this.element_.ownerDocument; this.textMeasureEl_.innerHTML=''; this.textMeasureEl_.style.font=this.font; this.textMeasureEl_.appendChild(doc.createTextNode(text)); return {width: this.textMeasureEl_.offsetWidth}; }; contextPrototype.clip=function() { }; contextPrototype.arcTo=function() { }; contextPrototype.createPattern=function(image, repetition) { return new CanvasPattern_(image, repetition); }; function CanvasGradient_(aType) { this.type_=aType; this.x0_=0; this.y0_=0; this.r0_=0; this.x1_=0; this.y1_=0; this.r1_=0; this.colors_=[]; } CanvasGradient_.prototype.addColorStop=function(aOffset, aColor) { aColor=processStyle(aColor); this.colors_.push({offset: aOffset, color: aColor.color, alpha: aColor.alpha}); }; function CanvasPattern_(image, repetition) { assertImageIsValid(image); switch (repetition) { case 'repeat': case null: case '': this.repetition_='repeat'; break; case 'repeat-x': case 'repeat-y': case 'no-repeat': this.repetition_=repetition; break; default: throwException('SYNTAX_ERR'); } this.src_=image.src; this.width_=image.width; this.height_=image.height; } function throwException(s) { throw new DOMException_(s); } function assertImageIsValid(img) { if (!img || img.nodeType != 1 || img.tagName != 'IMG') { throwException('TYPE_MISMATCH_ERR'); } if (img.readyState != 'complete') { throwException('INVALID_STATE_ERR'); } } function DOMException_(s) { this.code=this[s]; this.message=s +': DOM Exception ' + this.code; } var p=DOMException_.prototype=new Error; p.INDEX_SIZE_ERR=1; p.DOMSTRING_SIZE_ERR=2; p.HIERARCHY_REQUEST_ERR=3; p.WRONG_DOCUMENT_ERR=4; p.INVALID_CHARACTER_ERR=5; p.NO_DATA_ALLOWED_ERR=6; p.NO_MODIFICATION_ALLOWED_ERR=7; p.NOT_FOUND_ERR=8; p.NOT_SUPPORTED_ERR=9; p.INUSE_ATTRIBUTE_ERR=10; p.INVALID_STATE_ERR=11; p.SYNTAX_ERR=12; p.INVALID_MODIFICATION_ERR=13; p.NAMESPACE_ERR=14; p.INVALID_ACCESS_ERR=15; p.VALIDATION_ERR=16; p.TYPE_MISMATCH_ERR=17; G_vmlCanvasManager=G_vmlCanvasManager_; CanvasRenderingContext2D=CanvasRenderingContext2D_; CanvasGradient=CanvasGradient_; CanvasPattern=CanvasPattern_; DOMException=DOMException_;})();} } \ No newline at end of file diff --git a/src/main/webapp/ubi4/js/ubihtml.js b/src/main/webapp/ubi4/js/ubihtml.js new file mode 100644 index 00000000..ae614bb1 --- /dev/null +++ b/src/main/webapp/ubi4/js/ubihtml.js @@ -0,0 +1 @@ +var __ubi_isregist=true;try {if (typeof nexacro == 'undefined' || (typeof nexacro.Browser != 'undefined' && nexacro.Browser != 'Runtime') || (typeof nexacro._Browser != 'undefined' && nexacro._Browser != 'Runtime')) {__ubi_isregist=true;} else { __ubi_isregist=false; }} catch (e) {__ubi_isregist=true;}if (__ubi_isregist) {function _ubi_ajax(options) { options={ type: options.type || "POST", url: options.url || "", timeout: options.timeout || 60000, onComplete: options.onComplete || function(){}, onError: options.onError || function(){}, onSuccess: options.onSuccess || function(){}, onStatus: options.onStatus || null, reqdata: options.reqdata || "", datatype: options.datatype || "", exportseq: "" }; if(typeof XMLHttpRequest == "undefined"){ XMLHttpRequest=function() { return new ActiveXObject( navigator.userAgent.indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP" ); }; } var xml=new XMLHttpRequest(); if(options.type == "POST") { xml.open(options.type, options.url, true); } else if(options.type == "GET") { xml.open(options.type, options.url+((options.reqdata != "")?"?"+serialize(options.reqdata):""), true); } var timeoutLength=options.timeout; var requestDone=false; setTimeout(function() { requestDone=true; }, timeoutLength); var statuslength=0; var reqtype=""; try { reqtype=options.reqdata['reqtype']; } catch(e) {} xml.onreadystatechange=function() { if (!xml) return; try { if (xml.responseText && options.onStatus) { var status=xml.responseText.substring(statuslength); statuslength=xml.responseText.length; options.onStatus(status); if( (reqtype == "93") ) { if (status.indexOf("ER0") == 0) { options.onError(status.substring(status.indexOf("ER0"), status.length)); options.onComplete(); xml=null; return; } } else { if (status.indexOf("ER0") == 0) { options.onError(status); options.onComplete(); xml=null; return; } } } } catch(e) { } if( xml.readyState == 4 && !requestDone) { if( (reqtype == "93") && xml.responseText.indexOf("ER0") == 0 ) { options.onError(xml.responseText.substring(xml.responseText.indexOf("ER0"))); } else { if( xml.responseText.indexOf("ER0") != 0 && xml != null && httpSuccess(xml) ) { var xmldata=httpData(xml, options.datatype); if (xmldata != null) { options.exportseq=xml.getResponseHeader("exportseq"); options.onSuccess(xmldata); } else { options.onError(xml.responseText); } } else { options.onError(xml.responseText); } } options.onComplete(); xml=null; } }; if(options.type == "POST") { xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xml.send(serialize(options.reqdata)); } else { xml.send(); } function httpSuccess(r) { try{ return (!r.status && location.protocol == "file:") || (r.status >= 200 && r.status < 300) || r.satus == 304 || navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined;"; }catch(e){} return false; } function httpData(r, type) { var ct=r.getResponseHeader("content-type"); var data=!type && ct && ct.indexOf("xml") >= 0; data=type == "xml" || data ? r.responseXML : r.responseText; if(type == "script") eval.call(window, data); return data; } function serialize(a) { var s=[]; if(a.constructor == Array) { for(var i=0; i= 2) { xml.setRequestHeader(hcolarr[0], hcolarr[1]); } } } } } } return s.join("&"); } }var _UBI_REPORT_VERSION_NO="4.0";var _UBI_REPORT_BUILD_NO="Build 4.0.2004.1701";var Base=function() { };Base.extend=function(_instance, _static) { var extend=Base.prototype.extend; Base._prototyping=true; var proto=new this; extend.call(proto, _instance); delete Base._prototyping; var constructor=proto.constructor; var klass=proto.constructor=function() { if (!Base._prototyping) { if (this._constructing || this.constructor == klass) { this._constructing=true; constructor.apply(this, arguments); delete this._constructing; } else if (arguments[0] != null) { return (arguments[0].extend || extend).call(arguments[0], proto); } } }; klass.ancestor=this; klass.extend=this.extend; klass.forEach=this.forEach; klass.implement=this.implement; klass.prototype=proto; klass.toString=this.toString; klass.valueOf=function(type) { return (type == "object") ? klass : constructor.valueOf(); }; extend.call(klass, _static); if (typeof klass.init == "function") klass.init(); return klass;};Base.prototype={ extend: function(source, value) { if (arguments.length > 1) { var ancestor=this[source]; if (ancestor && (typeof value == "function") && (!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) && /\bbase\b/.test(value)) { var method=value.valueOf(); value=function() { var previous=this.base || Base.prototype.base; this.base=ancestor; var returnValue=method.apply(this, arguments); this.base=previous; return returnValue; }; value.valueOf=function(type) { return (type == "object") ? value : method; }; value.toString=Base.toString; } this[source]=value; } else if (source) { var extend=Base.prototype.extend; if (!Base._prototyping && typeof this != "function") { extend=this.extend || extend; } var proto={toSource: null}; var hidden=["constructor", "toString", "valueOf"]; var i=Base._prototyping ? 0 : 1; while (key=hidden[i++]) { if (source[key] != proto[key]) { extend.call(this, key, source[key]); } } for (var key in source) { if (!proto[key]) extend.call(this, key, source[key]); } } return this; }, base: function() { }};Base=Base.extend({ constructor: function() { this.extend(arguments[0]); }}, { ancestor: Object, version: "1.1", forEach: function(object, block, context) { for (var key in object) { if (this.prototype[key] === undefined) { block.call(context, object[key], key, object); } } }, implement: function() { for (var i=0; i < arguments.length; i++) { if (typeof arguments[i] == "function") { arguments[i](this.prototype); } else { this.prototype.extend(arguments[i]); } } return this; }, toString: function() { return String(this.valueOf()); }});function getAttributeStringValue(attributes, name, defvalue){ if (defvalue == undefined) defvalue=""; var item=attributes.getNamedItem(name); if(item == null) { return defvalue; } return item.nodeValue;}function getAttributeIntValue(attributes, name, defvalue){ if (defvalue == undefined) defvalue=0; var item=attributes.getNamedItem(name); if(item == null) { return defvalue; } return parseInt(item.nodeValue);}function getAttributeColorValue(attributes, name, defvalue){ var item=attributes.getNamedItem(name); if(item == null) { if (defvalue == undefined) return "000000"; else return defvalue; } return item.nodeValue;}function getAttributeBooleanValue(attributes, name, defvalue){ if (defvalue == undefined) defvalue=false; var item=attributes.getNamedItem(name); if(item == null) { return defvalue; } return (item.nodeValue=="1"||item.nodeValue=="true")?true:false;}function nvl(value) { if (value == null) return ""; return value;}function getNodeValue(node) { try { if (node == null) return ""; return (node.nodeValue==null?"":node.nodeValue); } catch (e) { } return "";}function makeArray() { var arr=[]; for(var i=0; i= 0) { rvalue=this.GetValue(index); } return rvalue; }, SetAt: function(key, newValue){ var index=this.FindIndex(key); if (index < 0) { this.keys.push(key); this.datum.push(newValue); } else { this.SetValue(index, newValue); } }, GetAt: function(index) { return this.GetKey(index); }, GetCount: function(){ return this.keys.length; }, FindIndex: function(key){ var index=-1; for(var i=0; i 0) { var styleobj=null; var orgvalue=this.value; var styles=this.styleinfo.styles; var preindex=0; var startidx=0; var endidx=0; if (this.underlined) { value.push(""); } for (var i=0; i', '>'); value.push(subvalue); } value.push(""); if (styleobj.superscript) { value.push(""); } if (styleobj.subscript) { value.push(""); } if (styleobj.strike != this.strike && styleobj.strike) { value.push(""); } subvalue=orgvalue.substring(startidx, endidx); subvalue=subvalue.replace('<', '<').replace('>', '>'); value.push(subvalue); if (styleobj.strike != this.strike && styleobj.strike) { value.push(""); } if (styleobj.superscript) { value.push(""); } if (styleobj.subscript) { value.push(""); } preindex=endidx; value.push(""); } if (preindex < orgvalue.length) { subvalue=orgvalue.substring(preindex, orgvalue.length); subvalue=subvalue.replace('<', '<').replace('>', '>'); value.push(subvalue); } if (this.underlined) { value.push(""); } } return value.join(""); }},{ CLASSNAME: "UbiTextItem", NODETEXT: "Text", ATTRFONTID: "fontid", ATTRHALIGN: "halign", ATTRVALIGN: "valign", ATTRUNDERLINED: "underlined", ATTRUNDERLINECOLOR: "underlinecolor", ATTRSTRIKE: "strike", ATTRSTRIKECOLOR: "strikecolor", ATTRSUPERSCRIPT: "superscript", ATTRSUBSCRIPT: "subscript", ATTRTEXTDIRECTION: "textdirection", ATTRTEXTDIRECTION2: "textdirection2", ATTRBORDERID: "border", ATTRMARGINLEFT: "marginleft", ATTRMARGINRIGHT: "marginright", ATTRMARGINTOP: "margintop", ATTRMARGINBOTTOM: "marginbottom", ATTRLINESPACE: "linespace", ATTRLINEHEIGHT: "lineheight", ATTRISSPACEVALUE: "isspc", ATTRHTMLCODEPROC: "htmlcodeproc", ATTRISWORDWRAP: "iswordwrap", ATTRISCHECKBOX: "ischeckbox", ATTRCHECKFLAG: "checkflag", ATTRTEXTHIGHLIGHT: "highlight", ATTRINDENT: "indent", NODEEFORM: "EForm", NODEITEMVALUE: "ItemValue", CreateInstance: function(node, doc){ var data=UbiTextItem.getData(node); var item=new UbiTextItem(); UbiItem.SetMemberFromNode(item, node); item.value=data.value; item.fontid=data.fontid; item.halign=data.halign; item.valign=data.valign; item.underlined=data.underlined; item.underlinecolor=data.underlinecolor; item.strike=data.strike; item.strikecolor=data.strikecolor; item.superscript=data.superscript; item.subscript=data.subscript; item.textdirection=data.textdirection; item.textdirection2=data.textdirection2; item.borderid=data.borderid; item.leftMargin=data.leftMargin; item.rightMargin=data.rightMargin; item.topMargin=data.topMargin; item.bottomMargin=data.bottomMargin; item.lineSpace=data.lineSpace; item.lineHeight=data.lineHeight; item.htmlcodeproc=data.htmlcodeproc; item.iswordwrap=data.iswordwrap; item.ischeckbox=data.ischeckbox; item.checkflag=data.checkflag; item.highlight=data.highlight; item.indent=data.indent; if (data.isspacevalue == true) { item.value=item.value.substring(1, item.value.length); } if (data.styleinfonode != null) { item.value=data.itemvalue; if (data.isspacevalue == true) { item.value=item.value.substring(1, item.value.length); } item.styleinfo=UbiTextStyleInfo.CreateInstance(data.styleinfonode, doc); } if (data.eformnode != null) { item.value=''; item.eformitem=UbiEformItem.CreateInstance(data.eformnode, doc); item.eformitem.value=item.value; item.eformitem.page=doc.currpagenum; doc.eformNodes.push(data.eformnode); doc.eformItems.push(item); } return item; }, getData: function(node) { var textnode=node.getElementsByTagName(UbiTextItem.NODETEXT)[0]; var textattributes=textnode.attributes; return { value: (textnode.childNodes[0]==null)?"":getNodeValue(textnode.childNodes[0]), fontid: getAttributeStringValue(textattributes, UbiTextItem.ATTRFONTID), halign: getAttributeIntValue(textattributes, UbiTextItem.ATTRHALIGN, 0), valign: getAttributeIntValue(textattributes, UbiTextItem.ATTRVALIGN, 1), underlined: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRUNDERLINED, false), underlinecolor: getAttributeStringValue(textattributes, UbiTextItem.ATTRUNDERLINECOLOR, null), strike: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRSTRIKE, false), strikecolor: getAttributeStringValue(textattributes, UbiTextItem.ATTRSTRIKECOLOR, null), superscript: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRSUPERSCRIPT, false), subscript: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRSUBSCRIPT, false), textdirection: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRTEXTDIRECTION, true), textdirection2: getAttributeIntValue(textattributes, UbiTextItem.ATTRTEXTDIRECTION2, 0), borderid: getAttributeStringValue(textattributes, UbiTextItem.ATTRBORDERID), leftMargin: getAttributeIntValue(textattributes, UbiTextItem.ATTRMARGINLEFT), rightMargin: getAttributeIntValue(textattributes, UbiTextItem.ATTRMARGINRIGHT), topMargin: getAttributeIntValue(textattributes, UbiTextItem.ATTRMARGINTOP), bottomMargin: getAttributeIntValue(textattributes, UbiTextItem.ATTRMARGINBOTTOM), lineSpace: getAttributeIntValue(textattributes, UbiTextItem.ATTRLINESPACE), lineHeight: getAttributeIntValue(textattributes, UbiTextItem.ATTRLINEHEIGHT), styleinfonode: node.getElementsByTagName(UbiTextStyleInfo.NODETEXTSTYLE)[0], isspacevalue: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRISSPACEVALUE), htmlcodeproc: getAttributeIntValue(textattributes, UbiTextItem.ATTRHTMLCODEPROC), iswordwrap: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRISWORDWRAP), ischeckbox: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRISCHECKBOX, false), checkflag: getAttributeBooleanValue(textattributes, UbiTextItem.ATTRCHECKFLAG, false), highlight: (textattributes.getNamedItem(UbiTextItem.ATTRTEXTHIGHLIGHT)==null)?null:getAttributeColorValue(textattributes, UbiTextItem.ATTRTEXTHIGHLIGHT, null), indent: getAttributeIntValue(textattributes, UbiTextItem.ATTRINDENT, 0), itemvalue: (textnode.getElementsByTagName(UbiTextItem.NODEITEMVALUE)[0]==null)?"":getNodeValue(textnode.getElementsByTagName(UbiTextItem.NODEITEMVALUE)[0].childNodes[0]), eformnode: node.getElementsByTagName(UbiTextItem.NODEEFORM)[0] }; }});var UbiShapeItem=UbiItem.extend({ lineid: "", constructor: function(classname) { this.base(classname); }},{ CLASSNAME: "UbiShapeItem", NODESHAPE: "Shape", ATTRLINEID: "lineid", SetMemberFromNode: function(item, node){ var data=UbiShapeItem.getData(node); item.lineid=data.lineid; }, getData: function(node) { var attributes=node.attributes; return { lineid: getAttributeStringValue(attributes, UbiShapeItem.ATTRLINEID) }; }});var UbiCircleItem=UbiShapeItem.extend({ constructor: function() { this.base(UbiCircleItem.CLASSNAME); }},{ CLASSNAME: "UbiCircleItem", CreateInstance: function(node, doc){ var item=new UbiCircleItem(); item.doc=doc; UbiItem.SetMemberFromNode(item, node); var shapenode=node.getElementsByTagName(UbiShapeItem.NODESHAPE)[0]; UbiShapeItem.SetMemberFromNode(item, shapenode); return item; }, getData: function(node) { }});var UbiLineItem=UbiShapeItem.extend({ linedir: 0, constructor: function() { this.base(UbiLineItem.CLASSNAME); }},{ CLASSNAME: "UbiLineItem", ATTRLINEDIR: "linedir", CreateInstance: function(node, doc){ var item=new UbiLineItem(); item.doc=doc; UbiItem.SetMemberFromNode(item, node); var shapenode=node.getElementsByTagName(UbiShapeItem.NODESHAPE)[0]; var data=UbiLineItem.getData(shapenode); UbiShapeItem.SetMemberFromNode(item, shapenode); item.linedir=data.linedir; return item; }, getData: function(node) { var attributes=node.attributes; return { linedir: getAttributeIntValue(attributes, UbiLineItem.ATTRLINEDIR) }; }});var UbiRectangleItem=UbiShapeItem.extend({ edgetype: 0, edgewidth: 0, constructor: function() { this.base(UbiRectangleItem.CLASSNAME); }},{ CLASSNAME: "UbiRectangleItem", ATTREDGETYPE: "edgetype", ATTREDGEWIDTH: "edgewidth", CreateInstance: function(node, doc){ var item=new UbiRectangleItem(); item.doc=doc; UbiItem.SetMemberFromNode(item, node); var shapenode=node.getElementsByTagName(UbiShapeItem.NODESHAPE)[0]; var data=UbiRectangleItem.getData(shapenode); UbiShapeItem.SetMemberFromNode(item, shapenode); item.edgetype=data.edgetype; item.edgewidth=data.edgewidth; return item; }, getData: function(node) { var attributes=node.attributes; return { edgetype: getAttributeIntValue(attributes, UbiRectangleItem.ATTREDGETYPE), edgewidth: getAttributeIntValue(attributes, UbiRectangleItem.ATTREDGEWIDTH) }; }});var UbiImageItem=UbiItem.extend({ imageid: "", halign: 0, valign: 0, borderid: "", constructor: function() { this.base(UbiImageItem.CLASSNAME); }, getVAlign: function() { var str; if(this.valign == 0) { str="top"; }else if(this.valign == 1) { str="middle"; }else if(this.valign == 2) { str="bottom"; } return str; }, getHAlign: function() { var str; if(this.halign == 0) { str="left"; }else if(this.halign == 1) { str="center"; }else if(this.halign == 2) { str="right"; } return str; }},{ CLASSNAME: "UbiImageItem", NODEIMAGE: "Image", ATTRIMAGEID: "imageid", ATTRHALIGN: "halign", ATTRVALIGN: "valign", ATTRBORDERID: "borderid", CreateInstance: function(node, doc){ var item=new UbiImageItem(); item.doc=doc; UbiItem.SetMemberFromNode(item, node); var imagenode=node.getElementsByTagName(UbiImageItem.NODEIMAGE)[0]; var data=UbiImageItem.getData(imagenode); item.imageid=data.imageid; item.halign=data.halign; item.valign=data.valign; item.borderid=data.borderid; return item; }, getData: function(node) { var attributes=node.attributes; return { imageid: getAttributeStringValue(attributes, UbiImageItem.ATTRIMAGEID), halign: getAttributeIntValue(attributes, UbiImageItem.ATTRHALIGN), valign: getAttributeIntValue(attributes, UbiImageItem.ATTRVALIGN), borderid: getAttributeStringValue(attributes, UbiImageItem.ATTRBORDERID) }; }});var UbiBarcodeItem=UbiItem.extend({ code: "", borderid: "", loadtype: 0, loadsrc: "", constructor: function() { this.base(UbiBarcodeItem.CLASSNAME);}},{ CLASSNAME: "UbiBarcodeItem", NODEBARCODE: "Barcode", ATTRBORDERID: "borderid", ATTRLOADTYPE: "loadtype", ATTRLOADSRC: "loadsrc", CreateInstance: function(node, doc){ var item=new UbiBarcodeItem(); UbiItem.SetMemberFromNode(item, node); var barcodenode=node.getElementsByTagName(UbiBarcodeItem.NODEBARCODE)[0]; var data=UbiBarcodeItem.getData(barcodenode); item.code=data.code; item.borderid=data.borderid; item.loadtype=data.loadtype; item.loadsrc=data.loadsrc; return item; }, getData: function(node) { var attributes=node.attributes; return { code: getNodeValue(node.childNodes[0]), borderid: getAttributeStringValue(attributes, UbiBarcodeItem.ATTRBORDERID), loadtype: getAttributeIntValue(attributes, UbiBarcodeItem.ATTRLOADTYPE), loadsrc: getAttributeStringValue(attributes, UbiBarcodeItem.ATTRLOADSRC) }; }});var UbiBarcodeItem=UbiItem.extend({ code: "", borderid: "", loadtype: 0, loadsrc: "", constructor: function() { this.base(UbiBarcodeItem.CLASSNAME);}},{ CLASSNAME: "UbiBarcodeItem", NODEBARCODE: "Barcode", ATTRBORDERID: "borderid", ATTRLOADTYPE: "loadtype", ATTRLOADSRC: "loadsrc", CreateInstance: function(node, doc){ var item=new UbiBarcodeItem(); UbiItem.SetMemberFromNode(item, node); var barcodenode=node.getElementsByTagName(UbiBarcodeItem.NODEBARCODE)[0]; var data=UbiBarcodeItem.getData(barcodenode); item.code=data.code; item.borderid=data.borderid; item.loadtype=data.loadtype; item.loadsrc=data.loadsrc; return item; }, getData: function(node) { var attributes=node.attributes; return { code: getNodeValue(node.childNodes[0]), borderid: getAttributeStringValue(attributes, UbiBarcodeItem.ATTRBORDERID), loadtype: getAttributeIntValue(attributes, UbiBarcodeItem.ATTRLOADTYPE), loadsrc: getAttributeStringValue(attributes, UbiBarcodeItem.ATTRLOADSRC) }; }});var UbiChartComponent=UbiObject.extend({ id: "", x: 0, y: 0, width: 0, height: 0, linked: false, linkfilename: "", linkargs: "", linkstyle: "", loadtype: 0, loadsrc: "", constructor: function() { this.base(UbiChartComponent.CLASSNAME); }},{ CLASSNAME: "UbiChartComponent", NODECHARTCOMPONENT: "Chartcomponent", ATTRID: "id", ATTRX: "x", ATTRY: "y", ATTRWIDTH: "width", ATTRHEIGHT: "height", ATTRLINKED: "linked", ATTRLINKFILENAME: "linkfilename", ATTRLINKSTYLE: "linkstyle", NODELINKARG: "Linkarg", ATTRNAME: "name", ATTRLOADTYPE: "loadtype", ATTRLOADSRC: "loadsrc", CreateInstance: function(node, doc){ var data=UbiChartComponent.getData(node); var charcomponent=new UbiChartComponent(); charcomponent.id=data.id; charcomponent.x=data.x; charcomponent.y=data.y; charcomponent.width=data.width; charcomponent.height=data.height; charcomponent.linked=data.linked; charcomponent.linkfilename=data.linkfilename; charcomponent.loadtype=data.loadtype; charcomponent.loadsrc=data.loadsrc; return charcomponent; }, getData: function(node) { var attributes=node.attributes; return { id: getAttributeStringValue(attributes, UbiChartComponent.ATTRID), x: getAttributeIntValue(attributes, UbiChartComponent.ATTRX), y: getAttributeIntValue(attributes, UbiChartComponent.ATTRY), width: getAttributeIntValue(attributes, UbiChartComponent.ATTRWIDTH), height: getAttributeIntValue(attributes, UbiChartComponent.ATTRHEIGHT), linked: getAttributeBooleanValue(attributes, UbiChartComponent.ATTRLINKED), linkfilename: getAttributeStringValue(attributes, UbiChartComponent.ATTRLINKFILENAME), linkstyle: getAttributeStringValue(attributes, UbiChartComponent.ATTRLINKSTYLE), loadtype: getAttributeIntValue(attributes, UbiChartComponent.ATTRLOADTYPE), loadsrc: getAttributeStringValue(attributes, UbiChartComponent.ATTRLOADSRC) }; }});var UbiPage=UbiObject.extend({ constructor: function(doc) { this.base(UbiPage.CLASSNAME); this.doc=doc; this.items=new UbiList(); this.chartcomponents=new UbiList(); this.contents=""; this.iscustom=false; this.width=0; this.height=0; this.left=0; this.top=0; this.right=0; this.bottom=0; this.bgcolor=""; }},{ CLASSNAME: "UbiPage", NODEPAGE: "Page", ATTRPAGENUM: "pagenum", ATTRPAGEWIDTH: "width", ATTRPAGEHEIGHT: "height", ATTRPAGEMARGINTOP: "y", ATTRPAGEMARGINLEFT: "x", ATTRBACKGROUNDCOLOR: "bgcolor", NODEFONTID: "Fontid", NODELINEID: "Lineid", NODECOLORID: "Colorid", NODEBORDERID: "Borderid", NODEOBJECTID: "Objectid", CreateInstance: function(node, doc){ var data=UbiPage.getData(node); var page=new UbiPage(doc); var itemlist=data.itemlist; for(var i=0; i this.doc.pages.GetSize() || pagenum <= 0 ) { alert( pagenum + "번째 페이지는 존재하지 않습니다."); return; } var page=this.doc.pages.GetAt(pagenum - 1); var urlstr=this.keyurl + "?jrffile=" + this.jrffile + "&key=" + this.key + "&resid=" + this.resid + "&exportseq=" + this.exportseq; var isPrint=isprint; var textitems=null; var drawcanvaslist=this.canvaslist; var cssid=divid.id; var cssStr=this.GetReportStyle(this.doc, cssid, ds); DrawPage(divid, this.doc, page, urlstr, ds, this.vid); function DrawPage(divid, doc, page, keyurl, ds, vid) { if (page.iscustom) { divid.innerHTML=page.contents; return; } var styleNode=document.createElement("style"); styleNode.setAttribute("type", "text/css"); if (__ubi_isIE && __ubi_ieVersion < 11) { styleNode.styleSheet.cssText=cssStr; } else { try{ styleNode.innerHTML=cssStr; }catch(e){ styleNode.innerText=cssStr; } } divid.appendChild(styleNode); _ubi_cindex=0; _ubi_iindex=0; textitems=new Array(); var items=page.items; for( var i=0; i < items.GetSize(); i++ ) { var item=items.GetAt(i); if (item) { if( item.GetClassname() == UbiTextItem.CLASSNAME ) DrawTextItem(divid, doc, item, ds, cssid, pagenum, i); else if( item.GetClassname() == UbiLineItem.CLASSNAME ) DrawLineItem(divid, doc, item, ds); else if( item.GetClassname() == UbiRectangleItem.CLASSNAME ) DrawRectangleItem(divid, doc, item, ds); else if( item.GetClassname() == UbiCircleItem.CLASSNAME ) DrawCircleItem(divid, doc, item, ds); else if( item.GetClassname() == UbiBarcodeItem.CLASSNAME ) DrawBarcodeItem(divid, doc, item, keyurl, ds); else if( item.GetClassname() == UbiImageItem.CLASSNAME ) DrawImageItem(divid, doc, item, keyurl, ds, cssid); } } var charts=page.chartcomponents; for( var i=0; i < charts.GetSize(); i++ ) { var chart=charts.GetAt(i); DrawChartComponent(divid, doc, chart, keyurl, ds); } if (doc.isWA) { textitems.sort(sortNumber); var nodes=divid.childNodes; var tabindex=12; var width=parseInt(doc.docprop.width); tabindex=(1000)*pagenum; var textObj=null; for( var i=0; i < nodes.length; i++ ) { if( nodes[i].nodeName == "DIV" ) { var x=parseInt(nodes[i].style.left); var y=parseInt(nodes[i].style.top); var key=x + y * width; var index=findIndex(key); if( index >= 0 ) { textObj=document.getElementById(nodes[i].id +"_td"); if (textObj) { var textDivid=nodes[i].id; textObj.setAttribute("onfocus", "_ubi_wafoucus('"+ textDivid +"')"); textObj.setAttribute("onblur", "_ubi_wablur('"+ textDivid +"')"); textObj.tabIndex=tabindex + index; } } } } } function findIndex(value) { for( var i=0; i < textitems.length; i++ ) { if( value == textitems[i] ) return i; } return -1; } function sortNumber(a, b) { return a-b; } }; function DrawTextItem(divid, doc, item, ds, vid, page, seq) { if( item.width == 0 || item.height == 0 ) return; if ( item.ispreview == false ) return; var div=document.createElement("div"); div.id=vid + "_"+ item.id +"_"+page +"_"+seq; div.className="textitem "+ vid + "font_"+ item.fontid +" "+ vid + "color_f_"+ item.foregroundid + ( item.transparent ?"": " "+ vid + "color_b_"+item.backgroundid); item.divid=div.id; var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var leftMargin=Math.round(item.leftMargin * ds); var rightMargin=Math.round(item.rightMargin * ds); var topMargin=Math.round(item.topMargin * ds); var bottomMargin=Math.round(item.bottomMargin * ds); textitems.push(parseInt(x)+(parseInt(y)*parseInt(doc.docprop.width))); var divWidth=(width + 1) - (getBorderWidth("left", doc, item) + getBorderWidth("right", doc, item)); var divHeight=(height + 1) - (getBorderWidth("top", doc, item) + getBorderWidth("bottom", doc, item)); var indent=Math.round(item.indent * ds); if (item.indent < 0) { divWidth -= indent; x += indent; } div.style.left=x + "px"; div.style.top=y + "px"; div.style.width=divWidth + "px"; div.style.height=divHeight + "px"; var borderwidth=0; borderwidth=getBorderWidth("top", doc, item); if (borderwidth > 0) div.style.borderTop=borderwidth + "px " + getBorderStyle("top", doc, item) + " #" + getBorderColor("top", doc, item); borderwidth=getBorderWidth("right", doc, item); if (borderwidth > 0) div.style.borderRight=borderwidth + "px " + getBorderStyle("right", doc, item) + " #" + getBorderColor("right", doc, item); borderwidth=getBorderWidth("bottom", doc, item); if (borderwidth > 0) div.style.borderBottom=getBorderWidth("bottom", doc, item) + "px " + getBorderStyle("bottom", doc, item) + " #" + getBorderColor("bottom", doc, item); borderwidth=getBorderWidth("left", doc, item); if (borderwidth > 0) div.style.borderLeft=getBorderWidth("left", doc, item) + "px " + getBorderStyle("left", doc, item) + " #" + getBorderColor("left", doc, item); var ddwidth=getBorderWidth("dd", doc, item); var duwidth=getBorderWidth("du", doc, item); var diagonalArray=[]; if (ddwidth > 0 || duwidth > 0) { diagonalArray.push('
    '); diagonalArray.push(''); } if (ddwidth > 0) { diagonalArray.push(''); } if (duwidth > 0) { diagonalArray.push(''); } if (ddwidth > 0 || duwidth > 0) { diagonalArray.push('
    '); div.innerHTML=diagonalArray.join(""); } if(div.style.font.indexOf("bold") != -1 ) { div.style.letterSpacing= "-1"; } var table=document.createElement("table"); var tbody=document.createElement("tbody"); var tr=document.createElement("tr"); var td=document.createElement("td"); if (item.ischeckbox) { var checkboxWidth=parseInt(10*ds); var tdCheck=document.createElement("td"); tdCheck.style.width=checkboxWidth + "px"; tdCheck.innerHTML=""; tr.appendChild(tdCheck); } var tableHeight=0; var tableWidth=0; if (item.textdirection2 == 2 || item.textdirection2 == 4) { tableWidth=(divHeight - (topMargin + bottomMargin)); tableHeight=(divWidth - (leftMargin + rightMargin)); } else { tableWidth=(divWidth - (leftMargin + rightMargin)); tableHeight=(divHeight - (topMargin + bottomMargin)); } table.style.width=tableWidth + "px"; table.style.height=tableHeight + "px"; var tclassname=vid + "font_"+ item.fontid +" "+ vid + "color_f_"+ item.foregroundid; if (item.textdirection2 == 1) { tclassname += " UbiAjaxViewervertical"; } else if (item.textdirection2 == 2) { tclassname += " UbiAjaxViewerrotate_90"; var halfwidth=(divWidth - (leftMargin + rightMargin)-2) / 2; table.style.msTransformOrigin=halfwidth + "px " + halfwidth + "px"; table.style.WebkitTransformOrigin=halfwidth + "px " + halfwidth + "px"; table.style.MozTransformOrigin=halfwidth + "px " + halfwidth + "px"; } else if (item.textdirection2 == 3) { tclassname += " UbiAjaxViewerrotate_180"; } else if (item.textdirection2 == 4) { tclassname += " UbiAjaxViewerrotate_270"; var halfheight=(divHeight - (topMargin + bottomMargin)) / 2; table.style.msTransformOrigin=halfheight + "px " + halfheight + "px"; table.style.WebkitTransformOrigin=halfheight + "px " + halfheight + "px"; table.style.MozTransformOrigin=halfheight + "px " + halfheight + "px"; } table.className=tclassname; table.style.borderSpacing="0px"; var marginTop=0; if ( (leftMargin + rightMargin + topMargin + bottomMargin) > 0) { table.style.marginLeft=(1+leftMargin) +"px"; table.style.marginRight=rightMargin +"px"; marginTop=(1+topMargin); table.style.marginTop=(1+topMargin) +"px"; table.style.marginBottom=bottomMargin +"px"; } if (item.lineSpace > 0) { var gap=Math.floor(item.lineSpace*ds/2); table.style.marginTop=(marginTop - gap + 1)+ "px"; table.style.height=(tableHeight + Math.round(item.lineSpace*ds)) + "px"; } if (doc.docprop.language == "Arabic") tr.dir="rtl"; td.className=vid + "font_"+ item.fontid +" "+ vid + "color_f_"+ item.foregroundid; td.id=div.id +"_td"; if (item.iswordwrap == true) { td.style.wordBreak="keep-all"; } if (item.textdirection2 == 2) { if (item.halign == 0) td.style.verticalAlign="bottom"; else if (item.halign == 2) td.style.verticalAlign="top"; if (item.valign == 0) td.style.textAlign="left"; else if (item.valign == 2) td.style.textAlign="right"; } else if (item.textdirection2 == 3) { if (item.halign == 0) td.style.textAlign="right"; else if (item.halign == 2) td.style.textAlign="left"; if (item.valign == 0) td.style.verticalAlign="bottom"; else if (item.valign == 2) td.style.verticalAlign="top"; } else if (item.textdirection2 == 4) { if (item.halign == 0) td.style.verticalAlign="top"; else if (item.halign == 2) td.style.verticalAlign="bottom"; if (item.valign == 0) td.style.textAlign="right"; else if (item.valign == 2) td.style.textAlign="left"; } else if (item.textdirection2 == 1) { if (item.valign == 0) td.style.textAlign="left"; else if (item.valign == 2) td.style.textAlign="right"; } else { if (item.halign != 1) { td.style.textAlign=item.getHAlign(); if (td.style.textAlign == "justify") { td.style.whiteSpace="pre-line"; } } if (item.valign != 1) td.style.verticalAlign=item.getVAlign(); } if (item.ischeckbox) { td.style.width="*"; } else { td.style.width=table.style.width; } td.style.height=table.style.height; var lineHeight=(getFontSize(doc, item, ds) + Math.round(item.lineSpace*ds)); if (item.lineHeight > 0) { var height=Math.round((item.lineHeight + item.lineSpace)*ds); if (lineHeight < height) { lineHeight=height; } } td.style.lineHeight=lineHeight + "px"; if (indent != 0) { if (indent < 0) { td.style.paddingLeft=(-indent) + "px"; td.style.textIndent=indent +"px"; } else { td.style.textIndent=indent + "px"; } } var underIE8StyleStart=[]; var underIE8StyleEnd=[]; if (__ubi_isIE && __ubi_ieVersion < 8) { if (item.superscript) { underIE8StyleStart.push(""); } if (item.subscript) { underIE8StyleStart.push(""); } var changedColor=false; var addSpan=false; var addSpanCount=0; if (item.highlight != null) { addSpan=true; addSpanCount++; underIE8StyleStart.push(""); } if (item.strike) { addSpanCount++; underIE8StyleStart.push(""); } if (addSpanCount > 0) { underIE8StyleStart.push(""); for (var i=0; i"); } underIE8StyleEnd.push(""); } if (item.subscript) { underIE8StyleStart.push(""); } if (item.superscript) { underIE8StyleStart.push(""); } } if (item.linked) { var alink=document.createElement("a"); if (__ubi_viewers[vid] && __ubi_viewers[vid].events.linkButtonDown) { alink.style.textDecoration='underline'; alink.style.color='#0000cc'; alink.onmouseover=function() { this.style.cursor="pointer";}; alink.onmouseout=function() { this.style.cursor="default";}; alink.onclick=function() {__ubi_viewers[vid]._linkButtonDown(item.linkfilename, item.linkargs); }; } else { if (item.linkstyle == "SCRIPT") { alink.href="javascript:"+item.linkfilename; } else if (item.linkstyle == "REPORT"){ alink.href="javascript:refreshFrame('"+ divid.parentNode.parentNode.parentNode.id +"','"+ item.linkfilename +"','"+ item.linkargs +"')"; } else if (item.linkstyle == "WEBPAGE"){ var url=item.linkfilename; if (item.linkfilename.indexOf(":/"+"/") == -1 && item.linkfilename.indexOf("mailto:") == -1) { url="http:/"+"/"+ item.linkfilename; } alink.href="javascript:window.open(\""+ url + item.linkargs +"\"); void 0;"; } } var textnode=document.createTextNode(item.value); alink.appendChild(textnode); if (item.value.indexOf("^totalpage^") >= 0) { doc.totalpageNodes.push(textnode); doc.totalpageItems.push(item); } td.appendChild(alink); } else { if (item.styleinfo != null && item.styleinfo.styles != null && item.styleinfo.styles.GetSize() > 0) { if (__ubi_isIE && __ubi_ieVersion < 8) { td.innerHTML="
    "+ item.getStyleValue(ds) +"
    "; } else { td.innerHTML=item.getStyleValue(ds); } } else { if (__ubi_isIE && __ubi_ieVersion < 8) { td.innerHTML="
    "+ underIE8StyleStart.join('') + item.value + underIE8StyleEnd.join('') + "
    "; } else { if(item.htmlcodeproc=='1'){ td.innerHTML=item.value; }else{ var changedColor=false; var addSpan=false; var spanobj=null; var lastobj=null; if (item.highlight != null) { addSpan=true; spanobj=document.createElement("span"); spanobj.style.backgroundColor="#" + item.highlight; lastobj=spanobj; } if( item.underlined ) { if (addSpan) { spanobj.style.textDecoration="underline"; } else { addSpan=true; spanobj=document.createElement("span"); spanobj.style.textDecoration="underline"; lastobj=spanobj; } if (item.underlinecolor && item.underlinecolor != '') { changedColor=true; spanobj.style.color="#"+ item.underlinecolor; } } if (item.strike) { var strikespanobj=null; if (item.underlined) { strikespanobj=document.createElement("span"); spanobj.appendChild(strikespanobj); lastobj=strikespanobj; } else { if (addSpan) { strikespanobj=spanobj; } else { strikespanobj=document.createElement("span"); spanobj=strikespanobj; lastobj=strikespanobj; } } strikespanobj.style.textDecoration="line-through"; if (item.strikecolor && item.strikecolor != '') { changedColor=true; strikespanobj.style.color="#"+ item.strikecolor; } } if (changedColor) { var textspanobj=document.createElement("span"); textspanobj.style.color="#"+ getForegroundColor(doc,item); lastobj.appendChild(textspanobj); lastobj=textspanobj; } if (item.superscript) { var supobj=document.createElement("sup"); if (lastobj) { lastobj.appendChild(supobj); } lastobj=supobj; } if (item.subscript) { var subobj=document.createElement("sub"); if (lastobj) { lastobj.appendChild(subobj); } lastobj=subobj; } var textnode=document.createTextNode(item.value); if (lastobj) { lastobj.appendChild(textnode); if (spanobj) { td.appendChild(spanobj); } else { td.appendChild(lastobj); } } else { td.appendChild(textnode); } if (item.value.indexOf("^totalpage^") >= 0) { doc.totalpageNodes.push(textnode); doc.totalpageItems.push(item); } } } } } tr.appendChild(td); tbody.appendChild(tr); table.appendChild(tbody); div.appendChild(table); divid.appendChild(div); }; function DrawLineItem(divid, doc, item, ds) { if ( item.ispreview == false ) return; var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; if( width == 0 || height == 0 ) { var div=document.createElement("div"); div.id=item.id; divid.appendChild(div); div.style.position="absolute"; div.style.top=y + "px"; div.style.left=x + "px"; div.style.width=((width == 0)?getLineThickness(doc, item):(width + 1)) + "px"; div.style.height=((height == 0)?getLineThickness(doc, item):(height + 1)) + "px"; if( __ubi_isIE && __ubi_ieVersion == 6 ) { div.style.lineHeight='0px'; div.style.fontSize='0px'; } if( (__ubi_isIE && __ubi_ieVersion == 6) && parseInt(div.style.height) == 1 ) { div.style.border="0px"; div.style.borderTop="1px solid #" + getLineColor(doc, item); } else { div.style.backgroundColor="#" + getLineColor(doc, item); } } else { var canvas=document.createElement("canvas"); canvas.id=item.id + (_ubi_cindex++)+ "cv"; divid.appendChild(canvas); if( !canvas.getContext ) G_vmlCanvasManager.initElement(canvas); canvas.style.position="absolute"; canvas.style.left=x + "px"; canvas.style.top=y + "px"; canvas.width=width + 1; canvas.height=height + 1; var ctx=canvas.getContext("2d"); ctx.save(); ctx.lineWidth=getLineThickness(doc, item); ctx.strokeStyle="#" + getLineColor(doc, item); ctx.beginPath(); if( item.linedir == 1 ) { ctx.moveTo(0, canvas.height); ctx.lineTo(canvas.width, 0); } else { ctx.moveTo(0, 0); ctx.lineTo(canvas.width, canvas.height); } ctx.closePath(); ctx.stroke(); ctx.restore(); } }; function DrawRectangleItem(divid, doc, item, ds) { if( item.width == 0 && item.height == 0 ) return; if ( item.ispreview == false ) return; var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var canvas=document.createElement("canvas"); canvas.id=item.id + (_ubi_cindex++)+ "cv"; divid.appendChild(canvas); if( !canvas.getContext ) G_vmlCanvasManager.initElement(canvas); canvas.style.position="absolute"; canvas.style.left=x + "px"; canvas.style.top=y + "px"; canvas.width=width + 1; canvas.height=height + 1; if (isPrint) { var canvasobj=new UbiCanvasObject(); if( item.edgetype == 1 ) { canvasobj.type="ROUNDRECT"; canvasobj.radius=item.edgewidth; } else { canvasobj.type="RECT"; } canvasobj.canvasid=canvas.id; canvasobj.linewidth=getLineThickness(doc, item); canvasobj.strokestyle="#" + getLineColor(doc, item); if( !item.transparent ) { canvasobj.fillstyle="#" + getBackgroundColor(doc, item); } drawcanvaslist[drawcanvaslist.length]=canvasobj; } else { var ctx=canvas.getContext("2d"); ctx.save(); ctx.lineWidth=getLineThickness(doc, item); ctx.strokeStyle="#" + getLineColor(doc, item); ctx.beginPath(); if( item.edgetype == 1 ) { roundedRect(ctx, ctx.lineWidth / 2, ctx.lineWidth / 2, canvas.width - ctx.lineWidth, canvas.height - ctx.lineWidth, item.edgewidth); } else { ctx.rect(ctx.lineWidth / 2, ctx.lineWidth / 2, canvas.width - ctx.lineWidth, canvas.height - ctx.lineWidth); } ctx.closePath(); if( !item.transparent ) { ctx.fillStyle="#" + getBackgroundColor(doc, item); ctx.fill(); } ctx.stroke(); ctx.restore(); } }; function roundedRect(ctx, x, y, width, height, radius){ ctx.beginPath(); ctx.moveTo(x,y+radius); ctx.lineTo(x,y+height-radius); ctx.quadraticCurveTo(x,y+height,x+radius,y+height); ctx.lineTo(x+width-radius,y+height); ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius); ctx.lineTo(x+width,y+radius); ctx.quadraticCurveTo(x+width,y,x+width-radius,y); ctx.lineTo(x+radius,y); ctx.quadraticCurveTo(x,y,x,y+radius); }; function DrawCircleItem(divid, doc, item, ds) { if( item.width == 0 && item.height == 0 ) return; if ( item.ispreview == false ) return; var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var canvas=document.createElement("canvas"); canvas.id=item.id + (_ubi_cindex++)+ "cv"; divid.appendChild(canvas); if( !canvas.getContext ) G_vmlCanvasManager.initElement(canvas); canvas.style.position="absolute"; canvas.style.left=x + "px"; canvas.style.top=y + "px"; canvas.width=width + 1; canvas.height=height + 1; if (isPrint) { var canvasobj=new UbiCanvasObject(); canvasobj.type="CIRCLE"; canvasobj.canvasid=canvas.id; canvasobj.linewidth=getLineThickness(doc, item); canvasobj.strokestyle="#" + getLineColor(doc, item); if( !item.transparent ) { canvasobj.fillstyle="#" + getBackgroundColor(doc, item); } drawcanvaslist[drawcanvaslist.length]=canvasobj; } else { var ctx=canvas.getContext("2d"); ctx.save(); ctx.lineWidth=getLineThickness(doc, item); ctx.strokeStyle="#" + getLineColor(doc, item); var KAPPA=4 * ((Math.sqrt(2) - 1) / 3); var cx=canvas.width / 2; var cy=canvas.height / 2; var rx=cx * KAPPA; var ry=cy * KAPPA; ctx.beginPath(); ctx.moveTo(cx, ctx.lineWidth); ctx.bezierCurveTo(cx + rx, ctx.lineWidth, canvas.width - ctx.lineWidth, cy - ry, canvas.width - ctx.lineWidth, cy); ctx.bezierCurveTo(canvas.width - ctx.lineWidth, cy + ry, cx + rx, canvas.height - ctx.lineWidth, cx, canvas.height - ctx.lineWidth); ctx.bezierCurveTo(cx - rx, canvas.height - ctx.lineWidth, ctx.lineWidth, cy + ry, ctx.lineWidth, cy); ctx.bezierCurveTo(ctx.lineWidth, cy - ry, cx - rx, ctx.lineWidth, cx, ctx.lineWidth); ctx.closePath(); if( !item.transparent ) { ctx.fillStyle="#" + getBackgroundColor(doc, item); ctx.fill(); } ctx.stroke(); ctx.restore(); } }; function DrawImageItem(divid, doc, item, keyurl, ds, vid) { if( item.width == 0 || item.height == 0 ) return; if ( item.ispreview == false ) return; if (item.imageid.indexOf("voiceye") != -1) return; var imageDiv=getImageDiv(doc, item, ds); var alink=null; if (item.linked) { var alink=document.createElement("a"); if (__ubi_viewers[vid] && __ubi_viewers[vid].events.linkButtonDown) { alink.onmouseover=function() { this.style.cursor="pointer";}; alink.onmouseout=function() { this.style.cursor="default";}; alink.onclick=function() {__ubi_viewers[vid]._linkButtonDown(item.linkfilename, item.linkargs); }; } else { if (item.linkstyle == "SCRIPT") { alink.href="javascript:"+item.linkfilename; } else if (item.linkstyle == "REPORT"){ alink.href="javascript:refreshFrame('"+ divid.parentNode.parentNode.parentNode.id +"','"+ item.linkfilename +"','"+ item.linkargs +"')"; } else if (item.linkstyle == "WEBPAGE"){ var url=item.linkfilename; if (item.linkfilename.indexOf(":/"+"/") == -1 && item.linkfilename.indexOf("mailto:") == -1) { url="http:/"+"/"+ item.linkfilename; } alink.href="javascript:window.open(\""+ url + item.linkargs +"\"); void 0;"; } } alink.appendChild(imageDiv); divid.appendChild(alink); } else { divid.appendChild(imageDiv); } var imageobj=doc.objects.Lookup(item.imageid); if( imageobj.loadtype == 1 && imageobj.loadsrc != "" ) { if( __ubi_isMobile ) { var image=getImage2(doc, item, keyurl, imageobj, ds); imageDiv.appendChild(image); } else { var canvas=getCanvas(doc, item, ds); imageDiv.appendChild(canvas); var canvasobj=null; drawCanvas2(doc, canvas, item, keyurl, imageobj, ds); } } else if ((imageobj.loadtype == 2 || imageobj.loadtype == 3) && imageobj.loadsrc != "" ) { getImageType2(imageDiv, doc, item, keyurl, imageobj, ds); } var borderDiv=getBorderDiv(doc, item, ds); if (item.linked) { alink.appendChild(borderDiv); } else { divid.appendChild(borderDiv); } }; function DrawBarcodeItem(divid, doc, item, keyurl, ds) { if( item.width == 0 || item.height == 0 ) return; if ( item.ispreview == false ) return; var imageDiv=getImageDiv(doc, item, ds); divid.appendChild(imageDiv); if( item.loadtype == 1 && item.loadsrc != "" ) { if( __ubi_isMobile ) { var image=getImage(doc, item, keyurl, ds); imageDiv.appendChild(image); } else { var canvas=getCanvas(doc, item); imageDiv.appendChild(canvas); drawCanvas(doc, canvas, item, keyurl, ds); } } var borderDiv=getBorderDiv(doc, item, ds); divid.appendChild(borderDiv); }; function DrawChartComponent(divid, doc, chart, keyurl, ds) { if( chart.width == 0 || chart.height == 0 ) return; var imageDiv=getImageDiv(doc, chart, ds); divid.appendChild(imageDiv); if( (chart.loadtype == 1 || chart.loadtype == 2) && chart.loadsrc != "" ) { if( __ubi_isMobile ) { var image=getImage(doc, chart, keyurl, ds); imageDiv.appendChild(image); } else { var image=getChartImage(doc, chart, keyurl, ds); imageDiv.innerHTML=image; } } }; function getBorderColor(tp, doc, item) { if( tp == "top") return doc.colors.Lookup(doc.lines.Lookup(doc.borders.Lookup(item.borderid).top).colorid).color; else if( tp == "right" ) return doc.colors.Lookup(doc.lines.Lookup(doc.borders.Lookup(item.borderid).right).colorid).color; else if( tp == "bottom" ) return doc.colors.Lookup(doc.lines.Lookup(doc.borders.Lookup(item.borderid).bottom).colorid).color; else if( tp == "left" ) return doc.colors.Lookup(doc.lines.Lookup(doc.borders.Lookup(item.borderid).left).colorid).color; else if( tp == "dd" ) return doc.colors.Lookup(doc.lines.Lookup(doc.borders.Lookup(item.borderid).diagonaldown).colorid).color; else if( tp == "du" ) return doc.colors.Lookup(doc.lines.Lookup(doc.borders.Lookup(item.borderid).diagonalup).colorid).color; }; function getBorderStyle(tp, doc, item) { if( tp == "top") return doc.lines.Lookup(doc.borders.Lookup(item.borderid).top).getStyle(); else if( tp == "right" ) return doc.lines.Lookup(doc.borders.Lookup(item.borderid).right).getStyle(); else if( tp == "bottom" ) return doc.lines.Lookup(doc.borders.Lookup(item.borderid).bottom).getStyle(); else if( tp == "left" ) return doc.lines.Lookup(doc.borders.Lookup(item.borderid).left).getStyle(); else if( tp == "dd" ) return doc.lines.Lookup(doc.borders.Lookup(item.borderid).diagonaldown).getStyle(); else if( tp == "du" ) return doc.lines.Lookup(doc.borders.Lookup(item.borderid).diagonalup).getStyle(); }; function getBorderWidth(tp, doc, item) { var width; var style=getBorderStyle(tp, doc, item); if( tp == "top") width=doc.lines.Lookup(doc.borders.Lookup(item.borderid).top).getWidth(); else if( tp == "right" ) width=doc.lines.Lookup(doc.borders.Lookup(item.borderid).right).getWidth(); else if( tp == "bottom" ) width=doc.lines.Lookup(doc.borders.Lookup(item.borderid).bottom).getWidth(); else if( tp == "left" ) width=doc.lines.Lookup(doc.borders.Lookup(item.borderid).left).getWidth(); else if( tp == "dd" ) width=doc.lines.Lookup(doc.borders.Lookup(item.borderid).diagonaldown).getWidth(); else if( tp == "du" ) width=doc.lines.Lookup(doc.borders.Lookup(item.borderid).diagonalup).getWidth(); if( style == "none" ) width=0; else { if( width % 2 == 1 ) width=parseInt(width / 2) + 1; else width=parseInt(width / 2); } return width; }; function getLineThickness(doc, item) { var width=doc.lines.Lookup(item.lineid).thickness; if( width != 0 ) { if( width % 2 == 1 ) width=parseInt(width / 2) + 1; else width=parseInt(width / 2); } return width; }; function getLineColor(doc, item) { return doc.colors.Lookup(doc.lines.Lookup(item.lineid).colorid).color; }; function getBackgroundColor(doc, item) { return doc.colors.Lookup(item.backgroundid).color; }; function getFont(doc, item, ds) { if( typeof ds == "undefined" ) ds=1.0; return doc.fonts.Lookup(item.fontid).getFont(ds); }; function getFontSize(doc, item, ds) { if( typeof ds == "undefined" ) ds=1.0; return doc.fonts.Lookup(item.fontid).getFontSize(ds); }; function getForegroundColor(doc, item) { return doc.colors.Lookup(item.foregroundid).color; }; function getImageDiv(doc, item, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var div=document.createElement("div"); div.id=item.id; div.style.overflow="hidden"; div.style.position="absolute"; div.style.left=x + "px"; div.style.top=y + "px"; div.style.width=(width + 1) + "px"; div.style.height=(height + 1) + "px"; return div; }; function getBorderDiv(doc, item, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var div=document.createElement("div"); div.style.backgroundColor="transparent"; div.style.position="absolute"; div.style.left=x + "px"; div.style.top=y + "px"; div.style.width=(width + 1) - (getBorderWidth("left", doc, item) + getBorderWidth("right", doc, item)) + "px"; div.style.height=(height + 1) - (getBorderWidth("top", doc, item) + getBorderWidth("bottom", doc, item)) + "px"; div.style.borderTop=getBorderWidth("top", doc, item) + "px " + getBorderStyle("top", doc, item) + " #" + getBorderColor("top", doc, item); div.style.borderRight=getBorderWidth("right", doc, item) + "px " + getBorderStyle("right", doc, item) + " #" + getBorderColor("right", doc, item); div.style.borderBottom=getBorderWidth("bottom", doc, item) + "px " + getBorderStyle("bottom", doc, item) + " #" + getBorderColor("bottom", doc, item); div.style.borderLeft=getBorderWidth("left", doc, item) + "px " + getBorderStyle("left", doc, item) + " #" + getBorderColor("left", doc, item); return div; }; function getCanvas(doc, item, ctx) { var canvas=document.createElement("canvas"); canvas.id=item.id + (_ubi_cindex++)+ "cv"; return canvas; }; function getImage(doc, item, keyurl, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var image=document.createElement("img"); image.id=item.id + (_ubi_iindex++)+ "img"; image.src=keyurl + "&cHJvY2lk=GATEWAY&reqtype=3&serviceid="+doc.serviceid+"&imageid=" + item.loadsrc; image.style.position="absolute"; image.style.left=0 + "px"; image.style.top=0 + "px"; image.style.width=(width + 1) + "px"; image.style.height=(height + 1) + "px"; return image; }; function getImage2(doc, item, keyurl, imageobj, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; var image=document.createElement("img"); image.id=item.id + (_ubi_iindex++)+ "img"; image.src=keyurl + "&cHJvY2lk=GATEWAY&reqtype=3&serviceid="+doc.serviceid+"&imageid=" + imageobj.loadsrc; if( imageobj.fixedrate || imageobj.originalsize ) { var imgleft=0; var imgtop=0; var imgwidth=(Math.round(imageobj.width*ds) / 3) + 1; var imgheight=(Math.round(imageobj.height*ds) / 3) + 1; if( imgwidth < (width + 1) && item.halign != 0 ) { if( item.halign == 1 ) imgleft=((width + 1) - imgwidth) / 2; else if( item.halign == 2 ) imgleft=((width + 1) - imgwidth); } if( imgheight < (height + 1) && item.valign != 0 ) { if( item.valign == 1 ) imgtop=((height + 1) - imgheight) / 2; else if( item.valign == 2 ) imgtop=((height + 1) - imgheight); } image.style.position="absolute"; image.style.left=imgleft + "px"; image.style.top=imgtop + "px"; image.style.width=imgwidth + "px"; image.style.height=imgheight + "px"; } else { image.style.position="absolute"; image.style.left=0 + "px"; image.style.top=0 + "px"; image.style.width=(width + 1) + "px"; image.style.height=(height + 1) + "px"; } return image; }; function getImageType2(imageDiv, doc, item, keyurl, imageobj, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; _ubi_imgcount++; newImg=new Image(); newImg.onload=function(){ var imgWidth=Math.floor(this.width*ds*0.75); var imgHeight=Math.floor(this.height*ds*0.75); var innerhtml=""; var imgsrc=""; if (imageobj.loadtype == 3) { imgsrc=imageobj.loadsrc; if (imgsrc.length > 11 && imgsrc.substr(0,11) != 'data:image/') { var srcarray=[]; srcarray.push('data:image/png;base64,'); srcarray.push(imgsrc); imgsrc=srcarray.join(''); } } else { imgsrc=imageobj.loadsrc; } if (item.valign != 0) { innerhtml += "
    "; } if (item.halign != 1) { imageDiv.style.textAlign=item.getHAlign(); } if (imageobj.originalsize) { innerhtml += "
    "; } else { innerhtml += " 0) { innerhtml += " opacity:" + ((100-imageobj.brightness*2)/100) +"; " +" alpha(opacity:"+(100-imageobj.brightness*2)+");"; } innerhtml += "\">"; } if (item.valign != 0) { innerhtml += "
    "; } imageDiv.innerHTML=innerhtml; _ubi_imgcount--; }; newImg.onerror=function(){ _ubi_imgcount--; }; if (imageobj.loadtype == 3) { newImg.onload(); } else { newImg.src=imageobj.loadsrc; } }; function getChartImage(doc, chart, keyurl, ds) { var x=Math.round(chart.x * ds); var y=Math.round(chart.y * ds); var width=Math.round((chart.x+chart.width) * ds) - x; var height=Math.round((chart.y+chart.height) * ds)- y; var innerhtml=""; var imgurl=keyurl + "&cHJvY2lk=GATEWAY&reqtype=3&serviceid="+doc.serviceid+"&imageid=" + chart.loadsrc; innerhtml += ""; return innerhtml; }; function drawCanvas(doc, canvas, item, keyurl, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; if( !canvas.getContext ) G_vmlCanvasManager.initElement(canvas); var ctx=canvas.getContext("2d"); canvas.style.position="absolute"; canvas.style.left=0 + "px"; canvas.style.top=0 + "px"; canvas.width=width + 1; canvas.height=height + 1; var image=new Image(); image.id=item.id + (_ubi_iindex++)+ "img"; image.onload=function() { if (isPrint == false) { ctx.drawImage(image, 0, 0, canvas.width, canvas.height); } }; image.src=keyurl + "&cHJvY2lk=GATEWAY&reqtype=3&serviceid="+doc.serviceid+"&imageid=" + item.loadsrc; if (isPrint) { var canvasobj=new UbiCanvasObject(); canvasobj.type="IMAGE"; canvasobj.canvasid=canvas.id; canvasobj.imageid=image.id; canvasobj.x=0; canvasobj.y=0; canvasobj.width=width + 1; canvasobj.height=height + 1; canvasobj.src=image.src; drawcanvaslist[drawcanvaslist.length]=canvasobj; } }; function drawCanvas2(doc, canvas, item, keyurl, imageobj, ds) { var x=Math.round(item.x * ds); var y=Math.round(item.y * ds); var width=Math.round((item.x+item.width) * ds) - x; var height=Math.round((item.y+item.height) * ds)- y; if( !canvas.getContext ) G_vmlCanvasManager.initElement(canvas); var ctx=canvas.getContext("2d"); canvas.style.position="absolute"; canvas.style.left=0 + "px"; canvas.style.top=0 + "px"; canvas.width=width + 1; canvas.height=height + 1; var imgleft=0; var imgtop=0; var imgwidth=canvas.width; var imgheight=canvas.height; if( imageobj.fixedrate || imageobj.originalsize ) { imgwidth=(Math.round(imageobj.width * ds) / 3) + 1; imgheight=(Math.round(imageobj.height * ds) / 3) + 1; if( imgwidth < canvas.width && item.halign != 0 ) { if( item.halign == 1 ) imgleft=(canvas.width - imgwidth) / 2; else if( item.halign == 2 ) imgleft=(canvas.width - imgwidth); } if( imgheight < canvas.height && item.valign != 0 ) { if( item.valign == 1 ) imgtop=(canvas.height - imgheight) / 2; else if( item.valign == 2 ) imgtop=(canvas.height - imgheight); } } var image=new Image(); image.id=item.id + (_ubi_iindex++)+ "img"; image.onload=function() { if (isPrint == false) { ctx.drawImage(image, imgleft, imgtop, imgwidth, imgheight); } }; if (imageobj.loadtype == 2) { image.src=imageobj.loadsrc; } else { image.src=keyurl + "&cHJvY2lk=GATEWAY&reqtype=3&serviceid="+doc.serviceid+"&imageid=" + imageobj.loadsrc; } if (isPrint) { var canvasobj=new UbiCanvasObject(); canvasobj.type="IMAGE"; canvasobj.canvasid=canvas.id; canvasobj.imageid=image.id; canvasobj.x=imgleft; canvasobj.y=imgtop; canvasobj.width=imgwidth; canvasobj.height=imgheight; canvasobj.src=image.src; drawcanvaslist[drawcanvaslist.length]=canvasobj; } }; }});var UbiCanvasObject=Base.extend({ type: "", divid: "", canvasid: "", imageid: "", left: 0, top: 0, width: 0, height: 0, src: "", linewidth: 0, strokestyle: "", fillstyle: "", radius: 0});var __ubi_isFF=false;var __ubi_isIE=false;var __ubi_isChrome=false;var __ubi_isOpera=false;var __ubi_isSafari=false;var __ubi_isMacOS=false;var __ubi_ieVersion=6;var __ubi_isMobile=false;var __ubi_isEdge=false;var __ubi_isWhale=false;var mobileKeyWords=new Array('iPhone', 'iPod', 'iPad', 'BlackBerry', 'Android', 'Windows CE', 'LG', 'MOT', 'SAMSUNG', 'SonyEricsson');try{ for (var word in mobileKeyWords) { if( navigator.userAgent.match(mobileKeyWords[word]) != null ) { __ubi_isMobile=true; break; } };}catch(e){}if (navigator.userAgent.indexOf('Macintosh')!= -1) __ubi_isMacOS=true;if (navigator.userAgent.indexOf('Trident/7')!= -1 && navigator.appName.indexOf("Netscape")!= -1 && navigator.product == "Gecko") { __ubi_isIE=true; __ubi_ieVersion=11;}else if (navigator.userAgent.indexOf('Whale')!= -1) { __ubi_isWhale=true;}else if (navigator.userAgent.indexOf('Edge')!= -1) { __ubi_isEdge=true;}else if (navigator.userAgent.indexOf('Chrome')!= -1) { if (navigator.userAgent.indexOf('OPR')!= -1) { __ubi_isOpera=true; } else { __ubi_isChrome=true; }}else if (navigator.userAgent.indexOf('Firefox')!= -1) { __ubi_isFF=true;}else if ((navigator.userAgent.indexOf('Safari')!= -1)||(navigator.userAgent.indexOf('Konqueror') != -1)) { __ubi_isSafari=true;}else if (navigator.userAgent.indexOf('Opera')!= -1) { __ubi_isOpera=true; _OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6, 3));}else if (navigator.appName.indexOf("Microsoft")!= -1) { __ubi_isIE=true; if (navigator.appVersion.indexOf("MSIE 10.0")!= -1 && document.compatMode != "BackCompat") { __ubi_ieVersion=10; } if (navigator.appVersion.indexOf("MSIE 9.0")!= -1 && document.compatMode != "BackCompat") { __ubi_ieVersion=9; } if (navigator.appVersion.indexOf("MSIE 8.0")!= -1 && document.compatMode != "BackCompat") { __ubi_ieVersion=8; } if (navigator.appVersion.indexOf("MSIE 7.0")!= -1) { __ubi_ieVersion=7; }}else { __ubi_isFF=true;};if (__ubi_isIE) { if (window.XMLHttpRequest==null) __ubi_ieVersion=6;};function _ubi_lowerIE9() { if (__ubi_isIE && __ubi_ieVersion < 9) { return true; } return false;}function _ubi_checkPdfReader() { var obj=null; if (__ubi_isIE) { try { obj=new ActiveXObject("AcroPDF.PDF"); if( obj != null ) return true; } catch(e){ try { obj=new ActiveXObject("PDF.PdfCtrl"); if( obj != null ) return true; } catch(e1) { } } } else { var nav=navigator.plugins; for ( var i=0; i < nav.length; i++) { var name=nav[i].name; if( name.indexOf("Adobe Reader") != -1 || name.indexOf("Adobe PDF") != -1 || name.indexOf("Acrobat") != -1 || name.indexOf("Chrome PDF") != -1 ) { var version=nav[i].version; return true; } } } return false;}function _ubi_AddEvent(obj, evt, fn) { evt=(evt.indexOf(" ") != -1) ? evt.split(" ") : [ evt ]; for (i in evt) { var e=evt[i]; if (e == "mousewheel") { if (obj.addEventListener) obj.addEventListener('DOMMouseScroll', fn, false); obj.onmousewheel=fn; break; } if (obj.addEventListener) obj.addEventListener((e == "mousewheel") ? "DOMMouseScroll" : e, fn, false); else if (obj.attachEvent) obj.attachEvent('on' + e, fn); }}function _ubi_RemoveAddEvent(obj, evt, fn) { evt=(evt.indexOf(" ") != -1) ? evt.split(" ") : [ evt ]; for (i in evt) { var e=evt[i]; if (e == "mousewheel") { if (obj.removeEventListener) obj.removeEventListener('DOMMouseScroll', fn, false); obj.onmousewheel=null; break; } if (obj.removeEventListener) obj.removeEventListener((e == "mousewheel") ? "DOMMouseScroll" : e, fn, false); else if (obj.detachEvent) obj.detachEvent('on' + e, fn); }}function _ubi_strToBool(str) { if (str == "true") return true; if (str == "false") return false; return str;}function _ubi_strToInt(str) { var val=0; if (str) { try { val=parseInt(str); } catch (e) { val=0; } } return val;}function _ubi_isNumber(s) { s += ''; s=s.replace(/^\s*|\s*$/g, ''); if (s == '' || isNaN(s)) return false; return true;}function _ubi_clone(obj) { if (obj === null || typeof(obj) !== 'object') { return obj; } var copy=obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) { copy[attr]=_ubi_clone(obj[attr]); } } return copy;}function _ubi_getMessage(language, key) { var lang=language; if (language == 'ko' || language == 'kr') { lang='korean'; } else if (language == 'en' || language == 'us') { lang='english'; } else if (language == 'es') { lang='spanish'; } if(typeof(_ubi_msg)=="undefined") { _ubi_msg={'korean':{ "StreamingMsg": "\uD604\uC7AC \uC2A4\uD2B8\uB9AC\uBC0D \uB9AC\uD3EC\uD2B8\uB97C \uC0DD\uC131 \uC911\uC785\uB2C8\uB2E4.", "StreamingMsg2": "\uD398\uC774\uC9C0 \uC0DD\uC131 \uC911...", "StreamingMsg3": "\uD398\uC774\uC9C0 \uC911 ", "CompleteMsg": "\uC2A4\uD2B8\uB9AC\uBC0D \uB9AC\uD3EC\uD2B8 \uC0DD\uC131\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", "CreateErrMsg": "\uB9AC\uD3EC\uD2B8\uAC00 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.", "TotalpageErrMsg": "\uC804\uCCB4 \uD398\uC774\uC9C0 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD558\uC600\uC2B5\uB2C8\uB2E4.", "UnknownErrMsg": "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD558\uC600\uC2B5\uB2C8\uB2E4.", "ErrMsg": "\uC624\uB958\uAC00 \uBC1C\uC0DD\uD558\uC600\uC2B5\uB2C8\uB2E4.", "ExportMsg" : "\uD30C\uC77C\uC744 \uC0DD\uC131 \uC911\uC785\uB2C8\uB2E4.", "ExportMsg2" : "\uC804\uC6A9 \uBDF0\uC5B4 \uBAA8\uB4DC\uC5D0\uC11C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC800\uC7A5 \uD0C0\uC785\uC785\uB2C8\uB2E4.", "StatusWaitMsg" : "\uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824 \uC8FC\uC138\uC694.", "PrintDlgTitle": "\uC778\uC1C4 \uBC94\uC704\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.", "PrintDlgAll": "\uBAA8\uB450", "PrintDlgCurrent": "\uD604\uC7AC", "PrintDlgFromTo": "\uD398\uC774\uC9C0 \uC9C0\uC815", "PrintDlgFrom": "\uBD80\uD130", "PrintDlgTo": "\uAE4C\uC9C0", "PrintDlgHMent": "Internet Explorer\uC5D0\uC11C \uAC00\uB85C \uC591\uC2DD\uC740 \uC778\uC1C4 \uBBF8\uB9AC \uBCF4\uAE30", "PrintDlgHMent2": "\uC635\uC158\uC5D0\uC11C \uC6A9\uC9C0 \uBC29\uD5A5\uC744 \uBCC0\uACBD\uD558\uC5EC \uC778\uC1C4\uD558\uC138\uC694.", "PrintDlgLink": "\uC790\uC138\uD788 \uBCF4\uAE30", "PrintDlgMent": "\u203B \uC778\uC1C4\uB7C9\uC774 \uB9CE\uC544\uC11C \uBD80\uBD84\uC778\uC1C4\uB9CC \uAC00\uB2A5\uD569\uB2C8\uB2E4.", "PrintDlgMaxMent" : "\uCD5C\uB300 \uD398\uC774\uC9C0 \uC218 : ", "PrintDlgHTMLRangeErr": "HTML\uC778\uC1C4 \uD5C8\uC6A9 \uD398\uC774\uC9C0 \uBC94\uC704\uB97C \uBC97\uC5B4\uB0AC\uC2B5\uB2C8\uB2E4.", "PrintDlgRangeErr": "\uD398\uC774\uC9C0 \uBC94\uC704\uB97C \uBC97\uC5B4\uB0AC\uC2B5\uB2C8\uB2E4.", "PrintDlgEnter": "\n\uB2E4\uC2DC \uC785\uB825\uD558\uC5EC \uC8FC\uC2ED\uC2DC\uC624.", "Button_OK": "\uD655\uC778", "Button_Cancel": "\uCDE8\uC18C", "PdfCheckMsg9": "Adobe Reader\uC758 \uBC84\uC804\uC774 \uC124\uCE58\uB418\uC5B4\uC788\uC9C0 \uC54A\uAC70\uB098, 9 \uBC84\uC804 \uC774\uD558\uC758 \uC624\uB798\uB41C \uBC84\uC804\uB9CC \uC124\uCE58\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.", "PdfCheckMsg6": "Adobe Reader\uC758 \uBC84\uC804\uC774 \uC124\uCE58\uB418\uC5B4\uC788\uC9C0 \uC54A\uAC70\uB098, 6 \uBC84\uC804 \uC774\uD558\uC758 \uC624\uB798\uB41C \uBC84\uC804\uB9CC \uC124\uCE58\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.", "PdfGuideMsg": "\uC5B4\uB3C4\uBE44 \uD648\uD398\uC774\uC9C0\uC5D0\uC11C \uCD5C\uC2E0 Adobe Reader\uB97C
    \uC124\uCE58\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4.", "PdfDownloadMsg" : "\uD604\uC7AC \uC0AC\uC6A9 \uC911\uC778 ^browser^ \uBE0C\uB77C\uC6B0\uC800\uB294 PDF \uD30C\uC77C\uC774 \uB2E4\uC6B4\uB85C\uB4DC\uB429\uB2C8\uB2E4.
    \uC778\uC1C4\uB97C \uC6D0\uD558\uB294 \uACBD\uC6B0 \uC800\uC7A5 \uBC84\uD2BC\uC744 \uC774\uC6A9\uD558\uC5EC \uD30C\uC77C \uC800\uC7A5 \uD6C4
    \uC778\uC1C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.", "PdfDownloadChromeMsg" : "PDF \ud30c\uc77c\uc5d0 \uc554\ud638\uac00 \uc124\uc815\ub418\uc5b4 \ud30c\uc77c\uc774 \ub2e4\uc6b4\ub85c\ub4dc\ub429\ub2c8\ub2e4.
    \uC778\uC1C4\uB97C \uC6D0\uD558\uB294 \uACBD\uC6B0 \uC800\uC7A5 \uBC84\uD2BC\uC744 \uC774\uC6A9\uD558\uC5EC \uD30C\uC77C \uC800\uC7A5 \uD6C4
    \uC778\uC1C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.", "PdfInstallMsg1" : "\uD604\uC7AC \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C Adobe Reader\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", "PdfInstallMsg2" : "\uD604\uC7AC \uC124\uCE58\uB41C Adobe Reader\uC758 \uBC84\uC804\uC774 \uB0AE\uAC70\uB098 \uC815\uC0C1\uC801\uC73C\uB85C \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.", "PdfInstallMsg3" : "\uC815\uC0C1\uC801\uC778 \uC778\uC1C4\uB97C \uC704\uD574\uC11C\uB294 Adobe Reader 10 \uBC84\uC804 \uC774\uC0C1\uC744 \uC124\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4.
    \uBE0C\uB77C\uC6B0\uC800 \uC885\uB8CC \uD6C4 \uC544\uB798 \uC0AC\uC774\uD2B8\uB97C \uD1B5\uD574\uC11C \uC124\uCE58\uD558\uAE30 \uBC14\uB78D\uB2C8\uB2E4.

    https://get.adobe.com/kr/reader

    \uC124\uCE58 \uC5C6\uC774 \uC778\uC1C4\uD558\uAE30\uB97C \uC6D0\uD55C\uB2E4\uBA74 \uC800\uC7A5 \uBC84\uD2BC\uC744 \uC774\uC6A9\uD558\uC5EC \uD30C\uC77C \uC800\uC7A5 \uD6C4 \uC778\uC1C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.", "SaveFileMsg1" : "  \u203B \uBCC4\uB3C4\uC758 \uC124\uCE58 \uC5C6\uC774 \uD30C\uC77C\uC744 PC\uB85C \uB2E4\uC6B4\uB85C\uB4DC \uD569\uB2C8\uB2E4.", "SaveFileMsg2" : "  ※ \uD398\uC774\uC9C0 \uC218\uAC00 \uB9CE\uC740 \uACBD\uC6B0 \uC77C\uBC18 \uC800\uC7A5\uBCF4\uB2E4 \uBE60\uB974\uAC8C \uC800\uC7A5\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
      \uD504\uB85C\uADF8\uB7A8 \uC124\uCE58\uAC00 \uD544\uC694\uD558\uBA70 \uD574\uB2F9 \uD504\uB85C\uADF8\uB7A8\uC774 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC740 \uACBD\uC6B0
      \uC124\uCE58 \uC791\uC5C5\uC774 \uC9C4\uD589\uB429\uB2C8\uB2E4.", "SaveDialogTitle" : "\uD30C\uC77C \uC800\uC7A5", "SaveDialogType" : "\uC800\uC7A5 \uBC29\uC2DD", "SaveDialogFileType" : "\uD30C\uC77C \uC720\uD615", "SaveDialogDefault" : "\uC77C\uBC18 \uC800\uC7A5", "SaveDialogUbiViewer" : "\uC804\uC6A9 \uBDF0\uC5B4 \uC800\uC7A5", "PrintPDFTitle" : "PDF \uC778\uC1C4 \uC548\uB0B4", "PrintHTMLTitle" : "HTML \uC778\uC1C4 \uC548\uB0B4", "PrintHTMLMsg_Edge" : "\uC778\uC1C4\uD558\uAE30 \uC804 \u2018\uBA38\uB9AC\uAE00 \uBC0F \uBC14\uB2E5\uAE00\u2019\uC5D0\uC11C \u2018\uB054\u2019\uC744 \uC120\uD0DD\uD558\uACE0 \uC778\uC1C4 \uBC84\uD2BC\uC744 \uB204\uB974\uBA74 \uB429\uB2C8\uB2E4.", "PrintHTMLMsg_FF" : "\uC778\uC1C4\uD558\uAE30 \uC804 \uBE0C\uB77C\uC6B0\uC800 \uC124\uC815\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.
    \uBE0C\uB77C\uC6B0\uC800\uC758 [\uD30C\uC77C] \uBA54\uB274 > \uD398\uC774\uC9C0 \uC124\uC815 > \uC5EC\uBC31 \uBC0F \uBA38\uB9AC\uAE00/\uBC14\uB2E5\uAE00\uC5D0\uC11C \uBA38\uB9AC\uAE00, \uBC14\uB2E5\uAE00\uC744 \u2018\uACF5\uBC31\u2019\uC73C\uB85C \uC124\uC815\uD55C \uD6C4 \uC778\uC1C4\uD558\uAE30 \uBC14\uB78D\uB2C8\uB2E4.", "PrintHTMLMsg_Chrome" : "\uC778\uC1C4\uD558\uAE30 \uC804 \u2018\uC124\uC815 \uB354\uBCF4\uAE30\u2019\uC5D0\uC11C \u2018\uBA38\uB9AC\uAE00\uACFC \uBC14\uB2E5\uAE00\u2019 \uC635\uC158\uC744 \uD574\uC81C\uD55C \uD6C4 \uC778\uC1C4 \uBC84\uD2BC\uC744 \uB204\uB974\uBA74 \uB429\uB2C8\uB2E4.", "PrintHTMLMsg_Opera" : "\uC778\uC1C4\uD558\uAE30 \uC804 \u2018\uCD94\uAC00 \uC635\uC158\u2019\uC5D0\uC11C \u2018\uBA38\uB9AC\uAE00\uACFC \uBC14\uB2E5\uAE00\u2019 \uC635\uC158\uC744 \uD574\uC81C\uD55C \uD6C4 \uC778\uC1C4 \uBC84\uD2BC\uC744 \uB204\uB974\uBA74 \uB429\uB2C8\uB2E4.", "PrintHTMLMsg_IE" : "\uC778\uC1C4\uD558\uAE30 \uC804 \uBE0C\uB77C\uC6B0\uC800 \uC124\uC815\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.
    \uBE0C\uB77C\uC6B0\uC800\uC758 [\uD30C\uC77C] \uBA54\uB274 > \uD398\uC774\uC9C0 \uC124\uC815 > \uBA38\uB9AC\uAE00/\uBC14\uB2E5\uAE00\uC744 \u2018\uBE44\uC5B4 \uC788\uC74C\u2019\uC73C\uB85C \uC124\uC815\uD55C \uD6C4 \uC778\uC1C4\uD558\uAE30 \uBC14\uB78D\uB2C8\uB2E4.", "PrintHTMLMsg_IEObj" : "\uC778\uC1C4\uD558\uAE30 \uC804 '\uD398\uC774\uC9C0 \uC124\uC815(Alt + U)'\uC5D0\uC11C
    \uBA38\uB9AC\uAE00 \uBC0F \uBC14\uB2E5\uAE00 \u2018\uBE44\uC5B4 \uC788\uC74C\u2019\uC744 \uC120\uD0DD \uD6C4 \uC778\uC1C4\uD558\uAE30 \uBC14\uB78D\uB2C8\uB2E4.", "ExportOption" : "\uC800\uC7A5 \uC635\uC158", "ExportFormat" : "\uD3EC\uB9F7", "TiffOption" : "Tiff \uC555\uCD95 \uBC29\uC2DD", "TiffPageOption" : "\uD398\uC774\uC9C0\uBCC4 Tiff \uC774\uBBF8\uC9C0 \uC0DD\uC131", "ZipFileMsg" : "※ \uC774\uBBF8\uC9C0\uB294 \uC555\uCD95 \uD30C\uC77C(*.zip)\uB85C \uB2E4\uC6B4\uB85C\uB4DC\uB429\uB2C8\uB2E4." }}; } var rtnstr=""; if (_ubi_msg[lang]) { if (_ubi_msg[lang][key] != undefined) rtnstr=_ubi_msg[lang][key]; } return rtnstr;}function _ubi_wafoucus(id) { if (!id) return; var obj=null; if (typeof(id) == "object") { obj=id; } else { obj=document.getElementById(id); } if (obj) { obj.setAttribute("orgstyle", obj.style.cssText); obj.style.border="2px solid #FF0000"; }}function _ubi_wablur(id) { if (!id) return; var obj=null; if (typeof(id) == "object") { obj=id; } else { obj=document.getElementById(id); } if (obj) { obj.style.cssText=obj.getAttribute("orgstyle"); }}var __ubi_createStyle=false;var __ubi_viewers=[];var __ubi_URF="0";var __ubi_EXPORT_URF="1";var __ubi_PDF="2";var __ubi_EXPORT_IMAGE="10";var __ubi_EXPORT_PDF="11";var __ubi_EXPORT_EXCEL1="12";var __ubi_EXPORT_EXCEL2="13";var __ubi_EXPORT_RTF="14";var __ubi_EXPORT_HWP="15";var __ubi_EXPORT_PPTX="16";var __ubi_EXPORT_HML="17";var __ubi_EXPORT_DOCX="18";var __ubi_EXPORT_CELL="19";var __ubi_PAGE="91";var __ubi_TOTAL_PAGE="99";var __ubi_EXPORT_JOB="93";var __ubi_EXPORT_RESULT="94";var __ubi_exportMap={ 'SAVE_PDF' : __ubi_EXPORT_PDF, 'PDF' : __ubi_EXPORT_PDF, 'EXCEL_TYPE1': __ubi_EXPORT_EXCEL1, 'EXCEL_TYPE2': __ubi_EXPORT_EXCEL2, 'SAVE_PPTX' : __ubi_EXPORT_PPTX, 'PPTX' : __ubi_EXPORT_PPTX, 'SAVE_HML' : __ubi_EXPORT_HML, 'HML' : __ubi_EXPORT_HML, 'SAVE_DOCX' : __ubi_EXPORT_DOCX, 'DOCX' : __ubi_EXPORT_DOCX, 'SAVE_CELL' : __ubi_EXPORT_CELL, 'CELL' : __ubi_EXPORT_CELL, 'IMAGE' : __ubi_EXPORT_IMAGE };var UbiViewer=Base.extend({ key: "", page: 0, totalPage: 0, PrintDefaultType : "PDF", SaveDefaultType : "", SaveExcelDefaultType : "EXCEL_TYPE1", exportSeq : -1, isEnableNoPage : false, retrieveUrfUrl : "", HmlExtension : "hml", ieAdobeReaderInfoPopup : false, vid : null, viewer : this, serviceValid : false, pageWidth : 0, pageHeight : 0, pageOrientation : "Portrait", ds : 1, exportsetmode : 1, _isMultiDocument: false, _isMultiPaper: false, _isPrintPDF: false, _isAutoDownload: true, _isReceiveTotalpage: false, _exportImageType: "", _scrollUpdateTimerID : null, _scrollPageCount : -1, _arghash : new UbiMap(), _datasets : [], constructor: function(params, styles, events) { this.params={ reqtype: __ubi_URF, cHJvY2lk: "GATEWAY", imageid: "", key: params.key || "", ubiserverurl: params.ubiserverurl || "", printurl: params.printurl || "", timeout: params.timeout || "600000", jrffile: params.jrffile || "", masterfilename: params.masterfilename || "", resid: params.resid || "", arg: params.arg || "", ismultireport: params.ismultireport || "false", multicount: params.multicount || "1", ismultireportpaging: params.ismultireportpaging || "true", exportseq: params.exportseq || "", reporttitle: params.reporttitle || "", sheetname: params.sheetname || "", toolbar: params.toolbar || "true", resource: params.resource || "", divid: params.divid || params.div.id, skin: params.skin || "standard", scale: params.scale || "PageWidth", userscale: params.userscale || "0", isencrypt: params.isencrypt || "false", isencrypt64: params.isencrypt64 || "false", bgcolor: params.bgcolor || "#E4E4E4", bgimage: params.bgimage || "", flicking: params.flicking || "false", scrollpage: params.scrollpage || "true", isStreaming: params.isStreaming || "true", issvg: params.issvg || "false", direction: params.direction || "", language: params.language || "ko", printlimit: params.printlimit || "20", imagescale: params.imagescale || "100", isexportchartimage : params.isexportchartimage || "true", exceladjustpage : params.exceladjustpage || "false", excelExportLineItem : params.excelExportLineItem || "false", excelPrintPaperSize : params.excelPrintPaperSize || "", excelPrintfitWidth : params.excelPrintfitWidth || "", excelPrintfitHeight : params.excelPrintfitHeight || "", excelSheetPerReport : params.excelSheetPerReport || "false", excelSheetPerMasterPage: params.excelSheetPerMasterPage || "false", excelSheetPerPage: params.excelSheetPerPage || "false", excelSkipMasterItem : params.excelSkipMasterItem || "false", excelSheetPerPageCount: params.excelSheetPerPageCount || "100", excelOrgItemType : params.excelOrgItemType || "false", excelExportUseUrf : params.excelExportUseUrf || "true", tiffType : params.tiffType || "GROUP3_2D", tiffPerPage : params.tiffPerPage || "false", streamdata : params.streamdata || "", clienttype : params.clienttype || "", datasetinfos : params.datasetinfos || "", runtimedata: params.runtimedata || "", isvoiceye : params.isvoiceye || "false", iswa : params.iswa || "false", isredbc : params.isredbc || "false", password : params.password || "", drmdocnumber : params.drmdocnumber || "", drmdocname : params.drmdocname || "", drmpagenames : params.drmpagenames || "", hmlTableProtect : params.hmlTableProtect || "false", hmlTextWrap : params.hmlTextWrap || "InFrontOfText", fontElement : params.fontElement || "", userHeader : params.userHeader || "", useplugin : params.useplugin || "false", usepluginsave : params.usepluginsave || "false", pluginprogress : params.pluginprogress || "false", printIEobj : params.printIEobj || "false", useAdobeReader : params.useAdobeReader || "true", exportPageFrom : params.exportPageFrom || "0", exportPageTo : params.exportPageTo || "0", exportAsOrgImage : params.exportAsOrgImage || "true", exportDS : params.exportDS || "1", serviceid : "" }; this.pluginparams=[]; if (styles == undefined) styles={}; this.styles={ margin: styles.margin || "10", pagegap: styles.pagegap || "10", pageborder: styles.pageborder || "true", pagebordercolor: styles.pagebordercolor || "#A0A0A0", toolbarbgcolor: styles.toolbarbgcolor || "#ffffff" }; if (events == undefined) events={}; this.events={ printEnd: events.printEnd, exportEnd: events.exportEnd, closeEnd: events.closeEnd, linkButtonDown: events.linkButtonDown, getUserParams: events.getUserParams, printClicked : events.printClicked, exportClicked : events.exportClicked }; if (_ubi_strToBool(this.params.issvg)) { if (_ubi_lowerIE9()) { alert("IE8 이하에서는 HTML5 뷰어 기능을 지원하지 않습니다.\nHTML4 뷰어로 미리보기를 진행합니다."); this.params.issvg=false; } else { this.params.isStreaming=true; this.params.scrollpage=true; } } this.vid=this.params.divid; var params=this.params; var styles=this.styles; for(var viewerIndex in __ubi_viewers) { if(__ubi_viewers[viewerIndex]) { if(this.vid == __ubi_viewers[viewerIndex].vid) { __ubi_viewers[viewerIndex].destroy(); __ubi_viewers[viewerIndex]=null; } } } __ubi_viewers[this.vid]=this; _ubi_AddEvent(window, "resize", function() { __ubi_viewers[params.divid].resize(); } ); this.page=1; this.totalPage=0; this.isEnableNoPage=false; this.toolbarHeight=44; this.msgWidth=380; this.msgHeight=122; this.msg=""; if (__ubi_createStyle == false) { __ubi_createStyle=true; if (document.styleSheets.length < 1) { var s=document.createElement('style'); document.head.appendChild(s); }; if (document.styleSheets[0]) { var sheet=document.styleSheets[0]; if (sheet.addRule) { sheet.addRule('.ubireportcontainer', 'white-space:normal; box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer div', 'box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer .toolbar', 'position:relative; white-space:normal; box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer .toolbar div', 'position:relative; white-space:normal; box-sizing:content-box; overflow:visible;', 0); sheet.addRule('.ubireportcontainer .toolbar input', 'position:relative; white-space:normal; box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer .dialog', 'position:absolute; white-space:normal; box-sizing:content-box; overflow:visible;', 0); sheet.addRule('.ubireportcontainer .dialog div', 'position:static; white-space:normal; box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer .dialog input', 'position:static; white-space:normal; box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer .textitem', 'position: absolute; border: 0px; margin:0px; padding: 0px; letter-spacing: 0px; overflow: hidden; box-sizing:content-box;', 0); sheet.addRule('.ubireportcontainer .textitem td', 'margin:0px; padding:0px; word-wrap:break-word; white-space:pre-wrap; word-break:break-all; letter-spacing:-0.3px; text-align: center; vertical-align: middle; box-sizing:content-box;', 0); sheet.addRule('.ubireportdlgcontainer', 'white-space:normal; box-sizing:content-box;', 0); sheet.addRule('.ubireportdlgcontainer div', 'white-space:normal; box-sizing:content-box;', 0); } else { sheet.insertRule('.ubireportcontainer { white-space:normal; box-sizing:content-box; }', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer div { box-sizing:content-box; }', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .toolbar {position:relative; white-space:normal; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .toolbar div {position:relative; white-space:normal; box-sizing:content-box; overflow:visible;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .toolbar input {position:relative; white-space:normal; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .dialog {position:absolute; white-space:normal; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .dialog div {position:static; white-space:normal; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .dialog input {position:static; white-space:normal; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .textitem {position: absolute; border: 0px; margin:0px; padding: 0px; letter-spacing: 0px; overflow: hidden; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportcontainer .textitem td { margin:0px; padding:0px; word-wrap:break-word; white-space:pre-wrap; word-break:break-all; letter-spacing:-0.3px; text-align: center; vertical-align: middle; box-sizing:content-box;}', sheet.cssRules.length); sheet.insertRule('.ubireportdlgcontainer { white-space:normal; box-sizing:content-box; }', sheet.cssRules.length); sheet.insertRule('.ubireportdlgcontainer div { box-sizing:content-box; }', sheet.cssRules.length); } } else { alert('[UbiReport] StyleSheets is null!'); }; } this.divMain=null; this.divToolbar=null; this.divPreviewFrame=null; this.divCanvas=null; this.divLoadImage=null; this.divMsg=null; this.toolbar=null; this.ubidoc=null; this.divMain=document.getElementById(params.divid); var divMain=this.divMain; divMain.style.textAlign="center"; divMain.className="ubireportcontainer"; this.divToolbar=document.createElement("div"); var divToolbar=this.divToolbar; divToolbar.id=params.divid + "_toolbar"; if( params.toolbar == "false" ) this.toolbarHeight=0; divToolbar.className="toolbar"; divToolbar.style.height=this.toolbarHeight + 'px'; divToolbar.style.whiteSpace="nowrap"; divToolbar.style.overflow="hidden"; divToolbar.style.backgroundColor=styles.toolbarbgcolor; if( params.toolbar == "true" ) divToolbar.style.borderBottom="1px solid #767676"; divMain.appendChild(divToolbar); this.toolbar=new UbiPreviewToolbar(this); if (params.iswa == true || params.iswa == "true") { this.toolbar.applyWA(params.divid); } this.toolbar.setCurrScale(params.scale); this.toolbar.setVisibleToolbar("PRINTSET", false); this.toolbar.setVisibleToolbar("PRINT_UBI", _ubi_strToBool(this.params.useplugin)); if (this.params.language == 'ko') { this.toolbar.setMenuTextToolbar('HML', '\uD55C\uAE00'); this.toolbar.setMenuTextToolbar('CELL', '\uD55C\uC140'); } if (_ubi_strToBool(params.isredbc) == true) { this.toolbar.setVisibleToolbar("SAVE", false); this.toolbar.setVisibleToolbar("PRINT_PDF", false); this.toolbar.setVisibleToolbar("PRINT_HTML", false); this.toolbar.setVisibleToolbar("PRINT_UBI", false); this.toolbar.setVisibleToolbar("PRINTSET", false); this.setPrintMenu("PDF"); } this.divPreviewFrame=document.createElement("div"); var divPreviewFrame=this.divPreviewFrame; divPreviewFrame.id=params.divid + "_previewframe"; if( params.bgimage == "" ) divPreviewFrame.style.backgroundColor=params.bgcolor; else divPreviewFrame.style.backgroundImage="url(" + params.bgimage + ")"; divPreviewFrame.style.position="relative"; divPreviewFrame.style.margin="0px"; divPreviewFrame.style.padding="0px"; divPreviewFrame.style.width="100%"; divPreviewFrame.style.height=(parseInt(divMain.style.height) - parseInt(divToolbar.style.height)) + 'px'; divPreviewFrame.style.overflow="auto"; divPreviewFrame.style.textAlign="center"; divPreviewFrame.style.whiteSpace="normal"; divPreviewFrame.style.MozUserSelect="none"; divPreviewFrame.style.webkitUserSelect="none"; divMain.appendChild(divPreviewFrame); var tmpviewer=this; _ubi_AddEvent(divPreviewFrame, "scroll", function(){ clearTimeout(tmpviewer._scrollUpdateTimerID); tmpviewer._scrollUpdateTimerID=setTimeout(function(){tmpviewer._scrollUpdate();},100); }); if (!_ubi_lowerIE9()) { _ubi_AddEvent(divPreviewFrame, "touchmove", function (evt) { evt.stopPropagation(); }); _ubi_AddEvent(divPreviewFrame, "mousewheel", function (evt) { evt.stopPropagation(); }); } this.divMsg=document.createElement("div"); var divMsg=this.divMsg; divMsg.id=params.divid + "_msg"; divMsg.style.display="none"; divMsg.style.position="absolute"; divMsg.style.left=(parseInt(this.divMain.style.width) - this.msgWidth) / 2 + "px"; divMsg.style.top=(parseInt(this.divMain.style.height) - this.msgHeight) / 2 + "px"; divMsg.style.width=(this.msgWidth + "px"); divMsg.style.height=(this.msgHeight + "px"); divMsg.style.fontFamily="Tahoma"; divMsg.style.fontSize="11px"; divMsg.style.margin="0 auto"; divMsg.style.backgroundColor="#f3f3f3"; divMsg.style.border="2px solid #000000"; divMain.appendChild(divMsg); this.divDisable=document.createElement("div"); this.divDisable.style.display="none"; this.divDisable.style.position="absolute"; this.divDisable.style.left='0px'; this.divDisable.style.top='0px'; if (__ubi_isIE && __ubi_ieVersion <= 9) { this.divDisable.style.backgroundColor='rgb(190,190,190)'; this.divDisable.style.filter="alpha(opacity=50)"; } else { this.divDisable.style.backgroundColor='rgba(190,190,190,0.5)'; } divMain.appendChild(this.divDisable); this.divLoadImage=document.createElement("div"); var loadImgWidth=54; var loadImgHeight=55; var divLoadImage=this.divLoadImage; divLoadImage.style.display="none"; divLoadImage.style.position="absolute"; divLoadImage.style.left=(parseInt(divMain.style.width) - loadImgWidth)/2 + 'px'; divLoadImage.style.top=(parseInt(divMain.style.height) - loadImgHeight)/2 + 'px'; divLoadImage.style.width=loadImgWidth + "px"; divLoadImage.style.height=loadImgHeight + "px"; divLoadImage.style.margin="0 auto"; var loadImg=""; divLoadImage.innerHTML=loadImg; divMain.appendChild(divLoadImage); divMain.appendChild(this._createErrorDialog()); divMain.appendChild(this._createProgress()); divMain.appendChild(this._createStatusBar()); }, resize : function() { try{ if(this.params) { this.divPreviewFrame.style.height=(parseInt(document .getElementById(this.params.divid).style.height) - parseInt(document.getElementById(this.params.divid + "_toolbar").style.height)) + 'px'; if (this.toolbar) { var scale=this.toolbar.getCurrScale(); if (scale == "PageWidth" || scale == "WholePage") { var viewer=this; setTimeout(function(){viewer._changeScale();},5); } } } }catch(e){} }, destroy : function() { _ubi_RemoveAddEvent(this.divPreviewFrame, "scroll", this._scrollUpdate); this.toolbar.destroy(); }, _enableViewer : function() { this.divDisable.style.display="none"; }, _disableViewer : function() { this.divDisable.style.width=this.divMain.style.width; this.divDisable.style.height=this.divMain.style.height; this.divDisable.style.display=""; }, _jobStart : function() { this._disableViewer(); this.divLoadImage.style.display=""; this.divMain.style.cursor="progress"; }, _jobEnd : function() { this.divLoadImage.style.display="none"; this.divMain.style.cursor="default"; this._enableViewer(); }, _showErrorDialog : function(title, msg) { document.getElementById(this.vid+'UbiToolbarPop_Error_Title').innerText=title; document.getElementById(this.vid+'UbiToolbarPop_Error_Contents').innerHTML=msg; document.getElementById(this.vid+'UbiToolbarPop_Error').style.display=''; }, _showStatusBar : function(msg) { document.getElementById(this.vid+'_UbiStatus_Msg').innerText=msg; document.getElementById(this.vid+'_UbiStatus').style.display=''; }, _closeStatusBar : function() { var statusobj=document.getElementById(this.vid+'_UbiStatus'); if (statusobj) { statusobj.style.display='none'; } }, _setStatusBar : function(msg, pagemsg) { document.getElementById(this.vid+'_UbiStatus_Msg').innerText=msg; document.getElementById(this.vid+'_UbiStatus_PageMsg').innerText=pagemsg; }, _showProgress : function(msg) { this._disableViewer(); document.getElementById(this.vid+'_UbiProgress_Msg').innerText=msg; document.getElementById(this.vid+'_UbiProgress_Position').style.width=0 + "px"; document.getElementById(this.vid+'_UbiProgress').style.display=''; }, _closeProgress : function() { document.getElementById(this.vid+'_UbiProgress').style.display='none'; this._enableViewer(); }, _setProgress : function(msg, page, totalpage) { var pos=0; if (page != undefined && _ubi_isNumber(page)) { var barwidth=196; var edgewidth=7*2; pos=Math.floor((barwidth - edgewidth) * (parseInt(page) / totalpage)); msg += " ("+ page +"/"+ totalpage +")"; } document.getElementById(this.vid+'_UbiProgress_Msg').innerText=msg; document.getElementById(this.vid+'_UbiProgress_Position').style.width=pos + "px"; }, _createErrorDialog : function() { var str=[]; var i=0; var obj=document.createElement("div"); obj.id=this.vid+"UbiToolbarPop_Error"; obj.className="dialog"; obj.style.cssText='display:none;position:absolute;z-index:999999104;left:50%;top:50%;width:450px;height:300px;margin-left:-225px;margin-top:-150px;border:1px solid #555555; background:#fff;'; str[i++]="
    "; str[i++]="
    Error
    "; str[i++]=" " + _ubi_getMessage(this.params.language, "ErrMsg") + ""; str[i++]="
    "; str[i++]="
    "; str[i++]="
    "; str[i++]="
    "; str[i++]="
    "; str[i++]="
    "; str[i++]=" "; str[i++]="
    "; str[i++]="
    "; obj.innerHTML=str.join(""); return obj; }, _createProgress : function() { var str=[]; var obj=document.createElement("div"); obj.id=this.vid + "_UbiProgress"; obj.className="dialog"; obj.style.cssText="display:none; position: absolute; left:50%; top:50%; margin-left:-120px; margin-top:-32px; width:240px; height:65px; z-index: 999999101; padding: 2px; border: 1px solid rgb(80, 80, 80); border-image: none; overflow: hidden; background-color: #646464;"; str.push("
    "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push("
    " + _ubi_getMessage(this.params.language, "ExportMsg") + "
    "); str.push("
    "); str.push("
    "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push("
    "); str.push("
    "); obj.innerHTML=str.join(""); return obj; }, _createStatusBar : function() { var str=[]; var obj=document.createElement("div"); obj.id=this.vid + "_UbiStatus"; obj.className="dialog"; if (_ubi_lowerIE9()) { obj.style.cssText="display:none; position: absolute; right:5%; top:90%; margin-left:-120px; margin-top:-40px; width:240px; height:55px; z-index: 999999101; padding: 2px; border-radius: 10px;border-image: none; overflow: hidden; background-color: rgb(35,114,185); filter:alpha(opacity=40);"; } else { obj.style.cssText="display:none; position: absolute; right:5%; top:90%; margin-left:-120px; margin-top:-40px; width:240px; height:55px; z-index: 999999101; padding: 2px; border-radius: 10px;border-image: none; overflow: hidden; background-color: rgba(35,114,185,0.3);"; } str.push("
    "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push(" "); str.push("
    " + _ubi_getMessage(this.params.language, "StreamingMsg") + "
    " + _ubi_getMessage(this.params.language, "StatusWaitMsg") + "
    "); str.push("
    "); obj.innerHTML=str.join(""); return obj; }, _createPreview : function(page) { var divPreview=document.createElement("div"); divPreview.id=this.vid + "_preview_"+ page; divPreview.setAttribute("isloaded", "false"); if (_ubi_strToBool(this.styles.pageborder)) { divPreview.style.border="1px solid "+ this.styles.pagebordercolor; } divPreview.style.backgroundColor="#ffffff"; divPreview.style.marginRight="auto"; divPreview.style.marginLeft="auto"; if (page > 1 && this.styles.pagegap != "") { divPreview.style.marginTop=this.styles.pagegap + "px"; } if (_ubi_strToInt(this.styles.margin) > 0) { if (page == 1) { divPreview.style.marginTop=this.styles.margin + "px"; } if (page == this.totalPage || _ubi_strToBool(this.params.scrollpage) == false) { divPreview.style.marginBottom=this.styles.margin + "px"; } } divPreview.style.position="relative"; divPreview.style.overflow="hidden"; divPreview.style.display="none"; var divLoadImage=document.createElement("div"); divLoadImage.style.position="relative"; divLoadImage.style.top="50%"; divLoadImage.style.width="100%"; divLoadImage.style.height="100%"; divLoadImage.style.margin="0 auto"; divLoadImage.innerHTML=""; divPreview.appendChild(divLoadImage); this.divPreviewFrame.appendChild(divPreview); return divPreview; }, _drawPage : function(preview, page) { var isSvg=_ubi_strToBool(this.params.issvg); var scale=this.toolbar.getCurrScale(); var frame=document.getElementById(this.vid+"_previewframe"); var frameWidth=frame.clientWidth; if (page == 1 && (scale == "PageWidth" || scale == "WholePage")) { frameWidth -= 17; } var frameHeight=frame.clientHeight; var framemargin=2; var isloaded=preview.getAttribute("isloaded"); var baseScale=1.0; if (isSvg) { baseScale=2.0; } var ds=1.0; if (scale != "PageWidth" && scale != "WholePage") { ds=parseInt(scale)/100; this.ds=ds; } if (_ubi_strToInt(this.styles.margin) > 0) { framemargin += parseInt(this.styles.margin) * 2; } if (isSvg && isloaded == "true") { var children=preview.children; var svgObj=null; if (children) { svgObj=children[0]; var svgWidth=parseInt(svgObj.getAttribute("orgwidth")); var svgHeight=parseInt(svgObj.getAttribute("orgheight")); if (page == 1) { this.totalPage=parseInt(svgObj.getAttribute("totalpage")); this.params.serviceid=svgObj.getAttribute("serviceid"); this.pageOrientation=svgObj.getAttribute("orientation"); this.pageWidth=svgWidth; this.pageHeight=svgHeight; if (page == this.totalPage) { preview.style.marginBottom=this.styles.margin + "px"; } } preview.setAttribute("orgwidth", svgWidth); preview.setAttribute("orgheight", svgHeight); if (scale == "PageWidth") { ds=(frameWidth-framemargin) / (svgWidth / baseScale); var height=svgHeight / baseScale * ds; if ((height+framemargin) > frameHeight && page == 1) { if (__ubi_isIE && __ubi_ieVersion < 8) { frameWidth=frame.clientWidth - 17; } else { preview.style.height=(height) +"px"; preview.style.display=""; frameWidth=frame.clientWidth; } frameWidth=frame.clientWidth; ds=(frameWidth-framemargin) / (svgWidth / baseScale); } } else if (scale == "WholePage") { ds=Math.min((frameHeight-framemargin) / (svgHeight / baseScale), (frameWidth-framemargin) / (svgWidth / baseScale)); } svgWidth=svgWidth / baseScale * ds; svgHeight=svgHeight / baseScale * ds; var conscale=ds / baseScale; svgObj.setAttribute("width", svgWidth); svgObj.setAttribute("height", svgHeight); if (__ubi_isIE) { svgObj.setAttribute("letter-spacing", (-0.15*baseScale*2)+"px"); } else { svgObj.setAttribute("letter-spacing", (-0.15*baseScale)+"px"); } var gObj=svgObj.childNodes; if (gObj) { for (var i=0; i frameHeight && (page == 1 || _ubi_strToBool(this.params.scrollpage) == false)) { if (__ubi_isIE && __ubi_ieVersion < 8) { frameWidth=frame.clientWidth - 17; } else { preview.style.height=(height) +"px"; preview.style.display=""; frameWidth=frame.clientWidth; } frameWidth=frame.clientWidth; ds=(frameWidth-framemargin) / (this.pageWidth / baseScale); } } else if (scale == "WholePage") { ds=Math.min((frameHeight-framemargin) / (this.pageHeight / baseScale), (frameWidth-framemargin) / (this.pageWidth / baseScale)); } this.ds=ds; } else { if (scale == "PageWidth" || scale == "WholePage") { ds=this.ds; } } var width=this.pageWidth / baseScale * ds; var height=this.pageHeight / baseScale * ds; preview.style.width=(width) +"px"; preview.style.height=(height) +"px"; if (!isSvg) { var doc=this.ubidoc.doc; var pageobj=doc.pages.GetAt(page - 1); if (pageobj) { var objWidth=0; var objHeight=0; var objLeft=0; var objTop=0; if (pageobj.width > 0) { objWidth=pageobj.width; objHeight=pageobj.height; objLeft=pageobj.left; objTop=pageobj.top; } else { objWidth=doc.docprop.width; objHeight=doc.docprop.height; objLeft=doc.docprop.marginleft; objTop=doc.docprop.margintop; } if (objWidth != this.pageWidth || objHeight != this.pageWidth) { if (scale == "PageWidth") { ds=(frameWidth-framemargin) / (objWidth / baseScale); var height=objHeight / baseScale * ds; if ((height+framemargin) > frameHeight && (page == 1 || _ubi_strToBool(this.params.scrollpage) == false)) { if (__ubi_isIE && __ubi_ieVersion < 8) { frameWidth=frame.clientWidth - 17; } else { preview.style.height=(height) +"px"; preview.style.display=""; frameWidth=frame.clientWidth; } frameWidth=frame.clientWidth; ds=(frameWidth-framemargin) / (objWidth / baseScale); this.ds=ds; } } else if (scale == "WholePage") { ds=Math.min((frameHeight-framemargin) / (objHeight / baseScale), (frameWidth-framemargin) / (objWidth / baseScale)); this.ds=ds; } preview.style.width=(objWidth / baseScale * ds) +"px"; preview.style.height=(objHeight / baseScale * ds) +"px"; } var previewPage=document.createElement("div"); previewPage.id=this.vid + "_previewpage_"+ page; var objRight=doc.docprop.marginright; var objBottom=doc.docprop.marginbottom; previewPage.style.width=(Math.round((objWidth-objLeft-objRight)*ds)+1) + "px"; previewPage.style.marginLeft=Math.round(objLeft*ds) + "px"; previewPage.style.marginTop=Math.round(objTop*ds) + "px"; previewPage.style.position="relative"; if (pageobj.bgcolor != "") { previewPage.style.backgroundColor="#" + pageobj.bgcolor; } if (pageobj.iscusom) { previewPage.style.height="auto"; preview.divPreview.style.height="auto"; } else { previewPage.style.height=(Math.round((objHeight-objTop-objBottom)*ds)+1) +"px"; } preview.innerHTML=""; preview.appendChild(previewPage); this.ubidoc.Draw(previewPage, page, ds); } } } preview.style.display=""; }, _drawPageStream : function(page) { this._requestReportPage(page); var pages=[page-1]; if (this._scrollPageCount > 1) { for (var i=1; i < this._scrollPageCount; i++) { pages.push(page+i); } } else { pages.push(page+1); } var v=this; for (var i=0; i 0 && pages[i] <= this.totalPage) { var streampage=pages[i]; v._requestReportPage(streampage); } } }, _drawRemainPages : function() { if (_ubi_strToBool(this.params.scrollpage) && this._scrollPageCount == -1) { var page_cnt=-1; var pageObj=document.getElementById(this.vid + "_preview_1"); if (pageObj) { var frame=document.getElementById(this.vid+"_previewframe"); var frameHeight=frame.clientHeight; var pageHeight=parseInt(pageObj.style.height); var pageGap=parseInt(this.styles.pagegap); page_cnt=frameHeight / (pageHeight + pageGap); this._scrollPageCount=page_cnt; } } if (this.totalPage > 1) { var preview=null; for (var i=2; i<=this.totalPage; i++) { preview=document.getElementById(this.vid + "_preview_"+ i); if (!preview) { preview=this._createPreview(i); preview.style.width=this.pageWidth; preview.style.height=this.pageHeight; this._drawPage(preview, i); preview.style.display=""; if (this._scrollPageCount > -1 && i <= Math.round(this._scrollPageCount)) { this._requestReportPage(i); } } } } }, _movePage : function(page) { if (_ubi_strToBool(this.params.issvg) || _ubi_strToBool(this.params.scrollpage)) { var preview=document.getElementById(this.vid + "_preview_"+ page); if (preview) { if (page == 1) this.divPreviewFrame.scrollTop=preview.offsetTop - parseInt(this.styles.margin); else this.divPreviewFrame.scrollTop=preview.offsetTop - parseInt(this.styles.pagegap); } } else { this.divPreviewFrame.innerHTML=""; var preview=this._createPreview(page); if (this.ubidoc.doc.pages.GetAt(parseInt(page)-1) == undefined) { this._drawPage(preview, page); this._requestReportPage(page); } else { this._drawPage(preview, page); } } }, _changeScale : function() { if (this.totalPage < 1) return; if (_ubi_strToBool(this.params.issvg) == false) this.divPreviewFrame.innerHTML=""; if (_ubi_strToBool(this.params.scrollpage)) { for (var i=1; i<=this.totalPage; i++) { var preview=null; if (_ubi_strToBool(this.params.issvg) == false) { preview=this._createPreview(i); } else { preview=document.getElementById(this.vid + "_preview_"+ i); } if (preview) this._drawPage(preview, i); } if (_ubi_strToBool(this.params.isStreaming)) { var pagePos=0; var frameHeight=this.divPreviewFrame.clientHeight; for (var i=1; i<=this.totalPage; i++) { pagePos=document.getElementById(this.vid+"_preview_"+i).getBoundingClientRect().top; if(pagePos > 0 && pagePos < frameHeight) { this._requestReportPage(i); } } } if (_ubi_strToBool(this.params.issvg)) { if (!__ubi_isIE) { var tempObj=document.createElement("div"); tempObj.innerHTML=this.divPreviewFrame.innerHTML; this.divPreviewFrame.innerHTML=""; this.divPreviewFrame.innerHTML=tempObj.innerHTML; tempObj.innerHTML=""; tempObj=null; } } } else { var preview=this._createPreview(this.toolbar.page); this._drawPage(preview, this.toolbar.page); } }, callUrl : function(strUrl, callback) { function callReport(viewer) { var params=_ubi_clone(viewer.params); params.arg=viewer._getArguments(); _ubi_ajax({ type: "POST", datatype: "text", timeout: params.timeout, url: strUrl, reqdata: params, exportseq: "", returnmsg: "", onSuccess: function(msg) { this.returnmsg=msg; }, onComplete: function() { viewer._jobEnd(); if (callback) { try{ callback(this.returnmsg); } catch(e){} } }, onError: function(msg) { viewer._showErrorDialog("", msg); } }); }; if (strUrl == undefined || strUrl == null || strUrl == "") { return; } this._jobStart(); callReport(this, callback); }, showReport : function(callback) { function createControl(xml, viewer) { viewer.divPreviewFrame.innerHTML=""; var preview=viewer._createPreview(1); if (_ubi_strToBool(viewer.params.issvg)) { preview.innerHTML=decodeURIComponent(xml); preview.setAttribute("isloaded", "true"); viewer._drawPage(preview, 1); } else { var doc=UbiDoc.CreateInstance(xml, true); if (_ubi_strToBool(viewer.params.iswa)) doc.isWA=true; else doc.isWA=false; if(_ubi_strToBool(doc.isEnableNoPage) == false || _ubi_strToBool(viewer.params.usepluginsave)) { viewer.toolbar.enableButton("SaveExcelBase", false); } else { viewer.toolbar.enableButton("SaveExcelBase", true); } if (viewer.params.runtimedata == "") { viewer.isEnableNoPage=_ubi_strToBool(doc.isEnableNoPage); } else { viewer.isEnableNoPage=false; } viewer.ubidoc=new UbiDocument(doc, viewer.vid, viewer.params.jrffile, viewer.params.key, viewer.params.resid, viewer.params.ubiserverurl, viewer.params.exportseq); viewer.params.serviceid=viewer.ubidoc.doc.serviceid; viewer.totalPage=doc.pagecount; viewer.pageWidth=doc.docprop.width; viewer.pageHeight=doc.docprop.height; viewer.pageOrientation=doc.docprop.orientation; viewer._drawPage(preview, 1); } viewer.toolbar.setCurrPage(1); if (viewer.totalPage > 0 && viewer._isMultiDocument && _ubi_strToBool(viewer.params.isStreaming)) { viewer.toolbar.setTotalPage(viewer.totalPage +"+"); } else { viewer.toolbar.setTotalPage(viewer.totalPage); } if (_ubi_strToBool(viewer.params.issvg) || _ubi_strToBool(viewer.params.scrollpage)) { setTimeout(function(){ viewer._drawRemainPages(); }, 10); } }; function requestReport(viewer) { var isError=false; var reqDatatype="xml"; var params=_ubi_clone(viewer.params); params.arg=viewer._getArguments(); params.streamdata=viewer._getDatasets(); if (_ubi_strToBool(params.issvg)) { reqDatatype="text"; } _ubi_ajax({ type: "POST", datatype: reqDatatype, timeout: params.timeout, url: params.ubiserverurl, reqdata: params, exportseq: "", onSuccess: function(xml) { viewer.serviceValid=true; if (xml == null) { viewer._showErrorDialog("", _ubi_getMessage(viewer.params.language, "CreateErrMsg")); isError=true; } else { createControl(xml, viewer); viewer.exportSeq=this.exportseq; viewer.params.exportseq=this.exportseq; } }, onComplete: function() { viewer._jobEnd(); if (_ubi_strToBool(viewer.params.isStreaming) && viewer.totalPage > 0) { viewer._showStatusBar(_ubi_getMessage(viewer.params.language, "StreamingMsg")); } if (_ubi_strToBool(viewer.params.isStreaming) && viewer.serviceValid) { setTimeout(function(){ viewer._receiveTotalPage(callback); }, 100); } var ubiserverurl=viewer.params.ubiserverurl; ubiserverurl=ubiserverurl.toUpperCase(); if (ubiserverurl.indexOf("HTTP") != 0) { ubiserverurl=self.location.protocol +"//"+ self.location.host + viewer.params.ubiserverurl; } else { ubiserverurl=viewer.params.ubiserverurl; } viewer.retrieveUrfUrl=ubiserverurl + "?cHJvY2lk=GATEWAY" + "&key=" + viewer.params.key + "&resid=" + viewer.params.resid + "&jrffile=" + viewer.params.jrffile + "&exportseq=" + viewer.exportSeq + "&isStreaming=" + viewer.params.isStreaming + "&serviceid=" + viewer.params.serviceid + "&reporttitle=" + viewer.params.reporttitle + "&reqtype="+__ubi_EXPORT_URF; if( _ubi_strToBool(viewer.params.isStreaming) == false && viewer.params.reqtype == "0" ) { if (callback) { try{ callback(); } catch(e){} } } }, onError: function(msg) { viewer.serviceValid=false; if( msg.indexOf("ER0") == -1 ) { msg="ER9999#An unknown error occurred."; viewer._showErrorDialog(_ubi_getMessage(viewer.params.language, "UnknownErrMsg"), msg); return; } else { msg=msg.split("#")[0] + " : " + msg.split("#")[1]; viewer._showErrorDialog("", msg); } } }); }; this._isReceiveTotalpage=false; if (this.params.scale != this.toolbar.getCurrScale()) { this.toolbar.setCurrScale(this.params.scale); } if ( (this.params.toolbar == false && this.toolbarHeight != 0) || (this.params.toolbar == true && this.toolbarHeight == 0) ) { this.setToolbar(this.params.toolbar); } if (_ubi_strToBool(this.params.isStreaming) && ((_ubi_strToBool(this.params.ismultireport) && _ubi_strToInt(this.params.multicount) > 1) || this.params.jrffile.indexOf(",") > 0)) { this._isMultiDocument=true; } else { this._isMultiDocument=false; } this.exportSeq=-1; this.params.reqtype=__ubi_URF; var d=new Date(); this.params.exportseq=d.getTime(); this._jobStart(); requestReport(this, callback); }, _requestReportPage: function(page, isprint, callback) { if (!isprint || isprint == undefined) isprint=false; function createControl(xml, viewer, isprint, callback) { if (_ubi_strToBool(viewer.params.issvg)) { var preview=document.getElementById(viewer.vid + "_preview_"+ page); if (preview) { preview.innerHTML=decodeURIComponent(xml); preview.setAttribute("isloaded", "true"); viewer._drawPage(preview, page); viewer._changeTotalPage(); } } else { var doc=UbiDoc.CreateInstance(xml, false); var viewerDoc=viewer.ubidoc.doc; for ( var i=0; i < doc.colors.GetCount(); i++){ var key=doc.colors.GetAt(i); if (viewerDoc.colors.FindIndex(key) == -1) { viewerDoc.colors.SetAt(key, doc.colors.GetValue(i)); } } for ( var i=0; i < doc.fonts.GetCount(); i++){ var key=doc.fonts.GetAt(i); if (viewerDoc.fonts.FindIndex(key) == -1) { viewerDoc.fonts.SetAt(key, doc.fonts.GetValue(i)); } } for ( var i=0; i < doc.borders.GetCount(); i++){ var key=doc.borders.GetAt(i); if (viewerDoc.borders.FindIndex(key) == -1) { viewerDoc.borders.SetAt(key, doc.borders.GetValue(i)); } } for ( var i=0; i < doc.lines.GetCount(); i++){ var key=doc.lines.GetAt(i); if (viewerDoc.lines.FindIndex(key) == -1) { viewerDoc.lines.SetAt(key, doc.lines.GetValue(i)); } } for ( var i=0; i < doc.objects.GetCount(); i++){ var key=doc.objects.GetAt(i); if (viewerDoc.objects.FindIndex(key) == -1) { viewerDoc.objects.SetAt(key, doc.objects.GetValue(i)); } } viewerDoc.pages.SetAt(page-1, doc.pages.GetAt(0)); if (doc.pages.GetAt(0) != undefined) { var preview=document.getElementById(viewer.vid + "_preview_"+ page); if (preview) { viewer._drawPage(preview, page); viewer._changeTotalPage(); } } } if (callback) callback(); }; function requestReport(viewer, page, isprint, callback) { var reqDatatype="xml"; if (_ubi_strToBool(viewer.params.issvg)) { reqDatatype="text"; } var reqparams={ cHJvY2lk: viewer.params.cHJvY2lk, reqtype: __ubi_PAGE + "#"+ page, key: viewer.params.key || "", ubiserverurl: viewer.params.ubiserverurl || "", timeout: viewer.params.timeout || "60000", jrffile: viewer.params.jrffile || "", resid: viewer.params.resid || "", exportseq: viewer.exportSeq || "", userHeader: viewer.params.userHeader || "", issvg: viewer.params.issvg || "false", serviceid : viewer.params.serviceid }; _ubi_ajax({ type: "POST", datatype: reqDatatype, timeout: viewer.params.timeout, url: viewer.params.ubiserverurl, reqdata: reqparams, onSuccess: function(xml) { viewer.serviceValid=true; if (xml == null) { viewer._showErrorDialog("", _ubi_getMessage(viewer.params.language, "CompleteMsg")); } else { createControl(xml, viewer, isprint, callback); } }, onComplete: function() { }, onError: function(msg) { viewer.serviceValid=false; if( msg.indexOf("ER0") == -1 ) { msg="ER9999#An unknown error occurred."; viewer._showErrorDialog(_ubi_getMessage(viewer.params.language, "UnknownErrMsg"), msg); return; } else { msg=msg.split("#")[0] + " : " + msg.split("#")[1]; viewer._showErrorDialog("", msg); } } }); }; var isLoadedPage=true; if (_ubi_strToBool(this.params.issvg)) { var preview=document.getElementById(this.vid + "_preview_"+ page); if (preview) { var isloaded=preview.getAttribute("isloaded"); if (isloaded == undefined || isloaded == "false") { isLoadedPage=false; requestReport(this, page, isprint, callback); } } } else { if (this.ubidoc.doc.pages.GetAt(parseInt(page)-1) == undefined) { isLoadedPage=false; var viewer=this; setTimeout(function(){requestReport(viewer, page, isprint, callback);},100); } } if (isLoadedPage && callback) { callback(); } }, _receiveTotalPage: function(callback) { var viewer=this; var params=_ubi_clone(viewer.params); params.arg=viewer._getArguments(); params.reqtype=__ubi_TOTAL_PAGE; _ubi_ajax({ type: "POST", datatype: "text", timeout: params.timeout, url: params.ubiserverurl, reqdata: params, onSuccess: function(text) { viewer.serviceValid=true; }, onComplete: function() { viewer._changeTotalPage(); }, onError: function(msg) { viewer.serviceValid=false; if( msg.indexOf("ER0") == -1 ) { msg="ER9999#An unknown error occurred."; viewer._showErrorDialog(_ubi_getMessage(viewer.params.language, "UnknownErrMsg"), msg); return; } else { msg=msg.split("#")[0] + " : " + msg.split("#")[1]; viewer._showErrorDialog("", msg); } }, onStatus: function(status) { if (!status || status.length < 2) { return; } var errMsg=""; var index=0; if( (index=status.indexOf("ER0")) > -1 ) { errMsg=status.substring(index); status=status.substring(0,index); } var pos=status.lastIndexOf("^"); if (pos >= 0) { var msg=status.substring(pos+1); if (!_ubi_lowerIE9()) { try { msg=msg.trim(); } catch (e) {} } var arr=msg.split("#"); if (arr.length == 3) { if (viewer._isMultiDocument) { var preTotalPage=viewer.totalPage; if (arr[1] == '0') { viewer.totalPage=parseInt(arr[0]); viewer.toolbar.setTotalPage(arr[0]); viewer._isReceiveTotalpage=true; var ismultipaper=parseInt(arr[2]); if (ismultipaper == 1) { viewer._isMultiPaper=true; } else { viewer._isMultiPaper=false; } viewer._changeTotalPage(); viewer.toolbar.setStatus(); viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "CompleteMsg"), ''); setTimeout(function(){viewer._closeStatusBar();},3000); if (callback) { try{ callback(); } catch(e){} } } else { viewer.totalPage=parseInt(arr[0]); viewer.toolbar.setTotalPage(arr[0] +"+"); viewer._isReceiveTotalpage=false; viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "StreamingMsg"), ' ' + arr[0] + _ubi_getMessage(viewer.params.language, "StreamingMsg2")); } if (_ubi_strToBool(viewer.params.scrollpage)) { for (var i=preTotalPage+1; i<=viewer.totalPage; i++) { if (!document.getElementById(viewer.vid + "_preview_"+ i)) { var preview=viewer._createPreview(i); viewer._drawPage(preview, i); if (viewer._scrollPageCount > -1 && i <= Math.round(viewer._scrollPageCount)) { viewer._requestReportPage(i); } } } } } else { if (arr[1] == '0') { viewer._isReceiveTotalpage=true; viewer.toolbar.setStatus(); viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "CompleteMsg"), ''); setTimeout(function(){viewer._closeStatusBar();},3000); if (callback) { try{ callback(); } catch(e){} } } else { viewer._isReceiveTotalpage=false; if (viewer.params.language == 'ko') { viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "StreamingMsg"), viewer.totalPage + _ubi_getMessage(viewer.params.language, "StreamingMsg3") + arr[0] + _ubi_getMessage(viewer.params.language, "StreamingMsg2")); } else { viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "StreamingMsg"), arr[0] + ' of ' + viewer.totalPage + _ubi_getMessage(viewer.params.language, "StreamingMsg2")); } } } } } else { if( status.indexOf("ER0") == 0 ) { viewer._isReceiveTotalpage=false; viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "TotalpageErrMsg"), ''); setTimeout(function(){viewer._closeStatusBar();},3000); } } if( errMsg != '' ) { viewer._showErrorDialog(_ubi_getMessage(viewer.params.language, "UnknownErrMsg"), errMsg); viewer._isReceiveTotalpage=false; viewer._setStatusBar(_ubi_getMessage(viewer.params.language, "TotalpageErrMsg"), ''); setTimeout(function(){viewer._closeStatusBar();},3000); return; } } }); }, _changeTotalPage : function() { if (this._isReceiveTotalpage) { if (_ubi_strToBool(this.params.issvg)) { for(var k=this.totalPage; k > 0; k--) { var preview=document.getElementById(this.vid + "_preview_"+ k); if (preview) { var str=preview.innerHTML; str=str.replace("^totalpage^", ""+this.totalPage); preview.innerHTML=str; } } } else { for(var k=this.ubidoc.doc.totalpageNodes.length-1; k>=0; k--) { var node=this.ubidoc.doc.totalpageNodes[k]; var item=this.ubidoc.doc.totalpageItems[k]; this.ubidoc.doc.totalpageNodes.pop(node); this.ubidoc.doc.totalpageItems.pop(node); var str=""; if (_ubi_lowerIE9()) { str=node.nodeValue; } else { str=node.textContent; } str=str.replace("^totalpage^", ""+this.totalPage); if (_ubi_lowerIE9()) { node.nodeValue=str; } else { node.textContent=str; } str=item.value; str=str.replace("^totalpage^", ""+this.totalPage); item.value=str; } } } }, _scrollUpdate : function() { if (_ubi_strToBool(this.params.scrollpage)) { var pageHeight=this.divPreviewFrame.clientHeight; var pageTop=this.divPreviewFrame.getBoundingClientRect().top; var pageNum=0; var pagePos=0; for(var k=1; k<=this.totalPage; k++) { pagePos=document.getElementById(this.vid+"_preview_"+k).getBoundingClientRect().top; if(pagePos > 0) break; } if(pageTop+pageHeight/2 < pagePos) { pageNum=k-1; } else { pageNum=Math.min(this.totalPage,k); } this.toolbar.setCurrPage(pageNum); this._drawPageStream(pageNum); } }, _printPDF : function(isPrintSet) { if (!isPrintSet || isPrintSet == undefined) isPrintSet=false; if (_ubi_strToBool(this.params.isredbc) && (!_ubi_strToBool(this.params.useAdobeReader) && __ubi_isIE)) { this._exportReport(__ubi_EXPORT_PDF); return; } if (__ubi_isFF || __ubi_isSafari || __ubi_isEdge || (__ubi_isChrome && this.params.password != "")) { var obj=document.getElementById(this.vid +"Popup_PdfDownLoad_Message"); if (obj) { obj.style.display=""; } return; } var viewer=this; var params=_ubi_clone(viewer.params); params.arg=viewer._getArguments(); if (params.language == 'ko') { viewer._showProgress("\uc778\uc1c4 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4."); } else { viewer._showProgress("Please wait while the file is generated for printing."); } params.reqtype=__ubi_EXPORT_JOB; params.reqsubtype=__ubi_EXPORT_PDF; _ubi_ajax({ type: "POST", datatype: "text", timeout: params.timeout, url: params.ubiserverurl, reqdata: params, flag: true, filename: "", onSuccess: function(xml) { this.flag=true; if (this.filename == "" || this.filename == undefined) { var pos=status.lastIndexOf("^"); if (pos >= 0) { var msg=status.substring(pos+1); if (!_ubi_lowerIE9()) { try { msg=msg.trim(); } catch (e) {} } var arr=msg.split("#"); if (arr[0] == "filename") this.filename=arr[1]; } } }, onComplete: function() { viewer._printEnd(this.flag, this.filename, isPrintSet); }, onError: function(msg) { this.flag=false; if( msg.indexOf("ER0") == -1 ) { msg="ER9999#An unknown error occurred."; viewer._showErrorDialog(_ubi_getMessage(viewer.params.language, "UnknownErrMsg"), msg); return; } else { msg=msg.split("#")[0] + " : " + msg.split("#")[1]; viewer._showErrorDialog("", msg); } }, onStatus: function(status) { var pos=status.lastIndexOf("^"); if (pos >= 0) { var msg=status.substring(pos+1); if (!_ubi_lowerIE9()) { try { msg=msg.trim(); } catch (e) {} } var arr=msg.split("#"); if (arr[0] == "page") { if (viewer.params.language == 'ko') { viewer._setProgress("\uc778\uc1c4 \uc900\ube44 \uc911\uc785\ub2c8\ub2e4.", arr[1], viewer.totalPage); } else { viewer._setProgress("Please wait while the file is generated for printing.", arr[1], viewer.totalPage); } } else if (arr[0] == "info") { viewer._setProgress(arr[1], null); } else if (arr[0] == "filename") { this.filename=arr[1]; } } } }); }, _printEnd : function(flag, filename, isPrintSet) { this._closeProgress(); var pdfobj=null; var divPrint=document.getElementById(this.vid + "_print"); if (!divPrint) { divPrint=document.createElement("div"); divPrint.id=this.vid + "_print"; this.divMain.appendChild(divPrint); } var isAdobePrint=false; if( __ubi_isIE) { if (_ubi_strToBool(this.params.useAdobeReader)) { if( _ubi_checkPdfReader() ) { pdfobj=document.createElement("object"); pdfobj.setAttribute('id', this.vid+'UbiPdfDoc'); pdfobj.setAttribute('classid', 'CLSID:CA8A9780-280D-11CF-A24D-444553540000'); pdfobj.setAttribute('type', 'application/pdf'); pdfobj.style.position="absolute"; pdfobj.style.top="0px"; pdfobj.style.width="0px"; pdfobj.style.height="0px"; divPrint.appendChild(pdfobj); try { pdfVersion=pdfobj.getVersions(); pdfVersion=pdfVersion.substring(pdfVersion.indexOf('=')+1, pdfVersion.indexOf('.')); if (((__ubi_ieVersion > 10) && parseInt(pdfVersion) < 10) || parseInt(pdfVersion) <= 6) { isAdobePrint=false; } else { isAdobePrint=true; } } catch(e){ isAdobePrint=false; } } else { isAdobePrint=false; } } else { isAdobePrint=false; } if( isAdobePrint ) { var userparamUrl=""; if (this.events.getUserParams) { var userparams=this.events.getUserParams(); if (userparams != undefined) { for ( var i=0; i < userparams.length; i+=2) { var str="&" + userparams[i] + "=" + userparams[i+1]; userparamUrl += str; } } } var url=""; var ubiserverurl=this.params.ubiserverurl; ubiserverurl=ubiserverurl.toUpperCase(); if (ubiserverurl.indexOf("HTTP") != 0) { ubiserverurl=self.location.protocol +"//"+ self.location.host + this.params.ubiserverurl; } else { ubiserverurl=this.params.ubiserverurl; } url=ubiserverurl + "?cHJvY2lk=GATEWAY&reqtype=" + __ubi_EXPORT_RESULT + "&jrffile=" + this.params.jrffile + "&resid=" + this.params.resid + "&key=" + this.params.key + "&arg=&pagenum=&imageid=&exportseq=" + this.exportSeq + "&isvoiceye=" + this.params.isvoiceye + "&isStreaming=" + this.params.isStreaming + "&exportfilename=" + filename + "&reqsubtype=2" + "&serviceid=" + this.params.serviceid; if (userparamUrl != "") { url += userparamUrl; } pdfobj.src=url; if (isPrintSet) { pdfobj.setCurrentPage(this.page); pdfobj.printWithDialog(); } else { pdfobj.printAll(); } if (this.events.printEnd) { this._isPrintPDF=true; this.events.printEnd(true); } } else { if (this.ieAdobeReaderInfoPopup) { this.toolbar.makePrintPdfErrorMessage(flag, filename); var obj=document.getElementById(this.vid +"Popup_PdfError_Message"); if (obj) { obj.style.display=""; } } else { this._isPrintPDF=true; this._exportEnd(flag, filename); } } } else { if (__ubi_isChrome || __ubi_isOpera || __ubi_isWhale) { var framename=this.vid + '_ubipdf'; var formname=this.vid + '_pdfForm'; var events=this.events; var postUrl=[]; postUrl.push(""); postUrl.push("
    "); var inputArray=[]; inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); inputArray.push("\n"); if (this.events.getUserParams) { var userparams=this.events.getUserParams(); if (userparams != undefined) { for ( var i=0; i < userparams.length; i+=2) { var str=""; inputArray.push(str); } } } postUrl.push(inputArray.join('')); postUrl.push("
    "); divPrint.innerHTML=postUrl.join(); if (document.forms[formname] == undefined) { divPrint.innerHTML=""; var formobj=document.createElement("form"); formobj.method='post'; formobj.name=formname; formobj.action=this.params.ubiserverurl + "#toolbar=1"; formobj.target=framename; divPrint.appendChild(formobj); formobj.innerHTML=inputArray.join(""); } document.forms[formname].submit(); var ifr=document.getElementById(framename); var params=this.params; var intervalCnt=0; self.interval=setInterval(function() { var isComplete=false; try { intervalCnt++; if (document.getElementById(framename).contentWindow.location.href != 'about:blank' && ifr.contentDocument.readyState === 'complete') { isComplete=true; clearInterval(self.interval); document.getElementById(framename).focus(); document.getElementById(framename).contentWindow.print(); if (events.printEnd) { events.printEnd(true); } } if (intervalCnt >= 30) { clearInterval(self.interval); var w=window.open('', 'Ubi_PDF','menubar=no,toolbar=no,status=no,scrollbars=no'); divPrint.innerHTML=""; var formobj=document.createElement("form"); formobj.name='pdfForm'; formobj.method='post'; formobj.action=params.ubiserverurl + '#toolbar=1'; formobj.target='Ubi_PDF'; formobj.innerHTML=inputArray.join(''); divPrint.appendChild(formobj); document.pdfForm.submit(); if (events.printEnd) { events.printEnd(true); } } } catch (e) { clearInterval(self.interval); var w=window.open('', 'Ubi_PDF','menubar=no,toolbar=no,status=no,scrollbars=no'); divPrint.innerHTML=""; var formobj=document.createElement("form"); formobj.name='pdfForm'; formobj.method='post'; formobj.action=params.ubiserverurl + '#toolbar=1'; formobj.target='Ubi_PDF'; formobj.innerHTML=inputArray.join(''); divPrint.appendChild(formobj); document.pdfForm.submit(); if (events.printEnd) { events.printEnd(true); } } }, 100); } else if (__ubi_isMobile) { var w=window.open('', 'Ubi_PDF','menubar=no,toolbar=no,status=no,scrollbars=no'); var postUrl="
    "; postUrl += ""; postUrl += ""; postUrl += ""; postUrl += ""; postUrl += ""; postUrl += ""; postUrl += ""; postUrl += ""; postUrl += ""; if (this.events.getUserParams) { var userparams=this.events.getUserParams(); if (userparams != undefined) { for ( var i=0; i < userparams.length; i+=2) { var str=""; postUrl += str; } } } postUrl += "
    "; divPrint.innerHTML=postUrl; document.pdfForm.submit(); if (this.events.printEnd) { this.events.printEnd(true); } } else { this._isPrintPDF=true; this._exportEnd(flag, filename); } } }, _printRetrieveAll : function(pagefrom, pageto) { var page=pagefrom - 1; var viewer=this; this._jobStart(); retrievePage(); function retrievePage() { if (page < pageto) { page++; viewer._requestReportPage(page, true, retrievePage); } else { viewer._printHTML(pagefrom, pageto); } }; }, _printHTML : function(pagefrom, pageto) { this._jobStart(); var divPrint=document.createElement("div"); divPrint.style.display="none"; this.divMain.appendChild(divPrint); var issvg=_ubi_strToBool(this.params.issvg); if (!issvg) { var doc=this.ubidoc.doc; var ds=1.2; var pagewidth=Math.round(doc.docprop.width*ds - doc.docprop.marginleft*ds - doc.docprop.marginright*ds); var pageheight=Math.round(doc.docprop.height*ds - doc.docprop.margintop*ds - doc.docprop.marginbottom*ds); for( var i=pagefrom; i <= pageto; i++ ) { var divPreviewPage=document.createElement("div"); divPreviewPage.style.position="relative"; divPreviewPage.style.width=pagewidth +"px"; divPreviewPage.style.height=pageheight +"px"; divPreviewPage.style.margin="0px"; if (i > pagefrom && i > 1) { divPreviewPage.style.pageBreakBefore="always"; } divPrint.appendChild(divPreviewPage); this.ubidoc.Draw(divPreviewPage, i, ds, true); } } var win=window.open("about:blank", "UbiReportPrint", "width=800px, height=600px,menubar=no,toolbar=no,status=no,scrollbars=yes"); var viewer=this; setTimeout(function() { _printHTMLWrite(viewer, win, ds); }, 500); function _printHTMLWrite(viewer, win, ds) { var marginLeft=0; var marginTop=0; function convertPixelToMm(pixel) { return pixel * (25.4 / 72) / 10; }; var doc=null; var clist=null; if (!issvg) { doc=viewer.ubidoc.doc; clist=viewer.ubidoc.canvaslist; marginLeft=convertPixelToMm(doc.docprop.marginleft); marginTop=convertPixelToMm(doc.docprop.margintop); } var contents=[]; contents.push("\n"); contents.push(""); contents.push("Print"); contents.push("\n"); if (!issvg && clist.length > 0) { contents.push("\n"); } contents.push("\n"); contents.push("\n"); if(__ubi_isIE && viewer.pageOrientation.toLowerCase()=="landscape" && _ubi_strToBool(viewer.params.printIEobj) == false){ contents.push(""); } else { contents.push(""); } win.document.open(); win.document.write(contents.join("")); if (issvg) { var preview=null; for (var i=1; i<=viewer.totalPage; i++) { preview=document.getElementById(viewer.vid + "_preview_"+ i); if (preview) { win.document.write(preview.innerHTML); if (i > 1 && i< viewer.totalPage) { win.document.write("
    "); } } } } else { win.document.write(divPrint.innerHTML); } if (!issvg && clist.length > 0) { contents="\n"; win.document.write(contents); } win.document.write(""); win.focus(); win.document.close(); viewer.divMain.removeChild(divPrint); divPrint=null; viewer.ubidoc.canvaslist=new Array(); viewer._jobEnd(); if (viewer.events.printEnd) { viewer.events.printEnd(true); } }; }, _exportReport : function(type) { var dlgFlag=false; if (_ubi_strToBool(this.params.usepluginsave) || type == __ubi_EXPORT_IMAGE || (type != __ubi_EXPORT_EXCEL2 && _ubi_strToBool(this.params.usepluginsave) == false && parseInt(this.exportsetmode) != 1)) { dlgFlag=true; } if (dlgFlag == true) { var obj=document.getElementById(this.vid +"Popup_ExportDialog"); var iframeobj=document.getElementById(this.vid +"Popup_ExportDialogFrame"); if (obj && iframeobj) { var exportTypeObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_ExportType"); var fileComboObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_FileType"); var saveTypeObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_SaveType"); var exportRangeObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_ExportRange"); var exportmode=parseInt(this.exportsetmode); if (exportmode != 1) { if (exportmode == 2) { var currObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_Current"); currObj.checked='checked'; } else if (exportmode == 3) { var pagesObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_Pages"); pagesObj.checked='checked'; } else { var allObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_All"); allObj.checked='checked'; } var pageFromObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_PageFrom"); var pageToObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_PageTo"); pageFromObj.value='1'; pageToObj.value=this.totalPage; } exportTypeObj.style.display=""; if (type == __ubi_EXPORT_PDF) fileComboObj.selectedIndex='0'; else if (type == __ubi_EXPORT_EXCEL1) fileComboObj.selectedIndex='1'; else if (type == __ubi_EXPORT_EXCEL2) fileComboObj.selectedIndex='2'; else if (type == __ubi_EXPORT_DOCX) fileComboObj.selectedIndex='3'; else if (type == __ubi_EXPORT_PPTX) fileComboObj.selectedIndex='4'; else if (type == __ubi_EXPORT_HML) fileComboObj.selectedIndex='5'; else if (type == __ubi_EXPORT_CELL) fileComboObj.selectedIndex='6'; else if (type == __ubi_EXPORT_IMAGE) fileComboObj.selectedIndex='7'; if (_ubi_strToBool(this.params.usepluginsave)) { saveTypeObj.style.display=""; var pluginSaveObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_Plugin"); pluginSaveObj.checked='checked'; var msgObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_PluginMsg"); if (msgObj) { msgObj.innerHTML=_ubi_getMessage(this.params.language, "SaveFileMsg2"); msgObj.style.display=""; } } else { if (exportmode != 1) { exportRangeObj.style.display=""; } else { exportRangeObj.style.display="none"; } } var imageObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_Image"); if (imageObj) { if (type != __ubi_EXPORT_IMAGE) { imageObj.style.display="none"; } else { imageObj.style.display=""; } var zipMsgObj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_ZipMsg"); if (zipMsgObj) { if (_ubi_strToBool(this.params.usepluginsave)) { zipMsgObj.innerHTML=""; if (type == __ubi_EXPORT_IMAGE) { zipMsgObj.style.borderBottom="1px solid #bdbdbd"; } } else { zipMsgObj.innerHTML=_ubi_getMessage(this.params.language, "ZipFileMsg"); zipMsgObj.style.borderBottom="none"; } } } obj.style.display=""; var tobj=iframeobj.contentWindow.document.getElementById(this.vid + "_ExportDialog_Table"); var iframeheight=tobj.scrollHeight; iframeobj.height=iframeheight + "px"; obj.style.height=iframeheight + "px"; obj.style.marginTop=(-iframeheight/2) + "px"; } } else { this._exportStart(type); } }, _exportStart : function(type) { var upperExt=this.HmlExtension.toUpperCase(); if (upperExt == 'HWP' && type == __ubi_EXPORT_HML) { type=__ubi_EXPORT_HWP; } var viewer=this; var params=_ubi_clone(viewer.params); params.arg=viewer._getArguments(); var exportTotalPage=this.totalPage; if (parseInt(params.exportPageTo) > 0 && parseInt(params.exportPageFrom) > 0) { exportTotalPage=parseInt(params.exportPageTo) - parseInt(params.exportPageFrom) + 1; } if (params.language == 'ko') { viewer._showProgress("\ud30c\uc77c \uc0dd\uc131\uc911\uc785\ub2c8\ub2e4."); } else { viewer._showProgress("Please wait while the file is generated."); } params.reqtype=__ubi_EXPORT_JOB; params.reqsubtype=type; if (type == __ubi_EXPORT_IMAGE) { params.reqimagetype=viewer._exportImageType; } _ubi_ajax({ type: "POST", datatype: "text", timeout: params.timeout, url: params.ubiserverurl, reqdata: params, flag: true, filename: "", onSuccess: function(xml) { this.flag=true; if (this.filename == "" || this.filename == undefined) { var pos=status.lastIndexOf("^"); if (pos >= 0) { var msg=status.substring(pos+1); if (!_ubi_lowerIE9()) { try { msg=msg.trim(); } catch (e) {} } var arr=msg.split("#"); if (arr[0] == "filename") this.filename=arr[1]; } } }, onComplete: function() { viewer._exportEnd(this.flag, this.filename); }, onError: function(msg) { this.flag=false; msg=msg.split("#")[0] + " : " + msg.split("#")[1]; viewer._showErrorDialog("", msg); }, onStatus: function(status) { var pos=status.lastIndexOf("^"); if (pos >= 0) { var msg=status.substring(pos+1); if (!_ubi_lowerIE9()) { try { msg=msg.trim(); } catch (e) {} } var arr=msg.split("#"); if (arr[0] == "page") { if (viewer.params.language == 'ko') { viewer._setProgress(_ubi_getMessage(viewer.params.language, "ExportMsg"), arr[1], exportTotalPage); } else { viewer._setProgress("Please wait while the file is generated.", arr[1], exportTotalPage); } } else if (arr[0] == "info") { viewer._setProgress(arr[1], null); } else if (arr[0] == "filename") { this.filename=arr[1]; } } } }); }, _exportEnd : function(flag, filename) { this._closeProgress(); if (flag && this._isAutoDownload) { var frameObj=document.getElementById(this.vid +"UbiExportFrame"); if (!frameObj) { frameObj=document.createElement("div"); frameObj.style.position="absolute"; frameObj.style.margin="0px"; frameObj.style.padding="0px"; frameObj.style.left="-1px"; frameObj.style.width="1px"; frameObj.style.height="1px"; frameObj.innerHTML= ""; this.divMain.appendChild(frameObj); } var formObj=document.getElementById(this.vid + "UbiExportForm"); if (!formObj) { formObj=document.createElement("form"); formObj.id=this.vid + "UbiExportForm"; formObj.method="POST"; formObj.action=this.params.ubiserverurl; if( __ubi_isMobile ) formObj.target='_blank'; else formObj.target=this.vid +'UbiExportFrame'; } formObj.method='post'; var innerHtml=[]; innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); innerHtml.push(""); if(this.params.excelPrintPaperSize != "") { innerHtml.push(""); } if(this.params.excelPrintfitWidth != "") { innerHtml.push(""); } if(this.params.excelPrintfitHeight != "") { innerHtml.push(""); } if (this.events.getUserParams) { var userparams=this.events.getUserParams(); if (userparams != undefined) { for ( var i=0; i < userparams.length; i+=2) { var str=""; innerHtml.push(str); } } } formObj.innerHTML=innerHtml.join(""); this.divMain.appendChild(formObj); formObj.submit(); } if (this.events.printEnd && (_ubi_strToBool(this.params.isredbc) || this._isPrintPDF)) { this.events.printEnd(flag); } else { if (this.events.exportEnd) { var exporturl=""; if (this._isAutoDownload == false && filename != undefined && filename != "") { exporturl=this.params.ubiserverurl + "?cHJvY2lk=GATEWAY&reqtype="+__ubi_EXPORT_RESULT + "&key=" + this.params.key + "&resid=" + this.params.resid + "&jrffile=" + this.params.jrffile + "&exportfilename=" + filename; } else { var ext=''; switch(this.params.reqsubtype) { case __ubi_EXPORT_IMAGE : ext='.zip'; break; case __ubi_EXPORT_PDF : ext='.pdf'; break; case __ubi_EXPORT_EXCEL1 : case __ubi_EXPORT_EXCEL2 : ext='.xlsx'; break; case __ubi_EXPORT_RTF : ext='.rtf'; break; case __ubi_EXPORT_HWP : ext='.hwp'; break; case __ubi_EXPORT_PPTX : ext='.pptx'; break; case __ubi_EXPORT_HML : ext='.hml'; break; case __ubi_EXPORT_DOCX : ext='.docx'; break; case __ubi_EXPORT_CELL : ext='.cell'; break; } if (this.params.reporttitle != undefined && this.params.reporttitle != "") { exporturl=this.params.reporttitle + ext; } else if (filename != undefined && filename != "") { exporturl=filename; if (this.params.reqsubtype == __ubi_EXPORT_CELL) { exporturl=exporturl.substring(0, exporturl.lastIndexOf('.')) + ext; } } } this.events.exportEnd(flag, exporturl); } } this._isAutoDownload=true; this._exportImageType=""; }, _linkButtonDown : function(filename, args) { if (this.events.linkButtonDown) { this.events.linkButtonDown(filename, args); } }, setArgument : function(key, value) { if (key == '') return; var replaceStr=String.fromCharCode(26) + '#'.charCodeAt(0) + String.fromCharCode(26); try { value=value.replace(/#/g, replaceStr); } catch (e) { } this._arghash.SetAt(key, value); }, _getArguments : function() { var arghash=new UbiMap(); if (this._arghash && this._arghash.GetCount() > 0) { if (this._arghash) { for (i=0; i 0) { var _rs_=String.fromCharCode(30); var _nrs_=String.fromCharCode(28); var datasetinfos=[]; datasetinfos.push("HTMLLOCALDATASET:" + _rs_); for (var i=0; i 0 && this.id.indexOf("UbiToolbarButton_SaveExcel") < 0){ viewer.toolbar.hidePopupExcel(); } if (_ubi_strToBool(viewer.params.iswa)) { _ubi_wafoucus(this); } }; buttonObj.onmouseout=buttonObj.onblur=function() { var disabledflag=(this.disabled == undefined ? true : !this.disabled); if (__ubi_isFF && !disabledflag) { return; } if (_ubi_strToBool(viewer.params.iswa)) { _ubi_wablur(this); } this.style.cursor="default"; this.style.backgroundColor=bgcolor; this.style.borderColor=bgcolor; this.style.borderWidth="1px"; this.style.borderStyle="solid"; if (this.getAttribute("outimage")) this.style.backgroundImage="url('"+ this.getAttribute("imageurl") + this.getAttribute("outimage") +"')"; }; popup.appendChild(buttonObj); this.buttons[id]=buttonObj; i++; if (i == infos.length) break; } var flag=viewer.divMain.contains(popup); if (!flag) { viewer.divMain.appendChild(popup); } return popup; }; this.makePrintPdfMessage=function() { var _browser=''; if (__ubi_isFF) _browser='Firefox'; else if (__ubi_isSafari) _browser='Safari'; else if (__ubi_isEdge) _browser='Edge'; else _browser=''; var chromeflag=false; if (__ubi_isChrome && viewer.params.password != "") { chromeflag=true; } var msg=""; if (chromeflag) { msg=_ubi_getMessage(viewer.params.language, "PdfDownloadChromeMsg"); } else { msg=_ubi_getMessage(viewer.params.language, "PdfDownloadMsg"); msg=msg.replace("^browser^", _browser); } var str=[]; var obj=document.createElement("div"); obj.id=viewer.vid +"Popup_PdfDownLoad_Message"; obj.className="dialog"; obj.style.cssText="display:none; position: absolute; z-index: 999999104; left: 50%; top: 50%; width: 450px; height: 300px; margin-left: -225px; margin-top: -150px;"; str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, "PrintPDFTitle")); str.push("
    "); str.push("
    "); str.push("
    "); str.push("
    "); str.push(msg); str.push("
    "); str.push("
    "); str.push("
    "); str.push(" "); str.push(" "); str.push("
    "); str.push("
    "); obj.innerHTML=str.join(""); viewer.divMain.appendChild(obj); }; this.makePrintPdfErrorMessage=function(flag, filename) { var str=[]; var createflag=false; var obj=document.getElementById(viewer.vid +"Popup_PdfError_Message"); if (obj) { obj.innerHTML=""; } else { createflag=true; obj=document.createElement("div"); } obj.id=viewer.vid +"Popup_PdfError_Message"; obj.className="dialog"; obj.style.cssText="display:none; position: absolute; z-index: 999999104; left: 50%; top: 50%; width: 450px; height: 300px; margin-left: -225px; margin-top: -150px;"; str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, "PrintPDFTitle")); str.push("
    "); str.push("
    "); str.push("
    "); str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, "PdfInstallMsg1") + "
    "); str.push(_ubi_getMessage(viewer.params.language, "PdfInstallMsg3")); str.push("
    "); str.push("
    "); str.push("
    "); str.push(" "); str.push(" "); str.push("
    "); str.push("
    "); obj.innerHTML=str.join(""); if (createflag) { viewer.divMain.appendChild(obj); } }; this.changeExportDialog=function(type) { var iframeobj=document.getElementById(viewer.vid +"Popup_ExportDialogFrame"); if (!iframeobj) { return; } var obj=document.getElementById(viewer.vid + "Popup_ExportDialog"); var tobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_Table"); if (obj && tobj) { var imgObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_Image"); if (imgObj) { if (type == __ubi_EXPORT_IMAGE) { imgObj.style.display=''; } else { imgObj.style.display='none'; } } var iframeheight=tobj.scrollHeight; iframeobj.height=iframeheight + "px"; obj.style.height=iframeheight + "px"; obj.style.marginTop=(-iframeheight/2) + "px"; } }; this.makeExportDialog=function() { var str=[]; var obj=document.createElement("div"); obj.id=viewer.vid +"Popup_ExportDialog"; obj.className="dialog"; obj.style.cssText="display:none; position: absolute; z-index: 999999104; left: 50%; top: 50%; width: 450px; height: 300px; margin-left: -225px; margin-top: -150px; border: 1px solid #555555;background:#fff;"; str.push("
    "); str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, "SaveDialogTitle")); str.push("
    "); str.push(" "); str.push(" "); str.push("
    "); str.push(" Image " + _ubi_getMessage(viewer.params.language, "ExportOption") + ""); str.push("
    "); str.push(" "); str.push(" "); str.push("
    "); str.push("
    "); str.push(" "); str.push(" "); str.push("
    "); str.push("
    "); str.push(" "); str.push("
    "); str.push("
    "); str.push( _ubi_getMessage(viewer.params.language, "ZipFileMsg")); str.push("
    "); str.push("
    "); str.push(" "); str.push("
    "); str.push(" "); str.push("  "); str.push("
    "); str.push("
    "); var iframeobj=document.createElement('iframe'); iframeobj.id=viewer.vid +"Popup_ExportDialogFrame"; iframeobj.scrolling="no"; iframeobj.style.cssText="width: 100%; margin:0px;border:0 none;"; obj.appendChild(iframeobj); viewer.divMain.appendChild(obj); var html=str.join(""); iframeobj.contentWindow.document.open(); iframeobj.contentWindow.document.write(html); iframeobj.contentWindow.document.body.style.cssText="margin:0px;"; iframeobj.contentWindow.document.close(); }; this.makeAboutBox=function() { var str=[]; var obj=document.createElement("div"); obj.id=viewer.vid +"Popup_AboutBox"; obj.className="dialog"; obj.style.cssText="display:none; position: absolute; z-index: 999999104; left: 50%; top: 50%; width: 450px; height: 300px; margin-left: -225px; margin-top: -150px;"; str[i++]="
    UbiReport
    "; str[i++]="
    "; str[i++]="
    "; str[i++]="
    "; str[i++]="" + _UBI_REPORT_BUILD_NO + "
    This copy is licensed to UbiDecision."; str[i++]="
    "; str[i++]="
    "; str[i++]=" www.ubireport.com"; str[i++]="
    "; str[i++]="
    "; str[i++]="
    "; str[i++]=" "; str[i++]="
    "; str[i++]="
    "; obj.innerHTML=str.join(""); viewer.divMain.appendChild(obj); }; this.makePrintDialog=function() { var msg=""; var msgflag=true; if (__ubi_isFF) msg="PrintHTMLMsg_FF"; else if (__ubi_isChrome || __ubi_isWhale) msg="PrintHTMLMsg_Chrome"; else if (__ubi_isOpera) msg="PrintHTMLMsg_Opera"; else if (__ubi_isEdge) msg="PrintHTMLMsg_Edge"; else if (__ubi_isIE) { msg="PrintHTMLMsg_IE"; if (viewer.params.printIEobj) { msg="PrintHTMLMsg_IEObj"; } } else msgflag=false; var str=[]; var obj=document.createElement("div"); obj.id=viewer.vid +"Popup_PrintDialog"; obj.className="dialog"; obj.style.cssText="display:none; position: absolute; z-index: 999999104; left: 50%; top: 50%; width: 450px; height: 320px; margin-left: -225px; margin-top: -160px; border: 1px solid #555555;background:#fff;"; str.push("
    "); str.push("
    UbiReport
    "); str.push("
    "); if (msgflag) { str.push("
    "); } else { str.push("
    "); } str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, "PrintDlgMent") + "("+ _ubi_getMessage(viewer.params.language, "PrintDlgMaxMent") + viewer.params.printlimit +")"); str.push("
    "); str.push("
    " + _ubi_getMessage(viewer.params.language, "PrintDlgRange") + "
    "); str.push("
    "); str.push(" "); str.push(" "); str.push(" "); str.push("   " + _ubi_getMessage(viewer.params.language, "PrintDlgFrom") + "  "); str.push(" " + _ubi_getMessage(viewer.params.language, "PrintDlgTo") + ""); str.push("
    "); if (msgflag) { str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, msg)); str.push("
    "); } str.push("
    "); str.push(_ubi_getMessage(viewer.params.language, "PrintDlgHMent") + "
    " + _ubi_getMessage(viewer.params.language, "PrintDlgHMent2") + " "); } else { str.push(viewer.params.resource + "/images/printGuide_us.html' target='_blank'>"); } str.push(_ubi_getMessage(viewer.params.language, "PrintDlgLink") + ""); str.push("
    "); str.push("
    "); str.push("
    "); str.push(" "); str.push("  "); str.push("
    "); str.push("
    "); str.push("
    "); var iframeobj=document.createElement('iframe'); iframeobj.id=viewer.vid +"Popup_PrintDialogFrame"; iframeobj.scrolling="no"; iframeobj.style.cssText="width: 100%; margin:0px;border:0 none;"; obj.appendChild(iframeobj); viewer.divMain.appendChild(obj); var html=str.join(""); iframeobj.contentWindow.document.open(); iframeobj.contentWindow.document.write(html); iframeobj.contentWindow.document.body.style.cssText="margin:0px;"; iframeobj.contentWindow.document.close(); }; this.createCombo=function() { if (this.zoomCombo == null) { this.zoomCombo=document.createElement("div"); this.zoomCombo.id=viewer.vid +"UbiToolbarSelect_ZoomList"; this.zoomCombo.style.cssText="display: none; position: absolute; z-index: 999999101; width: 74px; height: 21px; font-family: Dotum, Tahoma, 맑은고딕; font-size: 13px; overflow: auto; border: 0px solid #ccc; margin-top:1px; margin-bottom:1px; background:#5f6064; border:1px solid #ff6600; border-color:#BDBDBD #BDBDBD #BDBDBD #BDBDBD;"; viewer.divMain.appendChild(this.zoomCombo); } if (this.pageCombo == null) { this.pageCombo=document.createElement("div"); this.pageCombo.id=viewer.vid +"UbiToolbarSelect_PageList"; this.pageCombo.style.cssText="display: none; position: absolute; z-index: 999999101; width: 74px; height: 21px; font-family: Dotum, Tahoma, 맑은고딕; font-size: 13px; overflow: auto; border: 0px solid #ccc; margin-top:1px; margin-bottom:1px; background:#5f6064; border:1px solid #ff6600; border-color:#BDBDBD #BDBDBD #BDBDBD #BDBDBD;"; viewer.divMain.appendChild(this.pageCombo); } }; this.showComboBox=function(type) { if (type != "ZoomCombo" && type != "PageCombo" ) return; var xpos=0; var ypos=0; var typeindex=0; var visiblecount=0; var tbodyObj=this.toolbarObj.childNodes; if (tbodyObj) { var trlist=tbodyObj[0].childNodes; if (trlist) { var tdlist=trlist[0].childNodes; for (var i=0; i 0) { visiblecount++; } } } } ypos=(ypos - this.buttons[type].clientHeight)/2 + this.buttons[type].clientHeight + 1; if (__ubi_isIE) { var combotdObj=document.getElementById(viewer.vid +"UbiToolbar_"+ type); if (type == "ZoomCombo" && this.buttons["TotalPageText"] && combotdObj && combotdObj.clientWidth > 0) { if (this.buttons["TotalPageText"].innerText.length == 4) { xpos++; } } if (__ubi_ieVersion < 8) { xpos += visiblecount*2 + 4; ypos += 3; } else { xpos += 2; } } else { xpos += 1; } var viewerObj=document.getElementById(vid); var toolbarObj=document.getElementById(vid + "_toolbar"); var baseHeight=20; var listHeight=0; if (type == "ZoomCombo") { listHeight=Math.min(baseHeight*this.scaleValues.length, baseHeight*15); } else if (type == "PageCombo") { listHeight=Math.min(baseHeight*viewer.totalPage, baseHeight*15); } var viewerHeight=viewerObj.scrollHeight; if (toolbarObj && toolbarObj.style.display != "none") { viewerHeight -= toolbarObj.scrollHeight; } if (listHeight < baseHeight) { listHeight=baseHeight; } else { listHeight=Math.min(listHeight, viewerHeight); } if (type == "ZoomCombo") { this.zoomCombo.style.left=xpos + "px"; this.zoomCombo.style.top=ypos + "px"; this.zoomCombo.style.height=listHeight + "px"; this.zoomCombo.style.display=""; } else if (type == "PageCombo") { this.pageCombo.style.left=xpos + "px"; this.pageCombo.style.top=ypos + "px"; this.pageCombo.style.height=listHeight + "px"; this.pageCombo.style.display=""; } }; this.showPopup=function(type) { var buttonid=""; if (type == "SaveDropMenu") { buttonid="SaveButton"; } else if (type == "PrintDropMenu") { buttonid="PrintButton"; } else { return; } var xpos=0; var visiblecount=0; var tbodyObj=this.toolbarObj.childNodes; if (tbodyObj) { var trlist=tbodyObj[0].childNodes; if (trlist) { var tdlist=trlist[0].childNodes; for (var i=0; i 0) { visiblecount++; } } } } if (__ubi_isIE) { if (__ubi_ieVersion < 8) { xpos += visiblecount*2 + 4; } else { xpos += 2; } } else { xpos += 1; } if (type == "SaveDropMenu") { this.saveList.style.left=0 + "px"; this.saveList.style.display=""; } else if (type == "PrintDropMenu") { this.printList.style.left=xpos + "px"; this.printList.style.display= ""; } }; this.showPopupExcel=function() { if (this.buttons["SaveXls"]) { this.excelList.style.left="130px"; var height=viewer.divToolbar.style.height; if (height.indexOf('px') >= 0) { height=height.substring(0, height.indexOf('px')); } this.excelList.style.top=(parseInt(height) + this.buttons["SaveXls"].offsetTop) +"px"; this.excelList.style.display=""; } }; this.hidePopupExcel=function() { this.excelList.style.display="none"; }; this.isShowPopup=function(type) { if (type == "ZoomCombo") { if (this.zoomCombo.style.display != "none") return true; } else if (type == "PageCombo") { if (this.pageCombo.style.display != "none") return true; } else if (type == "SaveDropMenu") { if (this.saveList.style.display != "none") return true; } else if (type == "PrintDropMenu") { if (this.printList.style.display != "none") return true; } return false; }; this.hidePopupAll=function() { this.zoomCombo.style.display="none"; this.pageCombo.style.display="none"; this.saveList.style.display="none"; this.excelList.style.display="none"; this.printList.style.display="none"; }; this.destroy=function() { _ubi_RemoveAddEvent(document, "click", clicked); }; this.getCurrScale=function() { return this.scaleValues[this.scaleIndex]; }; this.setCurrScale=function(zoom) { var scalevalue="PageWidth"; this.scaleIndex=this.scaleValues.length - 2; var zoomstr=""+zoom; if (zoomstr == "-9998") { zoomstr="PageWidth"; } else if (zoomstr == "-9999") { zoomstr="WholePage"; } var lowerValue=""; var lowerZoomValue=zoomstr.toLowerCase(); for (var i=0; i 0 && page <= viewer.totalPage) { this.setCurrPage(page); viewer._movePage(page); this.setStatus(); } }; this.changeScale=function(scale) { if (viewer.totalPage < 1) return; if (this.scaleValues[this.scaleIndex] != scale) { this.jobStart(); setTimeout(function() { viewer.toolbar.changeScaleJob(scale); },50); } }; this.changeScaleJob=function(scale) { this.setCurrScale(scale); this.setStatus(); viewer._changeScale(); this.jobEnd(); }; this.first=function() { if (viewer.totalPage > 0 && this.page != 1) { var page=1; this.movePage(page); } }; this.previous=function() { if (this.page > 1) { var page=this.page-1; this.movePage(page); } }; this.next=function() { if (this.page < viewer.totalPage) { var page=this.page+1; this.movePage(page); } }; this.last=function() { if (viewer.totalPage > 0 && this.page != viewer.totalPage) { var page=viewer.totalPage; this.movePage(page); } }; this.zoomout=function() { if (this.scaleIndex > 0) { var scale=this.scaleValues[this.scaleIndex-1]; this.changeScale(scale); } }; this.zoomin=function() { if ((this.scaleIndex+1) < this.scaleValues.length) { var scale=this.scaleValues[this.scaleIndex+1]; this.changeScale(scale); } }; this.setscale=function(scale) { var scalenum=scale; if (typeof(scale) != "number") { scalenum=parseInt(scale); } for (var i=0; i= parseInt(limitpage)) { var obj=document.getElementById(viewer.vid +"Popup_PrintDialog"); var iframeobj=document.getElementById(viewer.vid +"Popup_PrintDialogFrame"); if (obj && iframeobj) { var commentFlag=false; if (viewer.totalPage <= parseInt(limitpage)) { var allobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_All"); allobj.checked=true; iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Comment").style.display='none'; commentFlag=true; iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_PageFrom").value=1; iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_PageTo").value=viewer.totalPage; } else { var allobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Pages"); allobj.checked=true; iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_PageFrom").value=1; iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_PageTo").value=limitpage; obj.style.height=350 + 'px'; var contentsObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Contents"); contentsObj.style.height=200 + 'px'; } var commentobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Landscape"); if (commentobj && __ubi_isIE && viewer.pageOrientation == "Landscape") { commentobj.style.display=''; var contentsObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Contents"); if (commentFlag) { obj.style.height=350 + 'px'; contentsObj.style.height=200 + 'px'; } else { obj.style.height=380 + 'px'; contentsObj.style.height=230 + 'px'; } } else { commentobj.style.display='none'; } obj.style.display=""; var tobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Table"); var iframeheight=tobj.scrollHeight; iframeobj.height=iframeheight + "px"; } } else { if (viewer.params.isStreaming) { viewer._printRetrieveAll(1, viewer.totalPage); } else { viewer._printHTML(1, viewer.totalPage); } } }; this.printPLUGIN=function(isPrintSet) { exePrint(isPrintSet, viewer); }; this.exportPLUGIN=function(type) { exeExport(type, viewer); }; this.downloadPDFok=function(flag, filename) { if (__ubi_isIE) { viewer._isPrintPDF=true; viewer._exportEnd(flag, filename); document.getElementById(viewer.vid +"Popup_PdfError_Message").style.display='none'; } else { viewer._isPrintPDF=true; viewer._exportReport(__ubi_EXPORT_PDF); document.getElementById(viewer.vid +"Popup_PdfDownLoad_Message").style.display='none'; } }; this.exportok=function() { var iframeobj=document.getElementById(viewer.vid +"Popup_ExportDialogFrame"); if (!iframeobj) { return; } var type=__ubi_EXPORT_IMAGE; var pluginSaveFlag=_ubi_strToBool(viewer.params.usepluginsave); if (_ubi_strToBool(viewer.params.usepluginsave) || parseInt(viewer.exportsetmode) != 1) { var fileComboObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_FileType"); type=fileComboObj.value; pluginSaveFlag=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_Plugin").checked; } if (type == __ubi_EXPORT_IMAGE) { var imgType='jpg'; var tiffType='GROUP3_2D'; var tiffPage=false; var obj=document.getElementById(viewer.vid +"Popup_ExportDialog"); if (obj) { var imgTypeObj=iframeobj.contentWindow.document.getElementById(viewer.vid +"_ExportDialog_ImageType"); if (imgTypeObj) { imgType=imgTypeObj.value; viewer._exportImageType=imgType; if (pluginSaveFlag) { viewer.setPluginVariable('Export.Image.DefaultExtension', imgType); } } if (imgType == 'tif') { var tiffCompObj=iframeobj.contentWindow.document.getElementById(viewer.vid +"_ExportDialog_TifType"); if (tiffCompObj) { tiffType=tiffCompObj.value; } var tiffPageObj=iframeobj.contentWindow.document.getElementById(viewer.vid +"_ExportDialog_TifPage"); if (tiffPageObj) { tiffPage=tiffPageObj.checked; } if (pluginSaveFlag) { if (tiffType == 'GROUP3_2D') { tiffType='GROUP3'; } else if (tiffType == 'JPEG_TTN2') { tiffType='JPEG'; } viewer.setPluginVariable('Export.Image.CompressionType', tiffType); viewer.setPluginVariable('Export.Image.TiffPerPage', tiffPage); } else { viewer.params.tiffType=tiffType; viewer.params.tiffPerPage=tiffPage; } } } } if (pluginSaveFlag) { viewer.toolbar.exportPLUGIN(type); } else { viewer.params.exportPageFrom=0; viewer.params.exportPageTo=0; if (parseInt(viewer.exportsetmode) != 1) { var allObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_All"); var currentObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_Current"); var pagesObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_Pages"); if (currentObj.checked) { var pageFrom=this.page; var pageTo=this.page; viewer.params.exportPageFrom=pageFrom; viewer.params.exportPageTo=pageTo; } else if (pagesObj.checked) { var fromObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_PageFrom"); var toObj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_ExportDialog_PageTo"); var pageFrom=parseInt(fromObj.value); var pageTo=parseInt(toObj.value); viewer.params.exportPageFrom=pageFrom; viewer.params.exportPageTo=pageTo; } } viewer._exportStart(type); } document.getElementById(viewer.vid +"Popup_ExportDialog").style.display='none'; }; this.printok=function() { var iframeobj=document.getElementById(viewer.vid +"Popup_PrintDialogFrame"); if (!iframeobj) { return; } var allobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_All"); var currobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Current"); var pagesobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_Pages"); var pagefrom=1, pageto=1; if (allobj.checked) { pageto=viewer.totalPage; } else if (currobj.checked) { pagefrom=this.page; pageto=this.page; } else if (pagesobj.checked) { var fromobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_PageFrom"); var toobj=iframeobj.contentWindow.document.getElementById(viewer.vid + "_PrintDialog_PageTo"); pagefrom=parseInt(fromobj.value); pageto=parseInt(toobj.value); } if (pagefrom < 1 || pageto > viewer.totalPage) { alert(_ubi_getMessage(viewer.params.language, "PrintDlgRangeErr") + _ubi_getMessage(viewer.params.language, "PrintDlgEnter")); return; } if ((pageto - pagefrom + 1) > viewer.params.printlimit) { alert(_ubi_getMessage(viewer.params.language, "PrintDlgHTMLRangeErr") + "\n(" + _ubi_getMessage(viewer.params.language, "PrintDlgMaxMent") + viewer.params.printlimit + ")" + _ubi_getMessage(viewer.params.language, "PrintDlgEnter")); return; } document.getElementById(viewer.vid +"Popup_PrintDialog").style.display='none'; if (viewer.params.isStreaming) viewer._printRetrieveAll(pagefrom, pageto); else viewer._printHTML(pagefrom, pageto); }; this.enableButton=function(buttonid, flag) { var button=this.buttons[buttonid]; if (button) { var orgImage=button.getAttribute("outimage"); if (orgImage) { var disImage=button.getAttribute("disimage"); if (flag) button.style.backgroundImage="url('"+ viewer.params.resource + "/images/toolbar/"+ orgImage +"')"; else button.style.backgroundImage="url('"+ viewer.params.resource + "/images/toolbar/"+ disImage +"')"; } if (flag) button.disabled=false; else button.disabled=true; } }; this.isEnabledButton=function(buttonid) { var button=this.buttons[buttonid]; if (button) { if (button.disabled == undefined) return true; return !button.disabled; } return false; }; this.setStatus=function() { if (this.page == viewer.totalPage || viewer.totalPage <= 1) { this.enableButton("NextButton", false); this.enableButton("LastButton", false); } else { this.enableButton("NextButton", true); this.enableButton("LastButton", true); } if (this.page == 1 || this.page == 0 || viewer.totalPage <= 1) { this.enableButton("FirstButton", false); this.enableButton("PreviousButton", false); } else { this.enableButton("FirstButton", true); this.enableButton("PreviousButton", true); } this.enableButton("ZoomOutButton", false); this.enableButton("ZoomInButton", false); if (viewer.totalPage > 0) { if (this.scaleIndex > 0) { this.enableButton("ZoomOutButton", true); } if (this.scaleIndex < (this.scaleValues.length-1)) { this.enableButton("ZoomInButton", true); } } if ((_ubi_strToBool(viewer.params.isStreaming) && viewer._isReceiveTotalpage) || (_ubi_strToBool(viewer.params.isStreaming) == false && viewer.totalPage > 0)) { this.enableButton("SaveButton", true); this.enableButton("PrintButton", true); this.enableButton("PrintSetButton", true); this.enableButton("RefreshButton", true); this.enableButton("SaveDropMenu", true); this.enableButton("PrintDropMenu", true); } else { this.enableButton("SaveButton", false); this.enableButton("PrintButton", false); this.enableButton("PrintSetButton", false); this.enableButton("RefreshButton", false); this.enableButton("SaveDropMenu", false); this.enableButton("PrintDropMenu", false); } if (viewer._isMultiPaper) { if (this.isEnabledButton("SaveButton")) { this.enableButton("SaveXls", false); this.enableButton("SaveRtf", false); this.enableButton("SaveHwp", false); this.enableButton("SavePptx", false); this.enableButton("SaveHml", false); this.enableButton("SaveDocx", false); this.enableButton("SaveCell", false); this.enableButton("SaveImage", false); } } }; this.setUserSaveList=function(list) { this.userSaveList=list; if (this.userSaveList != "") { var arr=this.userSaveList.split(","); var newsaveinfos=[]; for(var j in arr) { var savetype=arr[j].trim().toUpperCase(); if (savetype != "") { for (var k in saveinfos) { var info=saveinfos[k]; if (savetype == info[0].toUpperCase()) { newsaveinfos.push(info); break; } } } } if (newsaveinfos.length > 0) { this.saveList=this.makePopupMenu("Save", this.saveList, newsaveinfos); } } }; this.setUserPrintList=function(list) { this.userPrintList=list; if (this.userPrintList != "") { var arr=this.userPrintList.split(","); var newprintinfos=[]; for(var j in arr) { var printtype=arr[j].trim().toUpperCase(); if (printtype != "") { for (var k in printinfos) { var info=printinfos[k]; if (printtype == info[0].toUpperCase()) { newprintinfos.push(info); break; } } } } if (newprintinfos.length > 0) { this.printList=this.makePopupMenu("Print", this.printList, newprintinfos); } } }; this.setVisibleToolbar=function(id, flag) { var tdid=viewer.vid +"UbiToolbar_"; var name=id.toUpperCase(); var display=(flag) ? "block" : "none"; switch(name) { case "SAVE": this.buttontds["SaveButton"].style.display=display; this.buttontds["SaveText"].style.display=display; this.buttontds["SaveDropMenu"].style.display=display; break; case "SAVEBUTTON": this.buttontds["SaveButton"].style.display=display; break; case "SAVETEXT": this.buttontds["SaveText"].style.display=display; break; case "SAVEDROPMENU": this.buttontds["SaveDropMenu"].style.display=display; break; case "PRINT": this.buttontds["PrintButton"].style.display=display; this.buttontds["PrintText"].style.display=display; this.buttontds["PrintDropMenu"].style.display=display; this.buttons["PrintPdf"].style.display=display; this.buttons["PrintHtml"].style.display=display; this.buttons["PrintUbi"].style.display=display; break; case "PRINTBUTTON": this.buttontds["PrintButton"].style.display=display; break; case "PRINTTEXT": this.buttontds["PrintText"].style.display=display; break; case "PRINTDROPMENU": this.buttontds["PrintDropMenu"].style.display=display; break; case "PRINTSET": this.buttontds["PrintSetButton"].style.display=display; this.buttontds["PrintSetText"].style.display=display; break; case "PRINTSETBUTTON": this.buttontds["PrintSetButton"].style.display=display; break; case "PRINTSETTEXT": this.buttontds["PrintSetText"].style.display=display; break; case "NAVIGATION": this.buttontds["NaviSep"].style.display=display; this.buttontds["FirstButton"].style.display=display; this.buttontds["PreviousButton"].style.display=display; this.buttontds["PageCombo"].style.display=display; this.buttontds["TotalPageText"].style.display=display; this.buttontds["NextButton"].style.display=display; this.buttontds["LastButton"].style.display=display; break; case "FIRST": this.buttontds["FirstButton"].style.display=display; break; case "PREV": this.buttontds["PreviousButton"].style.display=display; break; case "PAGE": this.buttontds["PageCombo"].style.display=display; break; case "TOTALPAGE": this.buttontds["TotalPageText"].style.display=display; break; case "NEXT": this.buttontds["NextButton"].style.display=display; break; case "LAST": this.buttontds["LastButton"].style.display=display; break; case "PAGECOMBO": this.buttontds["PageCombo"].style.display=display; break; case "TOTALPAGETEXT": this.buttontds["TotalPageText"].style.display=display; break; case "ZOOM": this.buttontds["ZoomSep"].style.display=display; this.buttontds["ZoomOutButton"].style.display=display; this.buttontds["ZoomCombo"].style.display=display; this.buttontds["ZoomInButton"].style.display=display; break; case "ZOOM_OUT": this.buttontds["ZoomOutButton"].style.display=display; break; case "ZOOM_VALUE": this.buttontds["ZoomCombo"].style.display=display; break; case "ZOOM_IN": this.buttontds["ZoomInButton"].style.display=display; break; case "REFRESH": this.buttontds["RefreshButton"].style.display=display; break; case "INFO": this.buttontds["AboutButton"].style.display=display; break; case "SAVE_PDF": this.buttons["SavePdf"].style.display=display; break; case "SAVE_EXCEL": this.buttons["SaveXls"].style.display=display; break; case "SAVE_PPTX": this.buttons["SavePptx"].style.display=display; break; case "SAVE_HML": this.buttons["SaveHml"].style.display=display; break; case "SAVE_DOCX": this.buttons["SaveDocx"].style.display=display; break; case "SAVE_CELL": this.buttons["SaveCell"].style.display=display; break; case "SAVE_IMAGE" : this.buttons["SaveImage"].style.display=display; break; case "EXCEL_TYPE1": this.buttons["SaveExcelPrint"].style.display=display; break; case "EXCEL_TYPE2": this.buttons["SaveExcelBase"].style.display=display; break; case "PRINT_PDF": this.buttons["PrintPdf"].style.display=display; break; case "PRINT_HTML": this.buttons["PrintHtml"].style.display=display; break; case "PRINT_UBI": if (_ubi_strToBool(viewer.params.useplugin)) { this.buttons["PrintUbi"].style.display=display; } else { this.buttons["PrintUbi"].style.display="none"; } break; } var isVisiblePrintPDF=(this.buttons["PrintPdf"].style.display == 'none')?false:true; var isVisiblePrintHTML=(this.buttons["PrintHtml"].style.display == 'none')?false:true; var isVisiblePrintPLUGIN=(this.buttons["PrintUbi"].style.display == 'none')?false:true; if ( (!isVisiblePrintPDF && !isVisiblePrintHTML && !isVisiblePrintPLUGIN) || (isVisiblePrintPDF && !isVisiblePrintHTML && !isVisiblePrintPLUGIN && this.printDefaultType == 'PDF') || (isVisiblePrintHTML && !isVisiblePrintPDF && !isVisiblePrintPLUGIN && this.printDefaultType == 'HTML') || (isVisiblePrintPLUGIN && !isVisiblePrintPDF && !isVisiblePrintHTML && this.printDefaultType == 'UBI')) { this.buttontds["PrintDropMenu"].style.display='none'; } else { this.buttontds["PrintDropMenu"].style.display=''; } }; this.setMenuTextToolbar=function(id, text) { var name=id.toUpperCase(); switch(name) { case "SAVE": this.buttons["SaveText"].innerHTML=text; break; case "PRINT": this.buttons["PrintText"].innerHTML=text; break; case "PRINTSET": this.buttons["PrintSetText"].innerHTML=text; break; case "PDF": this.buttons["SavePdf"].value=text; break; case "EXCEL": this.buttons["SaveXls"].value=text; break; case "DOCX": this.buttons["SaveDocx"].value=text; break; case "PPTX": this.buttons["SavePptx"].value=text; break; case "HML": this.buttons["SaveHml"].value=text; break; case "CELL": this.buttons["SaveCell"].value=text; break; case "IMAGE": this.buttons["SaveImage"].value=text; break; case "EXCEL_TYPE1": this.buttons["SaveExcelPrint"].value=text; break; case "EXCEL_TYPE2": this.buttons["SaveExcelBase"].value=text; break; case "PRINT_PDF": this.buttons["PrintPdf"].value=text; break; case "PRINT_HTML": this.buttons["PrintHtml"].value=text; break; case "PRINT_UBI": this.buttons["PrintUbi"].value=text; break; } }; this.jobStart=function() { viewer.divDisable.style.width=viewer.divToolbar.clientWidth; viewer.divDisable.style.height=viewer.divToolbar.style.height; viewer.divDisable.style.display=""; viewer.divMain.style.cursor="progress"; }; this.jobEnd=function() { viewer.divDisable.style.display="none"; viewer.divMain.style.cursor="default"; }; this.initToolbar(); function clicked(e) { var target=e.target || e.srcElement; if (!target || !target.id || target.id.substring(0, vid.length) != vid) { __ubi_viewers[vid].toolbar.hidePopupAll(); return; } var targetid=target.id; if (targetid == (vid +"UbiToolbarButton_ZoomCombo")) { if (__ubi_viewers[vid].toolbar.isShowPopup("ZoomCombo") == false) { __ubi_viewers[vid].toolbar.hidePopupAll(); __ubi_viewers[vid].toolbar.showComboBox("ZoomCombo"); return; } } else if (targetid == (vid +"UbiToolbarButton_PageCombo")) { if (__ubi_viewers[vid].toolbar.isShowPopup("PageCombo") == false) { __ubi_viewers[vid].toolbar.hidePopupAll(); __ubi_viewers[vid].toolbar.showComboBox("PageCombo"); return; } } else if (targetid == (vid +"UbiToolbarButton_SaveDropMenu")) { if (__ubi_viewers[vid].toolbar.isShowPopup("SaveDropMenu") == false) { __ubi_viewers[vid].toolbar.hidePopupAll(); if (__ubi_viewers[vid].toolbar.isEnabledButton("SaveButton") == true) { __ubi_viewers[vid].toolbar.showPopup("SaveDropMenu"); } return; } } else if (targetid == (vid +"UbiToolbarButton_PrintDropMenu")) { if (__ubi_viewers[vid].toolbar.isShowPopup("PrintDropMenu") == false) { __ubi_viewers[vid].toolbar.hidePopupAll(); if (__ubi_viewers[vid].toolbar.isEnabledButton("PrintButton") == true) { __ubi_viewers[vid].toolbar.showPopup("PrintDropMenu"); } return; } } var viewer=__ubi_viewers[vid]; var toolbarid=vid + "UbiToolbarButton_"; if (targetid.indexOf(vid +"ZoomOption_") == 0) { var scale=target.getAttribute("value"); viewer.toolbar.changeScale(scale); } else if (targetid.indexOf(vid +"PageOption_") == 0) { var page=targetid.substring(targetid.lastIndexOf("_")+1); viewer.toolbar.movePage(parseInt(page)); } else if (targetid == toolbarid +"FirstButton") { if (viewer.toolbar.isEnabledButton("FirstButton")) __ubi_viewers[vid].toolbar.first(); } else if (targetid == toolbarid +"PreviousButton") { if (viewer.toolbar.isEnabledButton("PreviousButton")) viewer.toolbar.previous(); } else if (targetid == toolbarid +"NextButton") { if (viewer.toolbar.isEnabledButton("NextButton")) viewer.toolbar.next(); } else if (targetid == toolbarid +"LastButton") { if (viewer.toolbar.isEnabledButton("LastButton")) viewer.toolbar.last(); } else if (targetid == toolbarid +"ZoomOutButton") { if (viewer.toolbar.isEnabledButton("ZoomOutButton")) viewer.toolbar.zoomout(); } else if (targetid == toolbarid +"ZoomInButton") { if (viewer.toolbar.isEnabledButton("ZoomInButton")) viewer.toolbar.zoomin(); } else if (targetid == toolbarid +"RefreshButton") { if (viewer.toolbar.isEnabledButton("RefreshButton")) viewer.toolbar.refresh(); } else if (targetid == toolbarid +"AboutButton") { if (viewer.toolbar.isEnabledButton("AboutButton")) viewer.toolbar.aboutbox(); } else if (targetid == toolbarid +"PrintButton" || targetid == toolbarid +"PrintText") { if (viewer.toolbar.isEnabledButton("PrintButton")) { if (viewer.toolbar.printDefaultType == "") { if (viewer.toolbar.isShowPopup("PrintDropMenu") == false) { viewer.toolbar.hidePopupAll(); viewer.toolbar.showPopup("PrintDropMenu"); return; } } else { if (viewer.events.printClicked) { viewer.events.printClicked(viewer.toolbar.printDefaultType); } else { if (viewer.toolbar.printDefaultType == "PDF") { viewer._printPDF(true); } else if (viewer.toolbar.printDefaultType == "HTML") { viewer.toolbar.printHTML(); } else if (viewer.toolbar.printDefaultType == "UBI") { viewer.toolbar.printPLUGIN(false); } } } } } else if (targetid == toolbarid +"PrintSetButton" || targetid == toolbarid +"PrintSetText") { if (viewer.toolbar.isEnabledButton("PrintSetButton")) { viewer._printPDF(true); } } else if (targetid == toolbarid +"PrintPdf") { if (viewer.toolbar.isEnabledButton("PrintPdf")) { if (viewer.events.printClicked) { viewer.events.printClicked('PDF'); } else { viewer._printPDF(true); } } } else if (targetid == toolbarid +"PrintHtml") { if (viewer.toolbar.isEnabledButton("PrintHtml")) { if (viewer.events.printClicked) { viewer.events.printClicked('HTML'); } else { viewer.toolbar.printHTML(); } } } else if (targetid == toolbarid +"PrintUbi") { if (viewer.toolbar.isEnabledButton("PrintUbi")) { if (viewer.events.printClicked) { viewer.events.printClicked('UBI'); } else { viewer.toolbar.printPLUGIN(true); } } } else if (targetid == toolbarid +"SaveButton" || targetid == toolbarid +"SaveText") { if (viewer.toolbar.isEnabledButton("SaveButton")) { if (viewer.toolbar.saveDefaultType == "") { if (viewer.toolbar.isShowPopup("SaveDropMenu") == false) { viewer.toolbar.hidePopupAll(); viewer.toolbar.showPopup("SaveDropMenu"); return; } } else { if (viewer.events.exportClicked) { var savetype='PDF'; switch (viewer.toolbar.saveDefaultType) { case __ubi_EXPORT_EXCEL1 : savetype='EXCEL'; break; case __ubi_EXPORT_EXCEL2 : savetype='EXCEL_NO'; break; case __ubi_EXPORT_PPTX : savetype='PPTX'; break; case __ubi_EXPORT_DOCX : savetype='DOCX'; break; case __ubi_EXPORT_HML : savetype='HML'; break; case __ubi_EXPORT_CELL : savetype='CELL'; break; case __ubi_EXPORT_IMAGE : savetype='IMAGE'; break; } viewer.events.exportClicked(savetype); } else { viewer._exportReport(viewer.toolbar.saveDefaultType); } } } } else if (targetid == toolbarid +"SavePdf") { if (viewer.toolbar.isEnabledButton("SavePdf")) { viewer._isPrintPDF=false; if (viewer.events.exportClicked) { viewer.events.exportClicked('PDF'); } else { viewer._exportReport(__ubi_EXPORT_PDF); } } } else if (targetid == toolbarid +"SaveExcel") { if (viewer.toolbar.isEnabledButton("SaveExcel")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('EXCEL'); } else { viewer._exportReport(__ubi_EXPORT_EXCEL1); } } } else if (targetid == toolbarid +"SaveExcelPrint") { if (viewer.toolbar.isEnabledButton("SaveExcelPrint")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('EXCEL'); } else { viewer._exportReport(__ubi_EXPORT_EXCEL1); } } } else if (targetid == toolbarid +"SaveExcelBase") { if (viewer.toolbar.isEnabledButton("SaveExcelBase")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('EXCEL_NO'); } else { viewer._exportReport(__ubi_EXPORT_EXCEL2); } } } else if (targetid == toolbarid +"SaveDocx") { if (viewer.toolbar.isEnabledButton("SaveDocx")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('DOCX'); } else { viewer._exportReport(__ubi_EXPORT_DOCX); } } } else if (targetid == toolbarid +"SavePptx") { if (viewer.toolbar.isEnabledButton("SavePptx")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('PPTX'); } else { viewer._exportReport(__ubi_EXPORT_PPTX); } } } else if (targetid == toolbarid +"SaveHml") { if (viewer.toolbar.isEnabledButton("SaveHml")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('HML'); } else { viewer._exportReport(__ubi_EXPORT_HML); } } } else if (targetid == toolbarid +"SaveCell") { if (viewer.toolbar.isEnabledButton("SaveCell")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('CELL'); } else { viewer._exportReport(__ubi_EXPORT_CELL); } } } else if (targetid == toolbarid +"SaveImage") { if (viewer.toolbar.isEnabledButton("SaveImage")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('IMAGE'); } else { viewer._exportReport(__ubi_EXPORT_IMAGE); } } } else if (targetid == toolbarid +"SaveXls") { if (viewer.toolbar.saveExcelDefaultType != "") { if (viewer.toolbar.saveExcelDefaultType == __ubi_EXPORT_EXCEL1 && viewer.toolbar.isEnabledButton("SaveExcelPrint")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('EXCEL'); } else { viewer._exportReport(__ubi_EXPORT_EXCEL1); } } else if (viewer.toolbar.saveExcelDefaultType == __ubi_EXPORT_EXCEL2 && viewer.toolbar.isEnabledButton("SaveExcelBase")) { if (viewer.events.exportClicked) { viewer.events.exportClicked('EXCEL_NO'); } else { viewer._exportReport(__ubi_EXPORT_EXCEL2); } } } } if (targetid != toolbarid +"SaveXls" || (targetid == toolbarid +"SaveXls" && viewer.toolbar.saveExcelDefaultType != "") ) { __ubi_viewers[vid].toolbar.hidePopupAll(); } }; this.applyWA=function(id) { var buttonNames=[ ["SaveButton", "저장"], ["SaveDropMenu", "저장유형 선택"], ["SavePdf", "PDF로 저장" ], ["SaveXls", "엑셀로 저장" ], ["SaveExcelPrint", "프린트형식의 엑셀로 저장" ], ["SaveExcelBase", "리스트형식의 엑셀로 저장" ], ["SaveRtf", "RTF 저장" ], ["SaveDocx", "MS워드로 저장" ], ["SavePptx", "파워포인트로 저장" ], ["SaveHml", "한글파일로 저장" ], ["SaveCell", "한셀로 저장" ], ["SaveImage", "이미지로 저장" ], ["PrintButton", "인쇄"], ["PrintDropMenu", "인쇄유형 선택"], ["PrintPdf", "PDF로 인쇄" ], ["PrintHtml", "HTML로 인쇄"], ["PrintUbi", "대량 인쇄"], ["PrintSetButton", "인쇄설정"], ["FirstButton", "첫번째 페이지로 이동"], ["PreviousButton", "이전 페이지로 이동"], ["NextButton", "다음 페이지로 이동"], ["LastButton", "마지막 페이지로 이동"], ["ZoomOutButton", "축소"], ["ZoomInButton", "확대"], ["RefreshButton", "새로고침"], ["AboutButton", "솔루션 정보" ] ]; var obj=null; var tabindex=4; for (var i=0; i -1) { + UbiJS_Language = 'ko'; + } else { + UbiJS_Language = 'en'; + } +} + +//---------------------------------------------------------------------------------------------------- +// 배포 설치본 관리 +//---------------------------------------------------------------------------------------------------- +var UbiJS_Host = self.location.host; +var UbiJS_BaseUrl = self.location.protocol + "//" + UbiJS_Host; +if( UbiJS_App != "" ) + UbiJS_BaseUrl = UbiJS_BaseUrl + "/" + UbiJS_App; + +var UbiJS_PluginInstallPath = UbiJS_BaseUrl + "/ubi4/ubiviewer/" + UbiJS_PlguinInstallFile; // 플러그인 통합본 설치 +var UbiJS_InstallCabPath = UbiJS_BaseUrl + "/ubi4/ubiviewer/" + UbiJS_PluginCabFile; // 뷰어 파일 설치 +var UbiJS_WsInstallPath = UbiJS_BaseUrl + "/ubi4/ubiviewer/" + UbiJS_WsInstallFile; // WS 설치 파일 경로 + +var UbiJS_CabUpdateXml = ""; +UbiJS_CabUpdateXml += ""; +UbiJS_CabUpdateXml += ""; +UbiJS_CabUpdateXml += ""; + +//---------------------------------------------------------------------------------------------------- +// 안내 메세지 +//---------------------------------------------------------------------------------------------------- +var UbiJS_HelpSafari = "ㆍSafari 브라우저에서는 설치 후에 브라우저를 닫았다가 다시 접속하시기 바랍니다.
    "; +var UbiJS_HelpFireFox = "ㆍFireFox 브라우저에서 실행 권한을 요구하는 경우 반드시 [허가]→[허가하고 기억] 버튼을 차례대로 눌러주십시오.
    ㆍ설치가 안된다면 플러그인 차단 여부를 확인해 주십시오.
    "; +var UbiJS_HelpChrome = "ㆍChrome 브라우저에서 실행 권한이 필요하다고 요구하는 경우 반드시 [이 사이트에서 항상 실행] 버튼을 눌러주십시오.
    ㆍ설치가 안된다면 플러그인 차단 여부를 확인해 주십시오.
    "; +var UbiJS_HelpOpera = "ㆍOpera 브라우저입니다. 다운로드 받은 파일을 직접 실행하여 주십시오.
    "; +var UbiJS_HelpIE = "ㆍIE 브라우저에서 파일 다운로드가 차단된 경우 [다운로드] 로 실행하여 주십시오.
    "; + +var UbiJS_msgboxColor = new Object(); +UbiJS_msgboxColor["amber"] = "color:#000!important;background-color:#ffc107!important"; +UbiJS_msgboxColor["aqua"] = "color:#000!important;background-color:#00ffff!important"; +UbiJS_msgboxColor["blue"] = "color:#fff!important;background-color:#2196F3!important"; +UbiJS_msgboxColor["light-blue"] = "color:#000!important;background-color:#87CEEB!important"; +UbiJS_msgboxColor["brown"] = "color:#fff!important;background-color:#795548!important"; +UbiJS_msgboxColor["cyan"] = "color:#000!important;background-color:#00bcd4!important"; +UbiJS_msgboxColor["blue-grey"] = "color:#fff!important;background-color:#607d8b!important"; +UbiJS_msgboxColor["green"] = "color:#fff!important;background-color:#4CAF50!important"; +UbiJS_msgboxColor["light-green"] = "color:#000!important;background-color:#8bc34a!important"; +UbiJS_msgboxColor["indigo"] = "color:#fff!important;background-color:#3f51b5!important"; +UbiJS_msgboxColor["khaki"] = "color:#000!important;background-color:#f0e68c!important"; +UbiJS_msgboxColor["lime"] = "color:#000!important;background-color:#cddc39!important"; +UbiJS_msgboxColor["orange"] = "color:#000!important;background-color:#ff9800!important"; +UbiJS_msgboxColor["deep-orange"] = "color:#fff!important;background-color:#ff5722!important"; +UbiJS_msgboxColor["pink"] = "color:#fff!important;background-color:#e91e63!important"; +UbiJS_msgboxColor["purple"] = "color:#fff!important;background-color:#9c27b0!important"; +UbiJS_msgboxColor["deep-purple"] = "color:#fff!important;background-color:#673ab7!important"; +UbiJS_msgboxColor["red"] = "color:#fff!important;background-color:#f44336!important"; +UbiJS_msgboxColor["sand"] = "color:#000!important;background-color:#fdf5e6!important"; +UbiJS_msgboxColor["teal"] = "color:#fff!important;background-color:#009688!important"; +UbiJS_msgboxColor["yellow"] = "color:#000!important;background-color:#ffeb3b!important"; +UbiJS_msgboxColor["white"] = "color:#000!important;background-color:#fff!important"; +UbiJS_msgboxColor["black"] = "color:#fff!important;background-color:#000!important"; +UbiJS_msgboxColor["grey"] = "color:#000!important;background-color:#9e9e9e!important"; +UbiJS_msgboxColor["light-grey"] = "color:#000!important;background-color:#f1f1f1!important"; +UbiJS_msgboxColor["dark-grey"] = "color:#fff!important;background-color:#616161!important"; +UbiJS_msgboxColor["pale-red"] = "color:#000!important;background-color:#ffdddd!important"; +UbiJS_msgboxColor["pale-green"] = "color:#000!important;background-color:#ddffdd!important"; +UbiJS_msgboxColor["pale-yellow"] = "color:#000!important;background-color:#ffffcc!important"; +UbiJS_msgboxColor["pale-blue"] = "color:#000!important;background-color:#ddffff!important"; + +var UbiJS_InstallHeader = UbiJS_msgboxColor["blue-grey"]; +var UbiJS_NoticeHeader = UbiJS_msgboxColor["brown"]; +var UbiJS_StandbyHeader = UbiJS_msgboxColor["teal"]; +var UbiJS_CompleteHeader = UbiJS_msgboxColor["teal"]; +var UbiJS_CancelHeader = UbiJS_msgboxColor["teal"]; +var UbiJS_FailHeader = UbiJS_msgboxColor["teal"]; + +//미설치시 설치화면에서 자동으로 다운로드할지의 여부 ( true : 설치화면으로 이동시 자동으로 다운로드 실행 / false : 다운로드 클릭 버튼을 이용해야만 다운로드 ) +var UbiJS_IE_AutoDownload = false; + +//전역 객체로 사용 +var UbiJS_WINDOC = null; +try { + UbiJS_WINDOC = window.top.document; + //UbiJS_WINDOC = document; +} +catch(e){} + +var UbiJS_MS_XMLDOM = null; +try { + UbiJS_MS_XMLDOM = new ActiveXObject("Microsoft.XMLDOM"); +} +catch(e){} + +//==================================================================================================== +// OS check 관련 +//==================================================================================================== +var UbiJS_Match = navigator.userAgent.match(/(CrOS\ \w+|Windows\ NT|Mac\ OS\ X|Linux)\ ([\d\._]+)?/); +var UbiJS_Os = (UbiJS_Match || [])[1] || "Unknown"; + +//==================================================================================================== +// 플러그인 모듈 관리 프로그램 - 아래를 수정하거나 지우지 마십시오. +//==================================================================================================== +var UbiJS_CurrentInstalledVersion = ""; +var Ubi_Object = null; +var UbiJS_PluginId = "__object_ubiviewer_plugin"; +var UbiJS_Div_PluginId = "__hidden_div_ubiviewer_plugin"; +var UbiJS_Object = null; +var UbiJS_IsPluginUpdate = false; + +var UbiJS_IsIE = /*@cc_on!@*/false || !!document.documentMode; +var UbiJS_IsIE10 = document.all && !window.atob; +var UbiJS_IsIE11 = navigator.appName == 'Netscape' && navigator.userAgent.search('Trident') != -1; +var UbiJS_IsEdge = navigator.userAgent.indexOf("AppleWebKit") >= 0 && navigator.userAgent.indexOf("Edge") != -1; +var UbiJS_IsOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; +var UbiJS_IsFirefox = typeof InstallTrigger !== 'undefined'; +var UbiJS_IsSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; +var UbiJS_IsChrome = !!window.chrome && !UbiJS_IsOpera; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +// HTML 뷰어에서 Plugin(WebSocket) 뷰어를 임베디드하여 호출이 되는 경우 사용되는 스크립트 +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +var UbiJS_Run_Plugin = UbiJS_PluginAvailableBrowser(); + +var UbiJS_Object_PluginViewer = "__object_plugin_viewer"; +var UbiJS_Div_PluginViewer = "__hidden_div_plugin_viewer"; +var UbiJS_Object_PluginViewerVersion = "__object_plugin_viewer_version"; + +var UbiJS_PlguinViewer = null; +var UbiJS_PluginViewer_ActType= -1; +var UbiJS_PluginViewer_Arg = ""; +var UbiJS_PluginViewer_RetrieveUrfUrl = ""; + +//var UbiJS_WsPort = "16886"; +var UbiJS_WsProtocol = "ubi-protocol"; +var UbiJS_WsPorts = [16886, 56888, 56889]; +var UbiJS_WsCheckIndex = 0; +var UbiJS_WsWaitCheckCount = 0; +var UbiJS_WsCheckComplete = false; + +var UbiJS_WsViewer = null; +var UbiJS_WsViewer_ActType = -1; + +var UbiJS_WS_RS_ = String.fromCharCode(30); +var UbiJS_WS_CS_ = String.fromCharCode(31); +var UbiJS_WS_EOF_ = String.fromCharCode(27); +var UbiJS_WS_VER_EOF_ = String.fromCharCode(29); // version check용 eof + +var UbiJS_WsInstallFlag = false; + +var UbiJS_Div_Install = "__div_ubi_install_message"; +var UbiJS_Div_Notice = "__div_ubi_notice_message"; +var UbiJS_Div_64Warning = "__div_ubi_64warning_message"; +var UbiJS_Div_PrintStandby = "__div_ubi_printstandby_message"; +var UbiJS_Div_PrintComplete = "__div_ubi_printcomplete_message"; +var UbiJS_Div_PrintCancel = "__div_ubi_printcancel_message"; +var UbiJS_Div_PrintFail = "__div_ubi_printfail_message"; + +var UbiJS_Div_ExportStandby = "__div_ubi_exportstandby_message"; +var UbiJS_Div_ExportComplete = "__div_ubi_exportcomplete_message"; +var UbiJS_Div_ExportCancel = "__div_ubi_exportcancel_message"; +var UbiJS_Frame_Download = "__frame_ubi_download_exe"; + +var UbiJS_Is_PrintJob = true; +var UbiJS_Viewer_Progress = false; +var UbiJS_callbackFuncs = []; + +// 브라우저 종료 및 페이지가 변경되는 경우 Viewer close 처리 +window.onbeforeunload = function(e) { + if( UbiJS_WsViewer != null ) { + + UbiJS_WsViewer.close(); +// UbiJS_WsViewer = null; + } +}; + +// 페이지 로드 완료 시 필요 요소 초기화 +// "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; // 폰트보정. 변경 불가. + pluginScript[i++] = " "; // 출력보정. 변경 불가. + pluginScript[i++] = " "; + pluginScript[i++] = "
  • "; + + var obj = document.createElement("div"); + obj.id = UbiJS_Div_PluginViewer; + obj.style.cssText = "position:absolute; width:0px; height:0px; left:50%; top:50%;"; + obj.innerHTML = pluginScript.join(""); + UbiJS_WINDOC.body.appendChild(obj); + + if( isPrintSet ) + UbiJS_PluginViewer_ActType = 1; // PrintSet + else + UbiJS_PluginViewer_ActType = 0; // Direct 인쇄 + + UbiJS_PluginViewer_RetrieveUrfUrl = htmlViewer.retrieveUrfUrl; + + UbiJS_PlguinViewer = UbiJS_WINDOC.getElementById(UbiJS_Object_PluginViewer); + } + } + else { + + function UbiJS_LoadReport(ws) { + UbiJS_WsViewer = new UbiWSViewer(ws); + + // 전용 뷰어 설정 + var _params = htmlViewer.pluginparams; + if (_params != undefined) { + for (var i = 0; i < _params.length; i+=2) { + //console.log(_params[i] + ' - ' + _params[i+1]); + UbiJS_WsViewer.SetVariable(_params[i], _params[i+1]); + } + } + + UbiJS_WsViewer.arg = htmlViewer.params.arg; + UbiJS_WsViewer.ubiserverurl = ubiserverurl; + UbiJS_WsViewer.jrffiledir = ''; + UbiJS_WsViewer.jrffilename = ''; + UbiJS_WsViewer.datasource = ''; + UbiJS_WsViewer.progress = htmlViewer.params.pluginprogress; + UbiJS_WsViewer.printsetmode = '1'; + UbiJS_WsViewer.scale = '100'; + UbiJS_WsViewer.toolbar = 'false'; + UbiJS_WsViewer.margin = 'false'; + UbiJS_WsViewer.fontrevision = 'true'; + UbiJS_WsViewer.printmarginrevision = 'true'; + UbiJS_WsViewer.SetVariable("Viewer.IsRunThread", "true"); + UbiJS_WsViewer.setResize("hide"); //창 안보임 + if (UbiJS_Language.indexOf('ko') == -1) { + UbiJS_WsViewer.SetVariable("Language", UbiJS_Language); + } + + if (htmlViewer.params.reporttitle != '') { + UbiJS_WsViewer.reporttitle = htmlViewer.params.reporttitle; + } else { + //UbiJS_WsViewer.reporttitle = htmlViewer.params.jrffile; + UbiJS_WsViewer.jrffilename = htmlViewer.params.jrffile; + } + + UbiJS_WsViewer.PrintHtmlUrf(isPrintSet, htmlViewer.params.isStreaming, + htmlViewer.totalPage, htmlViewer.toolbar.page, htmlViewer.retrieveUrfUrl); + + }; +/* + CloseEnd 두번 호출로 인해 주석처리 함 + try { + + if( UbiJS_WsViewer != null ) { + + UbiJS_WsViewer.close(); +// UbiJS_WsViewer = null; + } + } + catch(e) {} +*/ + InitWebSocket(UbiJS_LoadReport, htmlViewer); + + } +} + +/** + * HTML 뷰어에서 저장 클릭 시 호출되는 함수 + */ +function exeExport(exportType, htmlViewer) { + + if( UbiJS_WINDOC == null ) { + try { + UbiJS_WINDOC = document; + } + catch(e){} + } + + UbiJS_Is_PrintJob = false; + UbiJS_Viewer_Progress = _ubi_strToBool(htmlViewer.params.pluginprogress); + // 전용 뷰어 출력인 경우 HTML 뷰어에 설정한 언어로 변경 + UbiJS_Language = htmlViewer.params.language; + + // Plugin 뷰어의 프로그래스바 설정이 False이면 메시지를 보여준다. + if( !UbiJS_Viewer_Progress ) { + + if( UbiJS_Is_PrintJob ) + UbiJS_ShowPrintStandby(); + else + UbiJS_ShowExportStandby(); + } + + if( UbiJS_Run_Plugin ) { + + try { UbiJS_WINDOC.body.removeChild(UbiJS_WINDOC.getElementById(UbiJS_Div_PluginViewer)); } catch(e) {} + UbiJS_PlguinViewer = null; + + if( UbiJS_PluginCheck() ) { + + UbiJS_PluginViewer_Arg = htmlViewer.params.arg; + + var i = 0; + var pluginScript = []; + + pluginScript[i++] = ""; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; + pluginScript[i++] = " "; // 폰트보정. 변경 불가. + pluginScript[i++] = " "; // 출력보정. 변경 불가. + pluginScript[i++] = " "; + pluginScript[i++] = ""; + + var obj = document.createElement("div"); + obj.id = UbiJS_Div_PluginViewer; + obj.style.cssText = "position:absolute; width:0px; height:0px; left:50%; top:50%;"; + obj.innerHTML = pluginScript.join(""); + UbiJS_WINDOC.body.appendChild(obj); + + UbiJS_PluginViewer_ActType = exportType; + // 여기 추가 + UbiJS_PluginViewer_RetrieveUrfUrl = htmlViewer.retrieveUrfUrl; + + UbiJS_PlguinViewer = UbiJS_WINDOC.getElementById(UbiJS_Object_PluginViewer); + } + + } + else { + + function UbiJS_LoadReport(ws) { + + UbiJS_WsViewer = new UbiWSViewer(ws); + + // 전용 뷰어 설정 + var _params = htmlViewer.pluginparams; + if (_params != undefined) { + for (var i = 0; i < _params.length; i+=2) { + //console.log(_params[i] + ' - ' + _params[i+1]); + UbiJS_WsViewer.SetVariable(_params[i], _params[i+1]); + } + } + + // HWPML 저장 시 옵션 반영 + if (exportType == 17) { + + UbiJS_WsViewer.SetVariable("Export.HML.DefaultExtension", htmlViewer.HmlExtension); + UbiJS_WsViewer.SetVariable("Export.HML.TextWrap", htmlViewer.params.hmlTextWrap); + UbiJS_WsViewer.SetVariable("Export.HML.TableProtect", htmlViewer.params.hmlTableProtect); + } + // Excel 저장 시 옵션 반영 +// else if (exportType == 12) { +// } + + UbiJS_WsViewer.arg = htmlViewer.params.arg; + UbiJS_WsViewer.ubiserverurl = htmlViewer.params.ubiserverurl; + UbiJS_WsViewer.jrffiledir = ''; + UbiJS_WsViewer.jrffilename = ''; + UbiJS_WsViewer.datasource = ''; + UbiJS_WsViewer.progress = htmlViewer.params.pluginprogress; + UbiJS_WsViewer.printsetmode = '1'; + UbiJS_WsViewer.scale = '100'; + UbiJS_WsViewer.toolbar = 'false'; + UbiJS_WsViewer.margin = 'false'; + UbiJS_WsViewer.fontrevision = 'true'; + UbiJS_WsViewer.printmarginrevision = 'true'; + UbiJS_WsViewer.SetVariable("Viewer.IsRunThread", "true"); + UbiJS_WsViewer.setResize("hide"); //창 안보임 + if (UbiJS_Language.indexOf('ko') == -1) { + UbiJS_WsViewer.SetVariable("Language", UbiJS_Language); + } + + if (htmlViewer.params.reporttitle != '') { + UbiJS_WsViewer.reporttitle = htmlViewer.params.reporttitle; + } else { + var jrffilename = htmlViewer.params.jrffile; + jrffilename = jrffilename.substring(0, jrffilename.lastIndexOf(".")); + UbiJS_WsViewer.reporttitle = jrffilename; + //UbiJS_WsViewer.reporttitle = htmlViewer.params.jrffile; + } + + UbiJS_WsViewer.ExportHtmlUrf(exportType, htmlViewer.params.isStreaming, htmlViewer.totalPage, + htmlViewer.toolbar.page, htmlViewer.retrieveUrfUrl); + }; +/* + try { + + if( UbiJS_WsViewer != null ) { + + UbiJS_WsViewer.close(); +// UbiJS_WsViewer = null; + } + } + catch(e) {} +*/ + InitWebSocket(UbiJS_LoadReport, htmlViewer); + + } +} + +/******************************************************************* + * Printer 관련 정보 + *******************************************************************/ +function GetPrinterInfos(ws, callbak) { + // Printer 목록과 기본 프린터명을 같이 리턴 + if( UbiJS_Run_Plugin ) { + + } else { + var msg = "reqtype" + UbiJS_WS_CS_ + "getprinterinfos" + UbiJS_WS_RS_ + UbiJS_WS_VER_EOF_ + UbiJS_WS_EOF_; + ws.send(msg); + + UbiJS_callbackFuncs['PRINTERINFOS'] = callbak; + } +} + +/******************************************************************* +Plugin 전용 함수 +*******************************************************************/ + +/** + * 플러그인 설치 확인 + */ +function UbiJS_PluginCheck() { + + if( UbiJS_Run_Plugin ) { + + if( UbiJS_PluginInstallCheck(UbiJS_GetPluginType(), "UbiDecision.UbiViewerPlugin.1") ) { + + if( UbiJS_PluginUpdateCheck() ) { + + UbiJS_CabUpdateCheck(); + return true; + } + else { + // 플러그인 설치 버전 업데이트로 인해 설치 페이지로 이동 + UbiJS_ShowPluginInstall(true); + return false; + } + } + else { + // 플러그인 미설치로 인해 설치 페이지로 이동 + UbiJS_ShowPluginInstall(false); + return false; + } + } + else { + // 플러그인 미지원 브라우져 안내 페이지로 이동 + UbiJS_ShowPluginWarning(); + return false; + } +} + +/** + * 플러그인 타입명 가져오기 + */ +function UbiJS_GetPluginType() { + + return "application/x-ubiviewerplugin"; +} + +/** + * 플러그인 모듈명 반환 + */ +function UbiJS_PluginType() { + + return "application/x-ubiviewer"; +} + +/** + * 플러그인 설치 버전 체크 + */ +function UbiJS_PluginInstallCheck(mimetype, progid) { + + if( UbiJS_WINDOC.getElementById(UbiJS_PluginId) == null ) { + + var i = 0; + var pluginScript = []; + + pluginScript[i++] = ""; + + var obj = document.createElement("div"); + obj.id = UbiJS_Div_PluginId; + obj.style.cssText = "position:absolute; width:0px; height:0px; left:0px; top:0px;"; + obj.innerHTML = pluginScript.join(""); + UbiJS_WINDOC.body.appendChild(obj); + } + UbiJS_Object = UbiJS_WINDOC.getElementById(UbiJS_PluginId); + try { + + UbiJS_CurrentInstalledVersion = UbiJS_Object.GetVersion(); + return true; // 설치버전 있음 + } + catch(e) { + + return false; // 설치안됨 + } + return false; +} + +/** + * 플러그인의 업그레이드 버전 체크 + */ +function UbiJS_PluginUpdateCheck() { + + if( UbiJS_PluginVersion == UbiJS_CurrentInstalledVersion ) + return true; + + UbiJS_CurrentInstalledVersion = UbiJS_CurrentInstalledVersion.replace(/,/gi, "."); + var ver1 = UbiJS_CurrentInstalledVersion.split("."); + var ver2 = UbiJS_PluginVersion.split("."); + if( parseInt(ver1[0])>parseInt(ver2[0]) ) {return true;} + else if( parseInt(ver1[0])parseInt(ver2[1]) ) {return true;} + else if( parseInt(ver1[1])parseInt(ver2[2]) ) {return true;} + else if( parseInt(ver1[2])parseInt(ver2[3]) ) {return true;} + return false; +} + +/** + * Cab 파일 업데이트 체크 + */ +function UbiJS_CabUpdateCheck() { + + var xmlDoc; + var url; + var title; + var version; + + var XML = ""; + var resultXML = ''; + + if( UbiJS_IsIE ) { + + try { + xmlDoc = UbiJS_MS_XMLDOM; + } + catch(e) { + xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); + } + xmlDoc.async = false; + xmlDoc.loadXML(UbiJS_CabUpdateXml); + } + else { + + if( window.DOMParser ) { + + parser=new DOMParser(); + xmlDoc=parser.parseFromString(UbiJS_CabUpdateXml,"text/xml"); + } + } + + if( xmlDoc ) { + + for( var i=0;i"; + } + } + resultXML = ""+XML+""; + } + + if( XML=='' ) { + + return true; + } + else { + + UbiJS_Object.setUpdateXml(resultXML); + return false; + } +} + +/** + * Cab 버전 체크를 통한 업데이트 여부 반환 + */ +function UbiJS_CheckCabVersion(cur, last) { + + last = last.replace(/,/gi, "."); + + if(last == cur) return true; + var ver1 = cur.split("."); + var ver2 = last.split("."); + + if(parseInt(ver1[0])>parseInt(ver2[0])) {return true;} + else if(parseInt(ver1[0])parseInt(ver2[1])) {return true;} + else if(parseInt(ver1[1])parseInt(ver2[2])) {return true;} + else if(parseInt(ver1[2])parseInt(ver2[3])) {return true;} + return false; +} + +/** + * 플러그인 지원 브라우져 여부 + */ +function UbiJS_PluginAvailableBrowser() { + + // 우선 WS만 가능하도록 + return false; + + // Edge or Chrome 45 이상 버전이면 플러그인 미지원 브라우져 +/* if( UbiJS_IsEdge || ( UbiJS_IsChrome && UbiJS_GetBrowserVersion() > 44 ) || ( UbiJS_IsOpera && UbiJS_GetBrowserVersion() > 32 ) ) + return false; + return true;*/ +} + +/** + * 브라우저별 설치 가이드 가져오기 + */ +function UbiJS_GetInstallContents() { + + if(UbiJS_IsSafari){return UbiJS_HelpSafari;} + if(UbiJS_IsFirefox){return UbiJS_HelpFireFox;} + if(UbiJS_IsChrome){return UbiJS_HelpChrome;} + if(UbiJS_IsOpera){return UbiJS_HelpOpera;} + if(UbiJS_IsIE){return UbiJS_HelpIE;} + return ""; +} + +/** + * 브라우저별로 메세지 표시 처리 + */ +function UbiJS_Alert(msg, title) { + + if( UbiJS_IsIE ) { + + alert(msg); // IE 는 alert 함수 그대로 이용. + } + else { + + if(!title) { + + title='UbiReport'; + } + + var i = 0; + var pluginScript = []; + + pluginScript[i++] = ""; + + var obj = document.createElement("div"); + obj.style.cssText = "position:absolute; width:0px; height:0px; left:0px; top:0px;"; + obj.innerHTML = pluginScript.join(""); + UbiJS_WINDOC.body.appendChild(obj); + UbiJS_CurrentInstalledVersion = UbiJS_WINDOC.getElementById('UbiJS_Object_PluginViewerVersion').Alert(msg, title); //브라우저 특성상 내부 메세지 창 이용 + UbiJS_WINDOC.body.removeChild(obj); + } +} + +/** + * 뷰어 유형 반환 + */ +function UbiJS_ActiveXEdition() { + + var cab_edition = ""; + if( UbiJS_CabUpdateXml.indexOf("UbiViewerXP.cab")>=0 ) { + cab_edition = "MBCS"; + } + else if( UbiJS_CabUpdateXml.indexOf("UbiViewerXUniP.cab")>=0 ) { + cab_edition = "UNICODE"; + } + else if( UbiJS_CabUpdateXml.indexOf("UbiViewerXMarkAnyP.cab")>=0 ) { + cab_edition = "MARKANY"; + } + else if( UbiJS_CabUpdateXml.indexOf("UbiViewerXBcqreP.cab")>=0 ) { + cab_edition = "BCQRE"; + } + else if( UbiJS_CabUpdateXml.indexOf("UbiViewerXBcqreUniP.cab")>=0 ) { + cab_edition = "BCQREUNI"; + } + return cab_edition; +} + +/** + * 플러그인 이벤트 추가 + */ +function UbiJS_AddEvent(obj, name, func) { + + if(obj) { + if(obj.attachEvent) { + obj.attachEvent("on"+name,func); + } + else{ obj.addEventListener(name,func,false); + } + } +} + + +/******************************************************************* +WebSocket 전용 함수 +*******************************************************************/ +//---------------------------------------------------------------------------------------------------- +// WebSocket 뷰어 객체 정보 +//---------------------------------------------------------------------------------------------------- +var UbiWSViewer = function(websocket) { + + var ws = websocket; + + // property + this.fileurl = ""; + this.ubiserverurl = "", + this.jrffiledir = "", + this.jrffilename = "", + this.datasource = "", + this.islocalfile = "false", + this.islocaldata = "false", + this.scale = "100", + this.resource = "fixed", + this.invisibletoolbar = "", + this.rowdim = "", + this.coldim = "", + this.margin = "", + this.progress = "", + this.toolbar = "", + this.popupmenu = "", + this.servletrooturl = "", + this.exportfilename = "", + this.exportds = "", + this.invisibleexporttypes = "", + this.isurf = "", + this.printcopies = "1", + this.printleftmargin = "", + this.printtopmargin = "", + this.isencrypt = "false", + this.isencrypt64 = "false", + this.barcodeposition = "", + this.cdposition = "", + this.docname = "", + this.pagenames = "", + this.isdrm = "", + this.reportid = "", + this.printmarginrevision = "true", + this.printsetmode = "", + this.printpapersize = "", + this.imagecache = "false", + this.fontelement = "", + this.reporttitle = "", + this.printautofit = "", + this.fontrevision = "true", + this.exportsetmode = "", + this.ismultireport = "false", + this.multicount = "1", + this.ispluginasync = "false", + this.arg = "", + this.reqtype = "retrieve", + this.variable = "", + this.resize = "", + + // method + this.retrieve = function() { + // UbiServer와 연결되어 있는 지 체크 + //if (this.checkWebSocket() == false) + // return; + + var propery = this.GetUbiProperty(); + var msg = "reqtype" + UbiJS_WS_CS_ + "retrieve" + UbiJS_WS_RS_ + propery; + + // SetVariable을 통해 설정한 속성 + if (this.variable != '') { + msg += this.variable; + this.variable = ''; + } + + if (this.resize != '') { + //msg += this.resize; + msg = this.resize + msg; + this.resize = ''; + } + + this.UbiJS_WsSend(msg); + UbiJS_WsSleep(100); + }; + + this.RetrieveBind = function() { + var propery = this.GetUbiProperty(); + var msg = "reqtype" + UbiJS_WS_CS_ + "retrievebind" + UbiJS_WS_RS_ + propery; + + //SetVariable을 통해 설정한 속성 + if (this.variable != '') { + msg += this.variable; + this.variable = ''; + } + + if (this.resize != '') { + msg = this.resize + msg; + this.resize = ''; + } + + this.UbiJS_WsSend(msg); + sleep(100); + }; + + this.RetrieveUrf = function(s1) { + // s1 : urf file path + var propery = this.GetUbiProperty(); + var msg = "reqtype" + UbiJS_WS_CS_ + ("retrieveurf#" + s1) + UbiJS_WS_RS_ + propery; + + //SetVariable을 통해 설정한 속성 + if (this.variable != '') { + msg += this.variable; + this.variable = ''; + } + + if (this.resize != '') { + msg = this.resize + msg; + this.resize = ''; + } + + this.UbiJS_WsSend(msg); + }; + + this.PrintHtmlUrf = function(isPrintSet, isStreaming, totalpage, currentpage, urfurl) { + // s1 : urf file path + var propery = this.GetUbiProperty(); + var printtype = 1; + if (isPrintSet) { + printtype = 1; + } else { + printtype = 0; + } + var msg = "reqtype" + UbiJS_WS_CS_ + "printhtmlurf" + UbiJS_WS_RS_ + + "isprintsetup" + UbiJS_WS_CS_ + printtype + UbiJS_WS_RS_ + + "isstreaming" + UbiJS_WS_CS_ + isStreaming + UbiJS_WS_RS_ + + "totalpage" + UbiJS_WS_CS_ + totalpage + UbiJS_WS_RS_ + + "currentpage" + UbiJS_WS_CS_ + currentpage + UbiJS_WS_RS_ + + "urfurl" + UbiJS_WS_CS_ + urfurl + UbiJS_WS_RS_ + + propery; + //SetVariable을 통해 설정한 속성 + if (this.variable != '') { + msg += this.variable; + this.variable = ''; + } + + if (this.resize != '') { + msg = this.resize + msg; + this.resize = ''; + } + + this.UbiJS_WsSend(msg); + }; + + this.ExportHtmlUrf = function(exportType, isStreaming, totalpage, currentpage, urfurl) { + var propery = this.GetUbiProperty(); + + var msg = "reqtype" + UbiJS_WS_CS_ + "exporthtmlurf" + UbiJS_WS_RS_ + + "exporttype" + UbiJS_WS_CS_ + exportType + UbiJS_WS_RS_ + + "isstreaming" + UbiJS_WS_CS_ + isStreaming + UbiJS_WS_RS_ + + "totalpage" + UbiJS_WS_CS_ + totalpage + UbiJS_WS_RS_ + + "currentpage" + UbiJS_WS_CS_ + currentpage + UbiJS_WS_RS_ + + "urfurl" + UbiJS_WS_CS_ + urfurl + UbiJS_WS_RS_ + + propery; + //SetVariable을 통해 설정한 속성 + if (this.variable != '') { + msg += this.variable; + this.variable = ''; + } + + if (this.resize != '') { + msg = this.resize + msg; + this.resize = ''; + } + + this.UbiJS_WsSend(msg); + }; + + this.GetUbiProperty = function() { + var msg = "isPluginAsync" + UbiJS_WS_CS_ + this.ispluginasync + UbiJS_WS_RS_ + + "isPlugin" + UbiJS_WS_CS_ + "true" + UbiJS_WS_RS_ + + "isencrypt" + UbiJS_WS_CS_ + this.isencrypt + UbiJS_WS_RS_ + + "isencrypt64" + UbiJS_WS_CS_ + this.isencrypt64 + UbiJS_WS_RS_ + + "fileurl" + UbiJS_WS_CS_ + this.fileurl + UbiJS_WS_RS_ + + "ubiserverurl" + UbiJS_WS_CS_ + this.ubiserverurl + UbiJS_WS_RS_ + + "jrffiledir" + UbiJS_WS_CS_ + this.jrffiledir + UbiJS_WS_RS_ + + "jrffilename" + UbiJS_WS_CS_ + this.jrffilename + UbiJS_WS_RS_ + + "datasource" + UbiJS_WS_CS_ + this.datasource + UbiJS_WS_RS_ + + "islocalfile" + UbiJS_WS_CS_ + this.islocalfile + UbiJS_WS_RS_ + + "islocaldata" + UbiJS_WS_CS_ + this.islocaldata + UbiJS_WS_RS_ + + "scale" + UbiJS_WS_CS_ + this.scale + UbiJS_WS_RS_ + + "resource" + UbiJS_WS_CS_ + this.resource + UbiJS_WS_RS_ + + "invisibletoolbar" + UbiJS_WS_CS_ + this.invisibletoolbar + UbiJS_WS_RS_ + + "rowdim" + UbiJS_WS_CS_ + this.rowdim + UbiJS_WS_RS_ + + "coldim" + UbiJS_WS_CS_ + this.coldim + UbiJS_WS_RS_ + + "margin" + UbiJS_WS_CS_ + this.margin + UbiJS_WS_RS_ + + "progress" + UbiJS_WS_CS_ + this.progress + UbiJS_WS_RS_ + + "toolbar" + UbiJS_WS_CS_ + this.toolbar + UbiJS_WS_RS_ + + "popupmenu" + UbiJS_WS_CS_ + this.popupmenu + UbiJS_WS_RS_ + + "servletrooturl" + UbiJS_WS_CS_ + this.servletrooturl + UbiJS_WS_RS_ + + "exportfilename" + UbiJS_WS_CS_ + this.exportfilename + UbiJS_WS_RS_ + + "exportds" + UbiJS_WS_CS_ + this.exportds + UbiJS_WS_RS_ + + "invisibleexporttypes" + UbiJS_WS_CS_ + this.invisibleexporttypes + UbiJS_WS_RS_ + + "isurf" + UbiJS_WS_CS_ + this.isurf + UbiJS_WS_RS_ + + "printcopies" + UbiJS_WS_CS_ + this.printcopies + UbiJS_WS_RS_ + + "printleftmargin" + UbiJS_WS_CS_ + this.printleftmargin + UbiJS_WS_RS_ + + "printtopmargin" + UbiJS_WS_CS_ + this.printtopmargin + UbiJS_WS_RS_ + + "reportid" + UbiJS_WS_CS_ + this.reportid + UbiJS_WS_RS_ + + "printmarginrevision" + UbiJS_WS_CS_ + this.printmarginrevision + UbiJS_WS_RS_ + + "printsetmode" + UbiJS_WS_CS_ + this.printsetmode + UbiJS_WS_RS_ + + "printpapersize" + UbiJS_WS_CS_ + this.printpapersize + UbiJS_WS_RS_ + + "reporttitle" + UbiJS_WS_CS_ + this.reporttitle + UbiJS_WS_RS_ + + "imagecache" + UbiJS_WS_CS_ + this.imagecache + UbiJS_WS_RS_ + + "fontelement" + UbiJS_WS_CS_ + this.fontelement + UbiJS_WS_RS_ + + "printautofit" + UbiJS_WS_CS_ + this.printautofit + UbiJS_WS_RS_ + + "fontrevision" + UbiJS_WS_CS_ + this.fontrevision + UbiJS_WS_RS_ + + "exportsetmode" + UbiJS_WS_CS_ + this.exportsetmode + UbiJS_WS_RS_ + + "ismultireport" + UbiJS_WS_CS_ + this.ismultireport + UbiJS_WS_RS_ + + "multicount" + UbiJS_WS_CS_ + this.multicount + UbiJS_WS_RS_ + + "arg" + UbiJS_WS_CS_ + this.arg + UbiJS_WS_RS_; + + return msg; + }; + + this.ExportFile = function(s1) { + + var filetype = s1; + var msg = "reqtype" + UbiJS_WS_CS_ + ("exportfile#"+filetype) + UbiJS_WS_RS_ + + "exportfilename" + UbiJS_WS_CS_ + this.exportfilename + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.exportset = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "exportset" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.exportReport = function(s1, s2, s3) { + var jrffilename = s1; + var args = s2; + var exporttype = s3; + + var msg = "reqtype" + UbiJS_WS_CS_ + "exportreport" + UbiJS_WS_RS_ + + "jrffilename" + UbiJS_WS_CS_ + jrffilename + UbiJS_WS_RS_ + + "args" + UbiJS_WS_CS_ + args + UbiJS_WS_RS_ + + "exporttype" + UbiJS_WS_CS_ + exporttype + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.exportsetReport = function(s1, s2, s3) { + var jrffilename = s1; + var args = s2; + var exporttype = s3; + + var msg = "reqtype" + UbiJS_WS_CS_ + "exportsetreport" + UbiJS_WS_RS_ + + "jrffilename" + UbiJS_WS_CS_ + jrffilename + UbiJS_WS_RS_ + + "args" + UbiJS_WS_CS_ + args + UbiJS_WS_RS_ + + "exporttype" + UbiJS_WS_CS_ + exporttype + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.print = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "print" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.printset = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "printset" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.directPrint = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "directprint" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + UbiJS_WsSleep(100); + + this.close(); + }; + + this.printReport = function(s1, s2) { + var jrffilename = s1; + var args = s2; + + var msg = "reqtype" + UbiJS_WS_CS_ + "printreport" + UbiJS_WS_RS_ + + "jrffilename" + UbiJS_WS_CS_ + jrffilename + UbiJS_WS_RS_ + + "args" + UbiJS_WS_CS_ + args + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.printReportResizing = function(s1, s2, s3) { + var jrffilename = s1; + var args = s2; + var papersize = s3; + + var msg = "reqtype" + UbiJS_WS_CS_ + "printreportresizing" + UbiJS_WS_RS_ + + "jrffilename" + UbiJS_WS_CS_ + jrffilename + UbiJS_WS_RS_ + + "args" + UbiJS_WS_CS_ + args + UbiJS_WS_RS_ + + "papersize" + UbiJS_WS_CS_ + papersize + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.printsetReport = function(s1, s2, s3) { + var jrffilename = s1; + var args = s2; + var pagenum = s3; + + var msg = "reqtype" + UbiJS_WS_CS_ + "printsetreport" + UbiJS_WS_RS_ + + "jrffilename" + UbiJS_WS_CS_ + jrffilename + UbiJS_WS_RS_ + + "args" + UbiJS_WS_CS_ + args + UbiJS_WS_RS_ + + "pagenum" + UbiJS_WS_CS_ + pagenum + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.SetDataset = function(s1, s2) { + var dsid = s1; + var dsdata = s2; + + var msg = "reqtype" + UbiJS_WS_CS_ + "setdataset" + UbiJS_WS_RS_ + + dsid + "#" + dsdata; + this.UbiJS_WsSend(msg); + }; + + this.DrmStart = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "drmstart" + UbiJS_WS_RS_ + + "isencrypt" + UbiJS_WS_CS_ + this.isencrypt + UbiJS_WS_RS_ + + "isencrypt64" + UbiJS_WS_CS_ + this.isencrypt64 + UbiJS_WS_RS_ + + "ubiserverurl" + UbiJS_WS_CS_ + this.ubiserverurl + UbiJS_WS_RS_ + + "barcodeposition" + UbiJS_WS_CS_ + this.barcodeposition + UbiJS_WS_RS_ + + "cdposition" + UbiJS_WS_CS_ + this.cdposition + UbiJS_WS_RS_ + + "docname" + UbiJS_WS_CS_ + this.docname + UbiJS_WS_RS_ + + "pagenames" + UbiJS_WS_CS_ + this.pagenames + UbiJS_WS_RS_ + + "isdrm" + UbiJS_WS_CS_ + this.isdrm + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + UbiJS_WsSleep(200); + }; + + this.firstPage = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "firstpage" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.previousPage = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "previouspage" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.nextPage = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "nextpage" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.lastPage = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "lastpage" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.setPage = function(s1) { + var page = s1; + var msg = "reqtype" + UbiJS_WS_CS_ + ("setpage#" + page) + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.zoomIn = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "zoomin" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.zoomOut = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "zoomout" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.LoadTemplet = function(s1) { + var jrffilename = s1; + var msg = "reqtype" + UbiJS_WS_CS_ + ("loadtemplet#" + jrffilename) + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.SetVariable = function(s1, s2) { + if (s1 == 'Nexacro.DatasetInfos' || s1 == 'Nexacro.DesignData' || s1 == 'Nexacro.RuntimeData') { + var msg = "reqtype" + UbiJS_WS_CS_ + "setvariable_nexacro" + UbiJS_WS_RS_ + + (s1 + "#" + s2); + this.UbiJS_WsSend(msg); + } + else if (s1 == 'IsEncrypt64') { + var msg = "reqtype" + UbiJS_WS_CS_ + "setvariable_encrypt64" + UbiJS_WS_RS_ + (s1 + "#" + s2); + this.UbiJS_WsSend(msg); + } + else if (s1 == 'exportfilename') { + this.exportfilename = s2; + var msg = "reqtype" + UbiJS_WS_CS_ + "setvariable" + UbiJS_WS_RS_ + + ('exportFileName' + UbiJS_WS_CS_ + s2 + UbiJS_WS_RS_); + this.UbiJS_WsSend(msg); + } + else { + this.variable += (s1 + UbiJS_WS_CS_ + s2 + UbiJS_WS_RS_); + } + }; + + this.refresh = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "refresh" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.sendVariable = function() { + if (this.variable == '') + return; + + var msg = "reqtype" + UbiJS_WS_CS_ + "setvariable" + UbiJS_WS_RS_ + + this.variable; + this.UbiJS_WsSend(msg); + this.variable = ""; + }; + + this.setProgress = function(s1) { + var msg = "reqtype" + UbiJS_WS_CS_ + ("setprogress#"+s1) + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.SetVisibleTbButton = function(s1, s2) { + // s1 : button id, s2 : flag + var btnflag = s1 + '#' + s2; + var msg = "reqtype" + UbiJS_WS_CS_ + ("setvisibletbbutton#"+btnflag) + UbiJS_WS_RS_; + this.ubiWS_Send(msg); + }; + + // Viewer의 버전 정보를 확인한다. + this.aboutBox = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "aboutbox" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.checkWebSocket = function() { + // 0 : CONNECTING + // 1 : OPEN + // 2 : CLOSING + // 3 : CLOSED + if (ws.readyState != 1) { + alert('UbiViewerWS\uc640 \uc5f0\uacb0\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.'); + return false; + } + + return true; + }; + + // UbiServerWS 전체에 대한 버전을 확인한다. + this.checkVersion = function() { +// var msg = "reqtype" + UbiJS_WS_CS_ + "checkversion#" + UbiJS_WsVersion + UbiJS_WS_RS_ + UbiJS_WS_VER_EOF_; + var msg = "reqtype" + UbiJS_WS_CS_ + "checkversion#" + UbiJS_WsVersion + UbiJS_WS_RS_ + UbiJS_WS_VER_EOF_ + UbiJS_WS_EOF_; + ws.send(msg); + }; + + this.close = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "close" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + }; + + this.setResize = function(s1, s2, s3, s4) { + // 최대화 + if (s2 == undefined && s3 == undefined && s4 == undefined) { + var max = s1; + this.resize = ''; + this.resize = "resize" + UbiJS_WS_CS_ + (max + "#") + UbiJS_WS_RS_; + } else { + var top = s1; // x + var left = s2; // y + var width = s3; + var height = s4; + + this.resize = ''; + this.resize = "resize" + UbiJS_WS_CS_ + (left + "#" + top + "#" + width + "#" + height + "#") + UbiJS_WS_RS_; + } + }; + + this.UbiJS_WsSend = function(msg) { + msg += UbiJS_WS_EOF_; + ws.send(msg); + }; + + //KKD 20170118. HTML 임베디드 시 재호출을 막기위해 사용함. + this.quickPrint = function() { + var msg = "reqtype" + UbiJS_WS_CS_ + "directprint" + UbiJS_WS_RS_; + this.UbiJS_WsSend(msg); + UbiJS_WsSleep(100); + + //this.close(); + }; +}; + +/** + * WebSocket 초기화 및 설치 여부 확인 + */ +function InitWebSocket(callback, _htmlviewer) { + + if( !UbiJS_CheckSupportWS() ) { + UbiJS_ShowWsWarning(); + return; + } + + UbiJS_createWebSocket(callback, _htmlviewer); +} + +/** + * UbiJS_createWebSocket이 시작된 후 종료될때까지 대기 + * @param callback + * @param _htmlviewer + */ +function UbiJS_waitCreateJob(callback, _htmlviewer) { +//console.log('UbiJS_waitCreateJob'); + setTimeout( + function () { + if (!UbiJS_WsCreateStart) { + return; + } else { + UbiJS_waitCreateJob(callback, _htmlviewer); + } + }, 100); +} + +/** + * WebSocket 생성 + * @param callback + */ +function UbiJS_createWebSocket(callback, _htmlviewer) { + if (UbiJS_WsCreateStart && UbiJS_WsCheckIndex == 0) { + UbiJS_waitCreateJob(callback, _htmlviewer); + return; + } + + // 모든 포트가 연결이 안될 경우 신규 설치 + if (UbiJS_WsCheckIndex > 2) { + UbiJS_createWebSocketEnd(null, callback); + return; + } + + if (UbiJS_WsCheckComplete) { + return; + } + + UbiJS_WsCreateStart = true; + + var isCreate = true; + if (_ubijs_ws) { + if (_ubijs_ws.readyState == 1) { + isCreate = false; + } else { + //console.log('['+ (new Date().getTime()) + '] ubireport websocket reopen'); + } + } + + var htmlviewer = _htmlviewer; + var cur_protocolName = window.location.protocol; + + if (isCreate) { + var wsurl = ""; + if (cur_protocolName === 'https:') { + wsurl = 'wss://127.0.0.1:' + UbiJS_WsPorts[UbiJS_WsCheckIndex]; + } else { + wsurl = 'ws://127.0.0.1:' + UbiJS_WsPorts[UbiJS_WsCheckIndex]; + } + _ubijs_ws = new WebSocket(wsurl, UbiJS_WsProtocol); + } + + _ubijs_ws.onopen = function(e) { + //console.log('ws.onopen === url : ' + ws.url); + }; + + _ubijs_ws.onmessage = function(e) { + + //console.log('ws.onmessage === data : ' + e.data); + var message = e.data; + var result = ''; + + if( message.indexOf('RETRIEVEEND') != -1 ) { + + RetrieveEnd(); + } + else if( message.indexOf('EXPORTEND') != -1 ) { + + message = message.replace(/\0/g, ""); + result = message.substring(message.indexOf('#')+1, message.length); + ExportEnd(result); + + // HTML 뷰어에 선언된 ExportEnd 이벤트가 있다면 결과를 리턴 + if (htmlviewer) { + if (htmlviewer.events.exportEnd) { + // flag, exporturl + var bResult = (result == '0') ? false : true; + htmlviewer.events.exportEnd(bResult, result); + } + } + } + else if( message.indexOf('PRINTEND') != -1 ) { + + message = message.replace(/\0/g, ""); + result = message.substring(message.indexOf('#')+1, message.length); + PrintEnd(result); + + // HTML 뷰어에 선언된 PrintEnd 이벤트가 있다면 결과를 리턴 + if (htmlviewer) { + if (htmlviewer.events.printEnd) { + var bResult = (result == '0') ? true : false; + htmlviewer.events.printEnd(bResult); + } + } + } + else if( message.indexOf('RESET') != -1 ) { + if( callback ) { + callback(_ubijs_ws); + } + UbiJS_WsCreateStart = false; + } + else if( message.indexOf('CLOSE') != -1 ) { +// UbiJS_WsViewer = null; + if (htmlviewer) { + if (htmlviewer.events.closeEnd) { + htmlviewer.events.closeEnd(); + } + } + //ws.close(); + } + else if( message.indexOf('CHECKVERSION') != -1 ) { + + result = message.substring(message.indexOf('#')+1, message.length); + if( result == 'true' ) { // 설치 OK. 미리보기 + if( callback ) { + callback(_ubijs_ws); + } + } + else { // 업데이트 설치 + //console.log('['+ (new Date().getTime()) + '] upgrade install : '+ UbiJS_WsVersion); + UbiJS_ShowWsInstall(true); + if (_ubijs_ws) { + _ubijs_ws.close(); + _ubijs_ws = null; + } + } + UbiJS_WsCreateStart = false; + } + else if( message.indexOf('PRINTERINFOS') != -1 ) { + var names = []; + var defaultname = ""; + + var PREFIX_LIST = "#PRINTERLIST#"; + var PREFIX_DEFAULT = "#DEFAULTPRINTERNAME#"; + + listIndex = message.indexOf(PREFIX_LIST) + PREFIX_LIST.length; + defaultIndex = message.indexOf(PREFIX_DEFAULT); + + names = message.substring(listIndex, defaultIndex).split('|'); + defaultIndex += PREFIX_DEFAULT.length; + defaultname = message.substring(defaultIndex); + + if (UbiJS_callbackFuncs['PRINTERINFOS']) { + UbiJS_callbackFuncs['PRINTERINFOS'](names, defaultname); + UbiJS_callbackFuncs['PRINTERINFOS'] = null; + } + } + }; + + _ubijs_ws.onerror = function(e) { + //console.log('ws.onerror === code : '+ e.code); + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } + }; + + _ubijs_ws.onclose = function(e) { + //console.log('ws.onclose === code : '+ e.code); + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } + }; + + UbiJS_WsWaitCheckCount = 0; + if (isCreate) { + UbiJS_waitForWebSocketConnection(_ubijs_ws, callback); + } else { + var msg = "reqtype" + UbiJS_WS_CS_ + "reset" + UbiJS_WS_RS_ + UbiJS_WS_EOF_; + _ubijs_ws.send(msg); + } +} + +function UbiJS_createWebSocketEnd(ws, callback) { + // 재사용을 위한 변수 초기화 + UbiJS_WsCheckIndex = 0; + UbiJS_WsCheckComplete = false; + UbiJS_WsWaitCheckCount = 0; + UbiJS_WsCreateStart = false; + + // 신규 설치 + if (ws == null) { + if( UbiJS_WsCallback ) { + callback(ws); + } else { + UbiJS_ShowWsInstall(false); + if (_ubijs_ws) { + _ubijs_ws.close(); + _ubijs_ws = null; + } + } + + return; + } + + // Version Check + UbiJS_WsSleep(300); + var checkmsg = "reqtype" + UbiJS_WS_CS_ + "checkversion#" + UbiJS_WsVersion + UbiJS_WS_RS_ + UbiJS_WS_VER_EOF_ + UbiJS_WS_EOF_; + ws.send(checkmsg); +} + +/** + * WebSocket의 상태가 준비상태일때까지 대기 (3번연속 비정상이면 연결이 안되는것으로 판단) + * @param ws + * @param callback + */ +function UbiJS_waitForWebSocketConnection(ws, callback){ + // 10번 연속 연결이 확인 안될 경우 다음 포트를 호출 (1초 대기) + if (UbiJS_WsWaitCheckCount > 10) { + if (ws) { + //console.log('['+ (new Date().getTime()) + '] connect fail['+ UbiJS_WsPorts[UbiJS_WsCheckIndex] +'] : '+ ws.readyState); + ws.close(); + } + UbiJS_WsCheckIndex++; + UbiJS_createWebSocket(callback); + return; + } + + setTimeout( + function () { + if (ws.readyState === 1) { + //console.log("Connection is made"); + UbiJS_WsCheckComplete = true; + UbiJS_createWebSocketEnd(ws, callback); + return; + } else { + //console.log("wait for connection...["+ UbiJS_WsWaitCheckCount +"] : "+ ws.url); + UbiJS_WsWaitCheckCount++; + UbiJS_waitForWebSocketConnection(ws, callback); + } + }, 100); +} + +/** + * WebSocket 지원 가능 여부 확인 + */ +function UbiJS_WSCheckBrowser() { + + if( UbiJS_Os === 'Windows NT' && UbiJS_GetBrowser() === 'MSIE' && UbiJS_GetBrowserVersion() < 10) // IE10 미만 미지원 + return false; + if (UbiJS_Os === 'Windows NT' && UbiJS_GetBrowser() === 'Chrome' && UbiJS_GetBrowserVersion() < 19) // Chrome 19 미만 미지원 + return false; + if (UbiJS_Os === 'Windows NT' && UbiJS_GetBrowser() === 'Firefox' && UbiJS_GetBrowserVersion() < 18) // Firefox 18 미만 미지원 + return false; + if (UbiJS_Os === 'Windows NT' && UbiJS_GetBrowser() === 'Safari') // 해당 OS의 Safari 미지원 + return false; + if (UbiJS_Os === 'Windows NT' && UbiJS_GetBrowser() === 'Opera' && UbiJS_GetBrowserVersion() < 15) // Opera 15 미만 미지원 + return false; + if (UbiJS_Os === 'Mac OS X' || UbiJS_Os === 'Linux') // Mac/Linux 미지원 + return false; + return true; +} + +/** + * WebSocket 지원 가능 여부 확인 + */ +function UbiJS_CheckSupportWS() { + + if (!window.WebSocket) { + return false; + } + + if (!UbiJS_WSCheckBrowser()) { + return false; + } + + return true; +}; + +/** + * 지정된 시간 내 WebSocket 연결 대기 설치 페이지 이동 + */ +function UbiJS_WsStopCheck() { + + if( !UbiJS_WsInstallFlag ) { + + UbiJS_ShowWsInstall(false); + } +} + +/** + * 지연 시간 발생. + */ +function UbiJS_WsSleep(delay) { + + var start = new Date().getTime(); + while (new Date().getTime() < start + delay); +} + +/******************************************************************* +Plugin / WebSocke 메시지 보여주기 +*******************************************************************/ +/** + * 플러그인 설치 및 업데이트 안내 메시지 + */ +function UbiJS_ShowPluginInstall(isUpdate) { + + if( navigator.userAgent.indexOf('x64')>-1 && navigator.userAgent.indexOf('Win64')>-1 ) { + + UbiJS_ShowPlugin64Warning(); + } + else { + + if( UbiJS_IE_AutoDownload ) { + + if( UbiJS_WINDOC.getElementById(UbiJS_Frame_Download) == null ) { + + var obj = UbiJS_CreateUbiDownloadFrame(UbiJS_Frame_Download); + UbiJS_WINDOC.body.appendChild(obj); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Frame_Download).src = UbiJS_PluginInstallPath; + } + } + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_Install) == null ) { + + var str = []; + var i = 0; + + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    {MSG_CONTENTS}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + var width ="500"; + var height ="350"; + var color = UbiJS_InstallHeader; + var title = isUpdate ? _ubinonax_getMessage(UbiJS_Language, 'Update_Title') : _ubinonax_getMessage(UbiJS_Language, 'Install_Title'); + var subject = isUpdate ? _ubinonax_getMessage(UbiJS_Language, 'Update_Subject') : _ubinonax_getMessage(UbiJS_Language, 'Install_Subject'); + var contents = ""; + if( isUpdate ) { + + contents = _ubinonax_getMessage(UbiJS_Language, 'Update_Contents'); + } + else { + + contents = _ubinonax_getMessage(UbiJS_Language, 'Install_Contents'); + } + var installpath = UbiJS_PluginInstallPath; + var html = str.join(""); + UbiJS_ShowMessage(UbiJS_Div_Install, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_Install).style.display = ""; + } + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 플러그인 64bit 브라우저 미지원 안내 메시지 + */ +function UbiJS_ShowPlugin64Warning() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_64Warning) == null ) { + + var str = []; + var i = 0; + + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    {MSG_CONTENTS}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + var width ="500"; + var height ="350"; + var color = UbiJS_NoticeHeader; + var title = _ubinonax_getMessage(UbiJS_Language, 'Guide_Title'); + var subject = _ubinonax_getMessage(UbiJS_Language, '64_Subject'); + var contents = _ubinonax_getMessage(UbiJS_Language, '64_Contents'); + var installpath = UbiJS_PluginInstallPath; + var html = str.join(""); + + UbiJS_ShowMessage(UbiJS_Div_64Warning, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_64Warning).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 플러그인 미지원 브라우저 안내 메시지 + */ +function UbiJS_ShowPluginWarning() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_Notice) == null ) { + + var str = []; + var i = 0; + + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    {MSG_CONTENTS}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + var width ="500"; + var height ="350"; + var color = UbiJS_NoticeHeader; + var title = _ubinonax_getMessage(UbiJS_Language, 'Guide_Title'); + var subject = _ubinonax_getMessage(UbiJS_Language, 'Plugin_Subject'); + var contents = _ubinonax_getMessage(UbiJS_Language, 'Plugin_Contents'); + var installpath = ""; + var html = ""; + + UbiJS_ShowMessage(UbiJS_Div_Notice, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_Notice).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * WS 미지원 브라우저 안내 메시지 + */ +function UbiJS_ShowWsWarning() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_Notice) == null ) { + + var str = []; + var i = 0; + + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    {MSG_CONTENTS}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + var width ="500"; + var height ="350"; + var color = UbiJS_NoticeHeader; + var title = _ubinonax_getMessage(UbiJS_Language, 'Guide_Title'); + var subject = _ubinonax_getMessage(UbiJS_Language, 'WS_Subject'); + var contents = _ubinonax_getMessage(UbiJS_Language, 'WS_Contents'); + var installpath = ""; + var html = str.join(""); + + UbiJS_ShowMessage(UbiJS_Div_Notice, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_Notice).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 설치(업데이트) 안내 메시지 창 보이기 + */ +function UbiJS_ShowWsInstall(isUpdate) { + + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_Install) == null ) { + + var str = []; + var i = 0; + + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    {MSG_CONTENTS}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + var width ="500"; + var height ="350"; + var color = UbiJS_InstallHeader; + var title = isUpdate ? _ubinonax_getMessage(UbiJS_Language, 'Update_Title') : _ubinonax_getMessage(UbiJS_Language, 'Install_Title'); + var subject = isUpdate ? _ubinonax_getMessage(UbiJS_Language, 'Update_Subject') : _ubinonax_getMessage(UbiJS_Language, 'Install_Subject'); + var contents = _ubinonax_getMessage(UbiJS_Language, 'Install_Contents'); + var installpath = UbiJS_WsInstallPath; + var html = str.join(""); + + UbiJS_ShowMessage(UbiJS_Div_Install, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_Install).style.display = ""; + } +} + +/** + * 인쇄 준비 메시지 생성 + */ +function UbiJS_InitPrintStandby() { + + var width ="420"; + var height ="300"; + var color = UbiJS_StandbyHeader; + var title = "인쇄 준비 중"; + var subject = "
    사용자 PC환경 및 페이지양에 따라 5초~1분 정도 소요됩니다.

    잠시만 기다려 주세요.

    "; + var contents = ""; + var installpath = ""; + + UbiJS_HideMessage(UbiJS_Div_PrintStandby, width, height, color, title, subject, contents, installpath); +} + +/** + * 인쇄 준비 메시지 + */ +function UbiJS_ShowPrintStandby() { + var color = UbiJS_StandbyHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Print_Stanby_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Print_Stanby_Subject"); + var contents = ""; + var installpath = ""; + var id = UbiJS_Div_PrintStandby; + + var obj = UbiJS_WINDOC.getElementById(id); + if (obj) { + var html = obj.innerHTML; + obj.innerHTML = html.replace(/{HEADER_BG}/g, color).replace(/{MSG_TITLE}/g, title).replace(/{MSG_SUBJECT}/g, subject).replace(/{MSG_CONTENTS}/g, contents).replace(/{MSG_ID}/g, id).replace(/{DOWNLOAD_URL}/g, installpath); + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = ""; } catch(e) { } + } +} + +/** + * 인쇄 완료 메시지 + */ +function UbiJS_ShowPrintComplete() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_PrintComplete) == null ) { + + var width ="420"; + var height ="300"; + var color = UbiJS_CompleteHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Print_Complete_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Print_Complete_Subject"); + var contents = ""; + var installpath = ""; + var html = ""; + + var str = []; + var i = 0; + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + html = str.join(""); + + UbiJS_ShowMessage(UbiJS_Div_PrintComplete, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_PrintComplete).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 인쇄 취소 메시지 + */ +function UbiJS_ShowPrintCancel() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_PrintCancel) == null ) { + + var width ="420"; + var height ="300"; + var color = UbiJS_CancelHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Print_Cancel_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Print_Cancel_Subject"); + var contents = ""; + var installpath = ""; + var html = ""; + + var str = []; + var i = 0; + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + html = str.join(""); + + UbiJS_ShowMessage(UbiJS_Div_PrintCancel, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_PrintCancel).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 인쇄 오류 메시지 + */ +function UbiJS_ShowPrintFail() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_PrintFail) == null ) { + + var width ="420"; + var height ="300"; + var color = UbiJS_FailHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Print_Fail_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Print_Fail_Subject"); + var contents = ""; + var installpath = ""; + var html = ""; + + var str = []; + var i = 0; + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + html = str.join(""); + + UbiJS_ShowMessage(UbiJS_Div_PrintFail, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_PrintFail).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 파일 저장 준비 메시지 생성 + */ +function UbiJS_InitExportStandby() { + + var width ="420"; + var height ="300"; + var color = UbiJS_StandbyHeader; + var title = "파일 저장 준비 중"; + var subject = "
    사용자 PC 환경에 따라 5초 ~ 1분 정도 소요됩니다.

    잠시만 기다려 주세요.

    "; + var contents = ""; + var installpath = ""; + + UbiJS_HideMessage(UbiJS_Div_ExportStandby, width, height, color, title, subject, contents, installpath); +} + +/** + * 파일 저장 준비 메시지 + */ +function UbiJS_ShowExportStandby() { + + var color = UbiJS_StandbyHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Export_Standby_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Export_Standby_Subject"); + var contents = ""; + var installpath = ""; + var id = UbiJS_Div_ExportStandby; + + var obj = UbiJS_WINDOC.getElementById(id); + if (obj) { + var html = obj.innerHTML; + obj.innerHTML = html.replace(/{HEADER_BG}/g, color).replace(/{MSG_TITLE}/g, title).replace(/{MSG_SUBJECT}/g, subject).replace(/{MSG_CONTENTS}/g, contents).replace(/{MSG_ID}/g, id).replace(/{DOWNLOAD_URL}/g, installpath); + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = ""; } catch(e) { } + } +} + +/** + * 파일 저장 완료 메시지 + */ +function UbiJS_ShowExportComplete() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_ExportComplete) == null ) { + + var width ="420"; + var height ="300"; + var color = UbiJS_CompleteHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Export_Complete_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Export_Complete_Subject"); + var contents = ""; + var installpath = ""; + var html = ""; + + var str = []; + var i = 0; + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + html = str.join(""); + UbiJS_ShowMessage(UbiJS_Div_ExportComplete, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_ExportComplete).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + +/** + * 파일 저장 취소 메시지 + */ +function UbiJS_ShowExportCancel() { + + if( UbiJS_WINDOC.getElementById(UbiJS_Div_ExportCancel) == null ) { + + var width ="500"; + var height ="300"; + var color = UbiJS_CancelHeader; + var title = _ubinonax_getMessage(UbiJS_Language, "Export_Cancel_Title"); + var subject = _ubinonax_getMessage(UbiJS_Language, "Export_Cancel_Subject"); + var contents = ""; + var installpath = ""; + var html = ""; + + var str = []; + var i = 0; + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    "; + str[i++] = " "; + str[i++] = "
    "; + str[i++] = "
    "; + + html = str.join(""); + UbiJS_ShowMessage(UbiJS_Div_ExportCancel, width, height, color, title, subject, contents, installpath, html); + } + else { + + UbiJS_WINDOC.getElementById(UbiJS_Div_ExportCancel).style.display = ""; + } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_PrintStandby).style.display = "none"; } catch(e) { } + try { UbiJS_WINDOC.getElementById(UbiJS_Div_ExportStandby).style.display = "none"; } catch(e) { } +} + + +/******************************************************************* + Plugin / WebSocke 공통 함수 +*******************************************************************/ +/** + * 브라우저명 가져오기 + */ +function UbiJS_GetBrowser() { + + var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; + if (/trident/i.test(M[1])) { + tem = /\brv[ :]+(\d+)/g.exec(ua) || []; + return 'MSIE'; + } + if (M[1] === 'Chrome') { + tem = ua.match(/\bOPR\/(\d+)/); + if (tem != null) { + return 'Opera'; + } + } + M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; + if ((tem = ua.match(/version\/(\d+)/i)) != null) { + M.splice(1, 1, tem[1]); + } + return M[0]; +} + +/** + * 브라우저 버전 정보 가져오기 + * @returns + */ +function UbiJS_GetBrowserVersion() { + + var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; + + if (/trident/i.test(M[1])) { + + tem = /\brv[ :]+(\d+)/g.exec(ua) || []; + return tem[1]; + } + + if (M[1] === 'Chrome') { + + tem = ua.match(/\bOPR\/(\d+)/); + if (tem != null) { + + return tem[1]; + } + } + + M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; + if ((tem = ua.match(/version\/(\d+)/i)) != null) { + + M.splice(1, 1, tem[1]); + } + return M[1]; +} + +/** + * 다운로드를 위해 동적 Frame 생성 + * @param id + * @returns {___obj9} + */ +function UbiJS_CreateUbiDownloadFrame(id) { + + var obj = document.createElement("iframe"); + obj.id = id; + obj.style.cssText = "position:absolute; width:0px; height:0px; left:0px; top:0px; frameborder:0px;"; + obj.src = UbiJS_PluginInstallPath; + return obj; +} + +/** + * 디자인 내용 가져오기 + * @param options + */ +function UbiJS_AjaxCall(options) { + + options={type: options.type || "POST", url: options.url || "", onComplete: options.onComplete || function(){}, onSuccess: options.onSuccess || function(){}}; + if(typeof XMLHttpRequest == "undefined"){XMLHttpRequest = function() {return new ActiveXObject(navigator.userAgent.indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP");};} + var xml = new XMLHttpRequest(); + xml.open(options.type, options.url, true); + var requestDone = false; + setTimeout(function() {requestDone = true;}, 20000); + xml.onreadystatechange = function() {if( xml.readyState == 4 && !requestDone) {if(httpSuccess(xml) ) {options.onSuccess(xml.responseText);}options.onComplete();xml = null;}}; + xml.send(); + + function httpSuccess(r) { + + try{return (!r.status && location.protocol == "file:") ||(r.status >= 200 && r.status < 300) || r.status == 304 || navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined;";}catch(e){} + return false; + } +} + +/** + * 메시지 보여주기 + */ +function UbiJS_ShowMessage(id, width, height, color, title, subject, contents, installpath, html) { + + var obj = document.createElement("div"); + obj.id = id; + obj.className = "ubireportdlgcontainer"; +// obj.style.cssText = "position:absolute; z-index:999999104; left:50%; top:50%; width:" + width + "px; height:" + height + "px; margin-left: -" + (width/2) + "px; margin-top:-" + (height/2) + "px;"; + obj.style.cssText = "position:absolute; z-index:999999104; left:50%; top:50%; width:450px; height:" + height + "px; margin-left: -225px; margin-top:-" + (height/2) + "px;"; + obj.innerHTML = html.replace(/{HEADER_BG}/g, color).replace(/{MSG_TITLE}/g, title).replace(/{MSG_SUBJECT}/g, subject).replace(/{MSG_CONTENTS}/g, contents).replace(/{MSG_ID}/g, id).replace(/{DOWNLOAD_URL}/g, installpath); + UbiJS_WINDOC.body.appendChild(obj); +} + +/** + * 메시지창 미리 생성 (인쇄/저장 준비창) + */ +function UbiJS_HideMessage(id, width, height, color, title, subject, contents, installpath/*, html*/) { + + var obj = document.createElement("div"); + UbiJS_WINDOC.body.appendChild(obj); + obj.id = id; + obj.className = "ubireportdlgcontainer"; + obj.style.cssText = "display:none; position:absolute; z-index:999999104; left:50%; top:50%; width:450px; height:" + height + "px; margin-left: -225px; margin-top:-" + (height/2) + "px;"; + var str = []; + var i = 0; + str[i++] = "
    {MSG_TITLE}
    "; + str[i++] = "
    "; + str[i++] = "
    {MSG_SUBJECT}
    "; + str[i++] = "
    "; + + var html = str.join(""); + obj.innerHTML = html; + // language에 따라 문구를 변경하기 위하여 주석 처리 + //obj.innerHTML = html.replace(/{HEADER_BG}/g, color).replace(/{MSG_TITLE}/g, title).replace(/{MSG_SUBJECT}/g, subject).replace(/{MSG_CONTENTS}/g, contents).replace(/{MSG_ID}/g, id).replace(/{DOWNLOAD_URL}/g, installpath); +} + +function UbiJS_Trim(str) { + + return str.replace(/(^\s*)|(\s*$)/gi, ""); +} + + + +} \ No newline at end of file diff --git a/src/main/webapp/ubi4/license/License.xml b/src/main/webapp/ubi4/license/License.xml new file mode 100644 index 00000000..047ffc7c --- /dev/null +++ b/src/main/webapp/ubi4/license/License.xml @@ -0,0 +1,8 @@ + + + + + 4a655979316652366d79555a756f44546a497a7357787730746c365969544c4f0a57307a62466679564577674d65644b67423832476d686557776534567a7a6666484f35716d4838755a494e72394e6531474855374f334d56724c57386a7743336a62556c564b766f575254677475735259704634494452472f6f7a726a54492f5951654d4b79506c674d4d47684c684431686235374658524a6b726132366f326b7a71547434427570735447663044653671707156647974526958575734674d696879384f3370496b6f7a677776614b6576736177444d576e5134574f456733624b505832386e62334754746c7367517443795135413d3d + + + diff --git a/src/main/webapp/ubi4/license/License.xml_bak b/src/main/webapp/ubi4/license/License.xml_bak new file mode 100644 index 00000000..bc0d35f4 --- /dev/null +++ b/src/main/webapp/ubi4/license/License.xml_bak @@ -0,0 +1,8 @@ + + + + + 505a324133325166527148542b47334e42783833776b385a4664584e734a52360a79484972675266455644387a6665686c5667626b773378413950467434794a4c4b6f32744b375537566c6871636c564651752b4e58425058356f324872683637486f6875524a4a623254675a2f6e56306a384c68516469512b32455159496837767a364e43486d67324348494c4f5858536c5463656341436365346e476b35367735507a2f522f6e42486b56357668735674576f57505942366133366b34566642736e6539595079674f796b6f50766a427857415658344b55627a764177504d6656624a62755a736e574b6a6f36766d5352783869513d3d + + + diff --git a/src/main/webapp/ubi4/license/License_ope.xml b/src/main/webapp/ubi4/license/License_ope.xml new file mode 100644 index 00000000..06eeeb5e --- /dev/null +++ b/src/main/webapp/ubi4/license/License_ope.xml @@ -0,0 +1,11 @@ + + + + + 544436387a6b626a4f7768354a67536278792f5730414764494c77336d444c420a786a62643857735730346933726b6c78464a774d5633594556544c68716d5967694d647576324c6f322f48715071706c53394533355067673965476c2b61636e4463464f7a4a78346735317a7467474c4533593562316c62655a75596c7a3962394c69544a3943306e765638424d4b417a36563845706574304574724a693064756347737a42643465526f77703579494c7a4268623261644a663169356d5341764450717859624d36694845344e50314639374f6534654b7659366164714d724443324a58636a484d5550396d6130645935743266773d3d + + + 2b4f4d665862787470416761574d686e445261442b334133487843352f7131360a657a783447434e64556b46437a5952536838504f3232586c6f734b446e48575141727132674a4163374a6879796857484475584a72572f7763686549452f715a434555677a6b62774f4a4f634c4656644d6f56556e376e466c50755151632f5347484331665144724259594c58364445464b384d73554c4531746841574a49754a364e486c774c3156702b435937713038794c676d786f507832464459357951683464597765654a397746543071394e75534b443138577246366c38454c2f435671796b32786a556a306f49676a6b31343847306e773d3d + + + diff --git a/src/main/webapp/ubi4/ubiactivex.jsp b/src/main/webapp/ubi4/ubiactivex.jsp new file mode 100644 index 00000000..537989ab --- /dev/null +++ b/src/main/webapp/ubi4/ubiactivex.jsp @@ -0,0 +1,103 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%! + String nullToStr(String s1, String s2) { + return ((s1 == null)?s2:s1); + } +%> +<% + String jrf = nullToStr(request.getParameter("jrf"), "ubi_sample.jrf"); + String arg = nullToStr(request.getParameter("arg"), "user#홍길동#"); +%> + + + + + + +UbiReport4 AXViewer + + + + + + + + diff --git a/src/main/webapp/ubi4/ubiexport.jsp b/src/main/webapp/ubi4/ubiexport.jsp new file mode 100644 index 00000000..4fab137d --- /dev/null +++ b/src/main/webapp/ubi4/ubiexport.jsp @@ -0,0 +1,53 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%@ page import="com.ubireport.viewer.report.preview.UbiViewer" %> +<%! + String nullToStr(String s1, String s2) { + return ((s1 == null)?s2:s1); + } +%> +<% + String jrf = nullToStr(request.getParameter("jrf"), "ubi_sample.jrf"); + String arg = nullToStr(request.getParameter("arg"), "user#홍길동#"); + +// String appUrl = "http://localhost:8080/myapp"; + String appUrl = "http://localhost:8080/"; + String fileURL = appUrl + "/ubi4"; + String ubiServerURL = appUrl + "/UbiServer"; + + String dataSource = "Tutorial"; +// String jrfFileDir = "/webapp/myapp/ubi4/work/"; + String jrfFileDir = "/webapp/ubi4/work/"; + + String exportFileType = "PDF"; +// String exportPath = "/webapp/myapp/ubi4/export/"; + String exportPath = "/webapp/ubi4/export/"; + String exportFileName = jrf.substring(0, jrf.lastIndexOf(".")) + ".pdf"; + String exportFilePath = exportPath + java.io.File.separator + exportFileName; + + try { + + UbiViewer ubi = new UbiViewer(false, false); + + ubi.exectype = "TYPE6"; + ubi.fileURL = fileURL; + ubi.ubiServerURL = ubiServerURL; + ubi.isLocalFile = true; + ubi.dataSource = dataSource; + ubi.jrfFileDir = jrfFileDir; + ubi.jrfFileName = jrf; + ubi.arg = arg; + ubi.setExportParams(exportFileType, exportFilePath); + + boolean isSuccess = ubi.loadReport(); + + if( isSuccess ) + out.println("Export Success!"); + else + out.println("Export Fail!"); + } + catch(Exception e) { + + out.println(e.getMessage()); + e.printStackTrace(); + } +%> \ No newline at end of file diff --git a/src/main/webapp/ubi4/ubihtml.jsp b/src/main/webapp/ubi4/ubihtml.jsp new file mode 100644 index 00000000..907d87c5 --- /dev/null +++ b/src/main/webapp/ubi4/ubihtml.jsp @@ -0,0 +1,126 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%! + String nullToStr(String s1, String s2) { + return ((s1 == null)?s2:s1); + } +%> +<% + String jrf = nullToStr(request.getParameter("jrf"), "ubi_sample.jrf"); + String arg = nullToStr(request.getParameter("arg"), "user#홍길동#"); + String resId = nullToStr(request.getParameter("resId"), "UBIHTML"); +%> + + + + + + +UbiReport4 HTMLViewer + + + + + + + +
    + + \ No newline at end of file diff --git a/src/main/webapp/ubi4/ubinonax.jsp b/src/main/webapp/ubi4/ubinonax.jsp new file mode 100644 index 00000000..faea8ca0 --- /dev/null +++ b/src/main/webapp/ubi4/ubinonax.jsp @@ -0,0 +1,109 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%! + String nullToStr(String s1, String s2) { + return ((s1 == null)?s2:s1); + } +%> +<% + String jrf = nullToStr(request.getParameter("jrf"), "ubi_sample.jrf"); + String arg = nullToStr(request.getParameter("arg"), "user#홍길동#"); +%> + + + + + + +UbiReport4 WSViewer + + + + + +

    WebSocket

    + + + diff --git a/src/main/webapp/ubi4/ubiviewer/Setup_UbiViewerWS_v4.exe b/src/main/webapp/ubi4/ubiviewer/Setup_UbiViewerWS_v4.exe new file mode 100644 index 00000000..8dc9e321 Binary files /dev/null and b/src/main/webapp/ubi4/ubiviewer/Setup_UbiViewerWS_v4.exe differ diff --git a/src/main/webapp/ubi4/ubiviewer/UbiViewerX4.cab b/src/main/webapp/ubi4/ubiviewer/UbiViewerX4.cab new file mode 100644 index 00000000..1ce175ff Binary files /dev/null and b/src/main/webapp/ubi4/ubiviewer/UbiViewerX4.cab differ diff --git a/src/main/webapp/ubi4/ubiviewer/UbiViewerX4.exe b/src/main/webapp/ubi4/ubiviewer/UbiViewerX4.exe new file mode 100644 index 00000000..b519e776 Binary files /dev/null and b/src/main/webapp/ubi4/ubiviewer/UbiViewerX4.exe differ diff --git a/src/main/webapp/ubi4/work/commonimages/LOGO.jpg b/src/main/webapp/ubi4/work/commonimages/LOGO.jpg new file mode 100644 index 00000000..6b9002d5 Binary files /dev/null and b/src/main/webapp/ubi4/work/commonimages/LOGO.jpg differ diff --git a/src/main/webapp/ubi4/work/images/LOGO.jpg b/src/main/webapp/ubi4/work/images/LOGO.jpg new file mode 100644 index 00000000..6b9002d5 Binary files /dev/null and b/src/main/webapp/ubi4/work/images/LOGO.jpg differ diff --git a/src/main/webapp/ubi4/work/property/commonitem.xml b/src/main/webapp/ubi4/work/property/commonitem.xml new file mode 100644 index 00000000..1bbedea6 --- /dev/null +++ b/src/main/webapp/ubi4/work/property/commonitem.xml @@ -0,0 +1,8 @@ + + + UbiDecision + 02-558-6996 + http://www.ubireport.com + http://www.ubireport.com + LOGO.jpg + diff --git a/src/main/webapp/ubi4/work/ubi_bcqre.jrf b/src/main/webapp/ubi4/work/ubi_bcqre.jrf new file mode 100644 index 00000000..0692b416 Binary files /dev/null and b/src/main/webapp/ubi4/work/ubi_bcqre.jrf differ diff --git a/src/main/webapp/ubi4/work/ubi_sample.jrf b/src/main/webapp/ubi4/work/ubi_sample.jrf new file mode 100644 index 00000000..6b29cfbe Binary files /dev/null and b/src/main/webapp/ubi4/work/ubi_sample.jrf differ diff --git a/src/main/webapp/ubi4/work/ubi_tutorial.jrf b/src/main/webapp/ubi4/work/ubi_tutorial.jrf new file mode 100644 index 00000000..ec77d48f Binary files /dev/null and b/src/main/webapp/ubi4/work/ubi_tutorial.jrf differ diff --git a/src/test/java/ExampleSprintRestDocsApplicationTests.java b/src/test/java/ExampleSprintRestDocsApplicationTests.java new file mode 100644 index 00000000..bcfa876a --- /dev/null +++ b/src/test/java/ExampleSprintRestDocsApplicationTests.java @@ -0,0 +1,70 @@ +// package io.subji.examplesprintrestdocs; +// +// import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +// import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +// import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +// import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; +// import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; +// import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; +// import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +// +// import org.junit.jupiter.api.BeforeEach; +// import org.junit.jupiter.api.Test; +// import org.junit.jupiter.api.extension.ExtendWith; +// import org.springframework.boot.test.context.SpringBootTest; +// import org.springframework.restdocs.RestDocumentationContextProvider; +// import org.springframework.restdocs.RestDocumentationExtension; +// import org.springframework.restdocs.payload.PayloadDocumentation; +// import org.springframework.test.context.junit.jupiter.SpringExtension; +// import org.springframework.test.web.servlet.MockMvc; +// import org.springframework.test.web.servlet.setup.MockMvcBuilders; +// import org.springframework.web.context.WebApplicationContext; +// +// @ExtendWith({ RestDocumentationExtension.class, SpringExtension.class }) +// @SpringBootTest(classes = ExampleSprintRestDocsApplication.class) +// class ExampleSprintRestDocsApplicationTests { +// +// private MockMvc mockMvc; +// +// @Test +// void contextLoads() { +// } +// +// @BeforeEach +// public void setUp( +// WebApplicationContext webApplicationContext, +// RestDocumentationContextProvider restDocumentationContextProvider) { +// this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) +// .apply(documentationConfiguration(restDocumentationContextProvider)) +// .alwaysDo(document("{method-name}", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint()))) +// .build(); +// } +// +// @Test +// public void readExample() throws Exception { +// this.mockMvc.perform(get("/test")) +// .andExpect(status().isOk()) +// .andDo( +// document("test-example", +// preprocessRequest(prettyPrint()), +// preprocessResponse(prettyPrint()), +// PayloadDocumentation.responseFields( +// PayloadDocumentation.fieldWithPath("id") +// .description("ID 필드 입니다."), +// PayloadDocumentation.fieldWithPath("name") +// .description("이름 필드 입니다."), +// PayloadDocumentation.fieldWithPath("body") +// .description("데이터 필드 입니다.") +// ))); +// // links( +// // // linkWithRel 은 텍스트를 링크화 한다. +// // linkWithRel("test").description("The Test resource")), +// // //subsectionWithPath 를 사용해서 메서드에 대한 응답을 문서화 했다. +// // responseFields(subsectionWithPath("_links") +// // .description("Links to other resources")), +// // // 응답에 "Content-type" 헤더를 추가하기 위해 headerWithName 을 사용 +// // responseHeaders(headerWithName("Content-Type") +// // .description("The Content-Type of the payload, e.g. `application/hal+json`"))) +// } +// +// }